분류 전체보기 40

Cursor 페이징 설계 재구성 : 정렬 기준이 하나 이상일 때

Cursor 페이징많은 사람들이 알고 있듯, LIMIT과 OFFSET을 사용한 페이징은 쿼리 실행 횟수가 많아지고, 그에 따라 응답 시간이 점점 길어지는 문제가 있다. ( 500건씩 N번 조회하면 (1 * 500) + … + ( N * 500) 건의 레코드 읽기가 발생.. ) 반면에, 커서 페이징은 마지막으로 조회한 항목의 고유값을 기준으로 다음 페이지를 가져오는 방식이다.이 방식은 OFFSET처럼 앞에서부터 N개의 데이터를 무시하고 건너뛰는 것이 아니라, 바로 다음 커서 이후의 데이터를 조회하기 때문에 조회량이 많아져도 쿼리성능이 일정하다는 장점이 있다. 초기 Cursor 페이징 구조 (ID 기반)초기 Cursor 페이징은 각 테이블에 공통으로 존재하는 기본 키인 id 값만을 기준으로 설계했다.1. R..

[Testing] 테스트 커버리지

테스트 커버리지작성한 코드들이 얼마나 테스트 되었느지에 대한 지표를 수치로 보여주는 것을 테스트 커버리지라고 한다.회사마다 이상적인 커버리지 비율은 다르고, 팀의 성숙도나 상황에 따라 접근 방식도 다르다. 내가 일했던 50~60명 규모의 스타트업에서는 커버리지를 따로 측정하진 않았고, 주로 간단한 API 통합 테스트만 작성했다. 암묵적으로 "통합 테스트는 쓰자"는 분위기는 있었지만, 현실적으로 일이 몰릴 땐 테스트가 생략되는 경우도 많았다. 그래서 이번 사이드 프로젝트에서는 테스트 커버리지도 직접 측정해보면서 테스트 설계와 도구에 대해 조금 더 이해해 보고자 한다. 도구테스트 도구들은 많지만, pytest와 pytest의 플러그인인 pytest-cov을 설치했다. pytest는 이미 실무에서 많이 쓰고 ..

Pydantic BaseSettings로 환경변수 관리하기 – @property 패턴 적용기

https://kojub.tistory.com/24 Pydantic.BaseSetting을 사용한 환경변수 관리.env 파일은 중요한 설정과 변수들을 정의한다. DB 정보, URL, API Key 등과 같은 민감한 정보를 코드에 하드코딩하지 않고 관리할 수 있어 필수적인 파일이다.그러나 개발⸰테스트⸰배포 환경이나kojub.tistory.com 한 5개월 전에 Pydantic BaseSetting으로 환경변수 관리하는 config파일을 구성한 적 있다.import osfrom dotenv import load_dotenvfrom pydantic_settings import BaseSettingsload_dotenv()def _getenv(name: str, default: str = None) -> str..

FastAPI + Prometheus + Grafana 연동으로 모니터링 환경 구축하기 ( Grafana )

https://kojub.tistory.com/52 FastAPI + Prometheus + Grafana 연동으로 모니터링 환경 구축하기 ( Prometheus )프로젝트 init을 마친 후, prometheus + grafana 조합의 모니터링 시스템을 구축했다.이왕 만들 거, 추후에 API 상태 모니터링을 통해 좀 더 안정적인 서비스를 운영해보고자 연동을 해보았는데, 그 과정kojub.tistory.com 앞전에 FastAPI 프로젝트에 Prometheus를 연동해 보았다.설정한 prometheus를 시각화 해서 보여주기 위한 Grafana 연동도 해보자.Grafana 컨테이너 실행 및 접속 방법요즘엔 Grafana에서 자동으로 Prometheus 데이터 소스 플러그인이 내장되어 있다.이 플러그인을..

FastAPI + Prometheus + Grafana 연동으로 모니터링 환경 구축하기 ( Prometheus )

프로젝트 init을 마친 후, prometheus + grafana 조합의 모니터링 시스템을 구축했다.이왕 만들 거, 추후에 API 상태 모니터링을 통해 좀 더 안정적인 서비스를 운영해보고자 연동을 해보았는데, 그 과정들을 살펴보자. prometheus FastAPI 적용1. docker desktop을 활성화 시킨 뒤, prometheus의 docker 이미지를 로컬에 다운로드 한다.docker pull prom/prometheus 2. 루트경로에 prometheus_data 폴더를 생성한 뒤, 그 안에 promehteus 설정파일 (promehteus.yml)을 만들어준다.global: scrape_interval: 15sscrape_configs:- job_name: 'bread-pilgrim'..

2025 오픈소스 컨트리뷰션 아카데미 ( OSSCA ) 활동 후기

