API 접근 기록을 저장하는 기능을 맡으면서 Path, QueryString, Referrer, Body 값을 DB에 저장을 한다. HTTP의 주요 값을 갖고 있는 HttpServletRequest 클래스를 통해서 Path, QueryString, Referrer 조회하면 정상적으로 조회가 되지만, Body 조회를 하면 값이 없다고 나온다. 그 이유를 찾아보니 네트워크로부터 들어오는 데이터여서 한 번만 읽을 수 있도록 제한되어 있다고 한다. 개발환경 : Java 11, SpringBoot 2.7.71. 문제 사례public class TestController { @PostMapping("/test") public void test(@RequestBody String body, HttpSer..
생성 패턴 중에서 많이 쓰이는 팩토리 패턴(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..