[개발 일기] 2025.03.20 - 에러 로그를 찍어도 되나? (Feat : 시큐어 코딩)

2025. 3. 20. 14:11·개발 일기

💡 개요

 

OKKY에선 예외가 발생하면 해당 예외에 대한 로그를 찍으면 되냐 안 되냐 시큐어 코딩 위반이냐 아니냐에 대해 이야기하는 것을 봤다.

 

 

오늘은 에러 로그를 찍는게 맞는지 아닌지 정리해 보자.

 

 

 

📕 시큐어 코딩

 

시큐어 코딩이란 ‘사용자가 입력한 데이터는 신뢰할 수 있는 데이터가 아니다’라는 전제를 기반으로 코드를 작성하는 것이다.

 

 

🛠️ 시큐어 코딩 점검 항목

 

  • 입력 데이터 검증 및 표현
    • 사용자의 입력값을 검증하여 SQL Injection, XSS, CSRF을 방지한다.
    • 예: 사용자 입력값을 검증하고, SQL 쿼리 실행 전에 바인딩 처리하여 실행

  • 보안 기능
    • 인증, 접근 제어, 암호화 등을 적절히 적용하여 보안 기능을 강화해야 한다.
    • 예: 비밀번호를 평문으로 저장하지 않고, 해시 함수(예: bcrypt)로 암호화

  • 시간 및 상태
    • 경쟁 조건(Race Condition), 세션 관리 미흡 등의 문제를 방지해야 한다.
    • 예: 멀티스레드 환경에서 동기화 처리, 세션 타임아웃 설정

  • 에러 처리
    • 오류 메시지에 민감한 정보(예: 스택 트레이스, DB 정보 등)가 노출되지 않도록 처리해야 한다.
    • 예: 예외 발생 시 사용자에게는 일반적인 오류 메시지만 노출

  • 코드 오류
    • 메모리 누수, NullPointerException, 논리 오류 등으로 인해 보안 취약점이 발생하지 않도록 주의해야 한다.
    • 예: try-catch-finally를 활용하여 자원 해제, 정적 코드 분석 도구 사용

  • 캡슐화
    • 중요 데이터를 안전하게 보호하고, 불필요한 정보 노출을 방지해야 한다.
    • 예: 중요 정보(예: 계정 정보)를 외부에서 직접 접근할 수 없도록 private 필드로 선언

  • API 오용
    • 잘못된 API 사용으로 인한 보안 취약점을 예방해야 한다.
    • 예: 보안이 취약한 암호화 알고리즘 사용 금지(MD5, SHA-1 대신 SHA-256 이상 사용)

위 7가지 점검 항목 중 우리가 주목해야 할 것은 에러 처리이다.

 

 

 

🛠️ 에러 처리와 시큐어 코딩

 

시큐어 코딩의 에러 처리 항목을 보면, "서버 내부에서 발생한 에러 로그를 찍어선 안 된다"라고 표현되어 있다.

 

 

하지만 나는 이 의견에 적극적으로 찬성하기 어렵다.

 

 

물론 클라이언트에게 에러 응답을 보낼 때, 지나치게 상세한 에러 사유를 제공하는 것은 보안상 위험할 수 있다는 점에 동의한다.

 

 

내부 시스템의 구조나 데이터베이스 관련 정보를 그대로 노출하는 것은 해킹의 단서가 될 수 있기 때문이다.

 

 

그러나 서버 내부에서조차 에러 로그를 남기지 말아야 한다는 주장에는 동의하기 어렵다.

 

 

왜냐하면 에러 로그가 개발자에게 주는 이점이 매우 크기 때문이다.

 

 

대표적인 예가 디버깅이다.

 

 

에러가 발생했다는 사실 자체는 누구나 알 수 있다.

 

 

하지만 진짜 어려운 것은 그 에러가 정확히 어디에서, 왜 발생했는지를 찾아내는 것이다. 에러 로그는 이러한 과정에서 중요한 단서를 제공한다.

 

 

실제로 많은 서비스에서도 내부 로그를 필수적으로 남기고 있으며, 이를 통해 문제 발생 시 신속하게 원인을 분석하고 해결할 수 있다.

 

 

그리고 이미 서버 내부 로그를 열람할 수 있는 상태라면, 공격자(해커)는 단순히 로그를 보는 것에서 끝나지 않는다.

 

 

그 시점에서 공격자의 목표는 로그가 아니라, 훨씬 더 중요한 데이터베이스나 시스템 주요 정보일 가능성이 크다.

 

 

즉, 로그 자체가 보안 문제의 본질이 아니다.

 

 

진짜 중요한 것은 로그를 어떻게 관리하느냐이다.

 

 

 

👨🏻‍💻 참고

예외를 씹지 말자. 예외를 씹지 말자… | OKKY

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.03.22 - 스케줄링 기법  (0) 2025.03.22
[개발 일기] 2025.03.21 - 외부에서의 주입이 테스트 코드에 용이한 이유  (0) 2025.03.21
[개발 일기] 2025.03.19 - @Valid  (0) 2025.03.19
[개발 일기] 2025.03.18 - MultipartFile와 Setter의 관계  (0) 2025.03.18
[개발 일기] 2025.03.17 - Code Kata  (0) 2025.03.17
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.03.22 - 스케줄링 기법
  • [개발 일기] 2025.03.21 - 외부에서의 주입이 테스트 코드에 용이한 이유
  • [개발 일기] 2025.03.19 - @Valid
  • [개발 일기] 2025.03.18 - MultipartFile와 Setter의 관계
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.03.20 - 에러 로그를 찍어도 되나? (Feat : 시큐어 코딩)
상단으로

티스토리툴바