본문 바로가기

DevOps/AWS

EC2로 24시간 서버 운영 - Spring boot + vue.js (1/3)

728x90

1. 24시간 서버 운영

4가지 방법이 있습니다.

 

1) 개인 PC

접근성이 좋고 서버 구입 비용이 없으나, 자신의 컴퓨터에 24시간 구동을 해야 합니다.

이러면 소음 때문에 제대로 잘 수가 있을련지?...

 

 

 

2) 웹호스팅 

주로 PHP에서 많이 사용합니다. 하나의 서버(OS)에 여러 서버가 입주합니다. 가격이 저렴하나 환경이 제한됐습니다. 이외에도 트래픽 제한, 느린 속도, 도메인 등록 제한 문제가 있습니다. 

 

3) 서버 호스팅 & 코로케이션

출처:https://m.blog.naver.com/lxeso/221787540678

호스팅 업체를 통해 서버를 대여합니다. 가성비가 있지만 서버 설정을 직접해야 합니다. 서버를 인수 후에는 위의 사진처럼 코로케이션 형태로 전환해야 합니다. 

 

4) 클라우드

AWS, Azure가 여기에 속했습니다. 이용한 만큼 지불하는 형태로 설정과 관리가 비교적 쉽습니다. 확장성이 있지만 좀 비싸다는 단점이 있습니다. 그럼에도 인력과 운영 시간을 고려해 보면 은근 저렴합니다. 

 

 

저는 설정이 비교적 쉽고 제약이 없는 AWS EC2 방식을 택했습니다. 

 

2. EC2

출처: 아마존

Amazon Elastic Compute Cloud. 확장 가능한 컴퓨터 용량을 제공합니다. IaaS 클라우드 종류로 자신에게 물리적인 하드웨어가 없어도 클라우드 서비스에서 대여하는 물리 장비로 애플리케이션을 배포하고 개발할 수 있습니다. 

 

단순히 물리 장비를 대여하는 것을 넘어서 AWS에서 제공하는 기능으로 원하는 가상 서버를 구축하고 보안 및 네트워크를 구성, 모니터링, 로그 관리 등을 통해 EC2를 관리할 수 있습니다. 

 

실습 이전에 AWS는 첫 가입 시 1년간 대부분 서비스가 무료이기에 EC2로 간단한 토이 프로젝트를 만들고 싶다면 프리티어 계정을 활용하는 걸 적극 추천드립니다. 다만 가입 과정은 생략하도록 하겠습니다. 

 

3. EC2 서버 구축

프리티어에서는 t2.micro만 무료로 사용이 가능합니다. vCPU 1 Core, 메모리 1GB 컴퓨터를 대여한다고 생각하시면 됩니다. 월 750시간의 제한이 있어서 1대의 t2.micro만 사용하면 24시간 내내 사용할 수 있습니다. 

 

AWS 홈페이지에서 EC2를 검색해 줍니다. 

 

왼쪽에 인스턴스 항목을 클릭하고 인스턴스 시작 버튼을 누릅니다.

 

인스턴스 이름을 지어주시고 

 

 

AMI는 EC2 인스턴스를 시작할 때 필요한 정보를 이미지로 만든 것입니다. 인스턴스 가상 머신에 운영체제 등을 설치한 이미지라 생각하시면 됩니다. 

 

OS 이미지를 선택할 때 ubuntu가 추후 Nginx를 설정하는 데 편하기에 Ubuntu를 선택해 줍니다. 

스토리지는 프리 티어는 최대 30GB까지 무료로 사용할 수 있기에 30을 적어줍니다.

 

이게 제일 중요합니다. 키 페어가 기존에 있으면 키 페어를 목록에서 선택해 주시고, 없으시다면 새 키 페어를 생성해줘야 합니다. 

인스턴스로 접근하기 위해 pem키가 필요합니다. 마스터키이기 때문에 절대 유출이 되면 안 됩니다. pem키는 EC2 서버로 접속할 때 필수 파일이니 자신만의 디렉토리에 잘 보관해야 합니다. 

 

설정이 끝나면 인스턴스 시작 버튼을 눌러줍니다. 

 

 

 

EC2는 요금을 아끼기 위해 인스턴스를 중지하고 다시 시작하면 IP가 변경됩니다. 따라서 꼭 Elastic IP로 변경되지 않는 고정 IP를 가지게 해야 합니다. 

 

탄력적 IP 항목을 눌러줍니다. 

EIP를 할당해 줍니다.  발급이 되면 

작업을 통해 탄력적 IP 주소를 연결해 줍니다. 이때 연결할 인스턴스는 이전에 생성한 EC2에 할당하면 됩니다. 

 

연결 이후 EC2 인스턴스를 확인해 보면 

 

EIP와 EC2의 퍼블릭 주소가 일치한 것을 볼 수 있습니다.

 

4. EC2 서버 접속

저는 EC2 서버에 파일을 옮기기 쉽게끔 모바 엑스텀을 사용했습니다. MobaXterm은 SSH 접속 툴로 다양한 접속 방식 지원으로 설정이 편하고 별도의 SFTP 프로그램 등을 설치하지 않아도 됩니다. 또한 putty로 ppk를 변환하지 않고, .pem을 그대로 사용할 수 있습니다. 좌측에 윈도우 탐색 창처럼 현재 경로의 파일들을 보여줘서 조작이 매우 간단합니다. 

(Putty는 여러 파일들을 vi에디터로 수정해야 하기에 불편함이 있습니다.)

 

MobaXterm은 윈도우용만 있어 맥북에서는 사용할 수 없습니다. 따라서 맥북의 사용자시면 구글링을 통해 EC2 서버에 접속하는 걸 추천드립니다. 

 

설치 링크는 아래와 같습니다. 

https://mobaxterm.mobatek.net/

 

MobaXterm free Xserver and tabbed SSH client for Windows

The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!

mobaxterm.mobatek.net

간단한 실습만 하기에 Free와 Installer edition을 선택해 줍니다.

 

출처: https://inpa.tistory.com/

그대로 쓰면 한글 파일 이름이 출력이 안되고, 문자가 깨지기에 Character set 변경을 해줘야 합니다. 위의 사진처럼 ecu-kr로 변경해 줍시다. 

SSH를 선택하고 

설정을 위의 예시처럼 작성합니다. Remote host는 EC2에 할당한 EIP를 넣어주시고 username은 임의로

 

Use private key에 이전에 다운로드한 Pem키를 넣어줍니다.

 

만약 이 설정들을 또다시 이용하고 싶으시다면 bookmark setting 항목에 들어가서 북마크를 생성해 줍니다. 

 

처음 접속할 때 계정명을 ubuntu로 입력해 줍니다.

 

접속에 성공하면 위의 사진처럼 터미널에 나타날 겁니다. 

 

 

5. EC2 서버 설정

EC2 서버 설정에 앞서서 어떻게 24시간 배포가 되는지 간략히 설명하겠습니다. 

linux 서버(EC2)에 spring이 빌드된 파일과 vue.js가 빌드된 파일을 올릴 겁니다. 그리고 리눅스 환경에서 두 개의 빌드된 파일을 실행시켜서 24시간 동안 배포가 되게끔 설정할 것입니다. 

 

 

저는 스프링을 9000번 포트로 vue.js를 8080 포트로 설정했습니다. 빌드된 파일들을 ec2 서버에서 실행시켜 주려면 해당 port들을 열어줘야 합니다. 

AWS EC2 인스턴스 페이지에 들어가서 왼쪽의 보안 그룹 항목을 선택합니다. EC2 생성 때 설정한 보안 그룹에 들어갑니다.

 

인바운드 규칙 편집 버튼을 누릅니다. 

 

우선 SSH는 반드시 자신만 조작이 가능하게끔 설정해야 합니다. 타인이 자신의 EC2 서버에 접속하면 보안 문제가 엄청나겠죠? 

내 IP에만 조작이 가능하게끔 설정해 둡니다. 

그리고 규칙을 추가해서 사용자 지정 TCP를 선택해 누구든 해당 포트에 이용이 가능하게끔 Anywhere-IPv4를 설정합니다. 8080, 9000번 포트를 열어줍니다. 참고로 저는 8080, 9000번 포트로 빌드해서 그렇지 여러분들은 내가 설정한 포트를 열어줘야 합니다.

 

