記錄

실습_AWS) Spring AWS 배포 (A to Z) -3 본문

Web/AWS

실습_AWS) Spring AWS 배포 (A to Z) -3

surhommejk 2018. 8. 25. 15:41

이전 포스팅(http://kimjungkwon.co.kr/534?category=794190)에 이은 포스팅으로 AWS 실습의 기록이다. 이전 두 개의 포스팅을 통해 AWS에서 EC2인스턴스, RDS인스턴스를 생성하고 이를 연결하는 것까지 모든 설정 과정을 기록했다. 이제부터는 실제로 코드로 구현한 나의 프로젝트를 어떻게 DB와 연동하고 또 배포 할 것인지 그 과정을 기록한다. 따라서 이번 포스팅부터는 코드가 조금씩 포함될 예정이다.


7) Spring - MySQL(RDS 인스턴스) 연동

먼저 지금까지 애써 만든 RDS인스턴스에 실제로 java코드로 접근이 가능한지 테스트 해보겠다. 아주 잘 정리된 다른 포스팅들이 많았는데 그만큼 자세하고 길어서 나는 정말정말 단순하게 짧게 시도하려고 노력했다. 왜냐면 긴 것은 긴데로 좋은데 내가 다시 보든 누군가가 참고하든 짧게 딱 핵심만 있는 것도 때에 따라 효용성이 컸던 경험이 있기 때문이다.

코드로 RDS의 인스턴스(나의 경우 MySQL)에 접근을 테스트 해보는 것은 매우 간단하다. 절차는 아래와 같다.


[1] pom.xml에 dependency 추가

다른 포스팅들을 보면 [1]과정에서도 많은 dependency를 넣는데 테스트만을 위한 것이므로 그렇게 많이는 필요가 없었고 딱 하나만 인젝션 하면 된다.

        <!-- MySQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.36</version>
            <scope>test</scope>
        </dependency>


그리고 junit도 넣어줘야 하는데 이건 legacy로 프로젝트를 만들었으면 이미 있을 것이다. 혹시 몰라서 여기도 남긴다.

        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
            <scope>test</scope>
        </dependency>


[2] 테스트 코드 작성

public class AWS_ConnectionTest {
private final String DRIVER = "com.mysql.jdbc.Driver";
private final String URL = "jdbc:mysql://엔드포인트:3306/DB이름";
private final String USER ="사용자 이름";
private final String PW = "DB인스턴스 생성시 정한 암호";

@Test
public void test() {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try (Connection con = DriverManager.getConnection(URL, USER, PW)){
// 연결이 성공하면 con 객체의 주소값이 찍히겠쥬?
System.out.println(con);

} catch (Exception e) {
e.printStackTrace();
}
}
}


여기서 뭘 넣을지 조금 헷갈릴 수 있는데 RDS 상의 인스턴스 정보를 참고하면 쉽다. 위 테스트 코드에 적어둔 항목명과 RDS 에서 인스턴스 정보를 보는 아래 사진의 항목명을 일치시켜두었으니 찾아서 넣으면 된다. 아래 사진을 참고한다.


[3] junit Test 실행

잠깐, junit이 뭔지 정리한다. junit은 '스프링에서 작은 단위로 테스트를 해볼 수 있게 해주는 도구'이다. 사용하기 위해서는 dependency를 추가해주어야 하는데 레거시로 프로젝트를 만드니까 안에 이미 포함되어 있었다. 이걸 나는 프로젝트를 할 때에는 몰랐고 이번 포스팅을 하면서 알게 되었다.

