분류 전체보기 305

[FastAPI] FastAPI 기본 컨트롤러 사용 방법

슬슬 Pinit에 "일정 쪼개기" 기능을 붙이고 싶어져, FastAPI로 간단하게 WAS를 구성해보려고 한다.처음엔 DB 접근 + 사용자 요청 받기는 Java+Spring으로 하고, AI 모델부만 gRPC + LangGraph로 수행할까 했는데,요새 LangGraph 관련 도구를 사용하는 기업들이 FastAPI 계열을 사용하기도 하고,자바+스프링 생태계에서 벗어나 새로운 구성과 아키텍처를 경험해보고 싶어서 FastAPI를 선택하게 되었다. 이 글이 WEB BE Repository가 아닌 Article 탭에 들어가게 된 이유는, 단순 FastAPI 기초 지식의 나열이 아닌 "Java+Spring 백엔드 개발자 관점에서의 FastAPI + SQLAlchemy + LangGraph의 이해" 관점으로 접근할 예..

[Pinit] 디스코드 메시지로 예외 알림 받기

실제로 k3s를 이용해 배포한 뒤, 발생한 예외를 바로바로 확인하기 어려운 문제가 있었다. 따라서, 디스코드 웹훅을 이용해 예외를 메시지로 받아보려 한다.목차에러 로그를 디스코드 메시지로 전달할 Appender에 대해 알아보기DiscordWebhookAppender 구현하기logback-spring.xml 정의하기AppenderLogback에서 Appender는 “로그 이벤트(ILoggingEvent)를 받아서, 특정 출력 대상(sink)으로 내보내는 출력 어댑터”이다. 간단하게 Appender가 동작하기까지의 동작 과정을 살펴보면 다음과 같다.SLF4J API: log.info(...), log.error(...) 호출Logback Logger: 로그 이벤트(ILoggingEvent) 생성(선택) Fi..

[Pinit] API-Gateway 핀잇에 적용하기

API 게이트웨이는 프론트와 백엔드 간의 연결 전에, 백엔드 서버를 Production에 올려 테스트할 때 필요하기에 만들게 되었다.1. 인증 로직 번거로움 관점백엔드 기능의 서브 도메인 단위 통합테스트를 하고 싶었는데, 현재 서브 도메인 내에서 자체적으로 인증 기능을 수행해고 있었다.그래서 curl로 간단하게 테스트하기가 어려운 문제가 존재하고 있었다.인증 기능과 같은 공통 로직 관점 기능이 마이크로서비스에 침투해 있으면, 우리가 구현한 기능만 간단하게 테스트하기가 까다로워지는 문제가 발생한다.2. 프론트가 API 버전을 몰랐으면 좋겠다.프론트가 버전을 몰라도, request Body 기반으로 라우팅을 수행할 수 있으면 좋겠다.그런데, request body 파싱->객체 변환->API 재호출은 게이트웨..

2025년 회고

가볍(?)게 KPT 회고 형식으로 진행해보려 한다.좋았던 것기존의 나를 잘 지켰다.문제 상황으로부터 회피하지 않고, 꾸준히 도전하는 것일상 생활을 시스템화하고, 체계적인 상태를 유지하는 것구조적으로 사고하는 것감사와 꾸준함의 관계를 이해하고 시스템화했다.이는 동시에 아쉬웠던 부분이기도 한데,항상 성경적으로 감사하는 의무감에서 벗어나 감사하지 않는 기간을 가졌고,이를 가지면서 나 자신이 게을러지는 것을 경계하느라 너무 많은 에너지를 소비했다.하지만 동시에, 감사를 챙기게 되면 시스템을 유지하는 데 훨씬 적은 에너지를 소모할 수 있다는 것을 논리적으로 깨달았다.감사가 유지되지 않으면 빠르게 끝낼 수 있는 대안을 찾게 되고, 하나의 뚜렷한 결과를 내기 어려워진다.감사가 유지되지 않으면 "어떻게든 지금만 지나면..

2025년 12월 4주차 회고

감사가 무너지면 꾸준함이 무너진다.조급해지기 전에, 대안을 찾기전에, 충분히 감사했나?이번 주의 감사이번주도 묵묵히 열심히 살아줘서 고맙다.항상 무언가를 수행하기.체계적인 상태를 유지하기.큰그림 그리고 핵심 짚기.처음부터 끝까지 차근차근 전개하기.현 시스템에 대한 감사를 유지하기.보상 체계를 깨끗히 유지하기.입장 중심이 아닌 이익 중심으로 사고하기.윈-윈 전략 생각하기.단정 짓지 말고, 다음에 무엇을 해야 할 지 상상하기.내가 놓치고 있는 부분이 분명히 존재한다는 걸 인정하기.상대방이 어떤 점을 해결해 주는 것을 원하는가?지금 내가 다음에 무엇을, 어떤 절차로 해야 하는가?이번주에 한 것쿠버네티스 배포과정 문서화애플리케이션 레이어까지 테스트 코드 보완FCM 토큰 관리 방안 설계 - 알림 시스템 완성카페 ..

Spring Data JPA - Auditing

