JSCODE Logo
JSCODE 박재성JSCODE 제이온JSCODE 시니
과외유튜브블로그후기
완강 후기 이벤트블로그 리뷰 이벤트AWS SAA 합격 후기 이벤트
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2026 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침

비전공자도 이해할 수 있는 AWS 중급/실전 (보안 가용성편)

서비스 운영에 필수적인 네트워크 구성 방법 (VPC)

목표 설정
VPC란? / VPC를 왜 쓰는 걸까?
CIDR이란? / CIDR 표기법 해석 방법
[예제] CIDR 표기법 해석하기
사설 IP(프라이빗 IP) vs 공인 IP(퍼블릭 IP)
[실습] 사설 IP(프라이빗 IP)로 통신해보기
[실습] VPC 생성하기
서브넷이란 ?
[실습] 서브넷 생성하기
[실습] 퍼블릭 서브넷에 EC2 배치해보기
인터넷 게이트웨이란?
[실습] 인터넷 게이트웨이 생성하기
라우팅 테이블이란?
[실습] 라우팅 테이블 생성하기
AWS 아키텍처 그림으로 표현해보기
[복습] 퍼블릭 서브넷에 EC2 배치하기

외부 접근을 차단해 보안 강화시키기 (프라이빗 서브넷)

NAT 게이트웨이란 ?
[실습] NAT 게이트웨이 생성하기
[실습] 프라이빗 서브넷에 EC2 배치해서 외부 접근 차단하기
[실습] 프라이빗 서브넷의 EC2에 접속하는 방법
Bastion Host란?
[실습] 퍼블릭 서브넷에 Bastion Host 배치하기

서비스 장애 예방하기 (고가용성, 시스템 이중화)

가용성이란 ? / 시스템 이중화란 ?
가용 영역이란 ?
[실습] 가용 영역 2개를 활용해 VPC 구성하기
[실습] 새로운 가용 영역에 EC2 배치하기
[실습] 프라이빗 서브넷에 RDS 인스턴스 추가하기
[실습] 프라이빗 서브넷에 있는 RDS에 접속하는 방법
[실습] EC2 인스턴스에 Spring Boot 프로젝트 배포하기
[실습] ELB 추가하기
RDS의 다중 AZ 배포란?
[실습] RDS에 다중 AZ 배포 설정으로 장애 대비하기

접근 범위를 제한해서 보안 강화시키기 (보안 그룹)

최소 권한의 원칙(PoLP)이란?
보안 그룹이란?
[실습] 로드 밸런서(ALB)의 보안 그룹 수정하기
[보충 강의] 보안 그룹에 포함되지 않은 주체가 요청을 보내면 어떻게 작동할까?
[실습] EC2(Bastion Host)의 보안 그룹 수정하기
[실습] EC2(백엔드 서버)의 보안 그룹 수정하기
[실습] RDS(데이터베이스 서버)의 보안 그룹 수정하기

현업에서 자주 사용하는 AWS 인프라 아키텍처 직접 구축하기

[최종 미션] 현업에서 자주 사용하는 AWS 인프라 아키텍처 직접 구축해보기
[해설 강의] VPC 구성하기
[해설 강의] Bastion Host 배치하기
[해설 강의] RDS 배치하기
[해설 강의] 백엔드 서버 배치하기
[해설 강의] ALB 배치하기
[해설 강의] 보안 그룹 타이트하게 수정하기 (Bastion Host, ELB, 백엔드 서버, RDS)
← 블로그 목록으로 돌아가기

[실습] EC2 인스턴스에 Spring Boot 프로젝트 배포하기

JSCODE 박재성
JSCODE 박재성
2026. 03. 14.
author
JSCODE 박재성
category
AWS
createdAt
Dec 6, 2025 03:50 AM
isPublic
isPublic
series
비전공자도 이해할 수 있는 AWS 중급/실전 (보안 가용성편)
slug
exercise-deploy-spring-boot-to-ec2
type
post
updatedAt
Mar 14, 2026 09:00

✅ 아키텍처 미리보기

notion image
 
 

