일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- samba #가상머신 #daemon
- 리눅스 #사용자계정 #정보관리
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 리눅스 #명령어 #사용자 계정 정보 관리
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- selinux #실행모드 변경 #설정방법
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- 리눅스 #명령어 #내용정리 #mac #특수권한
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- oracle vmbox #rocky #linux9 #명령어 #암호화인증 #해시알고리즘
- tar #build #배포 #통신포트 #설정방법 #linux #apache
- 인바운드 #아웃바운드 #방화벽설정
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- 비트 #바이트 #이진수
- 명령어 #기초 #비밀번호 설정
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- 리눅스 #기초 #네트워크 #포트 번호 #역할
- 쓰레드 #쓰레드풀 #프로세스
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- vmware #가상화 #aws 클라우드 #아키텍트 #과정 #가상머신 #컨테이너 #docker
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- 사용자 그룹관리
- 프로세스 #CPU #시공유 #커널
- 리눅스 #
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- 리눅스 #기초설정 #가이드 #명령어
- Today
- Total
요리사에서 IT개발자로
(스파르타 코딩클럽) 면접 예상 질문 Spring MVC패턴 본문
1. 클라이언트 요청 (Client Request)
사용자가 브라우저 또는 REST 클라이언트(예: Postman)를 통해 특정 URL로 API 요청을 보냅니다. 이 요청은 HTTP 요청으로 표현됩니다.
2. 디스패처 서블릿 (DispatcherServlet)
요청이 웹 서버(Tomcat, Jetty 등)에 도착하면, 이 요청은 Spring의 DispatcherServlet으로 전달됩니다. DispatcherServlet은 요청을 처리하는 핵심 역할을 하는 프론트 컨트롤러로, Spring MVC의 진입점 역할을 합니다.
- DispatcherServlet의 역할: DispatcherServlet은 요청을 받고, 적절한 컨트롤러(Controller)에 요청을 전달하며, 컨트롤러의 결과를 받아서 적절한 뷰(View)로 응답을 생성합니다.
3. 핸들러 매핑 (Handler Mapping)
DispatcherServlet은 요청 URL에 따라 어떤 컨트롤러가 이 요청을 처리할지 결정하기 위해 HandlerMapping을 사용합니다.
- HandlerMapping: Spring은 URL과 컨트롤러 메서드를 매핑하기 위해 다양한 HandlerMapping 구현체를 사용합니다. 가장 일반적인 것은 RequestMappingHandlerMapping으로, @RequestMapping이나 @GetMapping, @PostMapping 등으로 정의된 URL을 매핑합니다.
4. 컨트롤러 (Controller) 호출
HandlerMapping에 의해 적절한 컨트롤러가 결정되면, 해당 컨트롤러의 메서드가 호출됩니다.
- 컨트롤러 역할: 컨트롤러는 비즈니스 로직을 호출하고, 필요한 데이터를 처리한 후 응답 데이터를 준비합니다. 이때, 컨트롤러는 일반적으로 서비스 계층(Service Layer)을 호출하여 비즈니스 로직을 수행합니다.
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user);
}
}
이 코드에서 getUser 메서드는 /api/users/{id} 경로로 들어온 GET 요청을 처리합니다.
5. 서비스 계층 (Service Layer)
컨트롤러는 비즈니스 로직을 수행하기 위해 서비스 계층을 호출합니다.
- 서비스 계층 역할: 서비스 계층은 실제 비즈니스 로직이 구현되는 곳입니다. 예를 들어, 데이터베이스에서 사용자 정보를 조회하거나, 트랜잭션 관리, 다른 비즈니스 규칙을 적용하는 등의 작업을 수행합니다.
@Service
public class UserService {
public User findById(Long id) {
// 데이터베이스에서 사용자 정보 조회
return userRepository.findById(id).orElseThrow(() -> new UserNotFoundException(id));
}
}
6. 데이터 접근 계층 (Data Access Layer)
서비스 계층이 데이터베이스와 상호작용할 필요가 있다면, Spring Data JPA와 같은 데이터 접근 계층을 통해 데이터베이스와 상호작용합니다.
- Repository 역할: Spring Data JPA에서는 Repository 인터페이스를 통해 데이터베이스 작업을 수행합니다. 이 인터페이스는 CRUD(Create, Read, Update, Delete) 작업을 쉽게 처리할 수 있게 해줍니다.
public interface UserRepository extends JpaRepository<User, Long> {
}
7. 응답 처리 (Response Handling)
컨트롤러에서 서비스 계층을 통해 필요한 작업을 완료한 후, 결과를 반환합니다. 이때, 컨트롤러는 ResponseEntity나 단순히 객체를 반환하여 Spring이 자동으로 JSON이나 XML 등의 형식으로 변환해 클라이언트에 전달할 수 있도록 합니다.
- ViewResolver 또는 HttpMessageConverter: Spring은 ViewResolver를 사용해 뷰(View)를 결정하거나, REST API의 경우 HttpMessageConverter를 사용하여 객체를 JSON이나 XML로 변환합니다.
@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user);
}
이 메서드는 User 객체를 JSON 형식으로 클라이언트에 반환합니다.
8. 디스패처 서블릿에서 응답 반환 (Response Dispatch)
모든 작업이 완료되면, DispatcherServlet은 최종 응답을 클라이언트로 반환합니다. 이 응답은 웹 서버를 통해 사용자의 브라우저나 REST 클라이언트에 전달됩니다.
간략한 정리
- 클라이언트 요청: 사용자 → 웹 서버
- DispatcherServlet: 요청 처리 시작
- Handler Mapping: 적절한 컨트롤러 매핑
- Controller: 비즈니스 로직 호출
- Service Layer: 비즈니스 로직 수행
- Data Access Layer: 데이터베이스와 상호작용
- Response Handling: 응답 생성 및 변환
- 응답 반환: 클라이언트로 응답 전송
'TIL' 카테고리의 다른 글
JWT 어디에 보관해야할까?? (LocalStorage, SessionStorage, Cookie) (2) | 2024.09.05 |
---|---|
Spring Security h2 페이지 접근 허용하는 방법 (0) | 2024.09.04 |
(스파르타 코딩클럽) 면접예상질문 Spring AOP란? (0) | 2024.08.13 |
(스파르타 코딩클럽)Vue.js 와 SpringBoot 네이버 소셜로그인 연동하기 (0) | 2024.08.10 |
(스파르타 코딩클럽) 스프링 시큐리티에서 JWT토큰 인증을 어떻게 할까? (0) | 2024.08.03 |