GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the AWS

AWS EC2 프리티어로 배포하기(2) ( SpringBoot, Maven, MySQL, Jenkins, Ubuntu, Putty )

Backcoder 2022. 12. 9. 22:26

인스턴스를 생성했고,

인바운드 규칙에서 SSH ( Port 번호 : 22 ) 접근 URL을 내 IP 로 설정해 둡니다.

 

다운받아둔 키페어를 이용해 Putty 에 접속하면 

이제 AWS 에서 빌린 서버를 이용할 수 있습니다. 

 

 

최종 목적은 

Spring Boot, Maven, MySQL 을 사용한 프로젝트를 Jenkins, GitHub 을 사용해 배포하는 것이므로 

AWS 에서 빌린 깡통 서버에 필요한 개발 TOOL 들을 설치해 줍니다.

 

[ 필요 목록 ]

1. JDK 

2. Maven

3. Tomcat

4. MySQL 

5. Jenkins 

 

 

1. JDK ( Java Development Kit ) 

 

- 자바 어플리케이션을 읽는 역할을 해주는 JRE

개발자 도구를 포함, 개발을 진행 할 수 있게 해주는 JDK 안에 포함되어 있으므로 JDK 만 설치해 주었습니다.

 

- Ubuntu 환경이므로, apt -get 명령어를 이용해 설치해 줍니다. ( 11 버전 ) 

sudo apt-get install openjdk-11-jdk

 

 

- 설치가 완료되면

java -version

which javac 

명령어 등을 이용해 잘 설치되었는지 확인해줍니다. 

 

- JAVA 환경변수를 설정해 줍니다. 

sudo vi /etc/profile

profile 파일에 들어가서, 

맨 아래 부분에 JAVA_HOME 경로, PATH, CLASSPATH 설정을 해줍니다. 

: JAVA_HOME 경로 : which java 명령어 실행 시, 나오는 경로에서 /bin 전까지의 경로 

저장하고 나온 뒤 ( :wq ) 

source /etc/profile

변경 된 경로를 적용해 줍니다. 

 

- 위치확인 => echo $JAVA_HOME

: /usr/lib/jvm/java-11-openjdk-amd64 

 

 

2. Maven

 

- Maven 은 Jenkins 를 이용할 경우, Jenkins 에서 Auto Install 자동설치 기능을 제공하므로 선택사항입니다.

< tar 압축파일로 maven 다운로드 > 
wget https://downloads.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz

< 압축 풀기 > 
tar -xvf apache-maven-3.8.6-bin.tar.gz

< link 생성 ( 선택사항 ) >
ln -s apache-maven-3.8.6 maven

 

직접 설치 했을 경우, 환경변수를 설정해 줍니다. ( sudo vi /etc/profile ) 

 

 

export MAVEN_HOME=/경로/apche-maven-3.8.6

export PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin

 

 

 

 

3. Tomcat

 

 

- 마찬가지 순서로, Tomcat 을 설치해 줍니다. 

wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.70/bin/apache-tomcat-9.0.70.tar.gz

tar -xf apache-tomcat-9.0.70.tar.gz

ln -s apache-tomcat-9.0.70 tomcat

 

 

 

=> Tomcat 의 경우 8080 포트를 사용하므로, 인스턴스에 인바운드 규칙을 추가해줘야 합니다.

AWS - EC2 - 인스턴스 => 인바운드 규칙 추가

 

 

 

[  사용자 지정 TCP / Port: 8080 / anywhere (0.0.0.0/0) ]

 

: 8080 포트를 나의 어플리케이션 포트번호로 사용할 예정이므로, 모든 사용자가 접근 할 수 있도록 anywhere 로 인바운드 규칙을 추가해줍니다. 

 

[ Tomcat - Jenkins 관리자 설정 ]

: tomcat의 users.xml 에 들어가서 관리자를 추가해줍니다. 

sudo vi /경로/tomcat/conf/tomcat-users.xml

 

 

4. MySQL

 

- 먼저, 인스턴스에 MySQL DB용 인바운드 규칙을 추가해줍니다.

[ MySQL,Oracle / Port : 3306 / anywhere ]

 

- 설치 

sudo apt-get install mysql-server

 

[ 접근 포트 허용 ]

cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf

 

- mysqld.cnf 파일에 들어가서 

 

