[Java][Spring] Spring 계층, 기본
Presentation Layer
- 사용자와 상호작용을 담당
- 사용자의 요청을 분석/응답
Business Logic Layer
Data Access Layer
- 데이터의 저장, 조회 담당
- 데이터베이스와 연동하여 작업
Component 는 Bean 이라고 볼 수 있음
- Controller (Presentation Layer)
- Service (Business Layer)
- Repository (Persistence/DAO)
- 이 셋이 모두 Component 의 하위 어노테이션
<context:component-scan base-package="패키지명"/>
- 패키지명 하위 패키지를 검색해 @Component 어노테이션을 포함하는 모든 클래스를 빈으로 자동 등록
- 단, 의존성 관계 등록은 따로 하지 않음
@Autowired
Spring MVC
- Business Logic 과 Presentation Logic 을 분리하는 것이 주 목적.
Model
- DB 등 데이터 저장소와 연동, 사용자가 입/출력 데이터를 다루는 역할
- CRUD 를 하나의 작업으로 묶는 트랜잭션을 다루기도.
- DAO 클래스, Service 클래스에 해당
View
- 출력할 화면을 만드는 역할
- HTML, CSS, JS 사용.
- Html, JSP, Thymeleaf 등으로 작성
Controller
- 클라이언트의 요청에 대해 실제 업무를 수행하는 모델 컴포넌트를 호출
- 클라이언트가 보낸 데이터를 가공해서 모델 호출시 전달
- 모델이 업무 수행 완료시 결과를 뷰에 전달
- 클라이언트 요청에 대해 모델, 뷰를 결정하여 전달
- Servlet, JSP 등을 사용하여 작성
Front Controller 패턴
- 퍼사드 패턴이라고도 함
- 프레임워크 차원에서 내장 (모델2 아키텍처, Front Controller 전부)
- 클라이언트가 보낸 요청을 받아서 "공통적인" 작업을 먼저 수행
- 전처리하고 다른 Controller 에게 작업 위임
- 인증, 권한 체크 등 "모든 요청에 대한 공통 처리 로직" 수행
- 클라이언트 -> 프론트 Controller -> Application Controller -> View
DispatcherServlet ★★★
- 클라이언트의 요청을 받아 Controller 에 전달, 리턴 결과를 View에 전달
HandlerMapping
- URL, 요청 정보 기준으로 어떤 핸들러 객체 사용할지 결정.
- DispatcherServlet 은 하나 이상의 핸들러 매핑을 가질 수 있음.
- 개발자가 건드릴 필요는 없음
ModelAndView
- Controller 처리한 데이터와 화면 정보를 보유 (Controller 가 리턴)
View
- Controller 의 처리 결과 화면에 대한 정보 보유
ViewResolver
- Controller 가 리턴한 뷰 이름을 기반으로 Controller 처리 결과를 생성할 뷰 결정.
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping
- Spring 4.3 이후 Controller 에서 이런 어노테이션 사용 가능.
redirect
return "redirect:main"
- "redirct:" 로 시작하는 문자열 리턴하면 리다이렉트
constroller 인자
@RequestParam("필드명") String id
- 이런식으로 인자 받아서 파라미터 받아올 수 있음.
REST API
- Representational Safe Transferful API
- HTTP URI + HTTP Method
- HTTP URI 로 제어한 자원(리소스)를 명시
- HTTP Method(GET,POST,PUT,DELETE) 로 해당 자원을 제어하는 명령을 내리는 방식의 아키텍처.
- POST 는 create(insert)
- GET 은 read(select)
- PUT 은 update, create
- DELETE 는 delete
- 똑같은 URI 을 쓰더라도 GET/POST/PUT/DELETE 요청으로 구분하면 크게 단순화 가능
Jackson ★★★★★★★★
- Java 오브젝트 <-> JSON 컨버전해주는 라이브러리
- 브라우저에서 json 으로 전송하면 backend에서는 java 오브젝트로 바뀌게 됨.
- @RequestBody, @ResponseBody 로 Java 객체 형태로 주고받을 수 있음
- ex) 메소드에 @ResponseBody 주고 java 객체 리턴하면 json 형태로 리턴해줌
- @RequestBody 는 메소드 파라미터로 받고.