Spring Annotation 1

사나이장대산·2024년 11월 1일

Spring

목록 보기
4/26

@Slf4j

Slf4j는 인터페이스이고 그 구현체로 Logback같은 라이브러리를 선택한다. 실제 개발에서는 Spring Boot가 기본으로 제공하는 Logback을 대부분 사용한다.

- Logging
로그를 작성하고 싶을 때 사용하는 Annotation

  • Thread 정보, 클래스 이름과 같은 부가 정보를 함께 확인할 수 있다.
  • 실제 운영 환경에서는 System.out.println();을 사용하여 Console에 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용하여 로그를 출력한다.
  • Log Level 설정을 통하여 Error 메세지만 출력하도록 하도록 하기도 하고 로그 메세지를 일자별로 모아서 저장하여 외부 저장소에 보관하기도 한다.(정말 편리한 기능!)
    • Log Level
      • TRACE > DEBUG > INFO > WARN > ERROR

- 사용시 주의점

package com.example.springbasicannotation.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
public class Slf4jController {

    @RequestMapping("/logging")
    public String logging() {

        String sparta = "Sparta";
        // TRACE -> DEBUG -> INFO -> WARN -> ERROR
        log.trace("문자 trace={}", sparta);
        log.debug("문자 debug={}", sparta);

        // default
        log.info("문자 info={}", sparta);// 문자 연산을 진행하지 않는다.
        log.warn("문자 warn={}", sparta);
        log.error("문자 error={}", sparta);

        log.info("문자 info " + sparta); // 문자 연산을 먼저 해버린다.
        return "success";
    }

}

com.example.springbasicannotation 하위 경로들의 로그 레벨을 설정한다.(기본은 info레벨)

- postman 호출


- 출력결과

level을 TRACE로 설정

- 출력결과

@Controller VS @RestController

Annotation 기반의 Spring에서 Controller(Handler)를 만들 때 사용하는 어노테이션

1.@Controller

package com.example.springbasicannotation.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ViewController {

    @RequestMapping("/view")
    public String example() {
        // logic
        return "sparta"; // ViewName이 return
    }

}
  • View가 있는 경우에 사용한다.
  • 즉, Template Engine인 Thymeleaf, JSP 등을 사용하는 경우

Thymeleaf 예시
사용 하기 전 SpringBoot build.gradle 의존성 추가

  • main/resources/templates 가 기본 경로로 설정된다.

resources/templates/sparta.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
<h2>Thymeleaf Template Sample</h2>
</body>
</html>

return 값이 String이면 ThymeleafViewResolver 에 의해 View Name으로 인식된다.


view를 String 형으로 GET 요청

2.@RESTController

package com.example.springbasicannotation.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ResponseController {

    @RequestMapping("/string")
    public String example() {
        // logic
        return "sparta"; // ViewName이 return 되는게 아니라, String Data가 반환된다.
    }
    
}
  • 응답할 Data가 있는 경우에 사용한다.
  • 현재는 대부분 @RestController를 사용하여 API가 만들어진다. (Restful API)
  • return 값으로 View를 찾는것이 아니라 HTTP Message Body에 Data를 입력한다.

동작순서

postman 호출결과

RESTCONTROLLER 는 응답할 DATA가 있는경우에 사용

CONTRLLER는 응답할 VIEW가 있는 경우에 사용

profile
사나이 張大山 포기란 없다.

0개의 댓글