⏳ Time Log/1. One Day (Daily · TIL)

Day 36 (12/8) – 스프링 레거시 CRUD 실습: Todo 프로젝트 및 테스트 전략

this.Serena 2026. 2. 20. 12:22

1. Spring CRUD 프로젝트 표준 진행 순서

현업 실무에서 권장하는 데이터베이스 중심의 개발 흐름입니다.

  1. MySQL 테이블 생성: 요구사항에 맞는 스키마 설계 (simple_todo)
  2. DTO/VO 클래스 설계: 데이터 이동을 위한 객체 작성 (Lombok 활용)
  3. Mapper 인터페이스 & XML 작성: SQL 쿼리와 자바 메서드 매핑
  4. 단계별 테스트 수행: 단위 테스트 → 통합 테스트로 검증 확장
  5. Service 계층 구현: 비즈니스 로직 작성
  6. 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 사고방식: "테스트를 먼저 작성하고 구현한다"는 흐름에 익숙해지는 것이 이번 프로젝트의 주요 목표
  • 향후 계획: 리액트 감정 일기장 프로젝트에서 수정 기능 완성 및 전체 배포 프로세스 점검