1. Spring CRUD 프로젝트 표준 진행 순서
현업 실무에서 권장하는 데이터베이스 중심의 개발 흐름입니다.
- MySQL 테이블 생성: 요구사항에 맞는 스키마 설계 (simple_todo)
- DTO/VO 클래스 설계: 데이터 이동을 위한 객체 작성 (Lombok 활용)
- Mapper 인터페이스 & XML 작성: SQL 쿼리와 자바 메서드 매핑
- 단계별 테스트 수행: 단위 테스트 → 통합 테스트로 검증 확장
- Service 계층 구현: 비즈니스 로직 작성
- Controller & View 연동: 사용자 요청 처리 및 화면 구성
2. 데이터 모델 및 매퍼 설계
🗄️ MySQL 테이블 구조 (simple_todo)
CREATE TABLE simple_todo (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
description VARCHAR(500),
done BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
📦 SimpleTodo DTO 클래스
LocalDateTime을 사용하여 현대적인 자바 날짜 타입을 적용하고, Lombok 어노테이션으로 가독성을 높입니다.
@Getter @Setter @Builder @ToString
@NoArgsConstructor @AllArgsConstructor
public class SimpleTodo {
private Integer id;
private String title;
private String description;
private boolean done;
private LocalDateTime createdAt;
}
🧪 실무 표준 테스트 피라미드 및 전략
테스트는 오류를 조기에 발견하고 코드 품질을 보장하는 핵심 과정입니다.
1️⃣ 테스트 계층 구조
| 테스트 종류 | 방식 | 특징 |
| 단위 테스트 (Unit) | 순수 JUnit | DTO, Service 로직 검증. 스프링 구동 없이 매우 빠름 (1ms) |
| 통합 테스트 (Integration) | Spring + DB | Mapper, Repository 등 실제 DB 연동 검증. 다소 느림 |
| E2E 테스트 | Postman / UI | 전체 기능이 브라우저에서 끝까지 동작하는지 검증 |
2️⃣ Given-When-Then 패턴
테스트 코드를 읽기 쉽게 만드는 표준 서술 방식입니다.
- GIVEN: 테스트를 위한 환경 및 데이터 준비
- WHEN: 특정 메서드나 기능을 실행
- THEN: 예상한 결과가 나왔는지 검증 (assertEquals, assertNotNull 등)
3️⃣ @Transactional의 역할
테스트 코드에 이 어노테이션을 붙이면, 테스트가 끝난 후 데이터를 자동으로 **롤백(Rollback)**합니다. 덕분에 테스트 간 데이터 간섭이 발생하지 않고 DB를 깨끗하게 유지할 수 있습니다.
💡 MyBatis & Spring 핵심 개념 정리
@Mapper와 @Autowired
- @Mapper: 이 인터페이스가 MyBatis 매퍼임을 스프링에 알립니다. root-context.xml의 스캔 설정을 통해 자동으로 구현체가 생성됩니다.
- @Autowired: 스프링 컨테이너가 관리하는 빈(Bean) 중 해당 타입의 객체를 찾아 자동으로 주입해 줍니다.
LocalDateTime vs Date
- Date: 구버전 Java의 유산으로, 가급적 사용을 지양합니다.
- LocalDateTime: 현대 Java(8+)의 표준으로, 훨씬 유연하고 강력한 날짜/시간 처리를 지원합니다.
⚛️ React: 효율적인 수정 기능 구현
- 범위: 교재 p.469 ~
- 핵심: 기존 데이터를 폼에 불러오고(Pre-fill), 변경된 부분만 상태(State)에 반영하여 서버로 전송하는 패턴 학습. 사용자 경험을 높이기 위한 편리한 UI/UX 로직 구현
✏️ 오늘의 메모 및 향후 일정
- sp3 실습: 주어진 SQL 테이블을 기반으로 CRUD 전 과정을 스스로 구현하며 독립적인 개발 역량 강화
- TDD 사고방식: "테스트를 먼저 작성하고 구현한다"는 흐름에 익숙해지는 것이 이번 프로젝트의 주요 목표
- 향후 계획: 리액트 감정 일기장 프로젝트에서 수정 기능 완성 및 전체 배포 프로세스 점검
'⏳ Time Log > 1. One Day (Daily · TIL)' 카테고리의 다른 글
| Day 38 (12/10) – Spring 페이징 처리 및 동적 쿼리 (0) | 2026.02.20 |
|---|---|
| Day 37 (12/9) – React 핵심 기초 문법 (0) | 2026.02.20 |
| Day 35 (12/5) – Apache Maven 표준 디렉터리 구조 (0) | 2026.02.20 |
| Day 34 (12/4) – Spring Legacy: 웹 애플리케이션 개발 (Part 2) (0) | 2026.02.20 |
| Day 33 (12/3) – Spring Web MVC 컨트롤러 활용 및 MyBatis 연동 실습 (0) | 2026.02.20 |