PR Agent 프로젝트 활동내용PR 문화와 코드 리뷰 자동화 도구에 관심을 갖기 시작하던 시기에,운 좋게도 좋은 기회가 찾아와 참여하게 되었던 OSCCA PR Agent 프로젝트 활동이 마무리되었다. 어떻게 진행됐었더라?멘토님께서 이전 세션 때는 개인과제만 주셨다고 했는데, 이번 PR Agent 프로젝트에서는 5개의 팀을 구성해 팀원들과 함께 오픈소스 기여 과정을 직접 경험하도록 해주셨다. 구성된 팀끼리는 매주 1시간 이상 정기모임을 진행했고, 주차마다 주어지는 과제에 대해 논의했다.또, 일요일마다 멘토님과 다른 멘티분들까지 함께 정기모임을 진행하면서 학습 및 기여 진행상황들을 공유하고 피드백 하는 시간을 가졌다. 1 ~ 3 주차실제로 PR Agent에 기여 작업을 하기전에, 필요한 학습을 주로 진행..

끄적거림 2025.05.26

[ PR Agent ] CLI 방식 동작구조

PR Agent 를 로컬에서 실행해보았다. CLI 방식으로 실행해보았고, 동작구조를 살펴보기 위해 pr_agent/cli.py 파일을 들여다 보았다. 동작구조 도식화0. cli.py 파일 트리거cli.py 파일이 실행되면, run 메소드가 실행된다.if __name__ == '__main__': run() 1. CLI argument parserrun 메소드가 실행되면, 가장 먼저 set_parser 즉, CLI로 입력된 커맨드라인 인자값을 파싱하는 메소드(=set_parser)가 실행된다.def run(inargs=None, args=None): parser = set_parser() set_parser() 메소드PR-Agent를 실행할 때 어떤 인자를 받을지 정의하는 역할을 한다.def ..

프로그래밍/LLM 2025.05.08

[PR Agent] 1. 환경설정 및 테스트

https://qodo-merge-docs.qodo.ai/usage-guide/ Usage guide - Qodo Merge (and open-source PR-Agent)Noneqodo-merge-docs.qodo.aiPR Agent 란 PR-Agent는 Pull Request를 보다 효율적으로 리뷰하고 처리할 수 있도록 도와주는 오픈소스 도구로, 이번 OSSCA에서 기여할 프로젝트이다.오픈소스 기여의 초석을 다지기 위해, 해당 프로젝트의 환경 설정 과정을 먼저 살펴보았다. Run from sourcehttps://qodo-merge-docs.qodo.ai/installation/locally/#run-from-source1. pr-agent 오픈소스 레포 클론git clone https://githu..

프로그래밍/LLM 2025.05.02

RAG ( 검색 증강 생성 )

RAG란?LLM이 외부 지식(DB, 문서 등)을 검색해서 참고한 뒤, 그걸 바탕으로 응답을 생성하는 방식임. 1. RAG를 사용하는 이유1. 허위 응답을 제어하여 신뢰성 있는 답변을 얻을 수 있음.LLM은 학습된 범위 내에서만 답변 가능하기 때문에, 답이 없을 경우 그럴듯한 허위 정보(Hallucination)를 만들어내기도 함.하지만 RAG는 외부 문서 기반의 응답이므로 보다 정확하고 신뢰성 있는 답변을 이끌어낼 수 있음.2. 최신 정보를 사용자에게 제공할 수 있음.LLM은 학습 이후 고정된 정보를 기반으로 응답하지만, RAG는 외부 문서만 갱신하면 최신 정보도 반영 가능3. 비용적으로 효율적임.FM ( ≈ Base Model )을 조직이나 도메인별 정보를 위해 재교육하기 위해선 비용이 많이듬.4. 개..

카테고리 없음 2025.04.22

2025 오픈소스 컨트리뷰션 아카데미 ( OSSCA ) 합격 및 발대식

OSSCA 지원 동기 및 합격2025년도 새해 목표 중에 "개발동아리 참여하기"가 있었다. 사이드 프로젝트도 할 겸 네트워킹을 위해서였는데, 새해 초부터 따로 하게된 사이드 프로젝트가 생겨서 굳이 서비스 개발용 대외활동이 필요가 없어졌다. 그러다 작년에 지인이 추천해줬던 오픈소스 컨트리뷰션 아카데미가 작년 이맘 때쯤 지원 받았던 거 같은데 싶어서 보니 "체험형" 지원을 받고 있었다. https://www.contribution.ac/" data-ke-align="alignCenter" data-og-description="🌱 모집대상" data-og-host="www.contribution.ac" data-og-source-url="https://www.contribution.ac/" data-og-i..

끄적거림 2025.04.16