본문 바로가기
프로그래밍/Springboot-토이프로젝트

Springboot + JQuery Ajax로 CRUD 어플리케이션 구현-05【AWS EC2에 배포 + AWS RDS(MariaDB) 연동】

by 코이킹 2021. 6. 7.
반응형

지난 포스트에서 로컬 개발환경에서의 동작확인이 끝났으므로 개발한 애플리케이션에 어디에서든 접속할 수 있도록 EC2 서버에 애플리케이션을 배포해 보도록 하겠습니다. 
추가로 개발환경에서는 로컬에 설치한 XAMPP에 패키징된 MariaDB를 사용했지만, 배포 시에는 AWS RDS로 생성한 MariaDB를 연동해 보겠습니다.

이 포스트는 아래 URL의 포스트의 내용에 의존하고 있으므로, 매끄러운 실습을 위해 아래 포스트를 먼저 확인해 보시기 바랍니다.

https://koiking.tistory.com/4

 

AWS EC2 인스턴스를 생성하여 Java어플리케이션 실행환경 구축하기-1(AWS회원가입 + 키페어 설정 + IAM

Java로 만든 프로그램 특히 웹 애플리케이션은 Windows에서 실행되기보다는 Linux 운영체제에서 실행되는 경우가 많습니다. 제가 전에 다니던 회사, 현재 다니고 있는 회사에서도 Java로 만든

koiking.tistory.com

https://koiking.tistory.com/5

 

AWS EC2 인스턴스를 생성하여 Java어플리케이션 실행환경 구축하기-2(EC2 인스턴스생성 + EC2에 접속 +

지난 포스트에 이어서 EC2 인스턴스를 생성 밒 접속해보고 Java 실행환경을 구축하도록 하겠습니다. 지난 포스트와 연계되는 내용이므로 먼저 지난 포스트를 봐주시면 좋겠습니다. ※ 지난 포스

koiking.tistory.com

https://koiking.tistory.com/17

 

AWS RDS로 MariaDB 생성 + 접속해보기

이 포스트에서는 AWS RDS에서 MariaDB를 생성하고 AWS EC2에서 생성한 MariaDB에 접속해보는 과정을 기록하겠습니다. 이 포스트는 이전 AWS EC2의 환경설정 포스팅에 의존하고 있으므로 아래 URL의 이전 포

koiking.tistory.com

 

전체 소스코드는 아래에 URL에 있습니다.

https://github.com/leeyoungseung/item-admin

 

1. 개발환경과 배포 환경을 분리해서 빌드하기

개발할 때는 이클립스로 스프링 부트 애플리케이션을 실행하여, localhost로 접속했지만, 
배포 시에는 스프링 부트 애플리케이션에 접근할 때 실서버의 IP주소(엔드포인트)로 접속해야 합니다. 

위의 예시와 같이 개발할 때와 배포할 때의 다른 설정치가 필요한 경우가 있으므로 설정 파일을 환경별로 만들어두는 게 편합니다.


1) build.gradle설정

//빌드시 매개변수 'profile'의 값을 'dev'로 설정하면 개발환경의 설정파일, 'pro'를 설정하면 배포환경의 설정파일을 패키징한다.
ext.profile = (!project.hasProperty('profile') || !profile) ? 'dev' : profile

sourceSets {
    main {
        resources {
		// 설정파일, 정적파일이 중에서 공통으로 사용하는 것은 'src/main/resources/*'에 배치하고
		// 환경별로 분리할 필요가 있는 설정파일, 정적파일은 매개변수 'profile'로 구분한다.
            srcDirs "src/main/resources/*", "src/main/env/${profile}"
        }
    }
}

 

2) 환경별로 분리하여 설정 파일, 정적 파일 작성하기

분리가 필요한 설정 파일은 이 애플이케이션에선 application.properties, log4j2.xml, JQuery-Ajax코드 정도입니다.
"src/main/resources/*" 에는 공통으로 사용할 이미지 파일을 배치하였고, 
"src/main/env/dev", "src/main/env/pro"에는 각각 개발용 설정 파일과 배포용 설정 파일을 배치했습니다.

3) 이클립스에서 매개변수를 설정하여 빌드하기

(1) 이클립스에서 'Gradle Tasks' -> '빌드할 프로젝트 명' -> bootWar에서 마우스 우클릭 -> 'Open Gradle Run Configuration...' 클릭 

 

(2) 'Project Setting' -> 'Program Arguments'에서 'Add' 버튼을 클릭하여 아래와 같이 매개변수를 추가합니다. 추가가 완료되면 'OK'버튼을 눌러 설정을 저장합니다.

(3) 이클립스에서 'Gradle Tasks' -> '빌드할 프로젝트 명' -> bootWar에서 마우스 우클릭 -> 'Run Gradle Tasks' 클릭하여 애플리케이션을 빌드합니다.

(4) 빌드가 성공하면 build/libs/ 폴더에. war파일이 생성됩니다.

 

. war파일의 압축을 해제해서 정말로 배포용 설정 파일이 패키징 되어 있는지 확인해 봅니다. 

WEB-INF/classes에 있는 application.properties, log4j2.xml, JQuery-Ajax코드를 확인합니다.

 

※ 배포용 application.properties에서 변경 값

// jdbc를 mariadb용으로 설정변경
spring.datasource.url=jdbc:mariadb://{AWS RDS MariaDB의 엔드포인트}:3306/koikingtest?serverTimezone=UTC&zeroDateTimeBehavior=convertToNull
// 드라이버를 mariadb전용으로 설정 Mysql용 드라이버로는 연결이 안되었음...
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver 
spring.datasource.username={유저명}
spring.datasource.password={비밀번호}

※ 배포용  log4j2.xml에서 변경 값

- 로그의 출력 경로를 변경

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" monitorInterval="30">
    <Properties>
        <Property name="LOG_FORMAT">%d{yyyy-MM-dd HH:mm:ss} %p %m%n</Property>
        <Property name="BASE_DIR">/home/ec2-user/logs</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_FORMAT}"/>
        </Console>
        <RollingFile name="File"
                     fileName="${BASE_DIR}/item-admin.log"
                     filePattern="${BASE_DIR}/item-admin.%d{yyyyMMdd}.log">
            <PatternLayout pattern="${LOG_FORMAT}"/>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="${BASE_DIR}">
                    <IfFileName glob="*.log" />
                    <IfLastModified age="30d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File" />
        </Root>
    </Loggers>
</Configuration>

 

※ 배포용 JQuery-Ajax코드에서 변경 값

- 접속 주소를 localhost에서 EC2의 엔드포인트로 변경

/**
 * ajax-pro
 */
	var itemApi = "http://{EC2 서버의 엔드포인트}:8080/api/items";
	

 

2. AWS RDS MariaDB와 연동 준비

이전 순서를 그대로 따라 했다는 가정하에 EC2에서 MariaDB에 접속해서 테이블을 생성하는 것으로 연동 준비는 완료입니다.

1) MariaDB에 접속하여 테이블을 생성합니다.

2) 생성된 테이블을 확인하고, 기본키와, Auto_increment를 설정합니다.

3. EC2 서버에 애플리케이션 배포하기

1) EC2의 보안 그룹 인바인드 규칙에서 8080 포트를 사용하도록 설정합니다

 2). war파일을 EC2서버에 업로드한 후 아래 커맨드로 실행합니다.

java -jar item-admin-0.0.1-SNAPSHOT.war

※ 에러 메시지 없이 아래 캡처와 같이 실행되었다면 배포까지 완료된 것입니다. 

 

4. 동작확인

 

 

---------------------- FIN ----------------------

반응형

댓글