최신 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단계 과정을 이해하는 것이 중요함
- Client Request: 브라우저에서 서버로 HTTP 요청 전송
- DispatcherServlet 수신: 모든 요청을 중앙에서 받는 프론트 컨트롤러 역할
- HandlerMapping 조회: 요청 URL을 처리할 적절한 컨트롤러 검색
- HandlerAdapter 호출: 매핑된 컨트롤러의 메서드를 실행하기 위한 어댑터 연결
- Controller & Service: 비즈니스 로직 수행 및 모델 데이터 생성
- ModelAndView 반환: 처리 결과와 뷰 이름을 DispatcherServlet에 전달
- ViewResolver: 논리적인 뷰 이름을 실제 경로(JSP 등)로 변환
- View 렌더링 & 응답: 최종 결과물을 클라이언트에게 전송
💉 의존성 주입(DI) 방식 비교
스프링 컨테이너가 객체를 주입해주는 3가지 대표적인 방식
- 생성자 주입 (Constructor Injection):
- 권장 방식. 객체 생성 시점에 의존성을 주입하여 불변성(Immutable) 확보 및 테스트 용이
- Setter 주입:
- 선택적인 의존성이 필요한 경우 사용하나, 런타임에 의존성이 바뀔 위험 존재
- 필드 주입 (@Autowired):
- 코드가 간결하나 외부에서 변경이 불가능하며 프레임워크에 강하게 결합됨
⚛️ React: 재사용 가능한 컴포넌트 설계
재사용성이 높은 컴포넌트를 만드는 것은 유지보수 효율을 결정짓는 핵심 역량임
- Button 컴포넌트 실습:
- 특정 페이지에서만 쓰는 버튼이 아닌, props를 통해 색상, 크기, 클릭 이벤트 등을 전달받는 범용 컴포넌트 구현
- 컴포넌트가 커질수록 children을 활용하여 유연한 구조 설계 권장
✏️ 개인 메모 및 향후 계획
- 포트폴리오 전략: Spring Boot뿐만 아니라 Legacy 프로젝트 경험을 포함하여 기술적 깊이 어필 예정 (약 5일간 진행)
- 도구 활용: 현재 STS(Legacy) 사용 중이나, 추후 Spring Boot 파트 진입 시 IntelliJ로 전환 계획
- 학습 방향: 자바 기초(OOP, 컬렉션 프레임워크)를 탄탄히 다지며 스프링의 추상화 개념 이해하기
'⏳ Time Log > 1. One Day (Daily · TIL)' 카테고리의 다른 글
| Day 34 (12/4) – Spring Legacy: 웹 애플리케이션 개발 (Part 2) (0) | 2026.02.20 |
|---|---|
| Day 33 (12/3) – Spring Web MVC 컨트롤러 활용 및 MyBatis 연동 실습 (0) | 2026.02.20 |
| Day 31 (12/1) - Spring Boot 전환 및 React Router 동적 라우팅 실습 (0) | 2026.02.20 |
| Day 30 (11/28) - [React] Todo 앱 만들기 핵심 요약 및 트러블슈팅 (0) | 2026.02.20 |
| Day 29 (11/27) - 파이썬 기초 문법 및 리액트 라이프사이클 (0) | 2026.02.20 |