스프링 부트 CKEditor
스프링 부트 CKEditor 8 - 글작성 - DTO - 컨트롤러
https://youtu.be/-5fC7HHUF6Q?si=niTgi-s5jAkBBjkb
스프링 부트 CKEditor 8 - 글작성 - DTO - 컨트롤러
- 스프링 부트 CKEditor 8 - 글작성 - DTO - 컨트롤러
Spring Boot + CKEditor 5 : 작성한 글을 Controller에서 DTO로 받기
이번 글에서는 CKEditor로 작성한 데이터를 Spring Boot 서버에서 실제로 받아오는 과정을 정리한다.
여기서부터는 단순 UI가 아니라 👉 “Frontend → Backend 데이터 흐름”이 시작된다.
핵심은 한 줄이다.
폼의 name 값과 DTO 변수명을 맞추면 Spring이 자동으로 데이터를 매핑해준다
1. 전체 데이터 흐름 이해
먼저 전체 흐름을 이해해야 한다.
사용자 입력 → Form → POST 요청 → Controller → DTO
조금 더 확장하면:
CKEditor → Form → Controller → Service → DB
👉 이번 글에서는 Controller까지 다룬다.
2. Form → 서버로 데이터 보내기
이미 작성한 HTML Form을 다시 보면:
<form action="/save" method="post">
<input type="text" name="title">
<textarea id="content" name="content"></textarea>
<button type="submit">등록</button>
</form>
중요한 포인트
name="title"
name="content"
👉 이 name 값이 서버에서 변수명이 된다.
3. DTO 클래스 생성
이제 데이터를 받을 객체를 만든다.
1) DTO 패키지 생성
src/main/java
└─ dto
2) DTO 클래스 생성
import lombok.Data;
@Data
public class SaveDTO {
private String title;
private String content;
}
핵심 포인트
👉 변수명 = form의 name 값
title ↔ name="title"
content ↔ name="content"
👉 이게 다르면 매핑 실패
Lombok 사용 이유
@Data
👉 자동 생성:
- getter
- setter
- toString
- 생성자
👉 특히 중요한 건 setter
Spring은 setter를 통해 데이터를 넣는다
4. Controller에서 DTO 받기
이제 실제로 데이터를 받아보자.
Controller 작성
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class SaveController {
@PostMapping("/save")
public String save(SaveDTO dto) {
System.out.println(dto.getTitle());
System.out.println(dto.getContent());
return "redirect:/";
}
}
5. 동작 원리 (중요)
Spring 내부에서 일어나는 일:
1단계: 요청 수신
POST /save
2단계: 파라미터 분석
title=값
content=값
3단계: DTO 객체 생성
SaveDTO dto = new SaveDTO();
4단계: setter 호출
dto.setTitle("값");
dto.setContent("값");
👉 이 모든 과정이 자동으로 이루어진다.
6. 실행 및 테스트
1) 서버 실행
2) 에디터 페이지 이동
http://localhost:8080/editor
3) 데이터 입력
- 제목 입력
- 내용 작성 (CKEditor)
4) 등록 버튼 클릭
5) 결과 확인
콘솔 출력:
제목값
내용값 (HTML 형태)
👉 성공
7. CKEditor 데이터 특징
여기서 중요한 포인트 하나.
content 값 형태
<p>안녕하세요</p>
<strong>굵은 글씨</strong>
👉 HTML 문자열로 넘어온다
의미
- 단순 텍스트가 아님
- HTML 구조 포함
👉 이후 단계에서:
- DB 저장
- HTML 렌더링
이 연결된다
8. 자주 하는 실수
1) name 불일치
name="content"
private String contents; ❌
👉 매핑 실패
2) setter 없음
👉 Lombok 없거나 setter 누락 시 오류
3) @PostMapping 경로 불일치
action="/save"
@PostMapping("/save") // 반드시 동일
4) redirect 누락
👉 페이지 재요청 문제 발생 가능
9. 지금 단계에서 중요한 것
이 단계는 단순 데이터 수신이 아니다.
핵심 이해 포인트
- HTTP 요청 → 객체 매핑
- DTO = 데이터 전달 객체
- Spring 자동 바인딩
정리
이번 글의 핵심은 한 줄이다.
Spring Boot는 Form 데이터를 DTO로 자동 변환해준다
핵심 요약
- name 값 = DTO 변수명
- DTO는 setter 필요
- Controller에서 객체로 바로 받는다
- CKEditor 데이터는 HTML 형태