<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Backend on Jay's Blog</title><link>https://jaylab.blog/categories/backend/</link><description>Recent content in Backend on Jay's Blog</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Thu, 24 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://jaylab.blog/categories/backend/index.xml" rel="self" type="application/rss+xml"/><item><title>기존 JDK를 지우지 않고 JDK 11로 빌드하기: SDKMAN이 PATH를 가로채는 원리</title><link>https://jaylab.blog/jdk-version-manager-sdkman/</link><pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><guid>https://jaylab.blog/jdk-version-manager-sdkman/</guid><description>로컬은 Corretto 21인데 빌드 테스트는 JDK 11이 필요할 때, SDKMAN이 기존 JDK를 건드리지 않고 PATH 우선순위만 가로채 세션 단위로 버전을 바꾸는 원리와 기존 JDK를 처리하는 세 가지 선택</description></item><item><title>쉘 스크립트 대신 Dockerode를 고른 이유: 멀티 테넌트 프로비저닝의 롤백과 동시성</title><link>https://jaylab.blog/multi-tenant-provisioning-system/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>https://jaylab.blog/multi-tenant-provisioning-system/</guid><description>docker run을 감싼 쉘로는 실패 원인도 롤백도 다룰 수 없어 Dockerode와 스키마 분리로 테넌트 생성을 자동화한 과정</description></item><item><title>Nginx Proxy Manager API로 Proxy Host 자동으로 붙이기</title><link>https://jaylab.blog/npm-proxy-host-dynamic-creating/</link><pubDate>Sat, 05 Jul 2025 00:00:00 +0000</pubDate><guid>https://jaylab.blog/npm-proxy-host-dynamic-creating/</guid><description>테넌트가 생길 때마다 손으로 하던 도메인 연결을 Nginx Proxy Manager API로 Proxy Host를 만들어 자동화했다.</description></item><item><title>ModSecurity가 ?data=test를 403으로 막기까지</title><link>https://jaylab.blog/modsecurity-waf-with-ubuntu-setting/</link><pubDate>Mon, 12 Aug 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/modsecurity-waf-with-ubuntu-setting/</guid><description>Ubuntu 컨테이너의 Nginx에 ModSecurity를 붙이고, test가 든 요청만 403으로 막히는 것을 access log와 audit log로 확인했다.</description></item><item><title>ModSecurity는 SQL Injection을 점수로 막는다</title><link>https://jaylab.blog/modsecurity-waf-docker-setting/</link><pubDate>Tue, 30 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/modsecurity-waf-docker-setting/</guid><description>Docker로 ModSecurity WAF를 띄우고 SQL Injection 요청이 403으로 막히는 과정을 로그의 Anomaly Score로 따라가 본 실습 기록</description></item><item><title>MyBatis bind 태그는 Enum을 부를 때 쓸모가 있다</title><link>https://jaylab.blog/mybatis-bind-tag-dynamic-sql-query/</link><pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/mybatis-bind-tag-dynamic-sql-query/</guid><description>MyBatis &lt;bind&gt;의 쓸모는 쿼리로도 되는 계산보다 Enum 메서드 반환값을 SQL로 끌어와 하드코딩을 없애는 데 있었다.</description></item><item><title>Nginx 한 대로 시험한 ELK를 Nginx Proxy Manager에 합치기</title><link>https://jaylab.blog/elk-for-docker-setting/</link><pubDate>Sun, 07 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/elk-for-docker-setting/</guid><description>Nginx 컨테이너로 로그 전달 경로를 먼저 확인하고, 같은 볼륨 공유 방식으로 Nginx Proxy Manager에 ELK를 합쳐 ModSecurity 로그를 Kibana에 쌓았다.</description></item><item><title>Nginx Proxy Manager - Official Guide &amp; Local Setup for Customization</title><link>https://jaylab.blog/npm-official-setup-and-customization/</link><pubDate>Fri, 05 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/npm-official-setup-and-customization/</guid><description>커스텀을 위해 코드 수정 후 Nginx Proxy Manager를 정상적으로 실행할 수 있어야했는데, 그 어디에서도 이를 위한 가이드를 찾을 수 없었다. 결국 직접 소스코드 분석 후 다음과 같은 내용들을 확인했다.</description></item><item><title>requirements.txt 대신 Poetry로 의존성 관리</title><link>https://jaylab.blog/python-poetry-basic/</link><pubDate>Sat, 04 May 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/python-poetry-basic/</guid><description>개발용과 배포용 패키지가 섞이는 requirements.txt 대신 Poetry로 의존성과 가상 환경을 관리하는 명령어를 정리했다.</description></item><item><title>Maven import 에러에서 먼저 볼 것은 버전이다</title><link>https://jaylab.blog/maven-build-error-not-found/</link><pubDate>Wed, 20 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/maven-build-error-not-found/</guid><description>IntelliJ Maven Sync가 jar:unknown 의존성을 못 찾을 때 -U 강제 업데이트와 pom.xml 버전 명시로 푼 기록.</description></item><item><title>JVM 프록시 옵션은 모든 HTTP 클라이언트에 걸리지 않는다</title><link>https://jaylab.blog/httpurlconnection-httpclient-compare/</link><pubDate>Sun, 17 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/httpurlconnection-httpclient-compare/</guid><description>JVM 옵션으로 프록시를 걸면 HttpURLConnection과 RestTemplate은 따르고, Apache HttpClient와 WebClient는 무시해 코드에서 따로 지정해야 한다.</description></item><item><title>컨테이너 안에서 쓸 패키지 매니저를 찾는 한 줄</title><link>https://jaylab.blog/quick-guide-identify-package-manager/</link><pubDate>Mon, 04 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/quick-guide-identify-package-manager/</guid><description>이미지가 어떤 배포판인지 몰라 패키지 매니저를 헤맬 때, type 한 줄로 후보 여섯 개를 한 번에 확인한다.</description></item><item><title>Object를 Map으로 바꾸는 데 Reflection까지 써야 할까</title><link>https://jaylab.blog/spring-refactoring-object-to-map/</link><pubDate>Fri, 01 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/spring-refactoring-object-to-map/</guid><description>필드를 Reflection으로 훑던 Object→Map 변환 메서드를 ObjectMapper.convertValue 한 줄로 줄이고, 바꾸면서 달라지는 동작을 짚었다.</description></item><item><title>Spring 4.3 WAS의 세션을 암호화된 ElastiCache에 모으기</title><link>https://jaylab.blog/redis-session-clustering/</link><pubDate>Tue, 03 Oct 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/redis-session-clustering/</guid><description>Spring 4.3.7 기반 다중 WAS의 세션을, 전송 중 암호화가 켜진 ElastiCache for Redis에 Redisson Tomcat Session Manager로 모아 클러스터링했다.</description></item><item><title>콤마와 공백으로 여러 건 한 번에 검색하기</title><link>https://jaylab.blog/delimiter-multi-searching/</link><pubDate>Mon, 25 Sep 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/delimiter-multi-searching/</guid><description>검색어 하나만 받던 조회 화면을 콤마·공백으로 쪼개 MyBatis foreach OR 조건으로 여러 건을 한 번에 찾게 바꾸고, 다시 보니 걸리는 점을 짚었다.</description></item><item><title>Autoscaling 환경에서 @Scheduled 배치를 한 번만 실행하기</title><link>https://jaylab.blog/scheduler-transition/</link><pubDate>Thu, 21 Sep 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/scheduler-transition/</guid><description>Autoscaling으로 1번 서버라는 기준이 사라지자, 스케줄 트리거를 EventBridge Scheduler와 Lambda로 옮겨 Internal ALB 호출 한 번이 배치 한 번이 되게 바꿨다</description></item><item><title>WAR를 손으로 풀어 올리던 Tomcat 배포프로세스 변경</title><link>https://jaylab.blog/tomcat-improve-cicd-pipeline/</link><pubDate>Thu, 11 May 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/tomcat-improve-cicd-pipeline/</guid><description>WAR를 직접 풀어 복사하던 배포를 Tomcat 자동 배포 동작을 추적해 파일 복사 한 번으로 줄였고, 5~10분이던 배포가 30초가 됐다</description></item><item><title>argparse가 대신 만들어 주는 --help</title><link>https://jaylab.blog/python-argparse/</link><pubDate>Sun, 23 Apr 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/python-argparse/</guid><description>argparse로 파이썬 스크립트에 실행 인자를 넘기는 최소 예제를 돌려 보고, 인자 하나만 등록해도 &amp;ndash;help 사용법이 저절로 생기는 것을 확인했다.</description></item><item><title>프로젝트마다 Python 패키지를 따로 두는 venv</title><link>https://jaylab.blog/python-venv/</link><pubDate>Sat, 22 Apr 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/python-venv/</guid><description>pip install이 한곳에 쌓여 프로젝트끼리 버전이 부딪히는 문제를 venv로 나누고, VS Code 인터프리터와 requirements.txt까지 맞추는 절차를 정리했다.</description></item><item><title>psycopg2 파라미터 바인딩과 SQL Injection</title><link>https://jaylab.blog/python-injection/</link><pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/python-injection/</guid><description>사용자 입력을 문자열로 이어 붙이던 psycopg2 쿼리를 파라미터 바인딩으로 바꾸고, 정수 컬럼과 null 처리에서 헷갈린 점을 정리했다.</description></item></channel></rss>