스프링 부트 CKEditor
스프링 부트 CKEditor 17 - AWS S3 생성과 연결 Config 작성
https://youtu.be/BqTXiqK7qDo?si=0sNroXX6VI6r1KYB
스프링 부트 CKEditor 17 - AWS S3 생성과 연결 Config 작성
- 스프링 부트 CKEditor 17 - AWS S3 생성과 연결 Config 작성
- 2. 전체 구조 이해
- 3. AWS S3 버킷 생성
- 4. S3 외부 접근 허용
- 5. IAM 계정 생성
- 6. IAM 그룹 생성
- 7. IAM 사용자 생성
- 8. Access Key 발급
- 9. Spring Boot 의존성 추가
- 10. application.properties 설정
- 11. 보안상 더 좋은 방법
- 12. Config 패키지 생성
- 13. S3Config 작성
- 14. AmazonS3 Bean 등록
- 15. 코드 분석
- 16. 왜 Bean으로 등록할까?
- 17. 이후 서비스에서 사용하는 방식
- 18. 실무에서 매우 중요한 보안 포인트
- 19. 추천 보안 전략
- 20. 지금 단계에서 중요한 핵심
- 21. 다음 단계
- 정리
Spring Boot + AWS S3 연동 : CKEditor 이미지 저장 환경 구성하기
이번 글에서는 CKEditor 5에서 업로드한 이미지를 AWS S3에 저장하기 위해 Spring Boot와 AWS S3를 연동하는 과정을 정리한다.
이번 단계에서는:
- AWS S3 버킷 생성
- IAM 계정 생성
- Access Key 발급
- Spring Boot 설정
- S3Config 작성
까지 진행한다.
즉:
Spring Boot가 AWS S3에 접근할 수 있는 환경을 구성하는 단계
이다.
1. 왜 S3를 사용할까?
기존 RDB(MySQL)의 한계
MySQL 같은 관계형 데이터베이스는:
- 문자열
- 숫자
- 게시글 데이터
저장에는 적합하다.
하지만:
이미지
동영상
대용량 파일
같은 바이너리 데이터 저장에는 비효율적이다.
AWS S3의 역할
AWS S3(Simple Storage Service)는:
파일 저장 전용 클라우드 스토리지
이다.
즉:
- 이미지 저장
- 동영상 저장
- 정적 파일 관리
에 최적화되어 있다.
2. 전체 구조 이해
최종적으로 구현될 구조는 다음과 같다.
CKEditor
↓
Spring Boot
↓
AWS S3
↓
이미지 URL 반환
↓
CKEditor 화면 출력
3. AWS S3 버킷 생성
AWS 콘솔 접속
AWS 콘솔에서:
S3
검색 후 이동
버킷 만들기
버킷 만들기(Create bucket)
클릭
버킷 이름 설정
예시:
my-ckeditor-image-bucket
주의사항:
- 전 세계 AWS 사용자와 이름이 겹치면 안됨
- 반드시 고유해야 함
리전 선택
예시:
ap-northeast-2
서울
4. S3 외부 접근 허용
기본적으로 S3는 외부 접근이 막혀 있다.
이미지를 웹에서 보여주려면:
읽기 권한(Public Read)
허용 필요
설정 방법
버킷 → 권한 → ACL
모든 사용자 읽기 허용
Everyone (public access)
→ Read
체크
권한 구조 이해
쓰기 권한
Spring Boot 서버만 가능
읽기 권한
브라우저 사용자 모두 가능
즉:
업로드는 서버만
조회는 모두 가능
구조
5. IAM 계정 생성
실무에서는 절대 Root 계정을 직접 사용하지 않는다.
따라서:
IAM 사용자
생성 필요
IAM이란?
AWS 권한 관리 서비스
역할
특정 계정에:
- S3만 접근 허용
- EC2만 접근 허용
등 세부 권한 부여 가능
6. IAM 그룹 생성
IAM → 그룹 생성
예시:
s3-group
권한 추가
AmazonS3FullAccess
권한 추가
7. IAM 사용자 생성
IAM → 사용자 생성
예시:
s3-user
그룹 연결
생성한:
s3-group
추가
8. Access Key 발급
사용자 생성 후:
보안 자격 증명
탭 이동
액세스 키 생성
생성하면:
Access Key
Secret Key
발급됨
매우 중요
이 키는:
생성 시 단 한번만 확인 가능
하다.
반드시 저장해야 한다.
절대 주의
절대:
- GitHub 업로드 금지
- 블로그 공개 금지
- 코드 하드코딩 금지
9. Spring Boot 의존성 추가
build.gradle
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
추가
Gradle Refresh
반드시 동기화 진행
10. application.properties 설정
변수 등록
cloud.aws.credentials.accessKey=발급받은AccessKey
cloud.aws.credentials.secretKey=발급받은SecretKey
cloud.aws.region.static=ap-northeast-2
cloud.aws.s3.bucket=my-ckeditor-image-bucket
변수 의미
| 변수 | 설명 |
|---|---|
| accessKey | IAM 액세스 키 |
| secretKey | IAM 시크릿 키 |
| region | S3 리전 |
| bucket | 버킷 이름 |
11. 보안상 더 좋은 방법
실무에서는:
application.properties
직접 입력보다:
- 환경 변수
- AWS Secret Manager
- Parameter Store
사용 권장
12. Config 패키지 생성
프로젝트 구조 예시:
config
└── S3Config.java
13. S3Config 작성
기본 구조
@Configuration
public class S3Config {
}
@Value로 변수 가져오기
@Value("${cloud.aws.credentials.accessKey}")
private String accessKey;
@Value("${cloud.aws.credentials.secretKey}")
private String secretKey;
@Value("${cloud.aws.region.static}")
private String region;
14. AmazonS3 Bean 등록
핵심 코드
@Bean
public AmazonS3 amazonS3Client() {
BasicAWSCredentials credentials =
new BasicAWSCredentials(accessKey, secretKey);
return AmazonS3ClientBuilder
.standard()
.withRegion(region)
.withCredentials(
new AWSStaticCredentialsProvider(credentials)
)
.build();
}
15. 코드 분석
BasicAWSCredentials
new BasicAWSCredentials(accessKey, secretKey)
AWS 로그인 정보 생성
withRegion()
.withRegion(region)
서울 리전 연결
withCredentials()
.withCredentials(...)
IAM 인증 정보 등록
build()
최종적으로:
AmazonS3 객체 생성
16. 왜 Bean으로 등록할까?
Bean 등록하면:
@Autowired
private AmazonS3 amazonS3;
형태로 어디서든 사용 가능
즉:
- 업로드
- 삭제
- 파일 조회
가능
17. 이후 서비스에서 사용하는 방식
예시:
amazonS3.putObject(...)
이미지 업로드
amazonS3.deleteObject(...)
이미지 삭제
18. 실무에서 매우 중요한 보안 포인트
절대 공개하면 안되는 것
Access Key
Secret Key
위험한 상황
키 유출 시:
- S3 삭제
- 과금 폭탄
- 서버 침해
가능
19. 추천 보안 전략
실무에서는:
- IAM 최소 권한 원칙
- S3 특정 버킷만 허용
- EC2 Role 사용
- 환경 변수 분리
권장
20. 지금 단계에서 중요한 핵심
이번 단계는 단순 설정이 아니다.
핵심은:
Spring Boot ↔ AWS 인증 연결
구조를 이해하는 것이다.
21. 다음 단계
다음 단계에서는:
- MultipartFile 받기
- S3 업로드
- 이미지 URL 반환
- CKEditor 자동 삽입
구현 예정
정리
이번 글의 핵심은 다음이다.
CKEditor 이미지 업로드를 위해서는 Spring Boot가 먼저 AWS S3와 인증 연결되어야 한다
핵심 요약
- S3는 파일 저장 전용 서비스
- IAM 사용자 생성 필요
- Access Key 발급 필요
- application.properties 설정
- AmazonS3 Bean 등록
- 이후 업로드/삭제 기능 구현 가능