1. Bean(빈)이란 무엇일까?
Bean은 Spring이 생명주기를 직접 관리하는 자바 객체입니다.
보통 우리가 객체를 만들 때 new PostService()처럼 직접 생성하지만, Spring에서는 개발자가 직접 하지 않고 Spring 컨테이너가 객체를 생성, 조립, 관리하게 맡깁니다. 이렇게 컨테이너에 담겨 관리되는 객체를 'Bean'이라고 부릅니다.
- 사용자님의 코드에서 @Service, @RestController, @Repository 어노테이션이 붙은 클래스들이 바로 Spring에 의해 Bean으로 등록되는 대상들입니다.
2. Spring MVC의 흐름과 Servlet과의 차이점
Spring MVC의 흐름
Spring MVC는 DispatcherServlet이라는 거대한 '중앙 관제탑'을 중심으로 동작합니다.
- 클라이언트 요청: 브라우저가 요청을 보냅니다.
- DispatcherServlet: 모든 요청을 가장 먼저 받아 분석합니다.
- Handler Mapping: "이 요청(URL)은 어떤 Controller가 처리해야 하지?"를 찾아 연결해 줍니다.
- Controller & Service: 실제 비즈니스 로직을 수행합니다.
- View Resolver / ResponseBody: 처리 결과를 어떤 화면으로 보여줄지, 혹은 JSON 데이터로 바로 보낼지 결정하여 응답합니다.
Servlet과의 차이점
- Servlet: 요청 하나당 서블릿 하나를 매핑하거나 복잡한 설정을 직접 해야 합니다. (노가다 작업이 많음)
- Spring MVC: DispatcherServlet이 딱 하나 존재하여 모든 요청을 받은 뒤, 내부적으로 분산 처리합니다. 개발자는 공통 로직(보안, 파싱 등)을 신경 쓰지 않고 비즈니스 로직(Controller) 작성에만 집중할 수 있습니다.
3. HTTP 메서드 매핑 (GET, POST, PUT, DELETE)
리소스(데이터)를 어떻게 다룰 것인지 정의하는 약속입니다.
- @GetMapping: 데이터를 조회할 때 사용합니다. (예: 게시글 목록 가져오기)
- @PostMapping: 새로운 데이터를 생성할 때 사용합니다. (예: 글쓰기)
- @PutMapping: 기존 데이터를 수정할 때 사용합니다. (전체 수정)
- @DeleteMapping: 데이터를 삭제할 때 사용합니다.
4. 데이터 전달 방식 3가지
사용자님의 PostController.java에서도 사용되고 있는 방식들입니다.
| 방식 | 설명 | 예시 코드 |
| @RequestBody | HTTP Body에 담긴 JSON 데이터를 객체로 변환해 받을 때 사용합니다. (주로 POST, PUT) | createPost(@RequestBody PostRequest request) |
| @PathVariable | URL 경로에 포함된 값을 변수로 받을 때 사용합니다. | /api/posts/{id} → (@PathVariable Long id) |
| @RequestParam | URL 뒤에 ?name=value 형태로 붙는 쿼리 파라미터를 받을 때 사용합니다. | /api/posts?category=java |
5. ResponseEntity<?> 한 문장 요약
"단순한 데이터뿐만 아니라, HTTP 상태 코드(200 OK, 404 Not Found 등)와 헤더 정보를 세밀하게 설정해서 클라이언트에게 보낼 수 있는 '응답 종합 선물 세트'입니다."
현재 코드에서는 PostResponse 객체만 반환하고 있지만, ResponseEntity.ok(response) 혹은 ResponseEntity.status(201).body(response)처럼 사용하면 더 전문적인 응답을 만들 수 있습니다.
'SSAFY > SPRING' 카테고리의 다른 글
| DTO (0) | 2026.03.29 |
|---|---|
| 싱글톤, 의존성 주입, Bean (0) | 2026.03.29 |
| Spring study (0) | 2026.03.27 |