[ONEDAYARTICLE] JAVA REST API 로깅의 가이드 라인

2023. 8. 30. 09:00

먼저 JAVARESTAPILogging 을 하나하나 따로 먼저 알아봐야 할 것같다.

1. JAVA

  • 일단 지금 내가 주력으로 밀고 있는 개발 언어중에 하나.

2. REST API

"RESTful이란 무엇인지?" 라는 질문에 먼저 답변을 해야 한다.

  • 먼저 RESTful은 Representational State Transfer의 약자이다.
  • 웹 애플리케이션의 설계 원칙을 기반으로한 아키텍처 스타일이다.
  • RESTful은 분산 시스템에서 리소스를 표현하고 다루는 방식으로, 클라이언트와 서버 간의 통신을 단순하고 일관성 있게 만들어준다.
  • RESTful 아키텍처는 웹의 기초를 이루는 원칙들을 적용하여 확장 가능하고 유지보수가 용이한 웹 서비스를 개발할 수 있음.

결론적으로 이야기 한다면 다음과 같다.

  1. RESTful 아키텍처는 웹 서비스를 개발하는 데 있어서 확장성, 유연성, 성능, 관리 용이성 등을 총합적으로 개선해주는 원칙.
  2. 이를 따라 개발된 웹 서비스는 간결하고 일관성 있는 API를 제공하며, 다양한 플랫폼 및 클라이언트에서 사용하기 용이한 특징을 보유.

3. Logging

이 이야기를 하려면 일단 로그에 대해서 알아볼 수 있어야 한다.

  • 로그애플리케이션의 작동 방식을 이해하는 데 필수적.
  • 로그를 분석하는 것은 무엇이 잘못되었는지 가장 빨리 감지하는 방법.
  • 모범 사례를 따르면 로그에서 더 많은 가치 획득 가능.

그렇다면 JAVA REST API 에서 효과적인 로깅은 어떤 방법이 있는지 알아보자.


1. 표준 로깅 라이브러리 사용

로깅을 여러 가지 방법으로 수행할 수 있지만, Log4j, Logback과 같은 표준 로깅 라이브러리를 사용하는 것이 좋다.

-> 현재 내가 사용했던 라이브러리는 Log4J 만 중간에 로그 확인용으로 사용했었다.

-> 좀더 효율적인 로그를 찍기 위해서는 어떤 것을 선택해야 할지도 남은 숙제이다.

2. Appenders 현명하게 선택

Appenders는 다양한 대상에 로그 메시지를 작성하는 역할을 한다.

특정 사례에 따라 Appenders를 현명하게 선택하는 것이 중요하다.

예를 들어, 로그를 오랫동안 저장해야 하는 경우 데이터베이스를 선택할 수 있다.

-> Appenders 를 처음 들어보았다. 아직까지는 로그에 대해서 깊게 파고들어본적이 없어서 그런 것이다.

-> 이때 로그를 데이터베이스에 저장을 하는 경우가 있다고 하는데, 실제 현업에서는 어떻게 저장이 되는지 그것도 알아봐야겠다.

3. 의미 있는 메시지 사용

"Error hurved"(오류 발생) 대신 "Failed to database"(데이터베이스에 연결하지 못함)을 기록하는 것이 좋습니다.

-> 이 부분은 예시를 든 것 같은데, 오류를 그냥 발생했다고 찍는것이 아니라, 어떠한 오류가 있는지 분기별로 잘 나누어서 찍어보라는 것 같다.

4. 로그 메시지 형식 지정 및 구조화

  • 각 메시지에 대해 일관되고 명확한 패턴사용
  • 표준 날짜 및 시간 형식(ISO 8601) 사용
  • 공통 구분 기호(공백 또는 세미콜론)를 사용하여 서로 다른 필드 구분
  • JSON을 사용하여 중첩된 데이터 표시
  • 문자열 연결(+) 대신 매개 변수화된 메시지({})를 사용

-> 이 부분은 조금더 로그를 공부하고 다시 언급을 해야 할 것 같다.

5. 로깅 필터 및 인터셉터 구현

로깅 필터 및 인터셉터를 사용하여 다음과 같은 다양한 로깅 기능을 구현할 수 있습니다.

  • 요청 및 응답 세부 정보 기록
  • REST API의 실행 시간 및 성능 메트릭 기록
  • 발생하는 예외 및 오류 기록
  • 인증 및 권한 정보 기록
  • 비즈니스 로직 및 유효성 검사 기록

-> 로깅에서도 필터를 쓴다는 말은 처음들어본 것 같다.

-> 기존에 알고 있었던 필터와 같은 경우는 Spring Security 에서의 filter 단이였던 것 같은데, 좀서 자세히 알아봐야 될 것 같다.

6. 민감한 정보는 마스킹 및 암호화

  • 정규식 또는 패턴을 사용하여 민감한 데이터를 별표(*)로 변경
  • 해싱 또는 암호화 알고리즘을 사용해 중요한 데이터를 읽을 수 없는 문자열로 변환

-> 진짜 이부분은 좀 노가다가 필요하지 않을까 싶다

-> 특히나 비지니스 로직에서 받아오는 값들을 찍을 때에는 마스킹이 꼭 필요할 것 같다.

7. 적절한 로그 레벨 사용

8. 관련된 모든 것 로깅

9.JSON 포맷 사용

10. 로그 파일 갱신 및 보관

로그 파일은 시간이 지남에 따라 매우 커지고 디스크 공간이 많이 소모될 수 있습니다. 로그 파일의 크기와 수를 관리하기 위해 주기적으로 변경하고 보관해야 합니다.

  • 시간대별 갱신: 일정한 시간 간격을 기준으로 로그 파일 갱신
  • 크기별 갱신: 일정한 크기를 기준으로 로그 파일 갱신
  • 하이브리드 갱신: 시간과 크기 기준을 기준으로 로그 파일 갱신
  • 압축: 로그 파일의 크기를 줄이기 위해 갱신 후 압축
  • 삭제: 일정 시간이 경과한 후 또는 일정 수의 파일에 도달한 경우 이전 로그 파일 삭제

좀 더 알아봐야 하는거

Logging,Log4j,Logback,Appenders

BELATED ARTICLES

more