728x90

전체 글 290

[ETC] RAG에 대하여

AI와 접목된 서비스가 많아짐에 따라 RAG, LangChain, Fine-Tuning 등 AI 관련 기술 요구가 많아지고 있다. 이번 포스팅에선 AI를 사용한 서비스를 구성할 때 필요한 개념들을 간단하게 알아보려 한다. RAG (Retrieval-Augmented Generation)RAG란 이름 그대로의 뜻은 검색 증강 생성으로 쉽게 말해 오픈북 테스트를 치르는 AI라고 생각하면 된다. 기존 LLM은 LLM 자신이 학습한 데이터로만 답변을 한다. 그런 경우 발생할 수 있는 문제들이 있는데할루시네이션최신 정보 미반영보안 리스크위와 같은 문제가 발생할 수 있다. 1. 할루시네이션할루시네이션은 ChatGpt 등 AI에게 질문을 할 때 일반인도 흔히 경험할 수 있는 문제이다. AI가 모르는 내용을 아는 것..

백엔드/ETC 2026.05.28

[Programmers] 바이러스 파이프 JAVA

프로그래머스 바이러스 파이프 - LV 2코딩테스트 연습 - 바이러스 파이프 | 프로그래머스 스쿨 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr접근dfs/bfs풀이2025 카카오 하반기 1차의 바이러스 파이프 문제이다. 트리 형태로 연결된 노드에서 바이러스를 감염시켰을 때 정해진 횟수 안에 가장 많이 감염시켰을 때의 값을 찾는 문제이다. 각 노드는 간선으로 연결되어 있고 감염된 노드와의 간선이 활성화되는 경우 해당 노드도 감염이 된다고 보면 된다. 간선의 종류는 3가지로 각 노드가 연결된 간선들은 3가지 중 하나를 가지게 된다. 감염된 노드가 2라고 가정하고 트리가 위 형태로 연결되어 있다고 할 때 k 번 간선(..

[Programmers] 노란불 신호등 JAVA

프로그래머스 노란불 신호등 - LV 1코딩테스트 연습 - 노란불 신호등 | 프로그래머스 스쿨 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr접근수학(?)풀이신호등이 모두 노란색이 되는 최초의 시점을 구하면 되는 문제이다. 스포 방지 문제에 비해 많이 간단해 보이지만 모든 신호등이 노란색이 되는 경우가 없을 수도 있다는 것이 핵심 포인트이다. 만약 모든 신호등이 노란색으로 겹치는 구간이 무조건 존재한다의 경우 입력 데이터가 엄청 크지 않다는 가정하에 무작정 반복문을 돌리면 된다. 하지만 겹치는 구간이 없을 수도 있기에 조건을 찾아내서 불가능한 경우 멈춰야 한다. 맞다 최소공약수, 최대공배수가 나오는 수학 문제인 거..

[Programmers] 중요한 단어를 스포 방지 JAVA

프로그래머스 중요한 단어를 스포 방지 - LV 1접근구현 (해시)풀이프로그래머스에 2025 카카오 하반기 문제가 업데이트되어 굳어 있는 알고리즘 뇌를 돌려보기 위해 풀어봤다. 코딩테스트 연습 - 중요한 단어를 스포 방지 | 프로그래머스 스쿨 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr1차의 1 레벨 문제로 카카오톡의 스포 방지 기능을 주제로 한 문제로 구현 문제이다. 문제에서 요구하는 것은 스포 방지로 가려진 메시지 안에 있는 단어가 중요한 단어인지 판별하고 총 중요한 단어의 개수를 반환하는 문제이다. 중요한 단어의 기준으로는스포 방지 단어여야 합니다.메시지의 스포 방지 구간이 아닌 구간(= 어떤 스포 방지 ..

[k6] 부하 테스트

이번 주제는 부하 테스트 궁금증 해결 및 MockOps 서비스에 대한 부하 테스트 수행 결과를 포스팅하려고 한다.부하 테스트란?서비스가 동시에 많은 요청을 받을 때 얼마나 안정적으로 처리하는지 확인하는 테스트로 응답시간(p95/p99), 에러율, 처리량(RPS)을 통해 성능 한계와 병목 지점을 파악할 수 있다. k6테스트에 사용한 도구인 k6는 스크립트 기반 부하 테스트 도구로 시나리오(VU, 단계적 증가, 스파이크 등)를 코드로 정의할 수 있다. CLI를 통해 실행하고 결과를 바로 확인할 수 있다.배경부트캠프를 수강할 때 쿼리 튜닝 후 성능 비교를 위해 k6 부하 테스트를 사용했던 적이 있다. 그때는 쿼리 튜닝이 중점이기도 했고 가상 유저의 수만큼 Access 토큰이 필요하다 보니 많은 수의 유저를 두..

[트러블슈팅] JWT Refresh 오류

오랜만의 포스팅인데 배포해 둔 MockOps의 로그를 보다 access token 만료 후 refresh가 실패하면서 401 루트가 발생하는 현상을 발견했다. 이전 포스팅에서 JWT RTR 경쟁 상태를 해결하며 refresh가 잘 되는 걸 확인했는데 왜 갑자기 안 되는지 의문이 들었다. 이 포스팅은 그 원인과 해결 과정을 정리한 글이다. 발생한 문제Access Token 만료 이후 refresh가 실패하면서 아래 로그가 반복적으로 출력되었다.- 만료된 JWT 토큰입니다.- JWT 인증 실패: EXPIRED_TOKEN- user null logout- Refresh Token이 쿠키에 없습니다.초기 상태문제가 발생한 시점의 상태는 아래와 같았다.refresh token이 쿠키에 설정됨도메인 api.doma..

[DB] 인덱스에 대하여

테스트에 이어 이번에는 인덱스에 대한 이야기를 해보려고 한다. 인덱스에 대해서 기본적인 것들은 알고 있다 생각했지만 너무 희망 편(?) 예를 들어 쓰면 왜 좋고 어디에 쓰면 좋은지 정도는 알지만 반대로 어떤 경우에는 인덱스의 성능이 나오지 않고 왜 그렇게 되는지 등 자세한 개념은 알지 못했기에 인덱스에 대해 작성을 하게 되었다. 인덱스란? (Index)인덱스는 방대한 양의 데이터 속에서 원하는 정보를 빠르게 찾기 위해 별도로 생성하는 데이터가 요약된 목차 혹은 데이터의 위치를 안내하는 지도와 같다. 우리가 두꺼운 사전에서 어떤 단어를 찾으려고 할 때 만약 목차가 없다면 첫 페이지부터 끝까지 한 장씩 넘겨가며 해당 단어가 나올 때까지 뒤져야 한다. 하지만 사전에는 보통 두 가지 장치가 있다. 첫 번째는 사..

백엔드/DB 2026.01.18

[Spring] Mockito 단위 테스트, 과연 의미가 있는 걸까? (feat. Fake)

최근 여러 가지를 생각할 수 있는 좋은 기회가 있었어서 그에 관한 내용들을 하나씩 정리해 보려고 한다. 처음은 테스트에 관한 내용이다.Mockito란?Mockito는 자바 진영에서 가장 널리 사용되는 대표적인 모킹 라이브러리다. 스프링 부트를 사용하면 기본적으로 포함되어 있을 만큼 사실상 표준으로 자리 잡고 있고 단위 테스트를 작성할 때 테스트 대상이 의존하고 있는 객체 (예: repository, 외부 API 클라이언트 등)를 가짜 객체(Mock)로 대체하여 독립적인 테스트를 가능하게 해 준다. 스프링을 사용하고 단위 테스트를 구현해 봤다면 모를 수 없는 기능으로 실제 객체를 만드는 대신 해당 인터페이스나 클래스를 상속받은 동적 프록시 객체를 생성한다. Stubbing: "A 메서드를 호출하면 B를 반..

백엔드/Spring 2026.01.15

[SIDE] MockOps v1.0.1

v1.0.1 release추가 기능이 개발되고 릴리즈가 되었다. 이전 포스팅에서 다뤘던 기능 외에 배포 이벤트 웹훅 기능이 개선되었다.개선된 Webhook 배포 시 호출하는 웹훅 기능이 개선되었다.기존 방식변경할 서버 상태 직접 입력헬스 체크 url 선택 사항 -> 없으면 헬스 체크 등록 X{ "projectName": "exProject", "domainServerName": "exServer", "serverStatus": "DEPLOY", "healthCheckUrl": "https://my.com/health", "healthCheckInterval": "10m"}새로운 방식헬스 체크 url 필수 입력실제 배포 서버 기반 상태 변경{ "projectName": "exProject", ..

[SIDE] MockOps - 추가 기능 개발

클로드 구독이 끝나기 전 조금 더 뽕을 뽑기 위해 MVP에 있어야 할 거 같으나 제외했던 추가 기능들을 개발했다.기본 기능추가로 개발되긴 했지만 당연히 있어야 할 기본 기능이 없어서 추가한 것들이다.바로 검색이다. 검색은 프로젝트 검색과 도메인 서버 검색 이렇게 두 가지가 구현되었다. 검색 조건으론 프로젝트 제목, PO 닉네임, 제목 + 닉네임 3가지 조건으로 구현되었다. 검색 기능 구현에는 Querydsl을 사용하여 동적 쿼리 생성 정도만 해줬다. Querydsl 의존을 추가하며 생긴 문제가 있었는데 springdocs와 querydsl의 충돌로 인해 문제가 발생했는데 저번 프로젝트땐 문제가 없던 게 갑자기 이러는 걸 보면 스프링 부트 4.0.0으로 인한 문제가 아닌가 싶다. 스프링 프로젝트를 생성할..

728x90