✅ [실습] EC2 인스턴스에 Spring Boot 프로젝트 배포하기

  1. Bastion Host에 접속하기
    1. notion image
       
  1. instagram-server 인스턴스에 접속하기
    1. $ cd [키 페어 파일이 존재하는 경로] $ ssh -i "instagram-server.pem" ubuntu@[instagram-server 인스턴스의 프라이빗 IP]
       
  1. JDK 설치하기
    1. $ sudo apt update # 패키지 관리 시스템(apt)의 패키지 정보 업데이트 $ sudo apt install openjdk-17-jdk -y # JDK 17 버전 설치 $ java -version # JDK가 잘 설치됐는 지 확인
       
  1. Github으로부터 Spring Boot 프로젝트 clone 하기
    1. $ git clone https://github.com/JSCODE-COURSE/aws-vpc-springboot.git
      프로젝트 설명
       
  1. application.yml 파일 수정하기
    1. $ cd aws-vpc-springboot/src/main/resources $ vi application.yml
       
      application.yml
      server: port: 80 spring: datasource: url: jdbc:mysql://___________:3306/instagram # RDS 인스턴스 엔드포인트 username: ______ # RDS 마스터 사용자 이름 password: ______ # RDS 마스터 비밀번호 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true
      파일을 열어보면 위와 같이 코드가 작성되어 있다. 자신의 RDS 정보에 맞게 수정해주자.
       
  1. 빌드해서 Spring Boot 서버 실행시키기
    1. $ cd ~/aws-vpc-springboot $ ./gradlew clean build -x test # 빌드하기 $ cd build/libs $ sudo nohup java -jar aws-vpc-springboot-0.0.1-SNAPSHOT.jar &
       
  1. 잘 작동하는 지 확인하기
    1. $ curl localhost:80/health $ curl localhost:80/boards # 게시글 조회 (+ 게시글 저장)
      notion image
      notion image
       
  1. 다시 Bastion Host로 나오기
    1. $ exit
       
      instagram-server-b 인스턴스에도 똑같이 Spring Boot 프로젝트를 배포하자.
       
  1. instagram-server-b 인스턴스에 접속하기
    1. $ cd [키 페어 파일이 존재하는 경로] $ ssh -i "instagram-server.pem" ubuntu@[instagram-server-b 인스턴스의 프라이빗 IP]
       
  1. JDK 설치하기
    1. $ sudo apt update # 패키지 관리 시스템(apt)의 패키지 정보 업데이트 $ sudo apt install openjdk-17-jdk -y # JDK 17 버전 설치 $ java -version # JDK가 잘 설치됐는 지 확인
       
  1. Github으로부터 Spring Boot 프로젝트 clone 하기
    1. $ git clone https://github.com/JSCODE-COURSE/aws-vpc-springboot.git
       
  1. application.yml 파일 수정하기
    1. $ cd aws-vpc-springboot/src/main/resources $ vi application.yml
       
      application.yml
      server: port: 80 spring: datasource: url: jdbc:mysql://___________:3306/instagram # RDS 인스턴스 엔드포인트 username: ______ # RDS 마스터 사용자 이름 password: ______ # RDS 마스터 비밀번호 driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: update show-sql: true
      파일을 열어보면 위와 같이 코드가 작성되어 있다. 자신의 RDS 정보에 맞게 수정해주자.
       
  1. 빌드해서 Spring Boot 서버 실행시키기
    1. $ cd ~/aws-vpc-springboot $ ./gradlew clean build -x test # 빌드하기 $ cd build/libs $ sudo nohup java -jar aws-vpc-springboot-0.0.1-SNAPSHOT.jar &
       
  1. 잘 작동하는 지 확인하기
    1. $ curl localhost:80/health $ curl localhost:80/boards # 게시글 조회 (+ 게시글 저장)
      notion image
      notion image
       
       
지금까지 2개의 EC2 인스턴스에 Spring Boot 프로젝트를 배포해봤다. 하지만 일반 사용자가 백엔드 API 서버에 요청을 보내기 위해 Bastion Host에 접속하는 과정을 거칠 수는 없다. 따라서 일반 사용자도 백엔드 API에 직접 요청을 보낼 수 있게 만들어주어야 한다. 그리고 사용자보고 2개의 백엔드 서버에 골고루 요청을 나눠서 보내라고 시킬 수가 없다. 따라서 사용자의 요청을 여러 대의 백엔드 서버에 골고루 전달하기 위한 장치가 필요하다. 그게 바로 로드 밸런서(ELB)이다. 로드 밸런스를 도입하면 여러 대의 EC2에 골고루 트래픽을 분산시킬 수 있게 된다. 뿐만 아니라 Bastion Host를 거치지 않고 외부 인터넷에서 요청을 보낼 수 있게 된다. 다음 강의에서는 ELB를 도입해보도록 하자.
📎
이 글은 비전공자도 이해할 수 있는 AWS 중급/실전 (보안, 가용성편) 강의의 수업 자료 중 일부입니다.