카테고리 없음
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로 이미지 저장소 구성