본문 바로가기

Develop/Spring

'코드로 배우는 스프링 웹 프로젝트' 정리(Controller)

의존성 주입(DI-Dependency Injection)방식

  1. 생성자를 통한 주입
  2. set 메소드를 이용한 주입

IoC(Inversion Of Control -제어의 역행)

https://velog.io/@gillog/Spring-DIDependency-Injection    ← DI, IoC참고

Bean : Spring에서 객체를 부르는 말

AOP(Aspect Oriented Programming) : 대부분의 시스템이 공통으로 가지는 보안이나 로그, 트랜잭션과 같은 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 분리하게 만들어 주는 프로그래밍의 패러다임

AOP의 장점

  1. 개발자들이 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 된다.
  2. 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화할 수 있다.
  3. 원하는 관심사의 유지 보수가 수월한 코드를 구성할 수 있다.

모델 2 방식 장점

  1. 개발자와 웹 퍼블리셔의 영역을 분리할 수 있다.(Controller, Service, DAO(DTO), Mapper, View를 이용해 세밀하게 역할 구분 가능)
  2. 컨트롤러의 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