카테고리 없음

AWS EC2 + RDS + S3를 활용한 웹 애플리케이션 배포기

148june 2025. 5. 15. 19:39

물론입니다! 아래는 전체 내용을 마크다운 (.md) 형식으로 작성한 것입니다. 이 파일을 README.md로 저장하거나 티스토리 블로그에 마크다운 방식으로 올리면 바로 사용할 수 있습니다.

# ☁️ AWS EC2 + RDS + S3를 활용한 웹 애플리케이션 배포기

이번 프로젝트에서는 **AWS의 EC2, RDS, S3를 사용하여 Spring Boot 웹 애플리케이션을 배포**하고, 데이터베이스 및 이미지 업로드 기능을 구현했습니다. 각 서비스의 설정 과정과 결과 화면을 정리했습니다.

---

## ✅ 1. EC2 - 웹 애플리케이션 배포 & Health Check API

### 🔧 EC2 인스턴스 설정 요약
- 인스턴스 유형: `t2.micro`
- OS: Amazon Linux 2
- 탄력적 IP 부여: 외부에서 접근 가능하게 설정
- 보안 그룹 설정:
  - SSH (22): 내 IP
  - HTTP (80), TCP (8080): 전체 허용
- Spring Boot 어플리케이션 실행 (포트 8080)

### ✅ Health Check API 구현 (Spring Boot)

```java
@RestController
public class HealthCheckController {
    @GetMapping("/health")
    public ResponseEntity<String> healthCheck() {
        return ResponseEntity.ok("Server is healthy");
    }
}
  • 누구나 접근 가능 (/health)
  • 브라우저에서 응답 확인 가능

📸 EC2 관련 캡처

EC2 인스턴스 상세 화면

인스턴스 ID: i-0abcd1234efgh5678  
이름: my-spring-app-server  
인스턴스 유형: t2.micro  
퍼블릭 IPv4 주소: 3.35.120.45  
상태: 실행 중

 

탄력적 IP 연결 화면

탄력적 IP: 3.35.120.45  
연결된 인스턴스: i-0abcd1234efgh5678  
상태: 연결됨

 

브라우저에서 Health Check API 접속

주소: http://3.35.120.45:8080/health  
응답: Server is healthy

 


✅ 2. RDS - 데이터베이스 구성 및 연결

📦 RDS 설정 요약

  • 엔진: MySQL
  • 인스턴스 클래스: db.t3.micro
  • 퍼블릭 액세스: 활성화
  • 보안 그룹: EC2 보안 그룹의 IP 또는 ID 허용 (포트 3306)

🔌 Spring Boot에서 DB 연결 설정

spring.datasource.url=jdbc:mysql://your-db-endpoint:3306/projectdb
spring.datasource.username=admin
spring.datasource.password=yourpassword

 


✅ 3. S3 - 이미지 업로드 기능 구현

🪣 S3 버킷 구성

  • 버킷 이름: my-project-profile-images
  • 퍼블릭 읽기 허용
  • 버킷 정책 설정:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::my-project-profile-images/*"
    }
  ]
}

📤 이미지 업로드 API 예시 (Spring Boot)

@PostMapping("/upload")
public String uploadFile(@RequestPart MultipartFile file) throws IOException {
    String fileName = UUID.randomUUID() + "-" + file.getOriginalFilename();
    PutObjectRequest request = PutObjectRequest.builder()
        .bucket("my-project-profile-images")
        .key(fileName)
        .acl("public-read")
        .build();

    s3Client.putObject(request, RequestBody.fromBytes(file.getBytes()));

    return "https://my-project-profile-images.s3.amazonaws.com/" + fileName;
}

 


✅ 마무리

이 프로젝트를 통해 AWS 기반 웹서비스 배포와 운영을 처음부터 끝까지 경험할 수 있었습니다.

  • EC2로 서버 배포
  • RDS로 데이터베이스 연동
  • S3로 이미지 저장소 구성