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

Day 31 (12/1) - Spring Boot 전환 및 React Router 동적 라우팅 실습

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

1. Spring Boot 프로젝트 환경 설정 (오전)

Lombok 설치 및 STS 연동

  • 설치 경로: D:\Dev\lib 등의 경로에 lombok.jar 배치
  • 설정 방법: CMD에서 java -jar lombok.jar 실행 후 STS4 설치 경로 선택하여 설치
  • 목적: @Getter, @Setter, @ToString 등을 통해 반복적인 자바 코드(Boilerplate) 제거

Spring Starter Project 생성 (Ver 3.5.8)

  • Java Version: 21
  • 주요 의존성(Dependencies):
    • Spring Web: 웹 개발을 위한 기본 라이브러리 (내장 톰캣 포함)
    • Spring Boot DevTools: 코드 수정 시 자동 리로딩 지원
    • Lombok: 어노테이션 기반 코드 자동 생성
    • MySQL Driver: DB 연동을 위한 드라이버

JSP View Resolver 및 DB 설정 (application.properties)

# MySQL 연결 설정
spring.datasource.url=jdbc:mysql://localhost:3306/edudb?serverTimezone=Asia/Seoul
spring.datasource.username=jdbctest
spring.datasource.password=1234

# JSP 뷰 경로 설정
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

2. Spring MVC 핵심 개념 및 흐름

  • DispatcherServlet: 모든 요청을 중앙에서 관리하는 프론트 컨트롤러 (배달 앱의 서버 역할)
  • IoC (제어의 역전): 객체 생성 및 관리 권한을 개발자가 아닌 스프링 컨테이너가 가짐
  • DI (의존성 주입): @Autowired를 통해 필요한 객체를 외부에서 주입받는 방식
  • Bean: 스프링 컨테이너가 관리하는 자바 객체

3. Servlet → Spring MVC 마이그레이션 실무

주요 변경 사항

구분 기존 Servlet 방식 Spring MVC 방식
매핑 ActionFactory + command 파라미터 @GetMapping, @PostMapping 어노테이션
데이터 바인딩 request.getParameter() 일일이 수행 메서드 파라미터에 VO 선언 시 자동 매핑
화면 이동 RequestDispatcher.forward() 문자열(뷰 이름) 반환 또는 redirect: 사용

게시글 등록 예시 (Refactoring)

@PostMapping("/board_write")
public String boardWrite(BoardVO vo) {
    // 1. VO 객체로 데이터 자동 바인딩 (name 속성값 일치 필수)
    boardService.insertBoard(vo); 
    // 2. 등록 후 목록으로 이동 (새로운 GET 요청 유도)
    return "redirect:board_list"; 
}

4. React Router 동적 라우팅 (오후)

기본 설정

  • 설치: npm i react-router-dom
  • 적용: App.jsx를 BrowserRouter로 감싸서 SPA 환경 구축

동적 경로 처리 방식 비교

  1. URL Parameter (Path Variable)
    • 형태: /diary/:id
    • 용도: 특정 데이터 조회 (상세 페이지 등)
    • 가져오기: useParams() 훅 사용
  2. Query String
    • 형태: /search?q=keyword&sort=latest
    • 용도: 검색 필터링, 정렬 옵션 전달
    • 가져오기: useSearchParams() 훅 사용

❓ 질문 & 추가 조사 내용 (Q&A)

Q1. redirect: vs '뷰 이름 리턴'의 차이

  • 뷰 이름 리턴 ("board_list"):
    • DispatcherServlet이 해당 JSP를 찾아 화면을 그림 (Forward 방식)
    • 브라우저의 URL 주소는 변하지 않음
  • redirect:board_list:
    • 브라우저에게 해당 주소로 다시 요청하라는 응답을 보냄 (302 Redirect)
    • URL 주소가 변경됨. 게시글 등록 후 새로고침 시 중복 등록을 방지하기 위해 필수 사용

Q2. @RequestParam vs VO(Command Object)

  • @RequestParam: 단일 파라미터(id, page 등)를 받을 때 유용하며, 필수 여부나 기본값 설정 가능
  • VO 바인딩: 회원가입, 게시글 작성 등 전송되는 필드가 많을 때 객체로 한 번에 담아 가독성 향상

Q3. React에서 파라미터 추출 실전 코드

import { useParams, useSearchParams } from 'react-router-dom';

const Diary = () => {
    // 1. URL 파라미터 가져오기 (/diary/1)
    const { id } = useParams();

    // 2. 쿼리 스트링 가져오기 (/diary?sort=latest)
    const [searchParams, setSearchParams] = useSearchParams();
    const sort = searchParams.get("sort");

    return <div>일기 번호: {id}, 정렬: {sort}</div>;
}