전체 글 104

Supabase 사용해보기 (2) | Supabase 구성하기

이전 포스팅에선 Supabase가 뭔지 대략 찍어먹어봤습니다. 이번 포스팅에선 Supabase를 회원가입하고 Vector DB를 만들어보기 전간단한 테이블을 만들고 CRUD를 해볼까해요. 1. Supabase 회원가입하기https://supabase.com/ 에 접속하여 Sign In 클릭 후 GitHub로 로그인을 합니다. (이메일 인증도 같이)GitHub로 가입하면 나중에 프로젝트와 연동할 때 편리합니다. Edge Functions나 GitHub Actions를 쓸 계획이라면 GitHub 가입을 추천해요. 가입이 완료되면 Organization, proejct를 설정합니다. 이제 프로젝트가 생성되었습니다! 2. API 키 확인 및 저장프로젝트 생성 후 좌측 사이드바에서 Project Setting..

AI 2026.01.12

Supabase 사용해보기 (1) | 개요

개요요즘 여기저기서 Vector DB(벡터 데이터베이스)라는 말을 자주 보게 됩니다.제가 알고 있던 DB라고 해봐야 RDB, NoSQL 정도였는데처음 Vector DB라는 단어를 들었을 땐“이게 대체 뭐지?” 싶은 느낌이 먼저 들더라고요.뭔가 AI랑 관련 있어 보이긴 하는데 정확히 어떤 역할을 하는지는 감이 안 왔습니다.그래서 그냥 GPT한테 물어봤습니다. Vector DB가 뭐냐면요GPT가 설명해준 내용을 정리하면 이렇습니다.텍스트, 이미지, 음성 같은 데이터를 숫자 배열(예: 1536차원 실수 벡터)로 변환하고이 벡터들을 저장한 뒤 벡터 간 유사도 검색을 수행한다(코사인 유사도, L2 Distance 등)한 줄로 줄이면,👉 “의미적으로 비슷한 데이터를 찾아주는 DB”이렇게 생각하면 이해가 좀 됩니다..

AI 2026.01.06

Java Optional 쓰기

Java 25가 나오는 시점에 Java 8에 출시된 Optional 글을 이제와서 포스팅하는 것도 이상하네요. ㅋㅋㅋ 그래도 많이 쓰니까.. 포스팅 시작합니다. 개요https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/Optional을 쓸 때 가장 많이 homoefficio님의 참고했던 글이에요. https://stackoverflow.com/questions/26327957/should-java-8-getters-return-optional-type/26328555#26328555Java 언어 설계자인 Brian Goetz가 Java 8 Optional의 목적을 적었어요.Op..

Java 2025.12.07

PostgreSQL의 인덱스 | btree vs brin

1. 왜 이 글을 쓰게 되었나요?2. 성능 테스트3. 샘플 데이터 정보 1. 왜 이 글을 쓰게 되었나요?쿼리 튜닝을 위해 인덱스를 생성하는 일은 개발하면서 자주 접하게 됩니다.그런데 최근 증분 데이터를 다른 시스템(Redshift 등)으로 옮길 때도 인덱스를 활용할 수 있다는 사실을 알게 되었습니다.그리고 우리가 평소에 사용하던 인덱스는 어떤 역할을 하는지 궁금해졌고,정리하는 마음으로 이 글을 작성하게 되었습니다. BTREE (Balanced Tree) 인덱스Postgres의 기본 인덱스 타입입니다. CREATE INDEX idx_parcel_tracking_customer_name ON parcel_tracking (customer_name); 요 쿼리를 수행 했을 때 생성되는 인덱스입니다.값을 정렬된..

DB 2025.07.07

Spring boot 에서 RSA JWT 적용해보기 (2) | 구현

전체 구현은 아래 GitHub 저장소에서 확인하실 수 있습니다.🔗 GHGHGHKO/roadmap-todo 이 글에서는 JWT를 발급하고 검증하는 서버에서 토큰을 핸들링하는 핵심 로직만 발췌하여 설명합니다.Kotlin과 Spring Boot 3.4.0-SNAPSHOT, Corretto 21을 사용했습니다.https://github.com/GHGHGHKO/roadmap-todo GitHub - GHGHGHKO/roadmap-todo: todos with authenticatetodos with authenticate. Contribute to GHGHGHKO/roadmap-todo development by creating an account on GitHub.github.com 기능 개요이 서버는 R..

