스프링 부트 CKEditor

스프링 부트 CKEditor 17 - AWS S3 생성과 연결 Config 작성

https://youtu.be/BqTXiqK7qDo?si=0sNroXX6VI6r1KYB

스프링 부트 CKEditor 17 - AWS S3 생성과 연결 Config 작성


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

변수 의미

변수설명
accessKeyIAM 액세스 키
secretKeyIAM 시크릿 키
regionS3 리전
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 등록
  • 이후 업로드/삭제 기능 구현 가능

© 2020. All rights reserved.

SIKSIK