로그란?
로그는 애플리케이션이 실행되는 동안
어떤 일이 발생했는지 기록해두는 정보이다.
예를 들면 다음과 같은 내용을 남길 수 있다.
log.info("계좌 생성 요청 userId={}", userId);
log.error("계좌 생성 실패 userId={}", userId, e);
단순히 코드가 실행됐는지 확인하는 용도뿐만 아니라,
나중에 문제가 발생했을 때 원인을 찾기 위한 기록으로 사용된다.
왜 로그가 중요할까?
개발 중에는 디버거를 사용해서 코드를 한 줄씩 확인할 수 있다.
하지만 실제 서버에서는 사용자의 요청이 계속 들어오고,
문제가 언제 어디서 발생했는지 바로 알기 어렵다.
이때 로그가 없으면 다음과 같은 문제가 생긴다.
- 요청이 들어왔는지 모름
- 어디서 실패했는지 모름
- 어떤 데이터로 실패했는지 모름
- 예외가 왜 발생했는지 모름
결국 코드를 다시 추측하면서 확인해야 한다.
반대로 로그가 잘 남아 있으면
문제가 발생한 흐름을 따라가면서 원인을 빠르게 찾을 수 있다.
예시
계좌 생성 기능에서 에러가 발생했다고 가정해보자.
로그가 없다면 단순히 이런 결과만 보게 된다.
500 Internal Server Error
하지만 로그를 남겨두면 다음처럼 확인할 수 있다.
log.info("계좌 생성 요청 userId={}, competitionId={}", userId, competitionId);
try {
accountService.createAccount(userId, competitionId);
} catch (Exception e) {
log.error("계좌 생성 실패 userId={}, competitionId={}", userId, competitionId, e);
throw e;
}
이렇게 하면 어떤 사용자의 요청에서 문제가 발생했는지,
어떤 대회 계좌를 생성하다 실패했는지 확인할 수 있다.
주의할 점
로그는 많이 찍는다고 무조건 좋은 것은 아니다.
너무 많은 로그는 오히려 중요한 정보를 찾기 어렵게 만든다.
또한 비밀번호, 토큰, 개인정보 같은 민감한 값은
절대 로그에 남기면 안 된다.
// 좋지 않은 예
log.info("로그인 요청 password={}", password);
로그는 문제를 해결하기 위한 정보만 적절히 남기는 것이 중요하다.
'Study' 카테고리의 다른 글
| Jenkins 개념 정리 (0) | 2026.05.11 |
|---|---|
| 로그 레벨 (0) | 2026.05.10 |
| Redis로 분산락 거는 방법 (0) | 2026.05.07 |
| 분산락 (0) | 2026.05.06 |
| N+1문제 (0) | 2026.05.05 |