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

Day 32 (12/2) – Spring Legacy 프로젝트 환경 구축 (Day 1)

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

최신 Spring 6 버전은 Jakarta EE 기반이므로 Tomcat 10 이상의 서버 환경이 필수임

1. 개발 환경 및 서버 설정

  • WAS: Apache Tomcat 10.1.49 설치 (Jakarta EE 10 지원)
  • IDE 설정: Eclipse/STS에서 Server Runtime Environment 추가
  • Lombok: IDE 설치 경로에 java -jar lombok.jar 명령어로 인스톨 필수
  • 프로젝트 생성: Dynamic Web Project 생성 후 Generate web.xml 체크 → Maven Project로 전환

2. 의존성(Dependency) 및 DB 설정

  • pom.xml 주요 의존성:
    • Spring Framework 6.x 관련 라이브러리
    • HikariCP (고성능 커넥션 풀)
    • mysql-connector-j (MySQL 드라이버)
    • JUnit Jupiter API (테스트 환경)
    • Log4j2 (로깅 시스템)
  • Database 세팅:
SQL
 
CREATE DATABASE springdb;
CREATE USER 'springdbuser'@'%' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON springdb.* TO 'springdbuser'@'%';

🔄 Spring MVC 요청 처리 흐름 (Request Lifecycle)

스프링의 핵심인 DispatcherServlet을 중심으로 요청이 처리되는 8단계 과정을 이해하는 것이 중요함

  1. Client Request: 브라우저에서 서버로 HTTP 요청 전송
  2. DispatcherServlet 수신: 모든 요청을 중앙에서 받는 프론트 컨트롤러 역할
  3. HandlerMapping 조회: 요청 URL을 처리할 적절한 컨트롤러 검색
  4. HandlerAdapter 호출: 매핑된 컨트롤러의 메서드를 실행하기 위한 어댑터 연결
  5. Controller & Service: 비즈니스 로직 수행 및 모델 데이터 생성
  6. ModelAndView 반환: 처리 결과와 뷰 이름을 DispatcherServlet에 전달
  7. ViewResolver: 논리적인 뷰 이름을 실제 경로(JSP 등)로 변환
  8. View 렌더링 & 응답: 최종 결과물을 클라이언트에게 전송

💉 의존성 주입(DI) 방식 비교

스프링 컨테이너가 객체를 주입해주는 3가지 대표적인 방식

  • 생성자 주입 (Constructor Injection):
    • 권장 방식. 객체 생성 시점에 의존성을 주입하여 불변성(Immutable) 확보 및 테스트 용이
  • Setter 주입:
    • 선택적인 의존성이 필요한 경우 사용하나, 런타임에 의존성이 바뀔 위험 존재
  • 필드 주입 (@Autowired):
    • 코드가 간결하나 외부에서 변경이 불가능하며 프레임워크에 강하게 결합됨

⚛️ React: 재사용 가능한 컴포넌트 설계

재사용성이 높은 컴포넌트를 만드는 것은 유지보수 효율을 결정짓는 핵심 역량임

  • Button 컴포넌트 실습:
    • 특정 페이지에서만 쓰는 버튼이 아닌, props를 통해 색상, 크기, 클릭 이벤트 등을 전달받는 범용 컴포넌트 구현
    • 컴포넌트가 커질수록 children을 활용하여 유연한 구조 설계 권장

✏️ 개인 메모 및 향후 계획

  • 포트폴리오 전략: Spring Boot뿐만 아니라 Legacy 프로젝트 경험을 포함하여 기술적 깊이 어필 예정 (약 5일간 진행)
  • 도구 활용: 현재 STS(Legacy) 사용 중이나, 추후 Spring Boot 파트 진입 시 IntelliJ로 전환 계획
  • 학습 방향: 자바 기초(OOP, 컬렉션 프레임워크)를 탄탄히 다지며 스프링의 추상화 개념 이해하기