목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

      ⏳ Time Log/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, 컬렉션 프레임워크)를 탄탄히 다지며 스프링의 추상화 개념 이해하기