yeseul.log
close
프로필 배경
프로필 로고

yeseul.log

  • 분류 전체보기 (90)
    • 프로젝트 (25)
      • 프로젝트 과정 (23)
      • 프로젝트 결과 (2)
    • 알아두면 좋은 개발 지식 (45)
      • 컨퍼런스 정리 (7)
      • Java & Spring (9)
      • 스터디 (25)
      • 인프라 (2)
    • 기타 (17)
      • 오늘 읽은 책 (6)
      • CloudWave 3기 (3)
      • 자격증 (2)
      • 컨퍼런스 (1)
      • 회고 (2)
      • 일기 (2)
  • 홈
  • GitHub
  • 방명록

Spring Boot에서 HTTP 요청/응답 로깅 필터 구현하기

배경서비스를 운영하면서 디버깅 시 어려움을 겪었습니다. 특히 예외가 발생하지 않았지만 오류인 경우를 파악하기 어려웠습니다. 예를 들어, 사용자는 A 옵션을 선택했다고 생각했으나 클라이언트 앱에서 잘못 처리되어 B로 전송되는 경우가 있었습니다. 이런 상황에서는 서버 입장에서 정상적으로 처리되기 때문에 예외 로그가 남지 않지만, 실제로는 사용자 의도와 다른 결과가 발생하는 문제였습니다. 기존에는 사용자가 어떤 요청을 했는지 로그 포맷이 따로 정해져 있지 않아 필요한 시점에 개별적으로 로그를 추가하는 방식으로 작업했기 때문에 다음과 같은 문제점이 있었습니다.API 요청/응답 흐름을 추적하기 어려움일관되지 않은 로그 형식문제 발생 시 원인 파악에 시간이 오래 걸림새로운 로그가 필요하다면 재배포가 필요함 해결 방..

  • format_list_bulleted 프로젝트/프로젝트 과정
  • · 2026. 1. 3.
  • textsms
Java/Kotlin 이미지 리사이징 라이브러리 간단 성능 비교 및 테스트

Java/Kotlin 이미지 리사이징 라이브러리 간단 성능 비교 및 테스트

제가 개발하고 있는 서비스는 이미지를 많이 다루기 때문에 썸네일 서버가 필수적입니다.기존에는 줌(zum.com)의 썸네일 서버를 함께 사용했으나,사용 중 이슈가 발생했고 외부 의존성을 제거하기 위해 썸네일 작업을 자체적으로 처리하기로 결정했습니다. 그래서 구글링을 통해 찾을 수 있었던 대표적인 라이브러리들을 비교해서 적합한 라이브러리를 선택하기로 했습니다. 비교 대상 라이브러리Graphics2D - Java 기본 APIImage.getScaledInstance() - Java 기본 APIImgscalr - 간단하고 효율적인 리사이징 전용 라이브러리Thumbnailator - 사용하기 쉽고 기능이 풍부한 라이브러리Marvin - 이미지 처리 프레임워크 이 중에서 저희 서비스는 Imgscalr를 사용하기로 ..

  • format_list_bulleted 프로젝트/프로젝트 과정
  • · 2025. 12. 18.
  • textsms

[잔디 일기] Spring Boot에서 CORS 오류 해결과 클래스 관심사 분리: JwtAuthFilter와 WebMvcConfig 활용하기

CORS(Cross-Origin-Resource-Sharing)란?서로 다른 출처(Origin)에서 리소스를 공유하는 것을 말합니다. URL의 구조URL은 다음과 같은 6가지 요소로 구성됩니다.https://www.domain.com:8080/member?query=name&page=1#firsthttps:// www.domain.com :8080 /member ?query=name&page=1 #firstProtocol: https://Host: www.domain.comPort: :8080Path: /memberQuery string: ?query=name&page=1Fragment: #first여기서 Protocol, Host, Port 부분이 Origin(출처)입니다. CORS 설정이 되어 있지 ..

  • format_list_bulleted 프로젝트/프로젝트 과정
  • · 2024. 11. 3.
  • textsms

[hot deal] API 설계 과정에서의 고민

1. Redis와 Kafka를 활용해서 물건 구매 로직을 구현한 이유1. Redis를 이용한 실시간 재고 관리물건 구매 요청이 들어오면 Redis에서 물건 수량을 즉시 감소하도록 설계했습니다. 서비스는 예약된 시간에만 오픈되기 때문에, 서비스 시작 전 Redis에 물건의 초기 수량을 미리 저장해두는 방식으로 준비하고 있습니다. 현재는 물건 수량 감소 로직만 구현되어 있지만, 추후 서비스가 안정화되면 Redis에 물건 수량을 미리 저장하는 로직도 추가할 계획입니다.2. Kafka를 이용한 순차적 DB 반영한 번에 대량의 구매 요청이 들어올 경우를 대비해 Kafka를 사용하여 데이터의 순차 처리를 보장하고자 했습니다. 물건 구매 요청이 발생하면 해당 요청을 Kafka에 기록하고, Kafka의 Consumer..

  • format_list_bulleted 프로젝트/프로젝트 과정
  • · 2024. 11. 3.
  • textsms

[hot deal] UUID의 사용 범위에 대한 고민

서비스를 개발할 때 UUID를 Primary Key로 사용하는 방법이 있습니다. 하지만 저는 Member 클래스에만 UUID를 필드로 추가하였고, 그 이유를 정리해 보았습니다. 1. 왜 UUID 사용하지 않아야 할까?UUID는 전역적으로 고유한 식별자를 생성할 수 있어 데이터베이스의 ID로 자주 사용됩니다.하지만 프로젝트를 진행하면서 저장 공간 효율성과 검색 성능을 고려해 UUID를 ID로 사용하지 않기로 결정 했습니다. 1.1. 저장 공간 효율성UUID는 128비트로 길이가 길어, 숫자형 ID보다 더 많은 저장 공간을 차지합니다. 1.2. 검색 성능UUID는 랜덤하게 생성되기 때문에 데이터베이스에서 인덱스를 생성할 때 정렬되지 않은 상태로 저장됩니다.이로 인해 데이터베이스 검색 시 성능이 떨어질 수 있..

  • format_list_bulleted 프로젝트/프로젝트 과정
  • · 2024. 11. 3.
  • textsms

[hot deal] 새로운 객체 생성에 Builder 패턴을 사용하지 않은 이유

최근 프로젝트에서 객체 생성 시 Builder 패턴을 도입할지 고민했지만, 필수 필드 누락으로 인해 객체가 잘못 생성될 위험이 있어 Builder 패턴을 사용하지 않기로 결정했습니다. 이에 대해 간단히 기록해 보았습니다. 1. Builder 패턴의 장점1.1. 가독성 향상Builder 패턴은 복잡한 객체의 생성 과정을 가독성 높게 표현할 수 있습니다.// 예시: Builder 패턴을 이용한 객체 생성Member member = new Member.Builder() .id(1L) .name("Yeseul Hong") .email("yeseul@example.com") ..

  • format_list_bulleted 프로젝트/프로젝트 과정
  • · 2024. 11. 2.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (90)
    • 프로젝트 (25)
      • 프로젝트 과정 (23)
      • 프로젝트 결과 (2)
    • 알아두면 좋은 개발 지식 (45)
      • 컨퍼런스 정리 (7)
      • Java & Spring (9)
      • 스터디 (25)
      • 인프라 (2)
    • 기타 (17)
      • 오늘 읽은 책 (6)
      • CloudWave 3기 (3)
      • 자격증 (2)
      • 컨퍼런스 (1)
      • 회고 (2)
      • 일기 (2)
최근 글
인기 글
최근 댓글
태그
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바