📃 요약
실무에서는 MVC 디자인 패턴 속해서 스프링부트를 사용해 코딩을 진행함. 파일관리 시 파일을 용도에 맞게 정리하듯이 MVC 디자인 패턴도 패키지 및 클래스를 용도에 맞게 분류해서 코딩을 진행함
요소 기술 :
– Basic : java & spring boot
📃 기술 구현
스펙 :
- intellij - java - spring boot
📃 MVC 디자인 패턴
1. M : Model
- 정의 : Entity, Service, Repository(DAO), DTO 등을 사용하는 영역 - 역할 : 정보의 저장/검색이 목적인 순수 클래스 1) Entity : Value Object(정보 저장 목적) 와 유사, 정보저장이 목적인 클래스 속성(필드)/생성자/Setter/Getter 만 사용함 DB 테이블의 데이터를 객체에 저장함 (엔티티 == 테이블) 2) Service : 업무 로직이 정의된 함수들이 있는 클래스 3) Repository : 실제 DB 에 접속해서 CRUD 를 하는 함수들이 있는 클래스 4) DTO : Entity 의 속성을 가공(확장(속성의 개수 증가), 축소(개수 감소)) 할 목적으로 사용되는 클래스
2. V : View
- Frontend(클라이언트)의 화면을 의미하면 주로 Vue / React / JSP 등을 사용함 - 화면에 데이터를 표시하는 영역
3. C : Controller
- View 와 Service 를 연결해주는 역할을 담당하는 클래스 - View의 URL 를 통해서 화면과 연결되고 Service 의 결과를 다시 View 에게 전달함
📃 어노테이션 정의 :
- 주로 특별한 기능을 부여하기 위해 사용 - 클래스나 함수(메소드), 변수 위나 앞에 추가하여 사용함 - 자동 Setter/Getter 생성, 생성자 생성 등 - 장점 : 코드량이 감소하고, 유지보수가 쉬우며, 생산성이 증가함
📃 SSR vs CSR :
1. SSR
- SSR : Server Side Rendering - html 파일을 서버에서 만들어서 웹브라우저로 전송해서 화면에 표시함 - 예) JSP, 타임리프 등
2. CSR
- CSR : Client Side Rendering - html 파일을 최초 1회 전송하고 다음부터는 변경되는 데이터만 서버에서 받고, 나머지를 조립해서 웹브라우저에 화면에 표시함 - 예) React, Vue 등
📃 @Controller :
- View 가 JSP 일때 사용되는 컨트롤러 - 함수 위에 요청받은 특정 url 이 있음 - return 값은 요청을 처리한 결과 데이터를 Model 이라는 해쉬멥에 담고 jsp 페이지로 이동함(예 : index.jsp 등)
Model
- jsp 페이지로 이동될 때 전송할 데이터는 Model 이라는 객체에 넣어서 이동됨
컨트롤러 사용법
1) url 매개변수 없이 요청
사용법 : @GetMapping("/url") // 요청받은 url public String 함수명(Model model) { 실행문; return 이동될페이지명; } 예 : @GetMapping("/exam01/hello") public String Hello(Model model) { model.addAttribute("greeting2", "Springboot 처음이지"); return "exam01/hello.jsp"; }
2) @RequestParam :
- 쿼리스트링 방식으로 변수에 값을 저장해서 다른 페이지로 전달하는 어노테이션 1) 쿼리스트링방식 형태 : /url?변수=값&변수2=값2... - 매개변수가 전송되지 않으면 기본적으로 에러를 발생시킴 - 매개변수가 전송되지 않으면 기본값으로 대체해서 에러를 나타나지 않게 하는 옵션도 존재함(defaultValue)
사용법 : public String 함수명(Model model, @RequestParam String 변수명){ 실행문; return 이동될페이지명; } 옵션 : defaultValue="대체값" : 쿼리스트링 변수에 값이 null 이면 "대체값" 바꿔줌 예 : url 테스트 : http://localhost:8000/exam02/hello-name?name=홍길동 @GetMapping("/hello-name") public String HelloName(Model model ,@RequestParam(defaultValue="") String name) { model.addAttribute("greeting", "안녕하세요 "+ name); return "exam02/hello.jsp"; }
3) @ModelAttribute :
- 객체의 속성명으로 jsp로 각각 전달 - 객체의 속성명 === url 매개변수명 일치하면 자동으로 데이터가 저장됨
사용법 : @GetMapping("/url") public String 함수명( @ModelAttribute 클래스명 객체명){ return 이동될페이지명; } 예 : url 테스트 : http://localhost:8000/exam04/object-param?id=forbob&name=kang @GetMapping("/object-param") public String getObjectParam( @ModelAttribute Member member){ return "exam04/object_param.jsp"; }
4) @PathVariable :
- 파라메터 방식으로 변수에 값을 저장해서 다른 페이지로 전달하는 어노테이션 1) /url/값 - 객체의 속성명 === url 매개변수명 일치하면 자동으로 데이터가 저장됨
사용법 : @GetMapping("/url/{변수명}") public String getPathVariable( @PathVariable String 변수명, Model model){ model.addAttribute("키이름", 변수명); // 값 저장 return 이동될페이지명; } url 테스트 : http://localhost:8000/exam05/path-variable/KangTaeGyung 예 : @GetMapping("/path-variable/{name}") public String getPathVariable( @PathVariable String name, Model model){ model.addAttribute("name", name); return "exam05/path_variable.jsp"; }
5) ResponseEntity :
- 목적 : 프로그램 품질 향상을 위해 사용 - 프론트로 성공/실패 신호를 전송함 - 성공(신호) : HttpStatus.OK (200) : 200 ~ 400 사이 (거의 성공메세지) - 실패(신호) : HttpStatus.NOT_FOUND (404) : 400 이상 (거의 실패메세지) - 주로 예외처리와(try ~ catch) 함께 사용함
사용법 : 사용법 : new ResponseEntity<>(배열[객체], 신호); 사용법 : new ResponseEntity<>(신호); 예 : @PostMapping("/url") public ResponseEntity<Object> getObjectRequestBody( @RequestBody Member member ) { try { List<Member> list = new ArrayList<>(); list.add(member); if(member != null) { // TODO: 성공 : OK(200) return new ResponseEntity<>(list, HttpStatus.OK); } else { // TODO: 0건 insert : NO_CONTENT(204) return new ResponseEntity<>(HttpStatus.NO_CONTENT); } } catch (Exception e) { // TODO: BAD_REQUEST(400) return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } }