본문 바로가기

전체 글669

간단한 코드 한 줄로 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장 사용자 수에 따른 규모 확장성 로드 밸런서 부하 분산 집합에 또 하나의 웹 서버를 추가하고 나면 장애를 자동복구하지 못하는 문제(no failover)는 해소되며, 웹 계층의 가용성(availability)은 향상된다. 좀 더 구체적으로 살펴보면 다음과 같다. 서버 1이 다운되면 모든 트래픽은 서버 2로 전송된다. 따라서 웹 사이트 전체가 다운되는 일이 방지된다. 부하를 나누기 위해 새로운 서버를 추가할 수도 있다. 웹사이트로 유입되는 트래픽이 가파르게 증가하면 두 대의 서버로 트래픽을 감당할 수 없는 시점이 오는데, 로드밸런서가 있으므로 우아하게 대처할 수 있다. 웹 서버 계층에 더 많은 서버를 추가하기만 하면 된다. 그러면 로드밸런서가 자동적으로 트래픽을 분산하기 시작할 것이다. 데이터베이스 다.. 2024. 2. 9.
[독서 기록] 테스트 주도 개발로 배우는 객체지향 설계와 실천 객체 지향 설계와 실천테스트 주도 개발로 배우는 『객체 지향 설계와 실천』. 소프트웨어 개발의 여러 층위에서 TDD가 어떻게 작동하는지 보여주면서 테스트로 코드를 객체 지향적으로 구성하고 객체 간 관계를 설명하는 방법을 제시함으로써 TDD를 사용하는 팀이 실제 개발 프로젝트에서 부딪힐 법한 문제를 체계적으로 풀어낸다. TDD를 효과적으로 구현하는 법, 더 깔끔하고 유지 보수하기 좋은 코드를 만드는 법 등을 다룬다.저자스티브 프리먼, 냇 프라이스출판인사이트출판일2013.06.20    왜 테스트의 '안내를 받는다'고 했나? 우리는 테스트 코드를 먼저 작성한다. 그 편이 더 나은 코드를 작성하는 데 도움이 된다는 사실을 알기 때문이다. 테스트를 먼저 작성하면 .. 2024. 2. 9.