전체 글 2644

LLM 기반 GitLab Merge Request 자동 리뷰 PoC

도입 배경현재 업무 프로세스 상 새로운 기능을 개발할 때 feature 브랜치를 생성하여 작업을 진행한 뒤, main 브랜치로의 병합(Merge Request)을 요청하는 표준적인 협업 프로세스를 따르고 있고 이 과정에서 리뷰어는 Merge Request가 생성될 때마다 변경된 코드와 커밋된 파일을 꼼꼼하게 확인하고, 직접 리뷰 후 승인을 진행해야 함그러나 실제 업무 현장에서는 리뷰어의 업무가 몰리거나 여러 건의 Merge Request가 동시에 올라올 경우, 리뷰에 충분한 시간을 할애하기 어렵다는 문제가 자주 발생특히 한 번에 커밋된 파일이나 코드 변경량이 많을 때에는, 리뷰어가 코드 전체를 세세하게 확인하기보다는 일정 부분에 대해 신뢰에 기반하여 빠르게 승인하는 사례가 종종 생겼고, 이로 인해 코드 ..

리서치 2025.06.26

백준 2025 서강대학교 K512컵

A. 백준 33990번 3대 512단순 구현 B. 백준 33991번 전철 통학민수가 역 i에 걸어가서 도착하는 데 걸리는 시간은 맨해튼 거리 공식에 따라 |X − X_i∣+ |Y −Y_i| 분역 i의 전철은 0, Ti, 2Ti, 3Ti,…분에 도착하므로, 민수가 도착 시간 Ai​분에 가장 가까우면서도 그 이후 도착하는 전철 시각 K_i는 ⌈T_i / A_i​​⌉ * T_i​세 개의 역에 대해 각각 이 값을 계산한 뒤 min⁡{K1, K2, K3}이 가장 빠른 탑승 시간 C. 백준 33992번 사막 탐험두 가지 방법 중 소모 체력이 더 작은 쪽이 답 직접 경로: 원과 선분이 교차한다면 “전체 거리 – 원 내부 구간 길이”만큼 소모하고, 교차하지 않으면 전체 거리만큼 소모 오아시스 우회 경로: A에서 ..

알고리즘/BOJ 2025.06.21

[Hibernate/JPA] 캐싱

1. 데이터베이스 캐싱 1.1 캐싱의 계층 구조캐싱은 데이터베이스 성능 최적화의 핵심DB → OS → 애플리케이션 → (ORM) → 2차 캐시 → 1차 캐시 등 여러 계층에 걸쳐 존재디스크 접근을 최소화하고, DB/OS/애플리케이션 메모리에서 최대한 데이터를 제공하는 것이 핵심 1.2 캐시 동기화 전략 가. Cache-aside애플리케이션이 캐시에서 먼저 데이터를 찾고, 없으면 DB에서 조회 후 캐시에 넣음쓰기는 데이터베이스와 캐시를 모두 갱신해야 함 (동기화 주의 필요) 나. Read-through캐시에 데이터가 없을 때, 캐시 시스템이 DB에서 자동으로 데이터 조회 및 캐시 삽입애플리케이션에서는 항상 캐시만 조회 다. Write-through쓰기 작업이 캐시와 DB에 동시에 적용됨캐시 일관성 유..

DB/JPA 2025.06.11

[Hibernate/JPA] 트랜잭션과 동시성 제어 패턴

서론 실제 금융/암호화폐/전자지갑 서비스에서 동시성 결함이나 트랜잭션 제어 미비로 인해 막대한 금액의 해킹 피해가 발생할 수 있으므로 보안과 데이터 무결성은 중요한 개념i.g. FlexCoin, Poloniex 해킹 사례여러 건의 출금을 거의 동시에 요청 → 음수 잔고 허용, 데이터베이스에 잘못된 레코드가 삽입되었고 이로 인해 시스템 무결성이 깨지고 공격자는 훨씬 더 많은 금액을 탈취함 트랜잭션 보장은 매우 중요한 개념구글 Spanner 등 신세대 DBMS조차 "트랜잭션을 포기하는 것보다, 필요할 때 성능 병목을 해결하는 것이 현명하다"라고 명시MongoDB 등도 결국 ACID 보장 기능을 추가 (4.0+ 버전부터 적용) 1. ACID와 트랜잭션 동시성 제어모든 DB 작업은 트랜잭션 내에서 진행됨Auto..

DB/JPA 2025.06.09

[Hibernate/JPA] Fetching

1. JDBC Statement Fetch Size 1.1 Statement Fetch Size란?JDBC Statement의 ResultSet은 DB 커서로, 한 번에 "몇 개의 행(row)"을 클라이언트로 가져올지 결정하는 값이 fetch sizestatement.setFetchSize(n)와 같이 설정하면n 개씩 데이터 fetch 하고네트워크 round-trip 횟수와 메모리 사용량에 직접적 영향을 끼침 1.2 DBMS별 기본 fetch size와 특징 가. Oracledefault fetch size: 1010g, 11g 드라이버는 최대 사이즈로 버퍼 미리 할당 (VARCHAR2(4000) 컬럼은 4000바이트)12c부터는 실제 데이터 크기만큼만 할당 (메모리 효율 ↑)Statement 캐싱 사용..

DB/JPA 2025.06.09

[17장] 전역 메서드 보안: 사전 및 사후 필터링

주의이 책은 Spring Security 5 버전을 기준으로 작성되었으므로, Spring Boot 3.X 버전에서는 일부 클래스가 더 이상 사용되지(deprecated) 않을 수 있습니다. 서론메서드 호출은 허용하면서도 메서드로 보내는 매개변수가 몇 가지 규칙을 따르는지 확인하고 싶을 수도 있음또는 메서드를 호출한 뒤 호출자가 반환된 값의 승인된 부분만 받을 수 있게 하려는 시나리오도 있을 수 있음이러한 기능을 필터링이라고 하며 다음의 두 범주로 분류함사전 필터링 (prefiltering): 프레임워크가 메서드를 호출하기 전에 매개변수의 값을 필터링사후 필터링 (postfiltering): 프레임워크가 메서드를 호출한 뒤 반환된 값을 필터링 필터링은 호출 권한 부여와 다른 방식으로 작동함필터링을 적용하면..

[Hibernate/JPA] Batching

1. JDBC 배치 업데이트와 Hibernate 배치 1.1 JDBC 배치 업데이트(Batch Update) 기본 개념JDBC 2.0부터 여러 개의 INSERT, UPDATE, DELETE statement를 하나의 DB 요청으로 묶어 실행 가능addBatch()로 여러 statement를 쌓고executeBatch()로 한 번에 실행 JDBC 배치 업데이트를 실행함으로써 얻을 수 있는 이점은 다음과 같음데이터베이스 왕복 (Round Trip) 횟수 감소트랜잭션 응답 시간 대폭 단축대량 처리 (수천~수만 건)에서 필수적 성능 최적화 1.2 Statement vs PreparedStatement 배치Statement 배치는 각 SQL이 완전히 다른 정적 SQL일 때 실행드라이버/DB마다 지원 및 동작 방식..

DB/JPA 2025.06.04

[Hibernate/JPA] Statement

1. Statement 생애주기와 실행 계획 1.1 Statement와 PreparedStatement의 실행 단계Statement는 SQL을 문자열로 직접 실행하며 매번 파싱과 실행 계획 수립 필요PreparedStatement는 다음과 같이 동작함SQL을 미리 컴파일바인드 변수로 파라미터화여러 번 실행 시 실행 계획을 재사용하여 성능 향상서버 측 Prepare/Execute로 동작 실행 단계Parsing: SQL 문법/구문 오류 체크, 내부 파싱 트리 생성Optimizer: SQL의 실행 계획 (Execution Plan)을 생성하며 인덱스 선택, 조인 순서/알고리즘, 통계 기반 비용 산정Executor: 실제 실행 계획에 따라 DB에서 데이터 읽고 결과 생성PreparedStatement는 실행 ..

DB/JPA 2025.06.04

[Hibernate/JPA] 영속성 컨텍스트

1. 영속성 컨텍스트 (Persistence Context) 1.1 영속성 컨텍스트란?Persistence Context는 JPA(EntityManager), Hibernate(Session)에서 엔티티 상태와 변경사항을 관리하는 1차 캐시 역할 수행엔티티를 조회하면 해당 엔티티는 영속성 컨텍스트에 등록되어 엔티티 식별자를 키로 하는 Map에 저장됨같은 트랜잭션 내에서 동일 엔티티를 여러 번 조회해도, 영속성 컨텍스트에서 캐싱된 객체를 반환데이터베이스를 조회하지 않고 캐시를 조회하기 때문에 빠름 1.2 EntityManager와 SessionJPA의 EntityManager와 Hibernate의 Session은 영속성 컨텍스트의 API 역할을 하며, 기능적으로 거의 동일Hibernate 5.2부터는 Se..

DB/JPA 2025.06.04

[Hibernate/JPA] 상속

1. JPA 상속 정리 1.1 JPA에서 상속이 중요한 이유상속은 도메인 모델에서 공통 속성과 비즈니스 로직을 추상 클래스 또는 인터페이스로 표현할 수 있게 해 줌엔티티 계층 구조를 통해 중복 코드와 설계 복잡도를 줄이고, 전략 패턴(Strategy Pattern), 방문자 패턴(Visitor Pattern) 등 행동 패턴 구현에 적합함데이터 구조(속성)의 재사용보다, 메서드의 다양화에 더 적합함데이터 재사용에는 컴포지션 패턴이 더 나음 1.2 상속과 전략 패턴 실전 예시구독자 발송 시스템을 예로 들면 다음과 같음Subscriber(부모): firstName, lastName, createdOn 등 공통 속성EmailSubscriber, SmsSubscriber(자식): 각자 email, phoneNu..

DB/JPA 2025.06.02