[ZB_BOOK STUDY] 스프링 부트 핵심 가이드 (5-3)

Dreamer·2024년 3월 31일
0
post-thumbnail

📖 스프링 부트 핵심 가이드

: 스프링 부트를 활용한 애플리케이션 개발 실무


📝 목차

5장. API를 작성하는 다양한 방법

5-6. [한걸음 더] REST API 명세를 문서화하는 방법 - Swagger
5-7. [한걸음 더] 로깅 라이브러리 - Logback
- Logback 설정
- Logback 적용하기

5-8. 정리


5장. API를 작성하는 다양한 방법

  • 본격적인 애플리케이션 개발에 필요한 내용
  • 각 HTTP 메서드에 해당하는 API를 개발해보자
  • 외부의 요청을 받아 응답하는 기능을 구현
    ➙ 컨트롤러가 어떻게 구성되는지 알아보자!

5-6. REST API 명세를 문서화하는 방법 - Swagger

API를 개발하면 명세관리를 해야한다.

명세?
API가 어떤 로직을 수행하는지 설명하고 로직을 수행하기 위해
어떤 값을 요청하며, 응답값으로는 무엇을 받을 수 있는지를 정리한 자료

Swagger를 사용하기 위해서는

① 의존성 추가하기
② Swagger와 관련된 설정 코드 작성하기 (Configuration)
↳ Swagger 사용을 위한 기본적인 설정 완료👍

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
	
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.springboot.api))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("Spring Boot Open API Test with Swagger")
                .description("설명 부분")
                .version("1.0.0")
                .build();
    }

}

.apis(RequestHandlerSelectors.basePackage("com.springboot.api))
⬇️
Swagger에서 스캔할 패키지 범위를
RequestHandlerSelectors.basePackage() 메서드를 사용해 설정
현재 프로젝트의 root package를 넣어준다!

③ 인텔리제이 IDEA에서 애플리케이션 실행 후
http://localhost:8080/swagger-ui.html로 접속하면 Swagger 페이지 출력

④ Swagger가 사용하는 대표 어노테이션으로 세부 내용 설정

@ApiOperation 
: 대상 API의 설명을 작성하기 위한 어노테이션

@ApiParam 
: 매개변수에 대한 설명 및 설정을 위한 어노테이션

5-7. 로깅 라이브러리 - Logback

로깅(logging)이란?
애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것

로깅은 '비기능 요구사항' = 사용자나 고객에게 필요한 기능은 아니다!

⭐ 하지만 개발자에게는
디버깅 or 개발 이후 발생한 문제를 해결할 때 원인분석을 위해 꼭 필요한 요소

  • Logback 이란?
    : 자바 진영에서 가장 많이 사용되는 로깅 프레임워크
    slf4j를 기반으로 구현
    log4j 이후에 출 시 된 로깅 프레임워크
    ➙ 월등한 성능 향상
    ➙ spring-boot-starter-web 라이브러리에 내장 (의존성 추가 안해도 된다)

  • Logback의 특징

✅ 크개 5개의 로그 레벨(TRACE, DEBUG, INFO, WARN, ERROR)을 설정할 수 있다.
- ERROR
: 로직 수행중에 시스템에 심각한 문제가 발생해서,
애플리케이션 작동이 불가능한 경우를 의미

- WARN
: 시스템에 에러의 원인이 될 수 있는 경고 레벨을 의미

- INFO
: 애플리케이션의 디버깅을 위한 메시지를 표현하기 위한 레벨을 의미

- DEBUG
: 애플리케이션의 디버깅을 위한 메시지를 표시하는 레벨을 의미

- TRACE
: DEBUG 레벨보다 더 상세한 메시지를 표현하기 위한 레벨을 의미

✅ 실제 운영 환경과 개발 환경에서 
각각 다른 출력 레벨을 설정해서 로그를 확인할 수 있다.

✅ Logback의 설정 파일을 일정 시간마다 스캔해서 
애플리케이션을 재기동하지 않아도 설정을 변경할 수 있다.

✅ 별도의 프로그램 지원 없이도 자체적으로 로그 파일을 압축할 수 있다.

✅ 저장된 로그 파일에 대한 보관 기간 등을 설정해서 관리할 수 있다.

Logback 설정

  • 설정 파일 만들기
    : 클래스패스(classpath)에 있는 설정 파일을 자동으로 참조
    ➙ logback 설정 파일은 리소스 폴더 안에 생성
    (파일명 : logback-spring.xml)

⬇️ Logback 설정 파일 예시

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <property name="LOG_PATH" value="./logs" />

    <!-- Appenders -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <pattern>[%d{yyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="INFO_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <file>${LOG_PATH}/info.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/info_${type}.%d{yyyy-MM-dd}.gz</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</pattern>
        </encoder>
    </appender>

    <!--TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
    <!-- Root Logger -->
    <root level="INFO">
        <appender-ref ref="console" />
 Appender 영역
< Root 영역
appender-ref ref="INFO_LOG" />
    <
    /root>
</configuration>

① Appender 영역 ⭐
② Encoder 영역
③ Pattern 영역
④ Root 영역 ⭐

Logback 적용하기

5-8. 정리

5장에서는,
컨트롤러를 작성해서 외부에 인터페이스를 노출하는 방법에 대해 배움
Swagger와 Logback도 다루어봄

  • Swagger가 제공하는 다양한 어노테이션을 통해 잘 다듬는 연습하기

  • 어떤 정보를 로그로기록하는 것이 향후에 애플리케이션의 유지보수에 효과적인지 고민해보기


📌 Tip

각 로그 레벨에 대한 내용

https://www.tutorialspoint.com/log4j/log4j_logging_levels.htm

Logback에 관한 더 자세한 내용은 공식 사이트의 메뉴얼 참고

https://logback.qos.ch/manual/introduction.html


✍️ 스터디 가이드

자바에서 문자열을 합치는 여러가지 방법의 연산속도를 비교해보면 더 좋은 코드 작성이 가능하다

  • +연산자
  • String 클래스의 concat() 메서드 활용
  • String 클래스의 append() 메서드 활용
  • String 클래스의 format() 메서드 활용

로그로 무엇을 기록해야 할까?

  • 로그에 어떤 내용을 포함해야 할 지 고민해보기
  • 애플리케이션마다 출력해야 할 로그가 다르기 때문에 고민해볼 필요가 있다.
profile
Moving forward based on records

0개의 댓글