
SOPT 서버파트 세미나에서 진행했던 내용 요약 정리본입니다.
Ch 0. Intro
벌써! 4주차 세미나 입니다. 오늘은 AWS에 대해서 알아보고, EC2를 이용하여 배포하는 시간을 가져보겠습니다.
3차 세미나까지 저희가 설계한 서버 어플리케이션은 전부 로컬에서 실행되고 있었습니다!
따라서 실제 서비스를 운영하려면, 구축한 서버 어플리케이션을 다른 사람들이 이용할 수 있게 해야합니다!
배포 할 때는 크게 두 가지 선택지가 있습니다.
클라우드(Cloud) , 온 프레미스(On-Premise) 두 가지인데요!
저희는 이 중에 클라우드에 대해서 알아보겠습니다.
CH 01. AWS (Amazon Web Service)

AWS는 클라우드 분야에서 점유율 1위를 달리고 있는 클라우드 서비스 회사입니다.
그럼 클라우드가 무엇인지 간단하게 알아보겠습니다..!
클라우드는 인터넷을 이용하여 온디맨드로 제공하고 사용한 만큼의 금액을 지불하면서, IT 리소스를 사용할 수 있게 해주는 서비스를 의미합니다.
반대로 온 프레미스는 자체적인 장비를 이용하여, 서버를 구축하는 것을 의미합니다.
클라우드의 장점
- 실제로 서버를 구축하는 것이 아니기 때문에, 데이터 센터, 서버 비용을 클라우드 운영비로 대체할 수 있다. (쓰는 만큼 사용)
- 규모의 경제
- 빠르게 서버를 구축 할 수 있다. → 개발에 집중 가능!
- 불필요한 수요에서 오는 손해가 적다.
Region
AWS는 Region(리전)이라는 개념이 존재합니다.
Region : 지리적인 영역 내에서 격리되고 물리적으로 분리된 여러개의 가용영역 모음
Region은 각 리전마다 고유한 코드가 있습니다. → 서울(ap-northeast-2)
각 리전에는 데이터 센터(서버를 호스팅하는 실제 시설)가 존재하고, 이러한 데이터센터의 모음을 가용영역(Availability Zone)입니다. 리전은 가용영역을 최소 2개 갖고 있습니다!!
Ubuntu
Ubuntu는 많은 분들이 사용하고 있는 debian linux 기반의 운영체제입니다.
많이 쓰는 운영체제인 만큼 다양한 레퍼런스와 계속해서 지원되고 있는 운영체제이기 때문에, 저희도 Ubuntu를 사용해서 배포하겠습니다. Ubuntu는 2년마다 LTS(Long Term Support) 버전을 출시합니다.
CH 03. EC2 (Elastic Computer Cloud)
아마존 클라우드 서버 호스팅 | Amazon Web Services
아마존 클라우드 서버 호스팅 | Amazon Web Services
Amazon Elastic Compute Cloud(Amazon EC2)는 750개가 넘는 인스턴스, 그리고 최신 프로세서, 스토리지, 네트워킹, 운영 체제 및 구매 모델의 옵션과 함께 워크로드의 요구 사항에 가장 잘 부합할 수 있도록
aws.amazon.com
Amazon Elastic Compute Cloud(Amazon EC2)는 700개가 넘는 인스턴스, 그리고 최신 프로세서, 스토리지, 네트워킹, 운영 체제 및 구매 모델의 옵션과 함께 워크로드의 요구 사항에 가장 잘 부합할 수 있도록 가장 포괄적이고 심층적인 컴퓨팅 플랫폼을 제공합니다. AWS는 인텔, AMD 및 Arm 프로세서를 지원하는 최초의 주요 클라우드 공급자이며, 온디맨드 EC2 Mac 인스턴스를 지원하는 유일한 클라우드이자, 400Gbps 이더넷 네트워킹을 지원하는 유일한 클라우드입니다. AWS는 기계 학습 훈련에 대한 최상의 가격 대비 성능은 물론, 클라우드에서 추론 인스턴스당 가장 저렴한 요금을 제공합니다. AWS에서는 다른 어떤 클라우드보다 많은 SAP, 고성능 컴퓨팅(HPC), 기계 학습, Windows 워크로드가 실행됩니다.
EC2 → 컴퓨터 대여!! 라고 생각하자!
EC2의 구성
- 인스턴스
- 클라우드에서 사용하는 가상 서버 → CPU, Memory, GPU 등의 하드웨어 담당
- EBS (Elastic Block Storage)
- 클라우드에서 사용하는 가상 하드디스크 (cf. EC2 인스턴스 스토어)
- AMI
- 인스턴스를 실행하기 위한 정보를 담고 있는 이미
- 보안그룹
- 가상의 방화벽을 통해 어떠한 트래픽을 허용할지 설정할 수 있습니다.
- 인바운드 규칙
- 아웃바운드 규칙ㅌ
- 가상의 방화벽을 통해 어떠한 트래픽을 허용할지 설정할 수 있습니다.
CH 04. RDS (Relational Database System)
RDS(Relational Database System)은 관계형 데이터베이스를 쉽게 운영할 수 있도록 도와주는 AWS 솔루션입니다.
mySQL, Maria DB, PostgreSQL등 다양한 Database를 사용할 수 있습니다.
데이터베이스 관리 시스템 | 관계형 RDS | Amazon Web Services
CH 05. 실습
인스턴스는 아시아 태평양 (서울) ap-northeast-2로 맞춰주셔야합니다!

