생성 패턴 중에서 많이 쓰이는 팩토리 패턴(Factory Pattern)에 대해 알아보겠습니다. 1. 팩토리 패턴(Factory Pattern)의 개념 및 역할[ 팩토리 패턴이란? ]팩토리 패턴(Factory Pattern)은 객체를 생성하는 디자인 패턴 중 하나입니다. 객체를 생성하는 과정을 캡슐화하여 클라이언트가 직접 객체를 생성하는 것이 아니라 생성 로직을 분리해서 객체를 요청하고 생성하는 디자인 패턴입니다. 이를 통해 객체 생성의 유연성을 높이고, 의존성을 줄이며, 코드의 확장성을 향상시킵니다. [ 팩토리 패턴 주요 4가지 역할 ]1. 팩토리 패턴을 사용하여 생성 과정을 캡슐화할 수 있다. 이때 생성 과정의 변경 사항은 호출자에게 투명성을 가진다.2. 생성 과정을 팩터리 클래스로 추출한 후, 재..
Slow 쿼리나 실제 실행되는 쿼리가 인덱스를 제대로 실행되는지 확인할 때 실행 계획(Explain) 사용한다.실행 계획을 볼 때 각 항목들(select_type, type, key, ref, filtered, extra) 보게 되는데 이 항목들을 읽을 수 있는 배경지식이 필요하다.하지만 실행 계획을 읽을 때마다 “이 항목은 어떤 의미였지? 이 항목에 대한 타입은 무슨 의미였지?” 까먹거나 정확히 확인하기 위해서 구글링 하는 경우가 많았다. 그래서 이번에 구체적으로 정리하기로 마음 먹었다. 1. Explain 항목[ Select Type ]쿼리에서 사용된 SELECT 문의 종류를 알려준다.Select Type 명설명SIMPLE가장 일반적인 SELECT 문이며, 복잡한 UNION이나 서브쿼리가 없는 경우..
Nginx에서 SSL 인증서 만료가 되면 갱신을 해야한다. 만약 갱신을 제때 못하면 신한카드 SSL 인증서 만료로 인한 결제 장애 생기는 일이 생긴다.이번에 갱신을 하면서 대표적인 인증 기관(CA : Certificate Authority), 각각의 인증서가 어떻게 이루어져 있는지, 갱신은 어떻게 하는지에 대해 알아보았다.일단 인증 기관을 정리하면 아래와 같다.1. Let's Encrypt: Let's Encrypt- 무료로 SSL/TLS 인증서를 발급하는 비영리 기관이다. 많은 웹 호스팅 서비스 및 웹 서버에서 Let's Encrypt를 지원하고 있어, 사용자들이 쉽게 무료 SSL/TLS 인증서를 획득할 수 있다.2. DigiCert: DigiCert- 글로벌 인증 기관 중 하나로, 고급 보안 솔루션을..
회원들의 정보를 엑셀 다운로드를 했는데 메모리 부족 에러(OOM)가 뜬다. 자세히 들여보니, 대량의 데이터를 조회했을 때 DB에서 애플리케이션한테 데이터를 받는 과정에서 OOM 발생하였다.발생한 원인을 파악하기 위해 JVM heap 메모리 최대 크기에 대해 알아보았다.메모리 최대 크기는 운영 체제 및 시스템의 물리적 메모리 등 따라서 정해진다.내 PC 기준(mac, 64bit, 메모리 32GB) 사용 가능한 최대 메모리와 JVM heap memory 조회해봤더니// 사용 가능한 최대 메모리long maxMemory = Runtime.getRuntime().maxMemory();// JVM heap memorylong heapSize = Runtime.getRuntime().totalMemory();- 사..
Nginx를 사용하여 단일 인스턴스에서 여러 도메인에 로드밸런싱과 HTTPS 연결하여 안전하게 운영하는 법에 대해 알아보겠습니다. 1. 도메인 구입하기가비아 사이트에서 1년 할인 받아서 15,000원에 구입하였습니다. 2. AWS route 연결AWS route에서 호스팅을 생성합니다. 호스팅 이름은 도메인을 맞춰서 진행하였습니다. 아래 사진을 보면 총 레코드가 5개인데 그 중 2개는 기존에 만들어져 있었고 3개 레코드를 생성합니다.이름 : seolyu.com 유형 : A 값 : 퍼블릭 IPv4 주소이름 : api.seolyu.com 유형 : A 값 : 퍼블릭 IPv4 주소이름 : www.seolyu.com 유형 : CNA..
다국적 고객을 대상으로 하는 서비스에서는 사용자 경험을 높이기 위해 다양한 언어로 메세지를 제공해야 합니다. 이 과정에서 MessageSource, Locale, MessageCode와 같은 요소들이 필요합니다. 그러나 이러한 요소로 인해서 다국어 메세지 처리가 애플리케이션에서 문제점을 낳게 되는데, 어떤 문제점이 있는지 어떻게 해결했는지 살펴보도록 하겠습니다. 개발환경 : Java 11, SpringBoot 2.7.71. 문제점 - 의존성 증가와 복잡한 코드주문 조회 예제 코드OrdersController 클래스public class OrdersController { private final OrdersService ordersService; @GetMapping("/order/{o..