스프링 부트 CKEditor
스프링 부트 CKEditor 11 - 컨트롤러 - 서비스 - DB 코드 작성
카테고리 : 개발자 유미
https://youtu.be/lSoMfTgQI1E?si=nhUbWEGxo7hx7dW2
스프링 부트 CKEditor 11 - 컨트롤러 - 서비스 - DB 코드 작성
- 스프링 부트 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의 절반이 끝났다.
다음 작업
- 게시글 목록 조회
- 상세 페이지 구현
- 삭제 기능
- 수정 기능
정리
이번 글의 핵심은 한 줄이다.
Spring Boot에서 데이터 저장은 “계층을 나누고 흐름을 연결하는 작업”이다
핵심 요약
- Controller → Service → Repository 구조
- DTO → Entity 변환 필수
- JPA save()로 DB 저장
- 로직은 Service에 작성
다음 글 흐름
- 게시글 목록 조회
- DB 데이터 화면 출력