upcurve631 티켓 서비스 백엔드 시스템에서 중복 요청 이슈를 멱등하게 처리하기 이 글에 대해서 회사에서 담당하는 티켓 한 티켓 서비스의 QA(품질 보증) 과정에서 중복 등록 이슈가 보고되었습니다. 사용자가 등록 버튼을 연속으로 빠르게 클릭할 경우 티켓이 중복으로 등록되는 현상입니다. 본 글은 이 문제를 접하며 문제를 정의하고 해결하는 과정을 기록하고 사내에 공유한 글을 재편집한 글입니다. 여러 가지 고민과 결론, 그리고 서버 개발을 하며 만나는 멱등성과 동시성에 있어서 추가로 생각해볼 거리들을 다뤘습니다. 업무의 특성상 구체적인 용어나 코드는 컨셉으로 대체하였습니다. 요약 티켓 서비스의 QA 과정 중 발견된 중복 등록 이슈에 대해 다룹니다. 사용자가 등록 버튼을 연속으로 빠르게 클릭할 때 발생하는 중복 등록 현상에 대한 해결 방안 모색 과정을 기술합니다. 어플리케이션 수준의 검증과.. 2024. 3. 1. [독서기록] 클린 아키텍처 서문 현재의 소프트웨어는 과거와 동일한 것들로 구성된다. 여전히 if문, 할당문, while 루프로 구성된다. 지금 우리는 자바, C#, 루비라는 훨씬 진보한 언어를 쓰고, 객체 지향 설계라는 우월한 패러다임을 사용한다고 말이다. 맞는 말이다. 그렇다 하더라도 1960년대나 1950년대와 마찬가지로 코드는 여전히 순차, 분기, 반복의 집합체일 뿐이다. 컴퓨터 프로그래밍을 하는 관행을 정말 유심히 관찰해 보면 지난 50년 동안 변한 게 거의 없다는 사실을 깨달을 것이다. 언어는 조금 발전했다. 도구는 환상적으로 좋아졌다. 하지만 컴퓨터 프로그래밍을 이루는 기본 구성요소는 조금도 바뀌지 않았다. 이것이 열쇠다. 이처럼 코드가 변하지 않았다는 사실이 시스템의 종류와 관계없이 소프트웨어 아키텍처의 규칙이 일관된.. 2024. 2. 26. 간단한 코드 한 줄로 NPE (Null Pointer Exception) 방지하는 방법 요약 자바 코드에서 자주 발생하는 NPE를 간단한 습관 변경으로 예방하는 방법을 소개합니다. NPE 방지해야 하는 이유 ? 개발을 하다 보면, NullPointerException (이하 NPE)을 만나는 일은 빈번한데요. NPE는 자바에서 가장 흔하게 발생하는 런타임 예외 중 하나로, 개발자가 정의한 커스텀 예외가 아니라는 점에서 예상치 못한 예외로 분류됩니다. 어떤 변수가 null 상태인데, 마치 유효한 객체인 것처럼 접근하려 할 때 NPE가 발생합니다. 개발 중이라면 그나마 괜찮겠지만 배포한 서버에서 불연듯 NPE가 뜨면 난감해집니다. 🥵 한 가지 예시 NPE를 방지하기 위한 가장 간단하고 효과적인 방법 중 하나는 객체 참조나 메서드 사용시에 주의를 기울이는 것입니다. 예를 들어 equals 메서드.. 2024. 2. 18. 예외 알림 프로세스에서 OOM을 방지하며 중복 처리를 위한 Marking 방식 (WeakHashMap) 개요 사내 공통 예외 처리 프로세스에서 중복을 처리한 방식을 소개합니다. 구체적인 코드는 컨셉 코드로 대체하였습니다. 요약 Aspect로 잡힌 예외에 대해 비동기 스레드에 태워 알림을 발생시키는 상황입니다. 이때 레이어드 아키텍처 구조에서 하위에서 발생한 예외가 전파되면서 동일한 예외가 중복으로 포착되는 문제가 발생했습니다. 한 번 처리된 예외는 다시 알림이 발생하지 않도록 하려면 어떻게 해야 할까요? 이 글에서는 마킹 방식으로 중복 알림을 방지하면서, 이때 발생 가능한 OOM(Out of Memory)을 예방하기 위해 WeakHashMap을 활용한 방식에 대해 소개합니다. 문제 상황 Spring의 AOP를 활용해 애플리케이션의 예외를 횡단으로 포착하여 중앙집중식으로 예외를 관리할 수 있습니다. 다음과 .. 2024. 2. 18. Gson 베이스 프로젝트에서 LocalDateTime 컨버팅 지옥 탈출하기 이글에 대해서 사내 프로젝트에서 사용하는 Gson을 개선하면서 작성한 글입니다. 특히 날짜/시간 포맷 관련된 컨버팅 로직에 대한 해결책을 제시합니다. 레거시 호환을 위해 Jackson 대신 Gson을 사용하면서, 스프링과의 호환성 문제로 인해 종종 컨버팅 오류가 발생하는데, LocalDateTime 처리 문제도 그 중 하나입니다. 단순 컨버팅 이슈부터 여러 서비스에서 일관성 없는 설정들 때문에 코드베이스가 복잡해지는 상황을 개선하고 싶었고, 더 이상 시간 관련 컨버팅 이슈에 신경을 쓰지 않는 것을 목적으로 가능한 모든 경우를 호환할 수 있는 글로벌한 LocalPeriodTime 컨버터를 구현하게 됩니다. 실제 코드는 컨셉 코드로 대체하였습니다. 요약 Gson을 사용하는 현 프로젝트에서 LocalPerio.. 2024. 2. 18. 이전 1 ··· 11 12 13 14 15 16 17 ··· 127 다음