TIL

효준·2024년 12월 6일
0

12월 6일 금요일
AM 알고리즘 풀이
PM 과제 수행

💡 Today Issue

Log

🤔 나의 생각 + 배운 것

Log

시스템의 이벤트, 사용자 활동, 네트워크 트래픽, 프로그램 동작 등등을 로그로 남긴다.

Log의 중요성

로그를 통해 디버깅일 가능하고 어느 라인에서 어느 로직이 문제가 발생했는지 확인이 가능하다.
또한 장애 원인을 판단하고 모니터링의 중요한 기반 자료가 된다.

스프링의 Log 라이브러리

스프링에서는 Slf4j로 로깅 프레임워크에 대한 추상 역할을 한다.
즉 Slf4j를 통해 로그를 생성 요청 하고 실제 생성 역할은 Log4j, Log4j2, Logback이 맡는다.
또한 Log4j, Log4j2, Logback는 모두 다른 장단점을 갖고 특징을 파악해 사용해야한다.

log4j2의 성능이 가장 우수하며 멀티스레드 환경에서는 더욱 더 성능 차이가 발생한다.
스프링 부트의 기본 로그 구현체는 logback이며

Log 사용법

로그에는 레벨이 존재한다.

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL

이를 사용하는 방법은 아래와 같다.

@Slf4j
public class Test {
	public void test() {
		log.trace("");
		log.debug("");
		log.info("");
		log.warn("");
		log.error("");
		log.fatal("");
	}
}

Log를 남기면 좋은 상황

  1. 실패하는 상황의 로그
    • 앞서 살펴본 가상의 사례처럼 고객이 원인을 문의하는 경우가 잦습니다. 따라서 이 때 요청된 데이터를 로그로 남겨두면 문의가 왔을 때 어떤 문제를 분석할 수 있는 자료가 됩니다.
  2. 실제로 발생하면 안 되는 예외 상황의 로그 (정책 위반으로 인한 예외는 제외)
    • 정책을 위반한 예외는 의도한 예외이므로 정상케이스입니다. 이런 경우는 로그를 남길 필요가 없습니다. 하지만 진짜 발생하면 안 되는 예외를 로그로 남기지 않으면 나중에 원인을 분석할 수가 없습니다.
  3. Slow Query
    • 별도 DB 관리 팀이 없다면 느린 쿼리에 대해서 로그를 남겨야 합니다. 슬로우 쿼리는 고객 경험에 부정적인 영향을 주므로 이탈할 가능성을 높입니다. 여러분들이 온라인 게임을 하는데 서버 응답이 느려 제대로 게임을 못 하면 안하는 것과 동일합니다.
  4. 외부 서비스 호출 실패
    • API와 같은 외부 서비스 호출 실패도 로그로 남기는 것이 좋습니다. 요즘은 MSA와 같은 구조가 흔합니다. MSA는 API 호출을 빈번이 하기 때문에 호출 실패 가능성이 상대적으로 높습니다. API 호출은 통상적으로 1-2회 정도 발생할 수 있지만, 만약 짧은 시간 안에 수십회, 수백회 오류가 발생하면 이것은 장애상황으로 간주해야 합니다. 이 때는 상대 API 담당자에게 이 사실을 알려 빠른 문제 해결에 힘써야 합니다.
  5. 잦은 문의 케이스
    • 고객들은 의외로 본인의 실수를 시스템의 장애라고 판단하는 경우가 굉장히 많습니다. 예를 들면 “분명 내가 쿠폰을 적용해서 결제를 했는데 왜 쿠폰 적용이 안 되어 있냐?”와 같은 것들입니다. 실제로 이런 경우는 로그보다는 DB 데이터를 확인하는 편입니다. 다만, 이런 문의가 자주 인입이 자주 되고, DB만으로 원인 파악이 어려운 경우 로그를 추가할 수도 있습니다.

Log 주의점

  • 로그도 리소스를 소비한다.
    로그 생성은 CPU와 디스크 I/O 리소스를 소모하기 때문에 테스트용 서버는 DEBUG, INFO 정도로 로그레벨을 설정한다.
    로그 출력 시 수 배 가까이 시간차이가 나게 됩니다. 따라서 필요한 곳에서만 사용하는게 좋습니다.

    • 대신 , 를 써라
log.info("User = " + user.toString()); // ❌ 권장되지 않는 방법
log.info("User = {}", user); // ✅ 권장
  • 사용시 문자열 덧셈 연산을 하게 되어 더 많은 리소스를 사용하게 된다.
  • 민감한 데이터는 로그로 남기면 안된다.
    개인 정보 및 민감한 데이터는 해킹의 위험이 있다. 또한 개인 정보는 개인정보보호법에 의해 법적 문제가 생길 수 있으니 주의 해야합니다.

  • 불필요한 DEBUG, INFO 로그
    일시적인 테스트를 위해 추가하는 경우 확인이 끝났다면 지워야합니다.

🕐회고

profile
사진은 캣타워가 생겨 포효하는 고양이입니다.

0개의 댓글

관련 채용 정보