230908 (금)
<금일 교육 내용>
1. Spring 개발환경 구축
- 컨트롤러
- 서비스
- 화면처리
2. 컨트롤러
- 요청정보로부터 데이터를 추출
- 추출한 데이터를 서비스로 호출하여 비즈니스 로직을 처리
- 처리한 로직을 다오에 넘겨서 결과 산출
- 최종결과를 view로 넘김
<복습>
1) 요청 -> Dispatcher Servlet -> /resources/ -> 정적 파일 url -> 요청 -> Adapter
-> list(SampleDTO) : 기본생성자 생성(new Sample DTO() ->
2) 모델 데이터는 자동으로 scope에 저장됨. -> 이 때 default 속성명(데이터 타입명)은 CamelCase로 지정
-> 속성명을 변경하고 싶다면 @ModelAttribute()를 사용하면 됨.
3) @ModelAttribute의 역할
- 속성 이름 변경
- 자동으로 저장 안되는 것을 저장하고 싶을때 : @RequestParam()은 속성으로 저장이 안됨. -> 이때 @ModelAttribute()를 사용함
3) Redirect
- 서버에 요청을 보냈을 때, 서버에서 다른 요청을 요구할때 보내는 코드. (300, 301, 302 코드)
- 300번대는 모두 redirect하라는 의미임.
- 서버에서 300번대 코드와 함께 새로운 url을 보내주면, 그 url을 다시 클라이언트에서 요청하면 서버에서 응답을 한다.
<Controller의 리턴타입>
1. Controller 메서드의 리턴 타입
- String (가장 많이 쓰임)
* jsp뷰의 경로/이름으로 해석
- void
* 호출한 URL과 동일 이름의 jsp로 해석
- VO, DTO 타입 (JSON 응답)
* JSON 타입의 데이터로 변환해서 브라우저로 응답
- ResponseEntity 타입 (JSON 응답)
* Http 헤더 정보와 내용을 가공하여 직접 브라우저로 응답
- Model, ModelAndView
* Model로 데이터를 변환하거나 뷰이름을 같이 지정
- HttpHeaders
* 응답에 내용 없이 Http 헤더 메세지만 전달
2. String 타입
- forward
-
3. 객체 타입
- JSON 타입 응답하는 경우 사용
- jackson-databind 라이브러리 필요
4. JSON이란..?
- JavaScript Object Notation
- {속성명:값, 속성명:값 ...} 의 object 타입을 문자열로 표현한 것.
5. @ResponseBody
- view로 보내지 않고 바로 body로 보냄.
6. ResponseEntity
- 브라우저로 직접 응답하는 경우
- 응답 헤더 설정
- 응답 바디 설정
7. 파일 업로드 방법
- Servlet 3.0 기능 이용
- commons-fileupload 라이브러리 이용
- 업로드 디렉토리 준비
* c:\upload\tmp
==> &가 아니라 / 로 구분 => 이것을 part라고 부르며, 여러개를 다루므로 multipart라고 부름.
<Controller Exception 처리>
1. 스프링 MVC의 예외 처리
- @ExceptionHandler 와 @ContollerAdvice를 이용한 처리
- @ResponseEntity를 이용하는 예외 메세지 구성
2. @ControllerAdvice
- HTTP 상태코드 500 Internal Server Error에 대응하기 위한 기법
- AOP(Aspect-Oriented-Programming)을 이용 (좀 더 보편적인 개념, 전처리, 후처리 가능)
- method가 하는 일은 변함이 없지만, 이것을 어떤 관점으로 처리할 것인지를 봐야하는 것이다.
- 예를 들어서 예외처리를 관점으로 만들고 싶다면 method()를 통해서 request를 했을 때 예외가 없으면 실행, 예외가 발생하면 에러페이지로 이동하도록 만들 수 있다.
- Filter가 이와 비슷한 맥락이라고 볼 수 있다.
- 스프링의 핵심 장점
* DI
* AOP
3. AOP란?
- 어떤 관점이냐에 따라서 실제 메소드의 앞과 뒤에 코드를 덧붙일 수 있는데, 이것을 Advice라고 한다.
=> 원래 404는 클라이언트 잘못으로 인한 오류인데, 이같은 경우는 사실은 개발자의 잘못이다.
<영속 계층의 구현 준비>