AWS 상단 검색 창에 EC2라고 검색해주시고, 서비스에 EC2를 클릭해주세요.

가운데 있는 인스턴스 시작 을 눌러주세요.

그럼 아래와 같은 창이 뜹니다.
- 이름안에 인스턴스 이름을 지어주세요.
- 애플리케이션 및 OS 이미지 에 Ubuntu를 선택해주세요.
- Amazon Machine Image(AMI) 에서 22.04 LTS 프리티어 사용 가능이라고 되어 있는 옵션을 선택해주세요.
- 아키텍처 는 64비트 x86으로 선택해주세요.

인스턴스 유형은 t2.micro 로 선택해주세요.
키페어(로그인) 우측 하단에 새 키 페어 생성 을 눌러주세요.

키 페어 이름 안에 아까 인스턴스 이름을 정한 것처럼 이름을 정해서 넣어주세요.
키페어 유형에 RSA , ED25519 두 가지 암호화 방법이 있습니다.
프라이빗 키 파일 형식의 경우
MacOS는 .pem 을 선택.
Window는 .ppk 를 기본적으로 선택하면 됩니다.
하지만 프로젝트를 하다보면, 서로 작업하는 운영체제가 다른 경우가 있겠죠? puttygen 을 이용하면
pem → ppk / ppk → pem 모두 가능합니다.
다음은 보안 그룹 설정입니다.
Firewall (security groups) 아래에 보안 그룹 생성 에 체크해주세요.
- ✅ 에서 SSH 트래픽 허용
- ✅ 인터넷에서 HTTP 트래픽 허용
스토리지 구성에서는 GiB를 선택해주시면 됩니다.
프리티어에서는 최대 30GiB까지 선택가능하니 한도 내에서 편하게 선택해주세요.
그러면 아까 저장했던 pem, ppk 의 위치를 옮겨보도록 하겠습니다… 명령어는 pem키 기준으로 작성하겠습니다.
터미널을 키고 pem키가 있는 디렉토리로 이동해주세요.
ls -al | grep pem
이라고 입력해주시면 저장한 pem키가 나올 것 입니다~
저장한 pem키를 복사해주겠습니다.
cp 키이름.pem ~/.ssh
pem키를 읽을 수 있도록 권한 설정을 해주겠습니다.
chmod 400
Elastic IP(탄력적 IP) 연결
- 왼쪽 메뉴에서, 네트워크 및 보안 -> 탄력적 IP 클릭
- 탄력적 IP 주소 할당 -> 할당
- 탄력적 IP 주소 연결
- 인스턴스를 선택하고, 연결 클릭.
- 탄력적 IP의 경우, instance에 연결 되어 있지 않는 경우 과금되므로 주의하자

