2025. 9. 20. 01:06ㆍ카테고리 없음
- 0. AWS 시작하기
- 1. EC2에 스프링부트 서버 구축하기
- 2. Route53으로 도메인 연결하기
- 3. HTTPS 적용하기: ELB vs Nginx + Certbot
- 4. RDS로 운영용 데이터베이스 구축하기
- 5. S3로 파일 관리하기
KDT 팀 프로젝트를 진행하면서 가장 아쉬웠던 점은 서버 아키텍처를 직접 처음부터 끝까지 구성해보지 못했다는 것이었습니다. 여러 명이 함께 개발하다 보니 역할이 나눠질 수밖에 없었고, 서버를 온전히 혼자 다뤄볼 기회가 없었습니다.
하지만 백엔트 개발자에게 서버 설정부터 배포까지의 경험은 필수적이고, 요즘은 AWS 활용경험이 신입 개발자의 기본 역량처럼 자리 잡고 있기에, AWS를 사용해 프로젝트를 처음부터 끝까지 배포하는 과정을 직접 경험해보려 합니다.
이전에 진행했던 프로젝트에서는 Spring Boot로 애플리케이션을 개발한 뒤, Docker 컨테이너로 패키징하여 Naver Cloud Platform(NCP) 서버에 띄웠습니다. 이번에는 AWS를 사용하여 서버 설정부터 애플리케이션 배포까지 전 과정을 직접 진행해보겠습니다.
[ 0. AWS 시작하기 ]
AWS란?
AWS(Amazon Web Services) 는 아마존이 제공하는 클라우드 서비스입니다.
그중에서도 서버, 데이터베이스, 스토리지 등 컴퓨팅 자원을 제공하는 클라우드 컴퓨팅 플랫폼(IaaS, Infrastructure as a Service)에 해당합니다.
서비스를 개발했다고 해서 바로 운영이 가능한 것은 아닙니다.
실제 운영을 위해서는 서버 장비를 구매하고, 데이터 센터를 구축하고, 네트워크와 보안을 관리할 인력들도 필요하죠.
원래는 이런것들을 모두 갖춰야해서 서비스를 운영하기 위해서는 많은 초기 비용들이 필요했지만 AWS가 이러한 운영에 필요한 인프라를 직접 구매하지 않고, 인터넷을 통해 빌려 쓸 수 있도록 제공하면서 소스코드만 있으면 별도의 장비를 구매하지 않고도 서비스를 운영할 수 있게 되었습니다.
서비스 운영에 필요한 인프라와 이를 제공하는 AWS 서비스를 정리해보겠습니다.
| 운영 인프라 | AWS 서비스 | 설명 |
|---|---|---|
| 서버 (Compute) | EC2 (Elastic Compute Cloud) | 애플리케이션을 실행할 가상 서버 |
| 데이터베이스 (DB) | RDS (Relational Database Service) | 관계형 데이터베이스 서비스 |
| 스토리지 (Storage) | S3 (Simple Storage Service) | 이미지, 동영상, 로그 파일 등 정적 리소스 저장 |
| 네트워크/도메인 관리 | Route 53 / VPC / ELB | 도메인 관리, 가상 네트워크, 트래픽 분산 |
| 보안 및 모니터링 | IAM / CloudWatch | 권한 제어, 서버 상태 감시, 장애 대응 |
| 속도 최적화 | CloudFront (CDN) | 전 세계 사용자에게 빠른 응답 제공 |
각각의 서비스에 대해서는 차차 알아가보도록 하고, 이러한 클라우드 컴퓨팅 서비스가 개발시장에서 어떤 변화를 가져왔는지, 어떤 의의를 갖는지 우선 짚고 넘어가겠습니다.
클라우드 컴퓨팅 서비스가 가져온 변화
스타트업의 사업화 장벽을 낮춤
AWS 같은 클라우드 컴퓨팅 서비스 덕분에 서비스를 운영하기 위해서 서버를 직접 살 필요도, 데이터센터를 꾸릴 필요도 없어졌습니다.
필요한 만큼 빌려 쓰고, 사용한 만큼 요금을 내면 되기 때문에 사업을 하기 위한 초기 비용 부담이 크게 줄었습니다. 덕분에 아이디어와 코드만 있으면 누구나 서비스를 시작할 수 있는 환경이 마련되었고, 이는 스타트업 생태계의 폭발적인 성장을 이끌었습니다.
개발자에게 요구되는 새로운 역할
예전에는 개발과 운영이 뚜렷하게 나눠져있었다고 합니다. 개발자는 코드만 짜고, 서버 관리나 보안은 운영팀이 담당하는 업무였지만 DevOps 문화가 자리 잡으면서, 개발자에게도 운영 지식이 요구되기 시작했습니다. 서버가 어떻게 배포되는지, 데이터베이스가 어떻게 관리되는지, 보안과 성능 최적화까지에 대해서도 개발자가 이해하고 있어야하며, 단순히 기능을 구현하는 데서 끝나지 않고, 서비스가 실제로 어떻게 돌아가고 운영되는지를 이해하고, 서비스 전체를 바라보는 시야를 갖는 것이 개발자의 역량이 되었습니다.
AWS 시작하기
그럼 이제 작성한 코드가 있다는 것을 가정하고, AWS를 활용하여 애플리케이션을 배포하는 것을 진행해보겠습니다.
제가 배포할 서비스는 Java 17과 Spring Boot 3.4.6을 기반으로 만들어진 프로젝트이며, 데이터베이스는 MySQL과 Redis를 사용했습니다. 정적 리소스 및 파일 저장은 Naver Cloud Object Storage를 활용했고, 기존에는 애플리케이션은 Docker 컨테이너로 패키징하여 Naver Cloud Platform(NCP) 환경에 배포했었습니다.
이번에는 해당 프로젝트를 AWS EC2와 RDS, 그리고 S3 스토리지로 전환하여 배포해 볼 예정입니다.
AWS를 사용하기 위해 가장 먼저해야할 것! AWS 회원가입, 계정을 만들어보겠습니다.
1. AWS 계정 생성하기




AWS에서는 계정을 만들면 1년 동안 일부 서비스를 무료로 이용할 수 있는 프리 티어(Free Tier) 제도를 제공합니다.
EC2, RDS, S3등의 서비스에 대해서 일부 제한을 가지고 무료로 사용할 수 있기 때문에 이번 과정에서는 프리티어를 적극 활용하도록 하겠습니다. 하지만 프리 티어 범위를 넘어가거나 해당되지 않는 서비스를 사용하면 유료 요금이 청구될 수 있습니다.
이번 배포과정은 실제 현업에서 사용하는 방식대로 프로젝트 배포하는 것을 목표로 하기 때문에 일부 비용이 발생할 수 있음을 미리 밝힙니다. 이런 무료혜택에 대해서 한사람이 여러 계정을 만들어 악용하는 것을 막기 위해 AWS에서는 신용카드 인증을 통한 본인 인증을 진행하고 있으며, 서비스 이용중 추가요금이 발생할 경우에는 기재한 카드 정보로 요금이 청구됩니다.
2. 프로젝트 준비하기
로컬에서 작업한 프로젝트를 Github 레포지토리에 올려놔주세요.
보통 현업에서는 Github를 통해 버전관리를 하고, 자동 빌드와 배포까지 연결하는 경우들이 많습니다.
유지보수나 배포 과정에서 관리가 효율적이기 때문이죠.
아래는 이번에 배포할 프로젝트 저장소입니다.
이번 글에서는 AWS 계정을 생성하고, 배포할 프로젝트 코드를 GitHub에 올리는 준비 과정을 정리해보았습니다. 다음 포스팅에서는 본격적으로 AWS EC2를 활용해 가상 서버를 만들고, Spring Boot 애플리케이션을 띄우는 과정을 진행해보겠습니다.
※ 이번 <AWS에서 Spring Boot 프로젝트 배포하기> 시리즈에서 다루는 프로젝트는 프론트엔드(React, Vue 등)와 분리된 구조가 아닌, Spring Boot와 Thymeleaf를 사용한 서버사이드 렌더링(SSR) 방식의 애플리케이션입니다. 또한 Docker Compose를 활용하여 애플리케이션과 데이터베이스를 각각 분리된 컨테이너로 구성하여 실행하는 내용을 담고 있음을 참고바랍니다.