사용 방법은 매우 간단하다. dependency 추가 후 테스트 하고 싶은 메소드에 @Test 어노테이션을 해주고 프로젝트를 Run As 에서 JUnit Test를 해주면 된다. 코드는 생략한다. 생략한다기 보다는 위에 이미 dependency도 올려두었고 테스트 코드상에도 @Test 어노테이션을 볼 수 있다.(다른 어노테이션도 굉장히 많다 이곳을 참고 : http://codedragon.tistory.com/5427, http://www.nextree.co.kr/p11104/)

정상 작동시 코드에 따라 객체의 주소값이 콘솔에 찍히게 된다.


이렇게 간단하게 코드로 접근이 가능한 것을 확인해 보았다. 이제 원래 하던 방식으로 Mybatis 연동시 url 값을 위와 같이 넣으면 프로젝트에서 RDS 인스턴스로 연결하여 DB를 사용할 수 있을 것이다. 실제 프로젝트 상에서 연동하는 코드는 나중에 다시 포스팅 할 계획이다.


8) Maven 프로젝트 배포 (주로 http://all-record.tistory.com/185 참고)

이제 Maven 프로젝트를 배포해보자. 먼저 EC2인스턴스에 tomcat manager를 설치해서 admin 페이지에 들어 갈 수 있도록 세팅하여야 한다. 다음 명령어들을 실행하여 tomcat-admin을 설치하고 admin 페이지에 접속 해본다.


[1] 'sudo apt-get install tomcat8-admin'으로 tomcat8-admin 설치


[2] 'sudo vi /etc/tomcat8/tomcat-users.xml'로 관리자 role 설정 및 아이디, 암호 설정(아래 참고)

<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,
manager-script,manager-status,manager-jmx"/>

각 role의 기능은 다음과 같다.

manager-gui - allows access to the HTML GUI and the status pages

manager-script - allows access to the text interface and the status pages

manager-jmx - allows access to the JMX proxy and the status pages

manager-status - allows access to the status pages only


[3] 'sudo service tomcat8 start'로 tomcat 활성화 후 'http://EC2 인스턴스 IP:포트번호/manager/' 로 접속하여 tomcat 관리자 페이지 접속 되는지 확인(안되면 시간차 때문일 수도 있으니 시간적 갭을 좀 둔다)


[4] pom.xml 설정으로 maven을 통해 서버에 배포가 가능하도록 한다.


            <!-- 메이븐을 통한 서버 배포 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <warsourcedirectory>src/main/webapp</warsourcedirectory>
                    <webxml>src/main/webapp/WEB-INF/web.xml</webxml>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <version>1.1</version>
                <configuration>
             <url>(IP주소와 포트번호/manager/text)
ex: http://99.99.99.99:8090/manager/text</url>
             <path>(컨텍스트path) ex: /aws</path>
             <username>(tomcat 관리자 id) ex : admin</username>
             <password>(tomcat 관리자 pw) ex : xxxxxx</password>
                </configuration>
            </plugin>


[5] 좌측 패키지에서 Rus As에서 'Run configuration'클릭 후 'Maven Build' 클릭하여 절차대로 아래 url 보고 참고하여 실시

(참고 : http://all-record.tistory.com/185)


[6] 배포가 잘 된 것을 콘솔로 확인하고 'http://IP 주소:포트번호/프로젝트명' 으로 접속 확인


9) Route53으로 도메인 연결하기

이제 도메인 구매 대행을 통해 구입한 도메인에 프로젝트를 연결하기만 하면 된다. 기존에 잘 정리된 포스팅이 있어 출처를 남긴다

https://cafe.naver.com/mobilenjoy/18763


여기까지 하면 잘 연결이 되는데 문제는 주소에서 프로젝트 명을 떼는 일이다. 물론 http://all-record.tistory.com/186 를 보고 따라하면 쉽게 해결된다. 아래에 간략하게 플로우를 적겠다.

[1]  'sudo vi /etc/tomcat8/server.xml' 로 server.xml을 연다

[2] 적절한 위치(위 url 참고)에 기존 프로젝트 path를 대신하는 코드를 입력한다. 아래는 예시이다.

<Context docBase="프로젝트명" path="/" reloadable="true" />

[3] 'sudo service tomcat8 restart'로 tomcat을 재시작 한다

[4] maven build 로 재배포 한다

[5] 프로젝트명을 뗀 DNS주소를 브라우저에 입력하여 확인한다


*                    *                    *                    *                    *

이렇게 3개의 시리즈 포스팅(?)으로 프로젝트를 AWS를 이용해 배포하는 것을 실습하고 정리해보았다. 포스팅들을 많이 참고했는데 주로 참고한 포스팅들은 아래와 같다.

http://all-record.tistory.com/185

http://all-record.tistory.com/186

https://github.com/greatfarmer/TIL/blob/master/AWS/AWS-SettingsForSpring.md

'Web > AWS' 카테고리의 다른 글

실습_AWS) Spring AWS 배포 (A to Z) -2  (0) 2018.08.25
실습_AWS) Spring AWS 배포 (A to Z) -1  (0) 2018.08.24
생활코딩_AWS) RDS  (0) 2018.08.24
생활코딩_AWS) Simple Storage Service(S3)  (0) 2018.08.23
생활코딩_AWS) Auto Scaling  (0) 2018.08.23
Comments