분류 전체보기

GithubActions에서 CloudFlare WAF ByPass하기 작성 일자 : 2025년 02월 16일   발생 오류 GithubActions를 통해 CI/CD 파이프라인을 구축하던 중, CloudFlare WAF로 인해 NextJS 빌드가 실패하는 문제가 발생했습니다. (필자는 모든 해외 IP를 차단하는 WAF 설정을 사용하고 있습니다.)#16 667.4 Error: Failed to fetch XXX#16 667.4 at p (/app/.next/server/app/(main)/page.js:1:29086)#16 667.4 at process.processTicksAndRejections (node:internal/process/task_queues:95:5)#16 667.4 ..
· Spring
ShadcnUI - Drawer 또는 Dialog 위의 sonner 클릭 안되는 문제 해결하기 작성일자 : 2025년 02월 09일   개요 ShadcnUI의 Drawer 또는 Dialog 컴포넌트 위에 Sonner의 토스트 컴포넌트가 위치할 경우, Sonner의 토스트의 Action이 클릭되지 않는 문제가 발생합니다. 아래의 방법을 통해서 해당 문제를 해결한 과정을 소개합니다.  방법 1. sonner.tsx 파일 수정sonner.tsx 파일을 열어서 group-[.toaster]:pointer-events-auto 클래스를 추가합니다.  2. dialog.tsx 파일의 DialogContent 컴포넌트 수정Dialog의 경우, 아래와 같이 DialogContent 컴포넌트를 수정합니다.const Di..
· 기타
로그를 왜 구체적으로 남겨야 하는가?→ 남기지 않으면 버그가 발생하였을 때, ‘그때 좀 더 써놓을걸’ 이라는 후회를 하기 때문에  왜 CustomException을 작성하는가?→ 로그가 나타난 부분을 빠르게 찾을 수 있는, 오류의 명찰 역할을 한다
· Spring
스프링 - PostgreSQL text[] 타입을 엔티티의 List 필드에 매핑하기 작성 일자 : 2025년 02월 02일   개요 PostgreSQL에서는 text[] 타입과 같은 배열 타입을 기본으로 지원합니다. 이를 활용하면 @ElementCollection을 사용하는 방법과는 다르게 별도의 조인 테이블을 생성하지 않고도 여러 값을 하나의 컬럼에 저장할 수 있습니다. 하지만, Hibernate는 기본적으로 List과 PostgreSQL의 text[] 타입을 매핑할 수 없기 때문에 직접 변환 로직을 구현해주어야 합니다.   사용자 정의 Hibernate UserType: StringArrayType 구현 먼저, Java의 List과 PostgreSQL의 text[] 사이의 변환을 담당하는 사용자 정의..
· Spring
스프링 - RabbutMQ Retry 정책 설정하기(ft. 10만원의 교훈) 작성 일자 : 2025년 01월 24일   개요 질문스프링부트와 RabbitMQ를 연동하고, 만약 Consumer 로직에서 Exception이 발생하면 어떤 일이 일어나는지 아는가?  정답Retry 정책이 없다면, 스프링부트의 Consumer 로직은 1초에 수십 번이고 다시 해당 메세지를 Consume하고 다시 Exception이 발생시킨다.  고통스러운 경험필자와 같이 Exception 로깅으로 CloudWatch의 PutLogEvents 비용에 10만원을 지불하고 싶지 않다면, Retry 정책을 미리미리 설정해놓자! 손을 벌벌 떨며 원인이 무엇인지 파악하고 -> RabbitMQ WebConsole에 접속해서 메세지를 Purg..
문제혹시나 스프링 부트에서 Google OAuth2 소셜 로그인 기능을 구현하고, 프로덕션 도메인(https)에서 접속하였을 때 아래와 같은 증상이 발생한다면:Error 400: redirect_uri_mismatcherror details를 눌러서 확인하면, Request details에 http://example.com/login/oauth2/code/google 이라고 적혀있음(http!!!) 해결application.yml에 아래와 같이 redirect-uri를 https로 명시해준다spring: security: oauth2: client: registration: google: client-id: ${GOOGLE_CLIENT_ID..
· AWS
AWS MQ - RabbitMQ WebConsole 접속하기 작성일자 : 2025년 01월 09일   개요 AWS MQ를 통해 RabbitMQ를 생성하면, 아래와 같이 RabbitMQ의 Endpoints와 Web Console URL이 생성됩니다.  하지만, 만일 RabbitMQ가 VPC의 Private Subnet에 생성되었을 경우, 바로 링크를 클릭해도 Web Console에 접속할 수 없습니다. 이번 포스트에서는 Public Subnet에 존재하는 Bastion 호스트를 통해서 Local에서 RabbitMQ Web Console에 접속하는 방법을 소개합니다.   VPC 구성 Public Subnet Bastion 호스트 (EC2 인스턴스)Bastion 호스트는 Public Subnet에 존재하는 E..
Cloudflare - R2 Bucket CORS 에러 해결하기 작성일자 : 2024_년 12월 29일 (이미지) 개요 아래와 같은 JS 코드에서 Cloudflare R2 Bucket에 있는 이미지를 불러오려고 할 때, CORS 에러가 발생하였다.const createImage = (url: string): Promise => { return new Promise((resolve, reject) => { const image = new Image(); image.addEventListener("load", () => resolve(image)); image.addEventListener("error", error => reject(error)); image.setAttribute(..
gerrymandering
'분류 전체보기' 카테고리의 글 목록