탄력적 IP 연결이 완료되면 인스턴스 페이지로 가서 확인할 수 있습니다~!
퍼블릭 IPv4 주소 와 탄력적 IP 주소 가 일치되어 있으면 성공입니다.
마지막으로 보안그룹을 설정하겠습니다.
아래 사진에서 인스턴스(실행 중) 아래 있는 보안 그룹 을 눌러주세요.

여기서 인스턴스에 연결되어 있는 보안 그룹 ID 를 클릭해주세요.
그럼 아래와 같은 화면이 나옵니다. 여기서 우측에 인바운드 규칙 편집 을 눌러주세요.

왼쪽 하단에 규칙 추가를 통해, 규칙을 추가해주겠습니다.
추가할 규칙은 다음과 같습니다.
- HTTP IPv6 에서 요청
- TCP (내가 실행할 Spring Boot Application Port) IPv4 요청, IPv6 요청
- HTTPS IPv4 요청, HTTPS IPv6 요청

다 추가 해준뒤에 오른쪽 아래 규칙 저장 을 눌러주세요!
이제 EC2 기초 세팅이 끝났습니다!
EC2 인스턴스에 접속해보도록 하겠습니다!
EC2 인스턴스를 생성하고 ssh를 이용하여 접속한다.
- 인스턴스에 할당된 탄력적 IP로 ssh 접속을 하면 된다.
- window의 경우 putty를 이용해서 접속할 수 있다.
- Mac의 경우 인스턴스 연결을 선택하면 SSH Client에 접속 명령어가 있다. 접속 명령어로 접속할 수 있다.
- .ssh directory에 config 파일을 만들어, 접속 할 수 있다.
- config 파일에 아래와 같이 입력을 한다.
Host aws-demo-server
HostName 탄력적ip
User ubuntu
IdentityFile pem key 위치
해당 파일을 저장하면 이제 ssh aws-demo-server라는 명령어로 터미널에서 EC2에 접속할 수 있다.
sudo apt-get update
sudo apt-get upgrade
- 서버 시간 설정
sudo dpkg-reconfigure tzdata
open jdk 설치
- java version에 맞게 jdk를 설치해준다.
sudo apt-get install openjdk-17
- 아래 명령어로 설치된 java의 version을 확인할 수 있다.
java --version
test
- 프로젝트 폴더로 가서, 아래 명령어를 이용하여 test를 진행할 수 있다.
./gradlew test
빌드 방법
- 빌드된 파일을 지운다.
./gradlew clean- 빌드 실행
./gradlew build- 빌드된 파일을 진행하고 실행한다.
./gradlew clean build
./gradlew clean build -x test
./gradlew clean build
- build된 폴더로 이동
cd build/libs- Background에서 실행
nohup java -jar demo.jar &- active profile을 선택해서 실행할 때
Dspring.profiles.active를 넣어서 실행할 수 있다.- 또한
-Xmx로 JVM에 할당되는 최대 힙메모리를 설정할 수 있다.java -jar -Dspring.profiles.active=프로필 demo.jar
- 또한
Nginx
- nginx 설치
sudo apt install nginx- nginx 시작
sudo service nginx start- nginx 설정 파일
sudo systemctl restart nginx
'Spring' 카테고리의 다른 글
| [Spring] RestDocs 기반으로 API 문서 작성해보기 (0) | 2024.03.16 |
|---|---|
| [Study] Test Code Study 정리 (1) (1) | 2024.02.27 |
| [Spring Boot] Spring Boot로 HTTP API 설계하기 (2) | 2023.05.10 |
| [Spring] Spring Boot 프로젝트에서 Swagger로 API 문서 관리 (0) | 2023.05.01 |
| [Spring] H2 Database 설정 (0) | 2023.04.20 |