본문 바로가기

Java8

템플릿 메소드(Template Method) 패턴으로 로직 중복 제거하기 이번 포스팅은 실무에서 템플릿 메소드 패턴을 사용하여 중복되는 '행위'를 해결한 일지를 작성해보고자 합니다.개요실무에서 Google의 Firebase Cloud Messaging을 활용하여 푸시를 전송하는 로직을 개편했다. FCM을 활용하여 푸시를 전송할 때는 FCM에서 발급하는 '토큰'을 전송해야 한다. 이때 FCM 서버는 토큰을 최대 500개까지 허용한다. 만약 회원과 토큰이 일대일이라고 가정하자. 푸시를 전송해야 하는 회원이 2천명이라면, 한 번에 2천개의 토큰을 Request Body에 담아 FCM에 요청하면 예외가 터지는 것이다.따라서 프로젝트 설계를 아래와 같이 구성했다.public class ListExtractor { ... public ListExtractor(final long ex.. 2024. 6. 14.
[JAVA] 레코드 사용하기 레코드는 무엇인가 우리는 흔히 이런 경험을 한다. 고작 단순한 데이터를 운반하는 일을 하는 객체를 모델링할 때 과도한 모델링으로 오버헤드가 발생하는 경험 말이다. 예를 들어, 보다 정확하게 객체를 모델링하려면 생성자부터, equals(), hashCode(), toString() 등 반복적인 코드를 많이 작성해야 했다. 레코드의 탄생은 이런 자바의 불편함에서 시작했다. 레코드는 코드를 들여다볼 때부터 “데이터 운반 객체”란 설계 의도를 파악하기 쉽다. 다음 두 코드를 보면 그 차이가 확연히 들어난다. public final class UserInfo { public final String name; public final int age; public UserInfo(String name, int age).. 2024. 1. 24.
[JAVA] 예외를 다루는 Best Practice 예외를 다루는 Best Practice가 있을까? 자바의 예외에 대한 포스팅은 굳이 이 글이 아니고도 많은 블로그에서 찾아볼 수 있으므로 생략하겠다. 간단히 언급해보자면 Exception은 try-catch를 강제하며 try-catch에서 해결하거나 throws해야만 한다. Runtime Exception은 해결 불가능한 예외로 try-catch를 강제하지 않는다. 스프링에서는 하나의 트랜잭션에서 RuntimeException이 터지면 롤백되도록 설계되었다. 이 정도는 다 아는 내용이라고 생각하고 더는 생략하겠다. 오늘 이 글에서 하고 싶은 말은 예외를 다루는 Best Practice가 있을지 고민한 글이다. 그 중에서도, 커스텀 예외는 언제 만들어야 할까? 에 대해 글로 녹여봤다. 글을 쓰게된 것은 사.. 2024. 1. 16.
자바에서 커넥션 풀을 이용해 커넥션을 얻는 방법 커넥션 풀이란? 매번 클라이언트의 요청마다 데이터베이스와 연결하여 데이터를 가져오는 방법은 매우 비효율적인 작업입니다. 예를 들어 배달의 민족 같은 어플은 이벤트를 할 때 1초에 클라이언트 요청량이 몇 만 건을 찍은 적이 있다고 합니다. 그럼 1초에 몇 만 건의 데이터베이스에 커넥션을 얻는 작업이 일어나야 합니다. 더 큰 문제는 클라이언트는 SQL을 실행하는 시간에 더해 커넥션을 새로 만드는 시간까지 추가해서 기다려야 한다는 점입니다. 이때 커넥션 풀이 등장합니다. 커넥션 풀은 데이터베이스의 연결을 관리하기 위한 기술입니다. 커넥션 풀은 미리 일정 개수의 커넥션을 만들어 놓고 필요할 때마다 연결을 재사용합니다. 이렇게 함으로써 매 요청마다 연결을 만드는 비용을 줄이고, 트래픽이 많은 웹 애플리케이션에서도.. 2023. 3. 27.
자바와 데이터베이스의 연결을 쉽게 해주는 JDBC에 대해 알아보자! [1] JDBC 알아보기 데이터베이스는 체계화된 데이터의 집합으로, 여러 클라이언트들이 공유하여 사용할 목적으로 이용됩니다. 자바에서 데이터베이스와 연결을 쉽게 해주는 표준 API로 JDBC가 있습니다. JDBC는 데이터베이스와 연결하고, 쿼리를 실행하며, 결과를 처리하는 일 등을 담당합니다. 이 포스팅에서는 JDBC가 제공하는 인터페이스 전반에 대해 훑어보겠습니다. [2] JDBC가 제공하는 인터페이스 JDBC의 역할은 크게 데이터베이스와 연결하고, 쿼리를 실행하고, 결과를 처리하는 일 등을 담당한다고 말했습니다. 이 기능들은 어떤 인터페이스가 담당하는지 알아보기 전, JDBC의 탄생 배경을 소개해드리고자 합니다. 세상에는 수많은 데이터베이스들이 존재합니다. MySQL, Oracle, MariaDB, .. 2023. 3. 14.
자바에서 setter를 지양해야 하는 이유 [1] setter-pattern을 지양해야 하는 이유 setter 패턴은 프로그래밍 언어에서 가장 유명한 패턴입니다. 심지어 많은 개발툴에서는 getter와 setter를 손쉽게 만들 수 있는 스니펫을 제공합니다. 컴퓨터 학원을 다녔던 저도, 처음 배웠던 패턴이 getter와 setter란 것을 생각하면 말 다했죠😂 그러나 setter의 사용에 대해서는 자바 개발자 뿐만 아니라, 다른 언어의 개발자 분들도 이렇게 말씀하십니다. setter, 사용하지마! 궁금했습니다. 왜 setter는 사용하면 안 되는 것일까요? 1. 캡슐화 원칙 위반 setter를 사용하면 객체 내부의 상태에 직접 접근이 가능합니다. 이는 캡슐화 원칙(https://ko.wikipedia.org/wiki/%EC%BA%A1%EC%8A%.. 2023. 3. 4.