분류 전체보기 357

Kotlin 문법 - Java와의 차이점

코틀린을 사용하면서, 자바랑 확연히 달라 적응하기 어려웠던 부분들을 기록해둔다.read-only vs mutable 관리read-only vs mutable: 객체 내부 프로퍼티 접근제어코틀린에서 val/var 차이와, 프로퍼티의 getter/setter를 정의하는 방식(특히 private set)을 정리한다.1. val vs varval: 재할당 불가(읽기 전용 참조). 프로퍼티 관점에서는 setter가 없음.var: 재할당 가능. 프로퍼티 관점에서는 getter + setter가 있음.val a = 10// a = 20 // 컴파일 에러var b = 10b = 20 // 가능2. 기본 getter/setter코틀린 프로퍼티는 기본적으로 접근자(accessor)가 자동 생성된다.class User { ..

동시성 vs 병렬성

오랜만에 용어를 다시보니 헷갈려서 정리한다.동시성 vs 병렬성핵심 정의동시성(Concurrency): 여러 작업이 같은 시간 구간에 진행되며, 실행이 교차(interleave) 될 수 있는 성질.단일 코어에서도 가능(스케줄링/컨텍스트 스위치).병렬성(Parallelism): 여러 작업이 같은 시각에 실제로 실행되는 성질.멀티코어/멀티프로세서에서 물리적 동시 실행.따라서, 병렬 실행은 “같은 시간 구간에 진행”을 만족하므로 동시성도 만족한다.하지만 동시성은 단일 코어에서도 성립하므로 병렬성이 없어도 동시성은 성립한다.이 관계를 집합으로 보면Concurrency ⊇ Parallelism 상호 배타적이 아니라, 병렬성은 동시성 안에 포함된다(포함 관계).예시로 구분동시성 O, 병렬성 X단일 코어에서 스레드 A..

[번역] Python의 ORM - SQLAlchemy 튜토리얼

ORM 빠른 시작기본 ORM 사용 형태를 빠르게 보고 싶은 신규 사용자를 위해, SQLAlchemy Unified Tutorial에서 사용하는 매핑과 예제를 축약해 보여준다. 이 섹션의 설명은 의도적으로 매우 짧게 작성되어 있으므로, 여기서 다루는 각 개념에 대한 더 자세한 설명은 SQLAlchemy Unified Tutorial을 참고하는 것이 권장된다.목차모델 선언테이블 생성영속화(Create)조회(Read) - 단순 조회 & 조인수정(Update) - 변경 사항 반영삭제(Delete)모델 선언(Declare Models)여기서는 데이터베이스에서 조회할 구조를 구성하는 모듈 수준 구성 요소를 정의한다.이 구조는 선언적 매핑(Declarative Mapping) 이라고 하며, 파이썬 객체 모델과 함께,..

이벤트-루프 모델과 DB 트랜잭션 지원

비동기(Promise, Async, Coroutine, Reactor) 에 대한 깊은 이해를 수행하다보면, 필연적으로 마주치는 어려움이 있다.바로 이벤트 루프 모델은 어떻게 DB I/O 방식을 바꾸는가 이다. 상당히 이해하기 어려운 개념이기 때문에, 읽는 독자 여러분들도 직접 그림을 그려보며 이해하는 것을 권장한다. 자바+스프링의 예시를 바탕으로 이야기를 전개해 나가겠다.목차이벤트 루프(비동기) 모델의 목표DB 드라이버와 DB간의 통신 방식DB 드라이버와 애플리케이션 간에 발생하는 문제점결론1. 이벤트 루프(비동기) 모델의 목표일반적인 HTTP 요청의 처리 흐름을 그려보면 다음과 같다.속이 빈 형태 - 인터페이스속이 채워져있는 형태 - 구현체너무나 당연한 이야기지만, 애플리케이션 코드 플로우는 자체적인 ..

2026년 1월 1주차 회고

감사가 무너지면 꾸준함이 무너진다.조급해지기 전에, 대안을 찾기전에, 충분히 감사했나?이번 주의 감사더 이상 악재에 휘둘리지 않고 초연해줘서 고맙다.이렇게 핀잇을 구현할 여유를 만들어낼 수 있음에 고맙다.항상 무언가를 수행하기.체계적인 상태를 유지하기.큰그림 그리고 핵심 짚기.처음부터 끝까지 차근차근 전개하기.현 시스템에 대한 감사를 유지하기.보상 체계를 깨끗히 유지하기.입장 중심이 아닌 이익 중심으로 사고하기.윈-윈 전략 생각하기.단정 짓지 말고, 다음에 무엇을 해야 할 지 상상하기.내가 놓치고 있는 부분이 분명히 존재한다는 걸 인정하기.상대방이 어떤 점을 해결해 주는 것을 원하는가?지금 내가 다음에 무엇을, 어떤 절차로 해야 하는가?이번주에 한 것디스코드 에러로그 알림 도입API 사용 데이터 로깅(프..

[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년 12월 4주차 회고

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

Spring Data JPA - Auditing

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