spring_2기[본캠프]/과제

[과제]CH 4 클라우드_아키텍처 설계 & 배포

minwoo95 2026. 2. 3. 02:40

과제요구사항

당신은 이제 막 스타트업에 입사한 백엔드 개발자입니다. 아무것도 없는 상태에서 팀원들의 정보를 저장하고 프로필 사진을 업로드하는 API를 만들고, 이를 AWS 상에서 안전하고 중단 없이 운영해야 합니다.

필수 기능 가이드

아무것도 없는 상태에서 네트워크를 구축하고, DB와 파일 저장소를 분리하여 "서버가 죽어도 데이터가 안전한" Stateless 아키텍처를 완성한다.

 

LV 0 - 요금 폭탄 방지 AWS Budget 설정 필수

클라우드 실습 중 가장 중요한 것은 비용 관리입니다. 실수로 고가의 리소스를 켜두는 것을 방지하기 위해 예산 알림을 설정합니다.

  • 설정 요구사항
    • AWS Budgets에서 월 예산을 $100 로 설정하세요.
    • 예산의 80% 도달 시 이메일 알림이 오도록 설정하세요.
  • 과제 제출 요구사항
    • 설정 완료된 AWS Budgets 화면을 캡처하여 README.md에 첨부하세요.

예산생성

알림 설정

 

LV 1 - 네트워크 구축 및 핵심 기능 배포 필수

안전한 네트워크 환경을 만들고, '운영 가능한 상태'의 애플리케이션을 배포하여 외부 접속을 확인합니다.

  • 인프라 구축 (VPC & EC2)
    • VPC 설계
      • VPC을 설정하여 Public/Private Subnet 분리한다.
    • EC2 생성
      • Public Subnet에 EC2를 생성한다.
  • 애플리케이션 개발 (API & Actuator)
    • 팀원 정보 저장 및 조회 API 개발
      • POST /api/members
        • 팀원의 이름, 나이, MBTI를 JSON으로 받아 저장하는 API를 만드세요.
      • GET /api/members/{id}
        • 저장된 팀원 정보를 조회하는 API를 만드세요.
    • 운영 설정
      • Profile 분리
        • 로컬에선 H2를 쓰고, 운영환경에선 MySQL을 쓰도록 application.yml을 local/prod로 분리하세요.
      • 로그 전략
        • API 요청이 들어올 때마다 INFO 레벨로 "[API - LOG] xx” 과 같은 로그를 남기세요.
        • 예외 처리를 구현하고, 에러 발생 시에는 ERROR 레벨로 스택트레이스를 남기세요.
    • 상태 모니터링 (Actuator) 추가
      • spring-boot-starter-actuator 의존성을 추가하세요.
      • 설정파일에 헬스 체크 엔드포인트를 노출하세요
      management.endpoints.web.exposure.include=health
      
  • 배포 및 검증
    • EC2에 프로젝트를 배포하고 실행하세요.
    • 로컬에서 http://localhost:8080/actuator/health 접속 시 아래와 같은 응답을 받아야 합니다.
    {"status": "UP"}
    
  • 과제 제출 요구사항
    • 설정 완료된 EC2의 퍼블릭 IP 를 README.md에 첨부하세요.

VPC 생성

태그 이름만 내가 설정하고 그외 설정은 그대로 생성(지역은 서울로)

 

 

 

EC2생성

 

 

나머지는 기본값으로 두고 생성

 

 

 

 

애플리케이션 개발 (API & Actuator)

 

https://github.com/MinWoo1995/Cloud_Architecture-Design-Deployment

 

GitHub - MinWoo1995/Cloud_Architecture-Design-Deployment

Contribute to MinWoo1995/Cloud_Architecture-Design-Deployment development by creating an account on GitHub.

github.com

 

상태 모니터링 (Actuator) 추가

 

 

배포 및 검증

 

 

LV 2 - DB 분리 및 보안 연결하기 필수

로컬 테스트가 끝났으니 실제 배포를 진행합니다. 하지만 DB 비밀번호를 코드에 적을 순 없죠? AWS의 관리형 서비스를 이용해 안전하게 배포해봅시다.

  • 인프라 요구사항
    • RDS 구축
      • 로컬 접속용 Public Subnet 에 MySQL RDS를 만드세요. (로컬 PC에서 접속 테스트가 가능해야 함)
    • 보안 그룹 체이닝
      • RDS의 보안 그룹(Inbound)에는 IP 주소를 적지 말고, Step 1에서 만든 EC2의 보안 그룹 ID만 허용하세요. (EC2 ↔ RDS 연결 보장)
    • Parameter Store
      • DB 접속 정보(url, username, password)와 확인용 파라미터를 저장.
  • 애플리케이션 요구사항
    • Spring Boot 실행 시 Parameter Store 값을 주입받아 RDS에 연결.
    • Actuator Info 확장
      • Parameter Store에 저장한 team-name 값이 /actuator/info 엔드포인트에서 조회되도록 설정하세요.
  • 검증
    • http://{EC2_Public_IP}:8080/actuator/info 접속 시, Parameter Store에 저장한 팀 이름이 출력되어야 합니다.
  • 과제 제출 요구사항
    1. Actuator Info 엔드포인트 URL
      • /actuator/info에 접속했을 때, Parameter Store에 저장했던 또는 확인용 파라미터 값이 JSON으로 출력되는 URL을 README.md에 작성하세요
      • (예: http://3.34.xx.xx:8080/actuator/info)
    2. RDS 보안 그룹 스크린샷
      • AWS 콘솔 > RDS > 보안 그룹 > [인바운드 규칙] 탭을 캡처하세요.
      • 소스(Source) 부분에 IP 주소(0.0.0.0/0)가 아닌, EC2의 보안 그룹 ID (sg-xxxxx)가 등록되어 있음을 보여주어야 합니다.

RDS 구축 -> database-1

보안 그룹 체이닝

Parameter Store

 

IAM Role

 

EC2 Role연결

 

 

 

LV 3 - 프로필 사진 기능 추가와 권한 관리 필수

팀원 정보에 "프로필 사진" 기능이 추가되었습니다. 서버 디스크에 저장하면 서버가 죽을 때 사진도 날아가니, S3를 써야 합니다.

  • 인프라 요구사항
    • S3 버킷 생성
      • "모든 퍼블릭 액세스 차단" 설정을 켜고 버킷을 생성하세요.
    • IAM Role
      • Access Key를 코드에 넣지 말고, S3 접근 권한이 있는 IAM Role을 생성해 EC2에 연결하세요.
  • API 요구사항
    • POST /api/members/{id}/profile-image
      • MultipartFile로 이미지를 받아 S3 버킷에 업로드하고, 이미지 URL을 DB에 업데이트하는 기능을 추가하세요
    • GET /api/members/{id}/profile-image
      • Presigned URL 을 생성하여 반환하세요. 클라이언트는 이 URL을 통해서만 이미지를 다운로드할 수 있어야 합니다.
      • Presigned URL의 유효기간을 꼭 7일로 설정해주세요
  • 과제 제출 요구사항Presigned URL은 유효기간이 지나면 접근이 불가능합니다. 채점을 위해 과제 제출일 기준 유효한 URL을 새롭게 생성해야 합니다.</aside>
    • 발급받은 Presigned URL 1개와 해당 URL의 만료 시간을 README.md에 기재하세요.
  • 🚨 유효기간 7일 설정 필수!

버킷생성하고

권한추가하고

의존성 주입하고

버전 충돌로 의존성 수정