10주차 회고록
1) 10주차를 시작하며

이번 주는 데이터 접근 전반을 묶어서 정리했다. MyBatis 설정과 XML/애너테이션 기반 동적 쿼리, JPA의 영속성 컨텍스트와 매핑, 연관관계 매핑, JPQL, 네이티브 쿼리, 스프링 데이터 JPA까지 범위를 넓혔다. 백엔드 팀(ADHD)은 ERD를 마무리했고, 피우다 프로젝트는 입력 폼 기본 골격과 사진 EXIF에서 위도·경도를 추출해 지도 API에 표시하는 기능을 완료했다.
2) 학습 요약
2-1) Spring MyBatis
- SqlSessionFactory, SqlSession 생명주기와 트랜잭션 연동
- XML 설정: properties, settings(mapUnderscoreToCamelCase), typeAliases, mappers
- 동적 SQL 태그: if, choose/when/otherwise, trim/where/set, foreach, bind
- 결과 매핑: resultMap, association/collection, typeHandler 활용
- 1차/2차 캐시 동작과 주의점(트랜잭션 경계, 파라미터 의존 쿼리)
2-2) Persistence Context
- 1차 캐시, 동일성 보장, 변경 감지, flush 타이밍
- 준영속 상태 전환(detach/clear/close)와 병합(merge)
- 트랜잭션 경계 안에서 엔티티 변경 → 자동 update 반영
2-3) Mapping
- @Entity, @Table, @Id, @GeneratedValue, @Column 기본 매핑
- 임베디드 타입(@Embeddable/@Embedded)과 값 타입 컬렉션
- 기본 키 전략 선택과 식별자 설계 규칙
2-4) Association Mapping
- 단방향/양방향, 연관관계 주인과 mappedBy
- 지연 로딩 기본, 즉시 로딩 지양, fetch join으로 조회 최적화
- cascade, orphanRemoval, 연관관계 편의 메서드로 일관성 유지
2-5) JPQL
- TypedQuery/Query, 파라미터 바인딩(named/positional)
- 프로젝션: 엔티티/임베디드/스칼라/new DTO
- 페이징(setFirstResult/setMaxResults), 그룹 함수와 having
- 조인(inner/left/collection/세타), 서브쿼리(where/having), NamedQuery
2-6) Native Query
- createNativeQuery(엔티티/스칼라), 결과 매핑(@SqlResultSetMapping)
- @EntityResult/@FieldResult, @ColumnResult 조합
- @NamedNativeQuery로 정적 쿼리 관리, 컬럼 별칭과 매핑 일치 필수
2-7) 스프링 데이터 JPA
- Repository 계층 구조(CrudRepository/JpaRepository)
- 쿼리 메서드 규칙, @Query, 페이징/정렬(Pageable, Page)
- DTO 프로젝션, 컬렉션 페치 조인과 count 쿼리 분리 고려
3) 느낀 점
- MyBatis와 JPA 각각의 장단이 명확하다. 조회 최적화와 SQL 제어는 MyBatis가 편했고, 트랜잭션 경계에서 변경 감지로 일관되게 처리되는 건 JPA가 편했다.
- 연관관계 주인과 지연 로딩 기본 전략을 지키면 예측 가능한 쿼리 흐름이 된다.
- JPQL과 네이티브 쿼리를 함께 가져가되, DTO 전용 조회를 초기에 분리하면 화면 의존 SQL이 도메인에 섞이지 않는다.
- 사진 EXIF → 좌표 → 지도 표시는 흐름이 단순하지만 예외 케이스 처리가 중요했다.
- ERD를 먼저 확실히 하고 나니 API 정의와 작업 분배가 빠르게 진행됐다.
4) 다음 주 계획
-
백엔드 팀(ADHD)
- 내가 맡은 파트(알림 전반) 개발 착수하기
- 스프링 데이터 JPA 기반 Repository + 필요한 곳 MyBatis 조회 적용하며 두 개 동시에 쓰기
-
피우다 프로젝트
- 데이터 입력 폼에 DB 연동해서 완성시키기
- 로그인 기능과 병합하여 자연스러운 흐름 완성 시키기
- 프론트(Vue)와 백엔드 API 연동 테스트, 폼 검증 메시지 정리
실질적으로 다음주부터 개발 속도에 박차를 가해야 할 것 같다. 작업 단위를 더 잘게 나누고 우선순위를 명확히 두면서 밀어붙이겠다. 원래 계획으론 달마다 있는 PCCP 시험도 치고 싶었지만, 피우다 프로젝트가 끝나기 전까진 무리일 것 같다.