본문 바로가기
Spring/MVC 1

6. 스프링 MVC - 기본 기능

by wch_t 2024. 3. 18.

1. 로그 간략 정리

[장점]

1) 디버깅과 문제 해결

- 애플리케이션 실행 중에 발생하는 이벤트, 상태 및 오류에 대한 중요한 정보 제공

 

2) 성능

- 비동기 로깅, 로그 레벨 관리와 같은 기능으로 통해 성능에 미치는 영향을 최소화

 

3) 로그 레벨 관리

- ERROR / WARN / INFO / DEBUG / TRACE 세분화된 로그 레벨을 제공한다.

- 로그의 중요도에 따라 다르게 처리할 수도 있고, 필요한 로그 레벨만 볼 수 있다.

 

4) 모니터링

- 운영(애플리케이션 동작 추적, 특정 사용자의 활동 로그)

   성능(로직 실행 시간, DB 쿼리 실행 시간)

   보안(로그인 시도, 인증 실패, 권한 부여 거부) 과 같이 다양한 모니터링 및 분석이 가능하다.

 

5) 로그 고급 기능

- 로그 파일의 rolling, 포맷 설정, 출력 대상 설정(콘솔, 파일, 네트워크)과 같은 고급 기능을 사용할 수 있다.

 

 

 

@Slf4j

: 자바 기반의 '로깅'을 위한 facade 라이브러리이다.

즉. 로깅 구현체를 직접적으로 제공하지 않고, 다양한 로깅 프레임워크(Logback, Log4j..)에 대한 단일 인터페이스를 제공해

개발자가 로깅 구현체를 자유롭게 선택할 수 있도록 한다.

 

 

로그 호출

- log.info("hello world!");

- log.error("info log={}", error);

 

로그 포맷

- 시간, 로그 레벨, 프로세스 ID, 쓰레드 이름, 클래스명, 로그 메시지

 

로그 레벨

- Level : Trace > Debug > Info > Warn > Error

- application.yml 에서 설정

    logging.level.root = info

- 개발 서버는 debug / 운영 서버는 info

 

 

 

 

2. HTTP 요청 메시지 - 쿼리 파라미터, HTML Form

1) @RequestParam

- http://localhost:8080/request-param/?userName=sun&age=24

 

 

 

2) @PathVariable

- http://localhost:8080/mapping/userA

 

 

 

3) @ModelAttribute

- 해당 객체 프로퍼티(필드)의 setter를 호출해서 파라미터의 값을 바인딩한다.

- http://localhost:8080/model-attribute?userName=sun&age=24

 

+. Spring은 생략 시 다음 어노테이션으로 매핑이 된다.

     String, int, Integer 같은 단순 타입 → @RequestParam

     나머지 = @ModelAttribute (aregument resolver 지정 타입 제외)

 

 

 

4) 특정 헤더 / 미디어 타입 조건 매핑

- http://localhost:8080/mapping-header

- headers / consumes / produces

/**
* 특정 헤더로 추가 매핑
* headers="mode",
* headers="!mode"
* headers="mode=debug"
* headers="mode!=debug" (! = ) */
 @GetMapping(value = "/mapping-header", headers = "mode=debug")
 public String mappingHeader() {
     log.info("mappingHeader");
return "ok";
}

 

 

 

번외.

∙ url 다중 매핑

     {"/hello-basic", "/hello-go"}

 

∙ 마지막 '/' 

     "/hello"와 "/hello/"는 서로 다른 URL 요청을 사용해야 한다.

 

 MultiValueMap

 

 

 

 

3. HTTP 요청 메시지 - message Body

HTTP message body에 데이터를 직접 담아서 요청

- HTTP API에서 주로 사용. JSON, XML, TEXT

- POST, PUT, PATCH

 

쿼리 파라미터와 다르게, HTTP message body를 통해 데이터가 직접 넘어오는 경우

@RequestParam, @ModelAttribute를 사용할 수 없다.

 

 

 

1) HttpEntity

 

 

 

2) RequestBody

- @RequestBody를 생략하면 @ModelAttribute로 바인딩 되어 쿼리 파라미터를 조회해 매핑 동작한다.

- HTTP Message Converter 가 response body message 의 json을 지정한 객체로 바꿔준다.

 

 

 

 

4. HTTP 응답

Spring에서 응답 데이터를 만드는 방법은 크게 3가지가 있다.

정적 리소스 / 뷰 템플릿 / HTTP 메시지

 

1) 정적 리소스

파일 경로: src/main/resources/static/basic/practice.html

웹 URL: http://localhost:8080/basic/practice.html 

 

2) 뷰 템플릿

파일 경로: src/main/resources/template/practice.html

Model에 데이터를 넣고 뷰 템플릿을 호출한다.

 

3) HTTP 메시지

HTTP message body에 JSON 형식으로 데이터를 실어 보낸다.

 

 

 

 

5. 메시지 컨버터

HTTP request 본문을 객체로 변환하거나, HTTP response 본문으로 변환할 때 사용된다.

 

 

1) 기본 구조

Spring MVC에서 HttpMessageConverter 인터페이스 구조로 정의되어 있다.

 

- canRead(), canWrite() : 요청 / 응답 타입을 메시지 컨버터가 처리할 수 있는지 여부를 판단한다. (Class type, Media type)

- read(), write() : 실제 객체를 읽고 쓰는 역할을 한다.

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

 

 

 

 

2) 주요 메시지 컨버터

ByteArrayHttpMessageConverter

     : byte[] 데이터 처리

     - 클래스 타입: byte[],   미디어 타입: */*

     - 요청: @RequestBody byte[] data

     - 응답: @ResponseBody return byte[]

 

StringHttpMessageConverter

     : 문자열 데이터 처리

     - 클래스 타입: String,   미디어 타입: text/plain

 

MappingJackson2HttpMessageConverter

     : JSON 데이터 처리

     - 클래스 타입: 객체 or HashMap,   미디어 타입: application/json

 

MarshallingHttpMessageConverter

     : XML 데이터 처리

     - 클래스 타입: 객체 or HashMap,   미디어 타입: application/xml

 

 

 

 

 

3) 동작 구조

 

클라이언트가 요청을 보낼 때 크게 2가지 방법으로 보낼 수 있다.

1) url 쿼리

2) message body

 

 

url 쿼리로 요청을 보낼 때는 메시지 컨버터 필요없다. (@RequestParam, @ModelAttribute, @PathVariable ...)

Argument Resolver가 파라미터에 맞는 객체를 RequestMappingHandlerAdapter에 전달한다.

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

 

 

 

 

message body에 데이터를 담은 요청을 보낼 때는 메시지 컨버터가 필요하다. (@RequestBody, HttpEntity)

Arguement Resolver가 HTTP 메시지 컨버터를 호출해, 원하는 객체로 변환하고 RequestMappingHandlerAdapter에 전달한다.

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

 

'Spring > MVC 1' 카테고리의 다른 글

7. 스프링 MVC - 웹 페이지 만들기  (0) 2024.03.19
5. 스프링 MVC - 구조 이해  (0) 2024.03.16
4. MVC 프레임워크 만들기  (0) 2024.03.14
3. 서블릿, JSP, MVC 패턴  (0) 2024.03.13
2. 서블릿  (0) 2024.03.11