| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- CLIP
- 에이전트
- RDBMS
- UMAP
- python 기초
- 데이터 시각화
- 소프트웨어 개발
- 트랜스포머
- ASR
- 알고리즘
- LangGraph
- 자연어처리
- 정보처리기사
- RNN
- CNN
- Transformer
- 객체지향
- SQL
- 캐글
- 딥러닝
- TTS
- 힙정렬
- 기초
- 머신러닝
- python기초
- 생성형 인공지능
- 데이터엔지니어
- Python
- 랭그래프
- dementional reduction
- Today
- Total
수달이네 기술 블로그
2. Spring으로 MVC패턴 구축하기1 본문
SpringBoot프레임워크의 주요 특징
POJO 기반: 순수 자바 객체를 사용하므로 기존 코드들을 재사용 가능하며, 테스트와 유지보수에 유리하다
DI 기반(Dependency Injection) : 의존성 주입 스프링의 핵심 기능이며 클래스들간의 의존성을 낮춰주고 코드 재사용성을 높인다
AOP(Aspect-Oriented Programming)지원: 관점 지향 프로그래밍 공통되고 반복되는 관심사 분리, 모듈화
트랜잭션관리 xml, 어노테이션으로 트랜잭션 쉽게 설정
편리한 MVC 구조: 자체적으로 MVC프레임워크를 제공하여 불필요한 코드 감소
WAS에 종속적이지 않음.
- 스프링 프레임워크를 사용한 프로젝트는 특정 WAS만 사용가능하지 않고, 다양한 서버에서 동작 가능
- WAS없이도 독립적 테스트가 가능하고, 테스트가 빠르고 쉽다.
- WAS를 실행하지 않고 독립적으로 테스트하는 방법
- 단위 테스트
IoC(Inversion of Control): 제어권의 역전
- 객체의 입장에서 사용할 다른 객체를 직접 생성하여 제어한다.
- 제어권의 역전은 이런 흐름을 반대로 뒤집음
- 객체가 사용하는 다른 객체를 직접 생성하지 않고, 자기 자신도 어디서 사용되는지 알 수 없음.
- 특별한 권한을 가진 다른 객체에 의해 결정되고 만들어짐.
- 스프링에서 객체 생성, 관리, 의존성 주입을 담당하는 주요 컴포넌트
- IoC컨테이너는 논리적 구조임
- 실체가 아닌 IoC컨테이너라는 논리적 구조를 바탕으로만듦
- 스프링에서 사용하는 실제 구현 객체는 BeanFactory와 ApplicationContext객체임
- BeanFactory는 가장 기본적인 IoC컨테이너 기능을 제공하며 ApplicationContext는 좀더 업그레이드 되어 추가 기능을 제공한다.
- IoC컨테이너
Spring MVC동작 흐름

- 자동차를 다루기 위한 핸들 = Handler = Controller
- 요청 발생시 요청을 처리하기 위한 객체
- DispatcherServlet = Spring MVC의 중심으로 교통정리 역할.
- HandlerMapping: 어떤 메소드를 호출해야하는지 매핑되어있음(요청 URL)
- 클라이언트의 요청(request) > dispather servlet이 받음.(모든 요청을 먼저 받음.)
- HandlerMapping조회: dispatcher Servlet이 HandlerMapping을 통해 어떤 Handler가 이 요청을 처리할지 찾음. (@GetMapping(”/hello”), HelloController의 /hello로 매핑) /user/login → UserController.login() (즉 어떤 메서드를 가져올지 정함)
- 동작흐름
- 클라이언트가 /user/login 요청
- DispatcherServlet이 HandlerMapping에게 이 URL(/user/login)을 처리할 HandlerMethod가 있니?
- HandlerMapping이 찾아서 HandlerAdapter와 함께 반환
- Dispatcher이 해당 Controller의 메소드를 호출
- 여기서 사용되는 정보는 컨트롤러의 이름이 아닌 URL→HandlerMethod매핑정보
- 동작흐름
- HandlerAdapter실행: 실제 컨트롤러 메소드를 호출할 수 있도록 중간처리 (컨트롤러 호출방식을 통일해주는 어댑터)
- Handler(Controller)실행결과 dispatcherServlet으로 반환:” HandlerAdapter가 컨트롤러를 실행하면 컨트롤러는 비즈니스 로직을 수행한 후 결과(데이터, 뷰이름 등 반환) ModelAndView객체가 주로 사용됨(Model: 화면에 전달할 데이터, View: 어떤 화면을 렌더링할지에 대한 논리적 이름)
- ViewResolver 호출: DIspatcherServlet이 어떤 화면이 필요한지(Handler에서 반환된 뷰이름) ViewResolver에게 전달 > 논리적 뷰이름을 실제 물리 뷰 파일 경로로 변환(매핑)
- 실제 물리뷰 파일 경로를 반환
- View렌더링 및 응답 : DispatcherServlet은 View객체에 모델 데이터를 기반으로 html을 만들어 클라이언트에게 보냄 View는 JSP, Thymeleaf, Freemarker등 다양한 뷰 기술이 될 수 있음.
구현 흐름(Spring Boot + MVC + Repository, Service)
하위계층에서 상위계층으로 만들어 가는것이 가장 안정적임.
1. DB설계 & Entity/DTO 만들기
서비스, 컨트롤러를 만들기 위해선 데이터 구조가 먼저 정해져야 하기 때문.
- DB 테이블 정의
- UserDTO.java생성
2. Repository 생성
DB 연동 구조를 확보(컨트롤러가 데이터를 저장/조회하려면 Repository가 필요함)
JDBC 사용 > JdbcUserRepository.java(클래스), UserRepository.java(인터페이스)
3. Service / ServiceImpl 만들기
비즈니스 로직 구현 단계(Repository호출하여 실제 기능 작성)
UserServiceImpl.java(클래스),UserService.java(인터페이스)
- 회원가입, 로그인 로직 구현
4. Controller 만들기
화면과 API를 연결하는 마지막 단계
Service에서 기능이 준비되어있어야 Controller에서 사용가능 따라서 먼저 구현한 것.
5. Templet만들기(화면 생성)
Controller가 연결되었으니 화면 작업
login.html, join.html →HTML에서 form action을 Controller로 연결
6. css/js추가
마지막에 화면 꾸밀 때 진행하면 됨
'웹 > Spring' 카테고리의 다른 글
| 3. MVC패턴을 이용한 로그인 회원가입 구 (1) | 2025.12.12 |
|---|---|
| 1. SpringBoot 기초 (0) | 2025.12.08 |
| 0. SpringBoot (1) | 2025.12.04 |