스프링 부트 CKEditor

스프링 부트 CKEditor 11 - 컨트롤러 - 서비스 - DB 코드 작성

https://youtu.be/lSoMfTgQI1E?si=nhUbWEGxo7hx7dW2

스프링 부트 CKEditor 11 - 컨트롤러 - 서비스 - DB 코드 작성


Spring Boot + CKEditor 5 : 게시글 DB 저장 로직 (Controller → Service → Repository)

이번 글에서는 CKEditor로 작성한 데이터를 실제로 DB에 저장하는 핵심 로직을 완성한다.

이 단계부터는 단순 기능 구현이 아니라 👉 “계층 구조를 이해하는 구간”이다.

핵심은 한 줄이다.

“Controller → Service → Entity → Repository → DB” 흐름을 만든다


1. 전체 데이터 흐름 다시 정리

지금까지 만든 구조를 하나로 연결하면 이렇게 된다.

CKEditor → Form → DTO → Controller → Service → Entity → DB

👉 이번 글은 Controller → Service → DB 저장까지 완성


2. 핵심 개념 먼저 이해하기

이 로직의 본질은 “데이터 변환”이다.


왜 DTO → Entity 변환이 필요할까?

  • DTO → 사용자 입력 데이터
  • Entity → DB 저장용 객체

👉 역할이 다르다


즉,

DTO (입력 데이터) → Entity (DB 저장 구조)

3. Controller에서 데이터 받기 (복습)

@PostMapping("/save")
public String save(SaveDTO dto) {

    contentsService.saveContents(dto);

    return "redirect:/";
}

역할

  • 요청 받기
  • DTO 생성
  • Service 호출

👉 Controller는 로직을 가지지 않는다


4. Service 계층 생성

이제 핵심 로직을 처리하는 Service를 만든다.


1) Service 클래스 생성

import org.springframework.stereotype.Service;

@Service
public class ContentsService {
}

👉 @Service 의미:

  • 비즈니스 로직 담당
  • Spring Bean 등록

5. Repository 연결

Service에서 DB에 접근하려면 Repository가 필요하다.


생성자 주입 방식 (권장)

private final ContentRepository contentRepository;

public ContentsService(ContentRepository contentRepository) {
    this.contentRepository = contentRepository;
}

👉 핵심

  • @Autowired 없이도 가능
  • 생성자 주입 = 가장 안전한 방식

6. 저장 로직 구현

이제 진짜 핵심이다.


Service 메소드

public void saveContents(SaveDTO dto) {

    ContentEntity entity = new ContentEntity();

    entity.setTitle(dto.getTitle());
    entity.setContent(dto.getContent());

    contentRepository.save(entity);
}

7. 내부 동작 흐름 (매우 중요)

이 코드 한 줄:

contentRepository.save(entity);

👉 실제로는 다음이 일어난다:


1단계: Entity 생성

ContentEntity entity = new ContentEntity();

2단계: DTO → Entity 변환

entity.setTitle(dto.getTitle());
entity.setContent(dto.getContent());

3단계: JPA 저장

INSERT INTO content_entity ...

👉 SQL 없이 DB 저장 완료


8. 구조를 그림으로 보면

Controller
   ↓
Service (비즈니스 로직)
   ↓
Repository (DB 접근)
   ↓
Database

👉 이 구조를 지키는 것이 핵심이다.


9. 실행 및 테스트


1) 서버 실행


2) 에디터 페이지 접속

http://localhost:8080/editor

3) 데이터 입력

  • 제목: 안녕하세요
  • 내용: 내용입니다

4) 등록 버튼 클릭


5) DB 확인

👉 결과:

id | title     | content
1  | 안녕하세요 | <p>내용입니다</p>

👉 성공


10. 중요한 실무 포인트


1. Controller는 얇게

❌ 나쁜 코드

@PostMapping("/save")
public void save(SaveDTO dto) {
    // DB 저장 로직 직접 작성 ❌
}

2. Service에 로직 집중

👉 유지보수 / 테스트 용이


3. DTO ≠ Entity

👉 절대 섞지 않는다


4. set 사용 주의

현재 코드:

entity.setTitle(...)

👉 실무 권장:

new ContentEntity(title, content)

👉 불변 객체 유지


11. 지금 단계에서 가장 중요한 것

이 단계는 단순 저장이 아니다.


핵심 이해 포인트

  • 계층 구조 분리
  • 데이터 변환 흐름
  • JPA 자동 처리

12. 다음 단계

이제 CRUD의 절반이 끝났다.


다음 작업

  1. 게시글 목록 조회
  2. 상세 페이지 구현
  3. 삭제 기능
  4. 수정 기능

정리

이번 글의 핵심은 한 줄이다.

Spring Boot에서 데이터 저장은 “계층을 나누고 흐름을 연결하는 작업”이다


핵심 요약

  • Controller → Service → Repository 구조
  • DTO → Entity 변환 필수
  • JPA save()로 DB 저장
  • 로직은 Service에 작성

다음 글 흐름

  • 게시글 목록 조회
  • DB 데이터 화면 출력


© 2020. All rights reserved.

SIKSIK