소개우리 서비스가 엔티티를 생성/변경할 때, 아래와 같은 변경한 사람과 시간을 추적하고 싶으면 어떤 방법을 이용해야 할까?등록일수정일등록자수정자이를 애플리케이션 서비스 레이어에서 직접 저장할 수 있겠지만, 지정한 필드가 특정 시점에 값을 저장하도록 자동으로 설정하고 싶을 수 있다.보통은 이런 로깅 작업은 도메인(비즈니스) 로직이라기 보단, 인프라를 위한 로직에 가깝다. 이때 스프링 Data JPA는 메소드를 만들어서, 특정 시점에 해당 필드에 값을 자동으로 대입하는 작업을 지원한다. 이와 같이 변경/수정 이력을 감사한 로그를 Audit Log라 하고,이와 같은 감사 로그를 데이터를 자동으로 넣어주는 것을 Auditing이라고 한다.Auditing 적용그럼 이제 Spring Data JPA에서 지원하는 A..

[Pinit] 핀잇 백엔드 마이크로서비스를 배포할 k8s 클러스터 구축하기

목차인프라 세팅ARC 설치ARC가 사용할 ServiceAccount 정의pinit 네임스페이스에서 role 생성 & sa와 바인딩워크플로우 작성테스트/빌드도커파일 작성도커 이미지 업로드러너가 해당 서비스 어카운트를 이용해 kubeconfig 생성kubectl을 이용해 해당 deployment 실행deployment 정의파드에 secret 환경 변수 세팅하기도커 이미지를 받아오고 해당 이미지를 배포Health Probe 시스템 구축서비스/인그레스 설정들어오는 서비스 설정인그레스/게이트웨이가 해당 서비스를 가리키도록 설정이 글은 쿠버네티스 클러스터 내에 Github Self-Hosted runner를 두고, 해당 러너에서 워크플로우를 트리거해 CI/CD를 진행하는 과정을 담은 가이드입니다.진행하며 이해가 안..

[쿠버네티스 튜토리얼] 7. 쿠버네티스의 리소스 조절

본 글은 GPT 정리를 참고하였습니다. 쿠버네티스(Kubernetes)에서 “리소스 조절”은 크게 2가지 의미로 쓰인다.한 컨테이너/파드(Pod)가 쓰는 CPU·메모리 양을 정하는 것부하에 따라 파드/노드 개수를 자동으로 늘리고 줄이는 것1) 가장 기본: requests / limits (리퀘스트 / 리밋)파드 안의 컨테이너마다 CPU, 메모리 사용량을 어느 정도로 잡을지를 선언한다.requests (요청량): “최소 이 정도는 필요”쿠버네티스 스케줄러(Kubernetes Scheduler)가 파드를 어느 노드(Node)에 올릴지 결정할 때 참고한다.limits (제한량): “최대 이 이상은 못 씀”실행 중 제한을 넘으면 제어가 들어가게 된다.CPU는 보통 쓰로틀링(throttling, 속도 제한)이 걸..

[쿠버네티스 튜토리얼] 6. Helm 설치 및 애플리케이션 관리

Kubernetes에서는 복잡한 애플리케이션 배포를 쉽게 하기 위해 Helm 패키지 매니저를 널리 사용한다.Helm은 차트(Chart)라는 단위로 Kubernetes 매니페스트들을 묶어 패키징하고, 템플릿화하여 재사용 가능하게 한다. 차트는 애플리케이션(예: WordPress, MySQL 등)의 Kubernetes 리소스 정의들을 포함하며, 값 파일(values.yaml)을 통해 환경별 설정을 바꿀 수 있다. 간단히 말해, Helm은 Kubernetes 세계의 apt/yum/npm 같은 패키지 매니저이다. (사용법은 도커허브와 유사하다.)차트를 이용하여 복잡한 앱을 한 줄로 설치하거나, 버전 관리를 할 수 있다.Helm CLI 설치 (로컬 환경)Helm 설치Ubuntu에서는 snap으로 설치하거나, 스크..

2025년 12월 3주차 회고

감사가 무너지면 꾸준함이 무너진다.조급해지기 전에, 대안을 찾기전에, 충분히 감사했나?이번 주의 감사알림을 무사히 발송해봤다.쿠버네티스를 써보면서 얻은 인사이트의 기록 및 네트워크에 대한 깊은 이해항상 무언가를 수행하기.체계적인 상태를 유지하기.큰그림 그리고 핵심 짚기.처음부터 끝까지 차근차근 전개하기.현 시스템에 대한 감사를 유지하기.보상 체계를 깨끗히 유지하기.입장 중심이 아닌 이익 중심으로 사고하기.윈-윈 전략 생각하기.단정 짓지 말고, 다음에 무엇을 해야 할 지 상상하기.내가 놓치고 있는 부분이 분명히 존재한다는 걸 인정하기.상대방이 어떤 점을 해결해 주는 것을 원하는가?지금 내가 다음에 무엇을, 어떤 절차로 해야 하는가?이번주에 한 것푸쉬알림 동작 성공쿠버네티스 학습핀잇 쿠버네티스 마이그레이션핀..