SpringBoot 2025.06.23

Spring boot 에서 RSA JWT 적용해보기 (1) | 개요 및 검증

RSA JWT 적용하는 이유모바일 앱으로부터 전달받은 JWT의 payload를 서버에서 사용해야 하는 상황이 발생했습니다.이때 JWT는 HMAC 기반(HS256, HS384, HS512)으로 서명되어 있었고, 이를 검증하거나 payload를 신뢰하려면 secret key(대칭키)가 필요했습니다.그러나 이 키는 외부에 노출되면 안 되기 때문에, 보안상 앱에서 전달받을 수 없는 구조였습니다.결국 서버는 JWT를 검증하기 위해 JWT를 발급한 인증 서버에 검증 요청을 해야만 했습니다. HMAC JWT 방식의 한계이 구조도 가능하긴 하지만, 다음과 같은 단점이 있습니다:JWT Issuer는 토큰을 발급할 뿐 아니라 검증 요청도 매번 처리해야 합니다.따라서 JWT Issuer의 부하가 증가할 수 있으며, 서비스 ..

SpringBoot 2025.06.21

GitHub Actions gradlew permission denied 오류

GitHub의 GitHub Actions을 사용해 gradle 빌드를 하다보면아래와 같은 오류가 발생하게 됩니다. https://github.com/GHGHGHKO/marker-example/actions/runs/14493586258/job/40655540458?pr=1Run ./gradlew build/home/runner/work/_temp/8da5b9bc-8547-4080-9e61-f6a7481688b5.sh: line 1: ./gradlew: Permission deniedError: Process completed with exit code 126. 해결 방법으론 workflow에 - name: Make gradlew executable run: chmod +x ./gradlew..

Github 2025.04.16

Springboot 속도 제한 및 조절 구현, 유량 제어 | Resilience4j

1. 적용 사유2. Resilience4j가 뭔가요3. 적용 방법4. 결과 1. 적용 사유https://roadmap.sh/projects/weather-api-wrapper-service Weather API Project IdeaBuild a weather API that fetches and returns weather data from a 3rd party API.roadmap.sh요 과제를 수행하다 Rate Limit을 조절해달라는 요구사항이 있어서 사용했습니다.특정 API 의 요청이 일정 수치 이상 되면 오류 Response body를 반환합니다. 2. Resilience4j가 뭔가요Resilience4j는 Circuit Breaker, Rate Limiter, Retry, Bulkhead을 ..

SpringBoot 2025.03.17

Springboot ECS logging structure

1. 적용 사유2. Marker가 뭔가요3. ECS 로깅이 뭔가요4. 적용 방법5. 결과  1. 적용 사유datadog에 로그를 쌓기 위해 ecs 포맷을 사용해야 했습니다.그 중 개인정보가 포함되어있는 로그 정보를 datadog에 보낼 수 없었습니다.그래서 slf4j 혹은 log4j 로그에 Marker를 추가하여개인정보 로그는 보내지 않도록 설정하기로 하였습니다. 2. Marker가 뭔가요로그에 Object를 추가하여 태그를 지정할 수 있습니다.예를 들어 특정 Marker가 있는 로그는 출력하지 않기. 3. ECS 로깅이 뭔가요ECS는 로그 및 메트릭과 같은 Elasticsearch 혹은 datadog 에 이벤트 데이터를 저장할 때 사용할 공통 필드 집합입니다. 이벤트 소스 : 이벤트 소스가 Elasti..

SpringBoot 2025.02.26

Spring Boot XSS 크로스사이트 스크립트 적용하기 with jsoup

1. 서론2. 적용 방법3. 결과적용했던 코드https://github.com/GHGHGHKO/roadmap-todo/commit/2b7f2543df849704f9784d3afc818ae07db72ef81. 서론회사에서 최근에 시작한 프로젝트에 보안 검사를 받았습니다.Request body를 통한 크로스사이트 스크립트 취약점이 도출 되었습니다. 도출되었던 방식은1. a_dns API Request body에 악성 script를 심어서 전송합니다.2. database에는 악성 script가 입력됩니다.3. 일반 고객이 b_dns 로 홈페이지에 접속합니다.4. 악성 script가 들어가 있는 정보를 조회합니다.5. 악성 script가 db에서 조회되어 고객에게 보여집니다.6. 해당 스크립트가 웹사이트에서 실..

SpringBoot 2024.12.01