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

Day 33 (12/3) – Spring Web MVC 컨트롤러 활용 및 MyBatis 연동 실습

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

1. Spring MVC 컨트롤러 메서드 반환 타입

컨트롤러에서 요청을 처리한 후 응답을 보내는 방식에 따른 세 가지 주요 반환 타입 정리

  • void: 요청 URL을 기반으로 JSP 파일을 자동 매핑함 (예: /board/list 요청 시 list.jsp 호출)
  • String: 리턴값으로 논리적인 뷰 이름을 지정하여 ViewResolver가 해당 경로의 JSP를 호출하는 방식
  • redirect: 특정 URL을 다시 호출하도록 브라우저에 명령함 (JSP 파일로 바로 가는 것이 아닌 URL 재요청)

2. Model 데이터 전달 방식 비교 (PRG 패턴 핵심)

데이터를 뷰로 넘길 때 사용 목적과 보안에 따라 addAttribute와 addFlashAttribute를 구분하여 사용함

구분 addAttribute addFlashAttribute
데이터 위치 URL 파라미터 (Query String) 세션(Session)에 임시 저장
URL 노출 노출됨 (?name=serena) 노출되지 않음
유지 기간 페이지 새로고침 시에도 유지 리다이렉트 후 1회 사용 시 즉시 소멸
주요 용도 일반적인 데이터 검색 및 조회 PRG 패턴 (등록/수정 후 메시지 전달)

💡 PRG(Post-Redirect-Get) 패턴이란?

사용자가 폼 데이터를 제출(Post)한 후, 결과 화면으로 리다이렉트(Redirect)하여 최종적으로 조회(Get)하게 만드는 패턴임. 새로고침 시 발생하는 데이터 중복 등록 사고를 방지하는 데 필수적인 전략임


3. MyBatis 프레임워크 연동 및 설정

SQL 쿼리와 자바 코드를 분리하여 생산성을 높이는 SQL 매퍼(Mapper) 라이브러리 설정 과정

pom.xml 주요 의존성 추가

  • MyBatis / MyBatis Spring: 핵심 매퍼 라이브러리
  • Spring JDBC / TX: 데이터베이스 연결 및 트랜잭션 관리 지원
  • HikariCP: 고성능 커넥션 풀링 시스템

SQL 매핑 방식 (두 가지)

  1. 애노테이션 방식: 인터페이스 메서드 위에 @Select, @Insert, @Update, @Delete를 직접 작성 (간단한 쿼리에 유리)
  2. XML 매퍼 방식: 별도의 .xml 파일에 SQL을 작성하고 인터페이스 메서드 ID와 매칭 (복잡한 쿼리 및 동적 SQL 관리에 유리)

4. 실습 환경 설정 및 메모

  • Tomcat 경로 최적화: 서버 설정의 Web Modules에서 컨텍스트 패스(Path)를 /로 수정하여 URL 간소화
  • 자동 매핑 조건: BoardVO의 변수명과 JSP 폼 요소의 name 속성값이 일치해야 데이터가 자동으로 바인딩됨
  • MyBatis 연동 확인: TimeMapper 인터페이스를 통해 DB 시간 조회 테스트 및 JUnit을 활용한 단위 테스트 수행

✏️ 오늘의 핵심 요약

  • 컨트롤러의 void 타입은 URL과 JSP 파일명을 일치시킬 때 사용함
  • addFlashAttribute는 리다이렉트 시 보안성과 깔끔한 URL을 위해 사용하며 일회성임
  • MyBatis는 애노테이션과 XML 방식 중 프로젝트 규모에 맞는 적절한 방식을 선택함
  • 성공적인 마이그레이션을 위해 Maven의 pom.xml 의존성 버전 관리와 DB 계정 권한 확인이 필수적임