bind-address = 127.0.0.1  (디폴트 값) 

=> 0.0.0.0 으로 수정

 

Mysql 서비스 재시작

sudo systemctl restart mysql.service

 

 

5. Jenkins 설치

 

저장소 key 다운

wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -

sources.list 에 추가

echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list

키 등록

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCEF32E745F2C3D5

업데이트

sudo apt-get update

Jenkins 설치

sudo apt-get install jenkins

 

서버 포트 번호 변경 

sudo vi /etc/default/jenkins

HTTP_PORT=8080 => 바꿀포트번호

sudo vi /lib/systemd/system/jenkins.service

Environment="JENKINS_PORT= 8080" => 바꿀포트번호

 

=> 포트번호를 기존 8080에서 변경했다면,

인스턴스 - 인바운드규칙에 변경한 port 번호도 추가해 줍니다. 

[ TCP  /  Port : 변경한 포트번호 / 내 IP ]

 

Jenkins 서비스 재시작 => 적용 

sudo service jenkins restart

서비스 상태 확인 ( 포트 번호 확인 ) 

sudo systemctl status jenkins

 

Jenkins 초기 비밀번호 가져오기 => 복사해둡니다. ( Jenkins 최초 접속 시 사용 ) 

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

 

- 여기까지 완료되면, JDK, Maven, Tomcat, MySQL, Jenkins 등 기본적인 tool들이 설치됬습니다. 

 

Tomcat 서버를 시작해 Jenkins 사이트로 들어가 복사해둔 초기 번호를 입력해 Jenkins 를 시작합니다. 

/경로/tomcat/bin/startup.sh

 

http://퍼블릭IP:8080    => tomcat 사이트 

http://퍼블릭IP:젠킨스포트번호   => jenkins 사이트 

 

 

- 프리티어를 사용하면서,  MySQL 에서 DB 데이터를 옮기는 등, 정말 조금의 작업을 하였는데도 

위의 파일들을 설치하고 나니 메모리 부족으로 AWS의 꽁짜 서버가 버벅대기 시작했습니다.

 

- 프리티어를 사용할 경우, 스왑 메모리를 생성해서 사용하는 건 거의 필수사항인 듯 합니다.

 

 

[ swap 메모리 생성 ]

1. 스왑 파일 생성

$ sudo dd if=/dev/zero of=/swapfile bs=128M count=16

지정한 블록 크기(bs)는 인스턴스에서 사용 가능한 메모리보다 작게 설정 (memory exhausted 오류)

 

프리티어의 메모리는 1GB

=> 권장사항대로 두배값인 2GB를 증설시키기 위해 

 

스왑 파일은 2GB(128MB x 16 = 2,048MB)로 위와 같이 생성해줍니다. 

 

$ sudo chmod 600 /swapfile

 

$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo swapon -s

 

 

 

/etc/fstab 파일에 들어가 부팅 시 스왑 파일을 자동 활성화

$ sudo vi /etc/fstab

 

파일 끝에 다음 줄을 추가

/swapfile swap swap defaults 0 0

free 명령어로 스왑 메모리가 잘 작동하는지 확인합니다. 

 

스왑 메모리를 사용해주면 기존 1GB 메모리를 사용해 버벅대던 AWS 꽁짜 서버에 

2GB 스왑 메모리가 추가되서 훨씬 빠르게 동작하는 서버를 확인할 수 있었습니다. 

 

 

AWS 에 가입하면 1년간 제공되는 프리티어를 사용해서 배포하는 과정을 대략적으로 정리해 보았습니다.

메모리나 스토리지가 너무 제한적이기 때문에 가벼운 어플리케이션 정도, 적은 수의 사용자만 이용할 경우에 활용할 수 있을 듯 합니다. 

프리티어지만 제공하는 사용량을 초과하면  초과 분에 대해서 요금이 청구되기 때문에, 

구글 OTP 사용, 사용량 limit 알람 설정, 청구서 및 사용량 확인을 주기적으로 해주며 주의를 기울이고 사용해야 합니다.

 

프리티어를 사용해보면서, 사용자 수에 따른 부하, 사용량등에 대한 감각을 키우고, 

적절한 유형의 인스턴스를 선정하여 $달러를 아낄 수 있는 역량을 점점 키워가야 겠습니다.