<?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>Jay's Blog</title><link>https://jaylab.blog/</link><description>Recent content on Jay's Blog</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Thu, 07 Aug 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://jaylab.blog/index.xml" rel="self" type="application/rss+xml"/><item><title>배포 때마다 끊기던 서비스의 무중단 적용 - Jenkins Rolling Deployment에서 내린 네 가지 결정</title><link>https://jaylab.blog/jenkins-rolling-deploy-pipeline/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><guid>https://jaylab.blog/jenkins-rolling-deploy-pipeline/</guid><description>타겟 그룹 전체를 동시에 재시작하던 Jenkins 파이프라인을 서버별 순차 배포와 LB 제어로 바꾸며 내린 네 가지 결정과 아직 남은 한계</description></item><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>프록시가 webserver를 찾지 못한 이유: Docker 네트워크 격리와 컨테이너명 DNS</title><link>https://jaylab.blog/docker-network-proxy-traffic-resolve/</link><pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate><guid>https://jaylab.blog/docker-network-proxy-traffic-resolve/</guid><description>NPM과 webserver가 서로 다른 Docker 네트워크에 있어 프록시가 끊긴 원인을 찾고, 네트워크 연결로 컨테이너 간 직접 통신을 복구한 기록</description></item><item><title>타 부서 제안서의 아키텍처 파트를 맡았다</title><link>https://jaylab.blog/architecture-strategy-proposal/</link><pubDate>Wed, 30 Apr 2025 00:00:00 +0000</pubDate><guid>https://jaylab.blog/architecture-strategy-proposal/</guid><description>타 부서 제안서의 아키텍처·구축 전략 파트를 며칠 만에 맡아, 모호한 요구사항을 AWS 구조도로 정리한 기록</description></item><item><title>SonarQube를 brew에서 Docker로 옮겼다</title><link>https://jaylab.blog/brew-sonarqube-install-and-sast/</link><pubDate>Fri, 20 Dec 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/brew-sonarqube-install-and-sast/</guid><description>SonarQube Java 분석의 .class 요구 에러를 빌드로 풀고, brew 없이도 돌도록 서버와 Scanner를 Docker로 옮긴 기록</description></item><item><title>Ansible 첫 ping은 publickey에서 막혔다</title><link>https://jaylab.blog/ansible-simple-playbook-practice/</link><pubDate>Tue, 19 Nov 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/ansible-simple-playbook-practice/</guid><description>첫 Ansible ping이 publickey 오류로 막혔고, 인벤토리에 키를 지정해 풀었다. 이어서 ad-hoc 명령과 첫 플레이북까지 돌렸다.</description></item><item><title>Multipass VM 두 대로 Ansible 실습 환경 만들기</title><link>https://jaylab.blog/ansible-multipass-environment/</link><pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/ansible-multipass-environment/</guid><description>맥북에 Multipass VM 두 대를 띄워 제어노드에 Ansible을 설치하고, 관리노드로 SSH 키 접속을 여는 과정을 정리했다.</description></item><item><title>Mac에서 컨테이너 IP로 접속이 안 되는 이유</title><link>https://jaylab.blog/docker-container-network-arch/</link><pubDate>Sat, 21 Sep 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/docker-container-network-arch/</guid><description>Mac에서 컨테이너 IP가 보이는데도 접속되지 않는 건 Docker 네트워크가 Linux VM 안에만 있어서다.</description></item><item><title>Ubuntu 컨테이너에는 sshd가 없다</title><link>https://jaylab.blog/docker-ssh-setting/</link><pubDate>Mon, 02 Sep 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/docker-ssh-setting/</guid><description>PoC에서 SSH 접속을 시험하려는데 Ubuntu 이미지에 sshd가 없어서, openssh-server를 깔고 로컬 2222번 포트로 붙였다.</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>하루를 넘기던 분석 배치를 대기열 길이로 스케일아웃하기까지</title><link>https://jaylab.blog/cloudwatch-alarm-ecs-task-auto-scaling/</link><pubDate>Wed, 24 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/cloudwatch-alarm-ecs-task-auto-scaling/</guid><description>하루를 넘기던 분석 배치를 대기열 건수 메트릭과 CloudWatch Alarm으로 ECS 태스크 1~10개 사이에서 스케일링한 기록</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>Mac에서는 Metricbeat를 컨테이너 밖에 깔아야 했다</title><link>https://jaylab.blog/docker-elk-metricbeat/</link><pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/docker-elk-metricbeat/</guid><description>Docker ELK에 Metricbeat 컨테이너를 붙였지만 Mac 호스트 메트릭은 수집되지 않아, Mac에 직접 설치해 Kibana에서 CPU 사용량을 확인했다.</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>Aurora MySQL을 8.0으로 올리기 전 알아두면 좋았을 주요 포인트 (feat. 롤백 설계)</title><link>https://jaylab.blog/aurora-mysql-upgrade-8-key-points/</link><pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/aurora-mysql-upgrade-8-key-points/</guid><description>Aurora MySQL 5.7에서 8.0으로 올리며 배포 방식별 다운타임, 파라미터 그룹 우선순위, 바뀐 기본값을 확인하고 롤백 절차를 직접 세운 기록</description></item><item><title>exec format error 이후로 이미지는 GitHub Actions에서 빌드한다</title><link>https://jaylab.blog/docker-buildx-multiarch-and-git-actions/</link><pubDate>Thu, 13 Jun 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/docker-buildx-multiarch-and-git-actions/</guid><description>아키텍처 차이로 생긴 exec format error를 Docker Buildx의 &amp;ndash;platform으로 풀고, GitHub Actions에서 buildx로 빌드해 ECR에 푸시하도록 옮긴 기록</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>[ArgoCD] Error: Unable to create ‘..git/index.lock’: File exists</title><link>https://jaylab.blog/argocd-index-lock-error/</link><pubDate>Thu, 02 May 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/argocd-index-lock-error/</guid><description>ArgoCD Application 생성이 git index.lock 파일 추돌로 실패했을 때 설치 매니포스트 재적용으로 넘긴 기록</description></item><item><title>Repository Workflow를 활용한 manifest 업데이트 아키텍쳐</title><link>https://jaylab.blog/git-actions-build-push-update/</link><pubDate>Fri, 19 Apr 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/git-actions-build-push-update/</guid><description>ECR에 올린 새 이미지를 ArgoCD가 알게 하려고, GitHub Actions 마지막 job에서 별도 manifest 저장소의 이미지 태그를 sed로 바꿔 커밋하게 만든 설정</description></item><item><title>Terraform으로 만든 RDS가 삭제된 VPC를 계속 찾던 이유</title><link>https://jaylab.blog/terraform-error-create-intance-by-old-vpc-id/</link><pubDate>Thu, 11 Apr 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/terraform-error-create-intance-by-old-vpc-id/</guid><description>잘 돌던 RDS 생성 코드가 사라진 VPC를 참조하며 실패했고, state를 다 지워도 소용없다가 db_subnet_group_name을 명시해 해결했다.</description></item><item><title>Kubernetes 환경에 ArgoCD 활용 Git Repo CI/CD 아키텍쳐</title><link>https://jaylab.blog/git-actions-argocd-cicd-minikube/</link><pubDate>Fri, 05 Apr 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/git-actions-argocd-cicd-minikube/</guid><description>빌드 다음 단계인 클러스터 반영을 ArgoCD에 맡기려고 로컬 Minikube에 설치하고, manifest 저장소 변경이 자동으로 동기화되는 것까지 확인한 기록</description></item><item><title>docker login을 해도 Minikube는 ECR 이미지를 받지 못했다</title><link>https://jaylab.blog/argocd-ecr-image-pull-error/</link><pubDate>Thu, 28 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/argocd-ecr-image-pull-error/</guid><description>ArgoCD로 배포하던 Minikube 앱의 이미지를 ECR로 옮기자 no basic auth credentials가 났고, docker-registry Secret을 만들어 해결했다.</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>포트가 열렸는지 볼 때 쓰는 nc와 ss</title><link>https://jaylab.blog/netcat-and-netstat/</link><pubDate>Fri, 15 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/netcat-and-netstat/</guid><description>Pod 안에서 다른 서버 포트로 연결되는지, 내 앱이 포트를 리스닝하는지 확인할 때 쓰는 nc와 ss의 배포판별 설치 명령을 모았다.</description></item><item><title>docker-compose로 돌던 Kafka 앱을 minikube에 구성하기</title><link>https://jaylab.blog/minikube-build-kafka-app/</link><pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/minikube-build-kafka-app/</guid><description>로컬에만 있는 Spring Boot 이미지를 minikube가 찾지 못하던 문제를 docker-env로 풀고, compose 기반 Kafka 앱을 로컬 k8s에 올렸다.</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>로컬에 있는 이미지를 Minikube는 왜 못 찾을까</title><link>https://jaylab.blog/docker-pull-error-two-effective-solutions/</link><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/docker-pull-error-two-effective-solutions/</guid><description>Minikube 배포에서 로컬 이미지인데도 ErrImagePull이 났고, docker-env 연결과 이미지 이름 변경으로 두 번 풀었다.</description></item><item><title>타겟 그룹은 왜 ALB와 ASG 양쪽에서 참조될까</title><link>https://jaylab.blog/aws-tf-as-lb/</link><pubDate>Thu, 22 Feb 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/aws-tf-as-lb/</guid><description>Terraform ALB 리소스 네 개를 요청이 흐르는 순서대로 따라가고, 타겟 그룹을 ASG에서도 참조하는 이유를 헬스체크 타입 차이로 정리했다</description></item><item><title>로컬 MySQL 포트 변경과 Public Key Retrieval 에러</title><link>https://jaylab.blog/mysql-set-default-port-and-public-key-error/</link><pubDate>Sun, 11 Feb 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/mysql-set-default-port-and-public-key-error/</guid><description>Homebrew MySQL의 기본 포트를 my.cnf에서 3301로 바꾸고, 클라이언트 접속 때 난 Public Key Retrieval 에러를 드라이버 속성으로 풀었다.</description></item><item><title>IntelliJ에서만 파일이 안 보일 때</title><link>https://jaylab.blog/intellij-invisible-file/</link><pubDate>Tue, 06 Feb 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/intellij-invisible-file/</guid><description>Finder에는 있는 작업 디렉토리가 IntelliJ 프로젝트 창에서만 안 보여서, Project Structure에서 모듈로 다시 Import해 되찾았다.</description></item><item><title>Amazon Linux 2023의 메타데이터 조회는 토큰부터</title><link>https://jaylab.blog/aws-get-metadata-al2023/</link><pubDate>Fri, 02 Feb 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/aws-get-metadata-al2023/</guid><description>Amazon Linux 2023에서는 IMDSv2 토큰을 먼저 받아야 인스턴스 ID·리전을 조회할 수 있고, MySQL 클라이언트는 mariadb105로 설치한다.</description></item><item><title>npm run generate와 npx nuxi generate는 무엇이 다를까</title><link>https://jaylab.blog/how-to-build-static-web-nuxt/</link><pubDate>Mon, 22 Jan 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/how-to-build-static-web-nuxt/</guid><description>Nuxt 정적 빌드 명령 npm run generate와 npx nuxi generate를 npm run, npx, nuxi 순서로 쪼개 보면 Nuxt 3에서는 같은 빌드다.</description></item><item><title>brew install nvm 다음에 해야 할 일</title><link>https://jaylab.blog/nvm-error-action/</link><pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/nvm-error-action/</guid><description>Homebrew로 설치한 nvm이 셸에서 동작하지 않아, ~/.nvm을 만들고 .zshrc에서 nvm 스크립트를 불러오게 해 해결했다.</description></item><item><title>템플릿 두 개가 섞인 저장소를 Nx 모노레포로 나누기</title><link>https://jaylab.blog/front-monorepo/</link><pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/front-monorepo/</guid><description>A·B 템플릿을 한 저장소에 합쳐 쓰다 패키지 충돌이 늘어, Nx 모노레포로 앱을 나눈 과정과 남은 의문을 정리했다.</description></item><item><title>Fork한 저장소에 원본 커밋 받아오기</title><link>https://jaylab.blog/git-upstream-merge/</link><pubDate>Thu, 04 Jan 2024 00:00:00 +0000</pubDate><guid>https://jaylab.blog/git-upstream-merge/</guid><description>어느 Github 저장소를 Fork하여 나의 repository로 옮긴 후 이 코드를 가지고 몇번의 commit &amp;amp; push 작업을 해왔다. 어느날 메인(Fork했던 대상 Repository) 저장소에서 그 동안 이루어진 수정내역을 나의 repository에 반영해줘야할 시기가 왔다. 이 때 vs code로 진행했던 작업과정을 순서대로 기록해보았다.</description></item><item><title>줄바꿈 기호 하나로 파일 전체가 바뀌는 커밋</title><link>https://jaylab.blog/git-crlf-lf-conflict/</link><pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/git-crlf-lf-conflict/</guid><description>인텔리제이를 통한 Git 작업시 종종 겪을 수 있는 CRLF/LF 개행 변경 관련 문제와 그 해결법</description></item><item><title>Nuxt3 화면 일부를 PDF로 내려받기</title><link>https://jaylab.blog/nuxt-html-to-pdf/</link><pubDate>Tue, 12 Dec 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/nuxt-html-to-pdf/</guid><description>Nuxt3 화면의 특정 HTML 영역만 PDF로 내려주기 위해 html2pdf.js를 붙이고 옵션과 다운로드 버튼을 구성한 방법</description></item><item><title>100%에서 멈추는 git push와 http.postBuffer</title><link>https://jaylab.blog/git-push-infinite-loading/</link><pubDate>Thu, 07 Dec 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/git-push-infinite-loading/</guid><description>진행률은 100%인데 에러 없이 끝나지 않던 git push를, http.postBuffer를 늘려 HTTP POST 버퍼 제한을 피하는 것으로 해결했다.</description></item><item><title>BottomNavigationBar 탭 위젯의 생성 시점과 메모리</title><link>https://jaylab.blog/flutter-bottom-nav-memory/</link><pubDate>Thu, 30 Nov 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/flutter-bottom-nav-memory/</guid><description>탭 위젯을 필드에 미리 만들어 두던 코드를 build에서 고르도록 바꾸고, 탭이 늘어날 때 쓸 세 가지 방식을 메모리와 상태 유지 기준으로 비교했다.</description></item><item><title>SSH 키 한 쌍으로 private 저장소 clone</title><link>https://jaylab.blog/git-clone-private-repo/</link><pubDate>Tue, 07 Nov 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/git-clone-private-repo/</guid><description>private 저장소를 clone하려고 SSH 키를 만들며, 개인키는 로컬에 남고 GitHub는 공개키로 서명만 확인하는 인증 흐름을 정리했다.</description></item><item><title>Nuxt3의 default 레이아웃과 페이지별 전환</title><link>https://jaylab.blog/nuxt-layout-setting/</link><pubDate>Tue, 31 Oct 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/nuxt-layout-setting/</guid><description>Nuxt3 페이지는 설정이 없으면 default 레이아웃을 쓴다. definePageMeta로 페이지마다 고정하고 setPageLayout으로 실행 중에 바꾼다.</description></item><item><title>Nuxt 3의 $fetch가 fetch보다 더 해 주는 일</title><link>https://jaylab.blog/nuxt-about-fetch/</link><pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/nuxt-about-fetch/</guid><description>$fetch는 fetch에 JSON 파싱과 에러 처리를 얹은 함수이고, 컴포넌트에서는 useAsyncData로 감싸야 두 번 호출되지 않는다.</description></item><item><title>useFetch 안에 들어 있는 useAsyncData</title><link>https://jaylab.blog/nuxt-usefetch-useasyncdata/</link><pubDate>Thu, 12 Oct 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/nuxt-usefetch-useasyncdata/</guid><description>useFetch는 useAsyncData에 $fetch와 자동 key를 얹은 것이고, key로 캐시된 데이터는 refresh로 다시 받는다.</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>터미널에서 code . 로 VS Code 열기</title><link>https://jaylab.blog/vscode-open-command/</link><pubDate>Thu, 03 Aug 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/vscode-open-command/</guid><description>터미널에서 code .로 VS Code를 열려면 code 명령을 PATH에 설치해야 하고, 설치 중 EACCES 에러는 기존 파일을 지우면 풀린다.</description></item><item><title>편의성을 위한 입력창 대소문자 변환과 커서 위치 지키기</title><link>https://jaylab.blog/js-input-upper-lower-case/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/js-input-upper-lower-case/</guid><description>select 값에 따라 입력값을 대소문자로 강제하다 v-model 값이 안 바뀌고 커서가 끝으로 튀는 문제를 명시적 대입과 setSelectionRange로 풀었다.</description></item><item><title>허용 IP 밖의 AWS 요청을 거부하는 IAM 정책</title><link>https://jaylab.blog/aws-access-deny-policy/</link><pubDate>Wed, 26 Jul 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/aws-access-deny-policy/</guid><description>Deny와 NotIpAddress 조건을 묶은 IAM 정책으로, 허용한 IP 밖에서는 콘솔과 CLI로 AWS 리소스에 접근하지 못하게 막았다.</description></item><item><title>여러 탭이 같은 쿠키 key를 덮어쓰던 문제</title><link>https://jaylab.blog/js-cookie/</link><pubDate>Fri, 21 Jul 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/js-cookie/</guid><description>여러 탭이 같은 key의 쿠키를 덮어쓰던 문제를, 쿠키마다 고유 key를 만들어 URL로 넘기는 방식으로 풀었다.</description></item><item><title>redis-cli로 Redis 자료구조 손에 익히기</title><link>https://jaylab.blog/redis-cli-and-data-structure/</link><pubDate>Fri, 14 Jul 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/redis-cli-and-data-structure/</guid><description>redis-cli 접속 옵션과 상태 확인, String·Hash·List·Set·Sorted Set 명령어를 자료구조별로 묶어 정리했다.</description></item><item><title>Bastion Host를 거쳐 로컬에서 ElastiCache for Redis에 접속하기</title><link>https://jaylab.blog/redis-create-access/</link><pubDate>Mon, 10 Jul 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/redis-create-access/</guid><description>VPC 밖에서 바로 붙을 수 없는 ElastiCache for Redis에 Bastion Host SSH 포트포워딩과 redis-cli &amp;ndash;tls로 접속한 과정</description></item><item><title>[AWS] ElastiCache for Redis 구성요소</title><link>https://jaylab.blog/redis-component/</link><pubDate>Wed, 05 Jul 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/redis-component/</guid><description>Components of &amp;lsquo;ElastiCache for Redis’</description></item><item><title>메모리와 싱글 스레드로 정리한 Redis 기본 개념</title><link>https://jaylab.blog/redis-basic-concepts/</link><pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/redis-basic-concepts/</guid><description>Redis가 빠른 이유와 조심할 점을 인메모리 저장과 싱글 스레드 두 가지 성질에서 출발해 정리했다.</description></item><item><title>war를 exploded로 변경 및 정적 리소스 자동 반영</title><link>https://jaylab.blog/intellij-resource-build/</link><pubDate>Mon, 26 Jun 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/intellij-resource-build/</guid><description>IntelliJ에서 Tomcat으로 띄운 프로젝트의 HTML·CSS·JS 수정이 안 보여서, Artifact를 war exploded로 바꾸고 업데이트 동작을 설정해 해결했다.</description></item><item><title>[IntelliJ] java 파일 서버 재실행 없이 변경사항 적용 (HotSwap)</title><link>https://jaylab.blog/injellij-hotswap/</link><pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/injellij-hotswap/</guid><description>Apply changes to java files without restarting the server</description></item><item><title>Route 53의 퍼블릭 DNS와 프라이빗 DNS</title><link>https://jaylab.blog/aws-dns/</link><pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/aws-dns/</guid><description>Route 53의 도메인 등록과 DNS 기능을 퍼블릭·프라이빗 호스팅 영역 레코드 예시로 정리하고, AWS가 무료로 발급하는 DV 인증서까지 짚는다.</description></item><item><title>VPC에서 S3까지, 콘솔로 쌓은 웹 서비스 인프라</title><link>https://jaylab.blog/aws-basic-infrastructure/</link><pubDate>Mon, 05 Jun 2023 00:00:00 +0000</pubDate><guid>https://jaylab.blog/aws-basic-infrastructure/</guid><description>VPC·서브넷·NAT부터 점프서버, ALB, RDS, S3 역할까지 콘솔로 직접 만들며 무엇을 어떤 순서로 만들어야 하는지 정리했다.</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>