그리고 규칙을 저장하면 8080, 9000번 port가 EC2에 열렸습니다.

 

 

이제 스프링 부트의 파일들을 빌드해 보겠습니다. 먼저 윈도우 환경에서 cmd 창을 열어줍니다. 

 

 

 

프로젝트 내의 gradlew 파일이 있는 곳으로 cd 명령어를 활용해 이동해 줍니다.

예시) cd D:\mac20010\Users\hospital 

 

지정된 위치에서 gradlew.bat 명령어를 실행합니다. 정상적으로 성공이 되면 gradlew build 명령어를 쳐주면 

위의 사진처럼 빌드가 정상적으로 성공된 것을 볼 수 있습니다. 빌드가 정상적으로 됐으면 build 폴더가 생겼을 겁니다.

 

 

build 폴더에 들어가서 libs 폴더에 들어가 줍니다.

여기서 두 개의 빌드된 Jar 파일들을 볼 수 있는데 -plain가 아닌 SNAPSHOT.jar 파일을 실행 중인 모바 엑스텀 왼쪽에 드래그해서 이동시켜 줍니다. 

 

이러면 정상적으로 이동된 것을 볼 수 있습니다. 

 

 

1) JAVA 8 설치

 

 빌드된 파일을 실행하려면 linux 서버에 java를 설치해야 합니다. 

 

sudo apt-get install openjdk-8-jdk 명령어를 실행해서 자바를 설치해 줍니다. 

 

java -version 명령어를 통해 자바의 버전을 확인할 수 있습니다. 

 

저의 프로젝트는 java 8 환경이라서 java8을 설치했지 여러분은 프로젝트의 자바 버전에 맞게끔 설치해야 합니다. 각 버전의 설치 방법은 구글링을 통해 설치하시길 바랍니다. 

 

2) 타임존 변경

EC2 서버의 기본 타임존은 UTC입니다. 한국의 시간대가 아닙니다. 이러면 서버에서 수행되는 애플리케이션에서 생성되는 시간이 모두 차이가 나기에 꼭 수정해야 합니다. 서버의 타임존을 한국 시간(KST)로 변경하겠습니다.

 

sudo rm /etc/localtime

sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

정상적으로 수행이 됐다면 date 명령어로 타임존이 KST로 변경된 것을 확인할 수 있습니다. 

 

 

3) Hostname 변경

여러 서버를 관리 중일 때 IP만으로 어떤 서비스의 서버인지 확인이 힘듭니다. 그래서 각 서버가 어떤 서비스인지 표현하기 위해 hostname을 변경해야 합니다.

 

hostname 명령어로 현재 내 hostname이 무엇인지 확인합니다. 

 

먼저 ubuntu 계정의 패스워드를 등록해 줍니다. sudo passwd ubuntu 로 등록이 가능합니다.

 

hostnamectl set-hostname 유저이름으로 hostname을 설정해 줍니다. 

이때 ubuntu 계정의 비밀번호를 입력해야 하고 이전에 등록한 비밀번호를 입력해 줍니다. 그리고 hostname 명령어로 확인하면 hostname이 변경된 것을 확인할 수 있습니다.  

 

reboot 명령어를 치고 hostname을 확인하면 

 

정상적으로 hostname이 변경된 것을 확인할 수 있습니다.

 

 

 

자 이제 EC2 서버에 빌드된 자바 파일을 실행해 보겠습니다.

 

java -jar hospital-0.0.1-SNAPSHOT.jar

 

명령어로 빌드된 파일을 실행하고, 브라우저 주소창에 EC2주소:9000/ 실행해 보면...

 

당연히 정상적으로 실행이 안 됩니다. 왜 그러는 걸까요?

 

자신의 로컬 서버에는(내 PC) DB가 설치됐지만, EC2 서버에는 DB가 설치되지 않았기 때문입니다.

 

이를 해결하는 방안은 다음 편에 올리도록 하겠습니다. 

728x90