Replies: 1 comment
|
저번주차꺼까지 올리셨네요 ! 수고하셨습니당 ~ |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
프로젝트 생성
packaging 에서 Jar/ War 있는데 이번엔 Jar 선택
War: 톰켓(WAS 서버) 별도 설치 후 빌드된 파일 넣을때 War 선택 (또는 JSP 를 쓸 때)
Jar: 내장 톰켓 쓸 때
처음 롬복 셋팅

Jar 사용시 /resources/static/index.html 을 Welcome 페이지로 사용함. (index 파일 생성하기)
로깅 간단히 알아보기
기본적으로 스프링 부트가 dependencies 에 로그 라이브러리를 가져온다
로그 레벨을 debug 로 바꾸면 너무 많은 로그가 보임 (스프링 라이브러리에서도 로그 사용중)
private final Logger log = LoggerFactory.getLogger(getClass());
이렇게 로그를 선언해도 되지만, @slf4j 붙이면 그냥 선언 없이 log 사용 가능.
이유: 이 로그는 출력하지 않는데, 안에 연산이 진행되어 의미없는 연산이 발생함.
로그를 상황에 맞게 조절 가능!
콘솔에 남기기 or 파일로 남기기 + 파일 용량 크면 분할, 압축, 백업 기능 선택 가능
성능적으로도 System.out.println 보다 훨씬 좋음
요청 매핑
요청이 왔을때 알맞은 컨트롤러를 호출하는걸 맵핑
url 매핑 말고도 다양한 방법이 있음.
Mapping 의 다양한 기능에 대해!
/hello-basic,/hello-basic/이 두개는 다른 url 이지만, 같은 요청으로 매핑함.
@RequestMapping 에 메서드를 get 으로 지정했는데, post 요청이 오면 405 오류를 반환한다. (정확히는 매핑 실패?)
url 자체에 변수가 있는 경우!
url = localhost:8080/mapping/userA -> 변수 data 에 userA 저장
이것과 다른 방식: 쿼리 파라미터 방식 (/mapping/?userId=userA)
PathVariable 을 여러개 해도 다 맵핑 가능하다!
@GetMapping("/mapping/user/{userId}/order/{orderId}
매핑에서 params -> url 에 해당 params 가 있어야 정상 작동
url: localhost:8080/mapping-param/?mode=debug
그런데 별로 사용 하지 않음..
해더 정보 매핑
params 대신 headers -> http header 에 넣어줘야 작동
미디어 타입 조건 매핑
http header content-type 에 따라!
http body 를 raw, JSON 으로 변경해 요청
요청 http headers 의 content-type 과 consumes 가 일치해야 정상 작동.
다른 예시
consumes = "text/plain"consumes = {"text/plain", "application/*"}consumes = MediaType.TEXT_PLAIN_VALUEconsumes -> 요청 정보를 소비
produces -> 서버에서 정보 생산
http header 의 accept 와 produces 가 일치해야 정상 작동.
다른 예시
produces = "text/plain"produces = {"text/plain", "application/*"}produces = MediaType.TEXT_PLAIN_VALUEproduces = "text/plain;charset=UTF-8"요청 매핑 - API 예시
회원관리 API
Class 레벨에 @RequestMapping("/mapping/users") 를 추가하면 중복 제거 가능.
postman 으로 매핑 확인 가능.
HTTP 요청 - 기본,헤더 조회
실제 요청된 HTTP 정보가 스프링에서 어떤식으로 조회되는지?
스프링 MVC 가 HTTP 요청 헤더 조회를 아주 간편하게 해주는 기능 있음.
MultiValueMap -> 하나의 키에 여러 값을 받을 수 있음. -> 키를 꺼내면 배열이 반환됨.
속성:
required 필수값 여부
defaultValue 기본값 속성
어노테이션기반 컨트롤러에서 사용할 수 있는 파라미터는 공식 메뉴얼에 나와 있다.
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann- arguments파라미터 뿐 만 아니라 가능한 리턴도 공식 메뉴얼에 있다.
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann- return-typesHTTP 요청 파라미터 - 쿼리 파라미터, HTML Form
전송된 쿼리 파라미터, HTML Form 이 어떻게 처리되는지?
클라이언트에서 서버로 요청 데이터 전달 방법은 3가지
쿼리파라미터, HTML Form 조회는 '요청 파라미터(request parameter) 조회' 라고 함
스프링으로 요청 파라미터 조회하는 방법?
단계적으로 알아보자.
HTTP 요청 파라미터 - @RequestParam
스프링이 제공하는 @RequestParam 사용하면 매우 간편함.
HTTP 요청 파라미터 - @ModelAttribute
파라미터를 받아 객체로 바꾸는 편리한 방법.
@ModelAttribute 가 파라미터를 받아 객체를 자동으로 만들어준다
바인딩 오류! 타입이 다른 경우 발생함. 검증 및 오류에서 처리 가능.
@ModelAttribute 의 속성? 뒤에서..
HTTP 요청 메시지 - 단순 텍스트
요청 파라미터 말고 메시지 바디에서 직접 데이터가 넘어오는 경우
이런 경우는 @RequestParam, @ModelAttribute 사용 불가.
inputStream 을 사용해 읽을 수 있음?
HttpEntity: Http header, body 정보를 편리하게 조회할 수 있도록 도와줌
HttpEntity 를 상속받은 RequestEntity, ResponseEntity 도 있음.
HTTP 메세지 컨버터: HTTP 바디를 읽어 문자나 객체로 변환해줌
이것도 귀찮아서 에노테이션을 제공함.
@RequestBody
Http 메시지 바디 정보 조회 가능. 헤더정보가 필요하면 HttpEntity 나 @RequestHeader 사용
다시한번, 요청 파라미터 조회와는 관계가 없다!!
정리
HTTP 요청 메시지 - JSON
JSON 데이터 형식 조회
@RequestBody에 직접 만든 객체 지정 가능(@RequestBody HelloData data)
HTTP 메시지 컨버터가 HttpEntity 에서 T 를 보고 그 타입으로 변환해준다.
JSON 요청 -> HTTP 메시지 컨버터 -> 객체
@responsebody
객체 -> HTTP 메시지 컨버터 -> JSON 응답
All reactions