의존성 주입(DI-Dependency Injection)방식
- 생성자를 통한 주입
- set 메소드를 이용한 주입
IoC(Inversion Of Control -제어의 역행)
https://velog.io/@gillog/Spring-DIDependency-Injection ← DI, IoC참고
Bean : Spring에서 객체를 부르는 말
AOP(Aspect Oriented Programming) : 대부분의 시스템이 공통으로 가지는 보안이나 로그, 트랜잭션과 같은 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 분리하게 만들어 주는 프로그래밍의 패러다임
AOP의 장점
- 개발자들이 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 된다.
- 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화할 수 있다.
- 원하는 관심사의 유지 보수가 수월한 코드를 구성할 수 있다.
모델 2 방식 장점
- 개발자와 웹 퍼블리셔의 영역을 분리할 수 있다.(Controller, Service, DAO(DTO), Mapper, View를 이용해 세밀하게 역할 구분 가능)
- 컨트롤러의 URL를 통해서 뷰를 제어하기 때문에, 뷰의 교체나 변경과 같은 유지보수에 유용하게 사용될 수 있다.
Controller 특징
- 파라미터 수집
- 어노테이션을 통한 간편 설정
- 로직의 집중
- 테스트의 편리함
- 상속이나 인터페이스를 구현 X
- 메소드의 파라미터와 리턴 타입 존재 X
- 스프링 MVC가 제공하는 유용한 클래스들이 많다
Model 객체 : Controller 에서 생성된 데이터를 담아 View 로 전달할 때 사용하는 객체이다. addAttribute("key", "value") 메서드를 이용해 view에 전달할 데이터를 key, value형식으로 전달할 수 있다. addAttribute(객체)처럼 이름을 지정하지 않은 경우에는 자동으로 저장되는 객체의 클래스명 앞 글자를 소문자로 처리한 클래스명을 이름으로 간주
@ModelAttribute : HTTP Body 내용과 HTTP 파라미터의 값들을 Getter, Setter, 생성자를 통해 주입하기 위해 사용한다. 일반 변수의 경우 전달이 불가능하기 때문에 Model 객체를 통해서 전달해야 한다. @ModelAttribute("msg") String msg를 Controller에서 사용한 후 jsp에서 ${msg}를 이용해 msg값에 바로 접근 가능, @ModelAttribute Client client 와 같이 객체를 전달할 수도 있다.
Spring MVC에서 주로 사용하는 어노테이션 종류
| @Controller | 스프링 MVC의 컨트롤러 객체임을 명시하는 어노테이션 | 클래스 |
| @RequestMapping | 특정 URI에 매칭되는 클래스나 메소드임을 명시하는 어노테이션 | 클래스, 메소드 |
| @RequestParam | request에서 특정한 파라미터의 값을 찾아낼 때 사용하는 어노테이션 | 파라미터 |
| @RequestHeader | request에서 특정 HTTP 헤더 정보를 추출할 때 사용 | 파라미터 |
| @PathVariable | 현재 URI에서 원하는 정보를 추출할 때 사용하는 어노테이션 | 파라미터 |
| @CookieValue | 현재 사용자의 쿠키가 존재하는 경우 쿠키의 이름을 이용해서 쿠키의 값을 추출 | 파라미터 |
| @ModelAttribute | 자동으로 해당 객체를 뷰까지 전달하도록 만드는 어노테이션 | 메소드, 파라미터 |
| @SessionAttribute | 세션상에서 모델의 정보를 유지하고 싶은 경우 사용 | 클래스 |
| @InitBinder | 파라미터를 수집해서 객체로 만들 경우에 커스터마이징 | 메소드 |
| @ResponseBody | 리턴 타입이 HTTP의 응답 메시지로 전송 | 메소드, 리턴타입 |
| @RequestBody | request 문자열이 그대로 파라미터로 전달 | 파라미터 |
| @Respository | DAO 객체 | 클래스 |
| @Service | 서비스 객체 | 클래스 |
Controller 리턴 타입 종류에 따른 JSP 실행 방법
void : 현재 경로에 해당하는 jsp파일을 실행한다.
String : '문자열 + jsp'파일을 찾아서 실행한다.
- DTO : 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체
- DAO : 데이터베이스의 data에 접근하기 위한 객체입니다. Mapper에서 interface 생성할 때 사용(파일 만들때 DAO or persistence로 주로 만든다)
- VO : DTO랑 비슷하지만 set을 하지 않는 객체
JSON 처리
- @RequestBody
- 이 어노테이션이 붙은 파라미터에는 http요청의 본문(body)이 그대로 전달된다.(JSON → 객체)
- HTTP 요청의 바디내용을 통째로 자바객체로 변환해서 매핑된 메소드 파라미터로 전달해준다.
- @ResponseBody
- 자바객체를 HTTP요청의 바디내용으로 매핑하여 클라이언트로 전송한다.(객체 → JSON)
- @RestController
- @Controller와는 다르게 @RestController는 리턴값에 자동으로 @ResponseBody가 붙게되어 별도 어노테이션을 명시해주지 않아도 HTTP 응답데이터(body)에 자바 객체가 매핑되어 전달 된다.(자동으로 객체 → JSON로 전달) -> ResponseEntity에 담아 JSON으로 전달
'Develop > Spring' 카테고리의 다른 글
| Spring 궁금했던거 (0) | 2022.03.25 |
|---|---|
| Springboot, Spring 개념정리 3 (0) | 2022.03.22 |
| Springboot, Spring 개념정리 2 (0) | 2022.03.22 |
| Springboot, Spring 개념정리 1 (0) | 2022.03.22 |
| Spring 웹 개발 기초 (0) | 2022.03.22 |