<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
<title>코징의 개발탐방</title>
<link>https://qkrxodud.github.io/tech-blog/</link>
<description>Java, Spring, 데이터베이스, 아키텍처를 탐구하는 백엔드 개발 블로그입니다.</description>
<language>ko</language>
<item><title>ElasticSearch를 도입하게 된 이유</title><link>https://qkrxodud.github.io/tech-blog/posts/es-intro/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-intro/</guid><description>대량 거래 데이터에서 여러 조건을 조합해 이상 건을 찾아내는 작업이 RDBMS 인덱스로는 한계가 있어 ElasticSearch를 도입하게 된 과정을 정리합니다.</description><category>Elasticsearch</category><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>RDBMS와 ElasticSearch 용어 대응시키기</title><link>https://qkrxodud.github.io/tech-blog/posts/es-terms-commands/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-terms-commands/</guid><description>RDBMS와 ElasticSearch의 용어 차이를 정리하고, 인덱스 생성·매핑 정의·도큐먼트 삽입 같은 기본 명령어를 실습합니다.</description><category>Elasticsearch</category><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>단어 검색은 어떻게 동작할까 — 역인덱스</title><link>https://qkrxodud.github.io/tech-blog/posts/es-inverted-index/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-inverted-index/</guid><description>역인덱스가 단어 단위 검색을 빠르게 만드는 원리와, MySQL 인덱스 대비 역인덱스가 감수하는 쓰기·갱신 비용의 트레이드오프를 정리합니다.</description><category>Elasticsearch</category><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>한계점과 개선해야 할 점</title><link>https://qkrxodud.github.io/tech-blog/posts/es-limitations/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-limitations/</guid><description>ElasticSearch를 실제 프로젝트에 적용할 때 마주치는 쓰기 증폭과 딥 페이징 문제, 그리고 이를 완화한 방법을 정리합니다.</description><category>Elasticsearch</category><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>색인이 만들어지는 순서와 구조</title><link>https://qkrxodud.github.io/tech-blog/posts/es-indexing-structure/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-indexing-structure/</guid><description>Lucene의 flush·commit과 Elasticsearch의 refresh·translog가 맞물려 색인과 검색을 처리하는 과정을 정리합니다.</description><category>Elasticsearch</category><pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>애널라이저: 토크나이저와 필터</title><link>https://qkrxodud.github.io/tech-blog/posts/es-analyzer/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-analyzer/</guid><description>문자열이 토큰으로 쪼개지는 과정을 캐릭터 필터·토크나이저·토큰 필터로 나눠 살펴보고, 한글 검색을 위한 Nori 설정까지 정리합니다.</description><category>Elasticsearch</category><pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate></item>
<item><title>매핑 설계</title><link>https://qkrxodud.github.io/tech-blog/posts/es-mapping/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-mapping/</guid><description>ElasticSearch 매핑 개념과 자주 사용하는 데이터 타입, 그리고 text와 keyword를 구분해야 하는 이유를 정리합니다.</description><category>Elasticsearch</category><pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>검색 쿼리 기본</title><link>https://qkrxodud.github.io/tech-blog/posts/es-search/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-search/</guid><description>ElasticSearch의 match, term, terms 쿼리를 예제와 함께 정리하고 각각 어떤 상황에 적합한지 설명합니다.</description><category>Elasticsearch</category><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>여러 조건을 함께 만족시키기 — bool 쿼리</title><link>https://qkrxodud.github.io/tech-blog/posts/es-bool-query/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-bool-query/</guid><description>ElasticSearch에서 2가지 이상의 조건을 동시에 만족시키는 데이터를 조회할 때 사용하는 bool 쿼리와 must, filter의 차이를 정리합니다.</description><category>Elasticsearch</category><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>특정 조건을 제외하고 조회하기 — must_not</title><link>https://qkrxodud.github.io/tech-blog/posts/es-must-not/</link><guid>https://qkrxodud.github.io/tech-blog/posts/es-must-not/</guid><description>bool 쿼리의 must_not을 활용해 특정 조건을 만족하지 않는 데이터만 골라 조회하는 방법을 정리합니다.</description><category>Elasticsearch</category><pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate></item>
<item><title>self-invocation</title><link>https://qkrxodud.github.io/tech-blog/posts/self-invocation/</link><guid>https://qkrxodud.github.io/tech-blog/posts/self-invocation/</guid><description>같은 클래스 내부 호출에서 @Transactional이 조용히 무시되는 self-invocation 문제의 원인과, REQUIRES_NEW를 안전하게 쓰는 해결 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>Claude Code로 만든 암호화폐 투자 대시보드</title><link>https://qkrxodud.github.io/tech-blog/posts/claude-code-crypto-dashboard/</link><guid>https://qkrxodud.github.io/tech-blog/posts/claude-code-crypto-dashboard/</guid><description>Claude Code와 Ralph Loop로 1,208회의 자율 반복 루프를 돌려 BTC 온체인 지표 대시보드와 자동매매 시스템을 약 3주 만에 구축한 과정을 소개합니다.</description><category>AI 협업 개발</category></item>
<item><title>Ralph Loop 설계하기 — BACKLOG.md와 상태 파일 운영법</title><link>https://qkrxodud.github.io/tech-blog/posts/ralph-loop-backlog/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ralph-loop-backlog/</guid><description>Claude Code가 자율적으로 반복 작업을 수행하는 Ralph Loop를 BACKLOG.md, PROGRESS.md, MEMORY 파일로 설계하고 1,208번의 루프 동안 운영한 방법을 정리합니다.</description><category>AI 협업 개발</category></item>
<item><title>Claude Code를 실제로 어떻게 사용했나</title><link>https://qkrxodud.github.io/tech-blog/posts/claude-code-usage/</link><guid>https://qkrxodud.github.io/tech-blog/posts/claude-code-usage/</guid><description>Claude Code로 1,200회 넘게 개발 루프를 돌리며 정립한 에이전트 역할 분리, CLAUDE.md 규칙, 세션 간 컨텍스트 유지 방법을 정리합니다.</description><category>AI 협업 개발</category></item>
<item><title>AI와 함께 자동매매 시스템을 설계한 과정</title><link>https://qkrxodud.github.io/tech-blog/posts/ai-trading-system/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ai-trading-system/</guid><description>자동매매 시스템을 AI와 함께 설계하며 요구사항을 Phase로 나누고, 멱등성 키와 시뮬레이션 모드 등 실거래 전 안전장치를 만든 과정을 정리합니다.</description><category>AI 협업 개발</category></item>
<item><title>AI와 함께 개발하면서 겪은 문제들과 해결 방법</title><link>https://qkrxodud.github.io/tech-blog/posts/ai-dev-problems/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ai-dev-problems/</guid><description>Claude Code를 1,200회 이상 반복 사용하며 겪은 여섯 가지 문제와 해결 방법을 정리합니다. 상태 파일, 백로그 분할, 규칙 명문화로 AI 협업의 한계를 보완한 경험을 공유합니다.</description><category>AI 협업 개발</category></item>
<item><title>AI 협업 개발</title><link>https://qkrxodud.github.io/tech-blog/posts/ai-collab-dev/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ai-collab-dev/</guid><description>Claude Code와 Ralph Loop로 1,208번의 루프를 돌리며 배운 AI 협업의 교훈을 정리합니다. 지시 작성법, 규칙의 파일화, 검증 자동화 등 협업 방식 자체를 다루는 시리즈의 마지막 편입니다.</description><category>AI 협업 개발</category></item>
<item><title>JVM TLAB (Thread Local Allocation Buffer)</title><link>https://qkrxodud.github.io/tech-blog/posts/jvm-tlab/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jvm-tlab/</guid><description>멀티스레드 환경에서 객체 할당 경합을 줄이는 JVM의 TLAB(Thread Local Allocation Buffer) 동작 원리와 주요 튜닝 플래그를 정리합니다.</description><category>Java · JVM</category></item>
<item><title>GC를 이해하기 위한 OS 기초: 프로세스와 스레드</title><link>https://qkrxodud.github.io/tech-blog/posts/gc-os-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/gc-os-basics/</guid><description>OS가 프로세스와 스레드를 다루는 방식, RAM이 유한한 자원인 이유와 가상 메모리 구조를 정리합니다.</description><category>Java · JVM</category></item>
<item><title>JVM은 어떻게 실행되고 클래스를 로딩하는가</title><link>https://qkrxodud.github.io/tech-blog/posts/jvm-execution-classloading/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jvm-execution-classloading/</guid><description>jar 파일이 프로세스로 실행되는 과정과 커널 스레드-자바 스레드의 매핑, JVM의 클래스 로딩 흐름을 정리합니다.</description><category>Java · JVM</category></item>
<item><title>GC의 역할과 튜닝 기준: Ergonomics와 JVM 기본 설정</title><link>https://qkrxodud.github.io/tech-blog/posts/gc-tuning-criteria/</link><guid>https://qkrxodud.github.io/tech-blog/posts/gc-tuning-criteria/</guid><description>GC의 역할과 주요 테크닉을 살펴보고, Ergonomics와 Pause-Time·Throughput·Footprint 목표로 이어지는 JVM 튜닝 기준을 정리합니다.</description><category>Java · JVM</category></item>
<item><title>Kafka 재처리</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-reprocessing/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-reprocessing/</guid><description>Kafka 운영 중 발생한 주기적 재처리 문제를 계기로 offset commit의 동작 방식과 Spring Kafka AckMode의 종류별 특징을 정리합니다.</description><category>Kafka</category></item>
<item><title>2025년 회고</title><link>https://qkrxodud.github.io/tech-blog/posts/retrospective-2025/</link><guid>https://qkrxodud.github.io/tech-blog/posts/retrospective-2025/</guid><description>분산락 도입, DDD 경계 문서화, 슬로우 쿼리 개선부터 개인 프로젝트 오픈과 사내 세미나까지 한 해의 경험을 정리합니다.</description><category>회고</category><pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate></item>
<item><title>데이터베이스 인덱스와 페이지네이션 최적화</title><link>https://qkrxodud.github.io/tech-blog/posts/index-pagination/</link><guid>https://qkrxodud.github.io/tech-blog/posts/index-pagination/</guid><description>클러스터/세컨더리/커버링 인덱스의 구조를 정리하고, OFFSET 방식의 느린 페이지네이션을 커버링 인덱스, No Offset, 파티셔닝으로 최적화하는 방법을 비교합니다.</description><category>Database</category></item>
<item><title>처음 쓰는 스프링 웹 플럭스</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-webflux-first/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-webflux-first/</guid><description>자동매매 프로젝트를 구성하며 Spring MVC와 WebFlux의 스레드 모델 차이를 비교하고, WebFlux를 선택하게 된 이유를 정리합니다.</description><category>Spring</category></item>
<item><title>Java 21의 Virtual Thread: 운영체제 개념과 효율성, 장단점 정리</title><link>https://qkrxodud.github.io/tech-blog/posts/virtual-thread/</link><guid>https://qkrxodud.github.io/tech-blog/posts/virtual-thread/</guid><description>Java 21에서 도입된 Virtual Thread의 동작 원리를 운영체제의 멀티프로그래밍·멀티태스킹·멀티스레딩 개념과 연결해 설명하고, 장단점과 활용 시나리오를 정리합니다.</description><category>Java · JVM</category></item>
<item><title>MySQL 인덱스 정리</title><link>https://qkrxodud.github.io/tech-blog/posts/mysql-index/</link><guid>https://qkrxodud.github.io/tech-blog/posts/mysql-index/</guid><description>MySQL이 인덱스로 B-Tree를 사용하는 이유와 카디널리티·선택도 개념을 바탕으로, 인덱스를 효율적으로 설계하는 방법을 정리합니다.</description><category>Database</category></item>
<item><title>식별자 (Identifiers), 관계 (Relationships)</title><link>https://qkrxodud.github.io/tech-blog/posts/identifiers-relationships/</link><guid>https://qkrxodud.github.io/tech-blog/posts/identifiers-relationships/</guid><description>JPA의 ID 생성 전략과 OneToMany, OneToOne, ManyToMany 연관관계 매핑에서 성능을 고려한 실무 선택 기준을 정리합니다.</description><category>Spring JPA</category></item>
<item><title>상속 매핑 전략</title><link>https://qkrxodud.github.io/tech-blog/posts/inheritance-mapping/</link><guid>https://qkrxodud.github.io/tech-blog/posts/inheritance-mapping/</guid><description>JPA의 상속 매핑 전략인 SINGLE_TABLE, JOINED, TABLE_PER_CLASS, MappedSuperclass를 비교하고 실무 선택 기준과 성능 최적화 팁을 정리합니다.</description><category>Spring JPA</category></item>
<item><title>데이터 액세스 스택</title><link>https://qkrxodud.github.io/tech-blog/posts/data-access-stack/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-access-stack/</guid><description>JPA·Hibernate 기반 데이터 액세스 계층에서 SQL 로깅, 스키마 관리, 커넥션 풀 모니터링 등 성능을 좌우하는 요소들을 정리합니다.</description><category>Spring JPA</category></item>
<item><title>영속성 컨텍스트</title><link>https://qkrxodud.github.io/tech-blog/posts/persistence-context/</link><guid>https://qkrxodud.github.io/tech-blog/posts/persistence-context/</guid><description>JPA 영속성 컨텍스트의 캐싱·더티 체킹·쓰기 지연 동작 원리와 플러시 발생 시점을 정리하고, 배치 처리와 플러시 모드를 활용한 성능 최적화 방법을 소개합니다.</description><category>Spring JPA</category></item>
<item><title>Java 기준 멀티스레드와 레이스 컨디션</title><link>https://qkrxodud.github.io/tech-blog/posts/multithread-race-condition/</link><guid>https://qkrxodud.github.io/tech-blog/posts/multithread-race-condition/</guid><description>Java에서 멀티스레드 프로그래밍 시 발생하는 레이스 컨디션의 원인을 예제로 살펴보고, synchronized·Lock·Atomic을 활용한 해결 방법을 정리합니다.</description><category>Java · JVM</category></item>
<item><title>슬로우 쿼리 개선</title><link>https://qkrxodud.github.io/tech-blog/posts/slow-query/</link><guid>https://qkrxodud.github.io/tech-blog/posts/slow-query/</guid><description>응답에 6초 이상 걸리던 페이지의 원인을 실행계획으로 분석하고, MySQL 옵티마이저의 드라이빙 테이블 선택 문제를 STRAIGHT_JOIN으로 해결한 경험을 정리합니다.</description><category>Database</category><pubDate>Fri, 21 Feb 2025 00:00:00 GMT</pubDate></item>
<item><title>2024년 회고</title><link>https://qkrxodud.github.io/tech-blog/posts/retrospective-2024/</link><guid>https://qkrxodud.github.io/tech-blog/posts/retrospective-2024/</guid><description>신규 프로젝트를 기일에 맞춰 오픈하며 겪은 락 전략, 캐시 Stampede, DBCP 설정 등 한 해 동안의 학습을 정리합니다.</description><category>회고</category><pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate></item>
<item><title>Cache Stampede(캐시 스템피드)</title><link>https://qkrxodud.github.io/tech-blog/posts/cache-stampede/</link><guid>https://qkrxodud.github.io/tech-blog/posts/cache-stampede/</guid><description>if(kakao)에서 소개된 캐시 스템피드 현상의 원인과 해결책(락, 캐시 웜업, 하이브리드 캐시), 그리고 Spring Boot Cold Start와 JIT 컴파일러의 동작 원리를 정리합니다.</description><category>Database</category></item>
<item><title>Layered Architecture 구조별 테스트 작성법</title><link>https://qkrxodud.github.io/tech-blog/posts/layered-architecture-tests/</link><guid>https://qkrxodud.github.io/tech-blog/posts/layered-architecture-tests/</guid><description>Persistence, Business, Presentation 계층의 역할과 계층별 테스트 전략, @DataJpaTest·@WebMvcTest 활용법을 정리합니다.</description><category>테스트</category><pubDate>Fri, 25 Oct 2024 00:00:00 GMT</pubDate></item>
<item><title>@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks</title><link>https://qkrxodud.github.io/tech-blog/posts/mock-annotations/</link><guid>https://qkrxodud.github.io/tech-blog/posts/mock-annotations/</guid><description>Mockito의 @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 애노테이션의 차이와 단위·통합 테스트에서의 활용법을 예제 코드로 정리합니다.</description><category>테스트</category><pubDate>Fri, 25 Oct 2024 00:00:00 GMT</pubDate></item>
<item><title>1주차 발자국</title><link>https://qkrxodud.github.io/tech-blog/posts/infearn-week1/</link><guid>https://qkrxodud.github.io/tech-blog/posts/infearn-week1/</guid><description>인프런 워밍업 클럽 백엔드 스터디 2기 1주차 회고로, 추상화와 이름 짓기, SOLID 원칙을 적용해 주문 검증 로직을 리팩터링한 과정을 정리합니다.</description><category>회고</category></item>
<item><title>2주차 발자국</title><link>https://qkrxodud.github.io/tech-blog/posts/infearn-week2/</link><guid>https://qkrxodud.github.io/tech-blog/posts/infearn-week2/</guid><description>인프런 워밍업 클럽 백엔드 스터디 2기 2주차 Readable Code 강의를 들으며 배운 추상화 레벨과 데이터 중심 설계 개념을 정리합니다.</description><category>회고</category></item>
<item><title>3주차 발자국</title><link>https://qkrxodud.github.io/tech-blog/posts/infearn-week3/</link><guid>https://qkrxodud.github.io/tech-blog/posts/infearn-week3/</guid><description>인프런 워밍업 클럽 백엔드 스터디 2기 3주차 Practical Testing 강의를 들으며 배운 테스트의 필요성과 DisplayName 작성법을 정리합니다.</description><category>회고</category></item>
<item><title>4주차 발자국</title><link>https://qkrxodud.github.io/tech-blog/posts/infearn-week4/</link><guid>https://qkrxodud.github.io/tech-blog/posts/infearn-week4/</guid><description>인프런 워밍업 클럽 백엔드 스터디 2기 4주차에서 배운 테스트 더블과 Mock, 좋은 테스트 작성 원칙을 정리하고 4주간의 학습을 회고합니다.</description><category>회고</category></item>
<item><title>DB 인덱스</title><link>https://qkrxodud.github.io/tech-blog/posts/db-index/</link><guid>https://qkrxodud.github.io/tech-blog/posts/db-index/</guid><description>MySQL이 인덱스로 B-Tree를 사용하는 이유와 인덱스의 동작 방식을 살펴보고, 복합 인덱스를 활용해 불필요한 단일 인덱스로 인한 자원 낭비를 줄이는 실무 설계 방법을 정리합니다.</description><category>Database</category><pubDate>Sat, 12 Oct 2024 00:00:00 GMT</pubDate></item>
<item><title>SOLID</title><link>https://qkrxodud.github.io/tech-blog/posts/solid/</link><guid>https://qkrxodud.github.io/tech-blog/posts/solid/</guid><description>SRP, OCP, LSP, ISP, DIP 다섯 가지 객체지향 설계 원칙을 Java 예제 코드와 함께 정리합니다.</description><category>객체지향 · 설계</category><pubDate>Thu, 03 Oct 2024 00:00:00 GMT</pubDate></item>
<item><title>실무에서 잘못 사용하고 있던 Transaction</title><link>https://qkrxodud.github.io/tech-blog/posts/transaction-misuse/</link><guid>https://qkrxodud.github.io/tech-blog/posts/transaction-misuse/</guid><description>실무 프로젝트 전반에 REQUIRES_NEW가 남용되던 원인을 프록시 패턴과 롤백 시점 이해 부족에서 찾아 분석한 경험을 공유합니다.</description><category>Spring</category><pubDate>Sat, 21 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>DB 분산락</title><link>https://qkrxodud.github.io/tech-blog/posts/distributed-lock/</link><guid>https://qkrxodud.github.io/tech-blog/posts/distributed-lock/</guid><description>비관적 락의 한계를 짚고, Redisson 기반 분산락이 등장한 이유와 락 획득 방식의 차이, 상황별 트레이드오프를 정리합니다.</description><category>Database</category><pubDate>Fri, 20 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>MVCC (multiversion concurrency control)</title><link>https://qkrxodud.github.io/tech-blog/posts/mvcc/</link><guid>https://qkrxodud.github.io/tech-blog/posts/mvcc/</guid><description>락 기반 동시성 제어의 한계를 살펴보고, MVCC가 커밋된 데이터만 읽는 방식과 트랜잭션 격리 수준에 따라 읽는 데이터가 달라지는 원리를 정리합니다.</description><category>Database</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>Spring Annotation 그리고 Custom Annotation</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-custom-annotation/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-custom-annotation/</guid><description>Spring이 @Component, @Service 같은 어노테이션을 인식하는 원리와 Target, Retention 등 메타 어노테이션의 의미를 정리합니다.</description><category>Spring</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>DBCP</title><link>https://qkrxodud.github.io/tech-blog/posts/dbcp/</link><guid>https://qkrxodud.github.io/tech-blog/posts/dbcp/</guid><description>TCP 연결 과정의 비효율을 DBCP가 어떻게 해결하는지 설명하고, HikariCP의 minimumIdle, maximumPoolSize 등 주요 설정을 정리합니다.</description><category>Database</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>DB 비관적 락</title><link>https://qkrxodud.github.io/tech-blog/posts/pessimistic-lock/</link><guid>https://qkrxodud.github.io/tech-blog/posts/pessimistic-lock/</guid><description>비관적 락의 개념과 S-Lock/X-Lock, 갭 락(Next-Key Lock)의 동작을 살펴보고, JPA 동시성 테스트로 재고 차감 문제를 해결하는 과정을 정리한 글입니다.</description><category>Database</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>DB 낙관적 락</title><link>https://qkrxodud.github.io/tech-blog/posts/optimistic-lock/</link><guid>https://qkrxodud.github.io/tech-blog/posts/optimistic-lock/</guid><description>재고 차감 동시성 테스트로 문제를 재현하고, JPA @Version 기반 낙관적 락의 동작 원리와 사용 시점, 주의할 점을 정리합니다.</description><category>Database</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>Kafka 동시성 발생</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-concurrency/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-concurrency/</guid><description>카프카 다중 컨슈머로 인한 중복 적재 문제를 분산락으로 해결한 경험과, 트랜잭션 ACID·동시성 제어 이론을 함께 정리합니다.</description><category>Kafka</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>Garbage Collection(GC)</title><link>https://qkrxodud.github.io/tech-blog/posts/garbage-collection/</link><guid>https://qkrxodud.github.io/tech-blog/posts/garbage-collection/</guid><description>JVM 메모리 구조와 가비지 컬렉션의 동작 원리를 정리하고, Serial GC부터 G1 GC, ZGC까지 주요 GC 알고리즘의 특징을 비교합니다.</description><category>Java · JVM</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>Garbage Collection 튜닝</title><link>https://qkrxodud.github.io/tech-blog/posts/gc-tuning/</link><guid>https://qkrxodud.github.io/tech-blog/posts/gc-tuning/</guid><description>jstat으로 GC 상태를 모니터링하는 방법과 Young/Old/Metaspace 영역별 증상에 따른 GC 튜닝 기준을 정리합니다.</description><category>Java · JVM</category><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate></item>
<item><title>카프카를 공부하게 된 계기</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-why/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-why/</guid><description>API로 받기로 했던 연동이 회의 끝에 카프카로 바뀌면서, 검색으로 때우지 않고 강의부터 듣기로 한 이야기입니다.</description><category>Kafka</category><pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate></item>
<item><title>아파치 카프카의 기본 구조</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-basics/</guid><description>카프카의 프로듀서·토픽·파티션·컨슈머 구조와 컨슈머가 오프셋 커밋으로 진행 상황을 기록하는 방식을 정리합니다.</description><category>Kafka</category><pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate></item>
<item><title>아파치 카프카의 생태계</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-ecosystem/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-ecosystem/</guid><description>카프카 클러스터의 구성 요소와 브로커의 역할, 로그 세그먼트·복제·파티션 배치 방식을 정리합니다.</description><category>Kafka</category><pubDate>Sun, 04 Feb 2024 00:00:00 GMT</pubDate></item>
<item><title>카프카 로컬 환경 설정</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-local-setup/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-local-setup/</guid><description>카프카를 로컬에 설치하고 주키퍼와 브로커를 실행한 뒤 토픽을 생성·확인·수정하는 명령어를 정리합니다.</description><category>Kafka</category></item>
<item><title>카프카 CLI 다루기</title><link>https://qkrxodud.github.io/tech-blog/posts/kafka-cli/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kafka-cli/</guid><description>카프카 커맨드 라인 툴로 토픽을 다루는 방법과 설정 파일을 수정해 로컬에서 브로커를 실행하는 절차를 정리합니다.</description><category>Kafka</category><pubDate>Mon, 12 Feb 2024 00:00:00 GMT</pubDate></item>
<item><title>계층형 아키텍처의 문제는 무엇일까?</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-01-layered-problems/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-01-layered-problems/</guid><description>계층형 아키텍처가 데이터베이스 주도 설계를 유도하고 테스트와 유지보수를 어렵게 만드는 이유를 정리하며, 클린 아키텍처를 다루는 책의 1장을 소개합니다.</description><category>만들면서 배우는 클린 아키텍처</category></item>
<item><title>의존성 역전하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-02-dependency-inversion/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-02-dependency-inversion/</guid><description>단일 책임 원칙과 의존성 역전 원칙을 통해 도메인 코드를 영속성 계층으로부터 분리하는 방법과, 클린 아키텍처·육각형 아키텍처의 의존성 규칙을 정리합니다.</description><category>만들면서 배우는 클린 아키텍처</category></item>
<item><title>코드 구성하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-03-code-organization/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-03-code-organization/</guid><description>패키지를 계층별로 나누는 방식과 기능별로 나누는 방식의 장단점을 비교하고, 육각형 아키텍처를 표현하는 패키지 구조를 정리합니다.</description><category>만들면서 배우는 클린 아키텍처</category><pubDate>Sun, 05 Feb 2023 00:00:00 GMT</pubDate></item>
<item><title>유스케이스 구현하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-04-usecase/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-04-usecase/</guid><description>송금하기 유스케이스 예제로 입력 유효성 검증과 비즈니스 규칙 검증을 구분하고, 유스케이스별로 입출력 모델을 분리하는 이유를 정리합니다.</description><category>만들면서 배우는 클린 아키텍처</category><pubDate>Thu, 09 Feb 2023 00:00:00 GMT</pubDate></item>
<item><title>웹 어댑터 구현하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-05-web-adapter/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-05-web-adapter/</guid><description>웹 어댑터의 책임과 역할을 정리하고, 하나의 컨트롤러에 여러 연산을 몰아넣기보다 연산별로 작은 컨트롤러를 나누는 방식의 장점을 설명합니다.</description><category>만들면서 배우는 클린 아키텍처</category><pubDate>Sun, 19 Feb 2023 00:00:00 GMT</pubDate></item>
<item><title>영속성 어댑터 구현하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-06-persistence-adapter/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-06-persistence-adapter/</guid><description>영속성 어댑터의 책임과 인터페이스 분리 원칙에 따라 포트를 좁게 나누는 방법을 정리하고, 스프링 데이터 JPA 예제와 트랜잭션 경계 설정 방식을 설명합니다.</description><category>만들면서 배우는 클린 아키텍처</category><pubDate>Sun, 19 Feb 2023 00:00:00 GMT</pubDate></item>
<item><title>경계 간 매핑하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-08-boundary-mapping/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-08-boundary-mapping/</guid><description>매핑하지 않기·양방향·완전·단방향 네 가지 계층 간 매핑 전략의 장단점을 비교하고, 유스케이스마다 적절한 전략을 선택하는 기준을 정리합니다.</description><category>만들면서 배우는 클린 아키텍처</category><pubDate>Sun, 17 Dec 2023 00:00:00 GMT</pubDate></item>
<item><title>아키텍처 경계 강제하기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-arch-10-enforcing-boundaries/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-arch-10-enforcing-boundaries/</guid><description>패키지 접근 제한자와 빌드 아티팩트 분리로 아키텍처 경계를 강제하는 방법을 정리하고, 의존성이 안쪽 방향으로만 향하도록 설계하는 원칙을 다룹니다.</description><category>만들면서 배우는 클린 아키텍처</category><pubDate>Fri, 12 Jan 2024 00:00:00 GMT</pubDate></item>
<item><title>공급자 Supplier&lt;T&gt;</title><link>https://qkrxodud.github.io/tech-blog/posts/java-supplier/</link><guid>https://qkrxodud.github.io/tech-blog/posts/java-supplier/</guid><description>Java의 함수형 인터페이스 Supplier의 개념과 사용법, 지연 초기화(Lazy Initialization)에 활용되는 이유를 예제로 정리합니다.</description><category>Java · JVM</category><pubDate>Sun, 05 Nov 2023 00:00:00 GMT</pubDate></item>
<item><title>이펙티브 자바 2장: 객체 생성과 파괴</title><link>https://qkrxodud.github.io/tech-blog/posts/effective-java-ch2/</link><guid>https://qkrxodud.github.io/tech-blog/posts/effective-java-ch2/</guid><description>이펙티브 자바 2장을 바탕으로 정적 팩터리 메서드와 빌더 패턴을 활용한 올바른 객체 생성 방법을 정리합니다.</description><category>객체지향 · 설계</category><pubDate>Sat, 04 Nov 2023 00:00:00 GMT</pubDate></item>
<item><title>도메인 전문가와 개발자 간 지식공유</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-knowledge-sharing/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-knowledge-sharing/</guid><description>도메인 주도 개발 시작하기 1장을 정리하며, 도메인 전문가와의 소통이 중요한 이유와 도메인 모델·밸류 타입을 도출하는 과정을 다룹니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Fri, 18 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>아키텍처 개요</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-architecture-overview/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-architecture-overview/</guid><description>DIP로 의존 방향을 뒤집는 원리를 코드와 그림으로 살펴보고, 도메인 영역의 구성요소·애그리거트·모듈 구성까지 아키텍처 관점에서 정리합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Fri, 18 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>애그리거트</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-aggregate/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-aggregate/</guid><description>애그리거트의 개념과 애그리거트 루트의 역할을 정리하고, 트랜잭션 범위를 하나의 애그리거트로 제한해야 하는 이유와 ID를 이용한 애그리거트 참조 방식을 설명합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Sun, 20 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>리포지터리와 모델 구현</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-repository-model/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-repository-model/</guid><description>도메인 주도 개발 시작하기 4장을 정리하며, 밸류 타입의 JPA 매핑 방법과 애그리거트를 완전한 상태로 저장·조회하는 전략을 다룹니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Wed, 23 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>스프링 데이터 JPA를 이용한 조회 기능</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-spring-data-jpa-query/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-spring-data-jpa-query/</guid><description>도메인 주도 개발 시작하기 5장을 정리하며, 스펙을 이용한 동적 검색, 정렬·페이징 처리, @Subselect를 이용한 조회 전용 모델 구현 방법을 다룹니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Mon, 04 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>표현 영역과 응용 영역</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-presentation-application/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-presentation-application/</guid><description>응용 서비스와 표현 영역의 책임을 어떻게 나눠야 하는지, 도메인 로직이 응용 서비스로 새어나가지 않게 하는 방법과 값 검증·권한 검사의 위치를 정리합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Fri, 15 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>도메인 서비스</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-domain-service/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-domain-service/</guid><description>한 애그리거트로 처리하기 어려운 기능을 도메인 서비스로 분리하는 방법과, 인터페이스로 추상화해 특정 구현 기술 의존을 줄이는 방법을 정리합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Thu, 28 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>애그리거트 트랜잭션 관리</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-aggregate-transaction/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-aggregate-transaction/</guid><description>애그리거트를 동시에 수정할 때 발생하는 일관성 문제를 선점 잠금과 비선점 잠금으로 해결하는 방법을 JPA 구현 예시와 함께 정리합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Sat, 30 Sep 2023 00:00:00 GMT</pubDate></item>
<item><title>이벤트</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-event/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-event/</guid><description>도메인 객체 간에 서로 다른 로직이 섞이는 문제를 이벤트로 분리하는 방법과, 스프링 이벤트 발행·구독, 동기/비동기 처리, 이벤트 저장소 구현까지 정리합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Fri, 06 Oct 2023 00:00:00 GMT</pubDate></item>
<item><title>CQRS</title><link>https://qkrxodud.github.io/tech-blog/posts/ddd-cqrs/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ddd-cqrs/</guid><description>여러 애그리거트를 조합해야 하는 조회 성능 문제를, 명령 모델과 조회 모델을 분리하는 CQRS로 해결하는 방법과 장단점을 정리합니다.</description><category>도메인 주도 개발 시작하기</category><pubDate>Tue, 10 Oct 2023 00:00:00 GMT</pubDate></item>
<item><title>Spring JPA 1:N 일급컬렉션 Cascade insert시 null 발생</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-cascade-null/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-cascade-null/</guid><description>일급컬렉션에 Cascade를 적용했을 때 자식 엔티티 Id가 null로 저장되는 문제와 CascadeType.MERGE로 해결하는 방법을 소개합니다.</description><category>Spring JPA</category><pubDate>Fri, 06 Oct 2023 00:00:00 GMT</pubDate></item>
<item><title>이진 탐색 트리</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-binary-search-tree/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-binary-search-tree/</guid><description>이진 탐색 트리의 구조와 검색, 삽입, 삭제 동작을 예시와 함께 정리합니다.</description><category>알고리즘</category><pubDate>Wed, 23 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>B-tree</title><link>https://qkrxodud.github.io/tech-blog/posts/b-tree/</link><guid>https://qkrxodud.github.io/tech-blog/posts/b-tree/</guid><description>B 트리의 정렬·균형 특성을 설명하고, 예시 트리를 통해 삽입·검색·삭제 동작 방식을 정리합니다.</description><category>Database</category><pubDate>Wed, 23 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>@Transactional 롤백이 안 되는 일을 실제로 겪다</title><link>https://qkrxodud.github.io/tech-blog/posts/transaction-rollback-proxy-2/</link><guid>https://qkrxodud.github.io/tech-blog/posts/transaction-rollback-proxy-2/</guid><description>같은 서비스 안에서 @Transactional 메서드를 자기 호출해 롤백이 안 되는 문제를 실제 운영 코드에서 겪고 해결한 과정을 기록합니다.</description><category>Spring</category><pubDate>Mon, 14 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>커넥션 풀과 데이터소스 이해하기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-db-connection-pool/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-db-connection-pool/</guid><description>DB 커넥션을 매번 새로 맺을 때의 문제와 커넥션 풀, DataSource 추상화가 이를 어떻게 해결하는지 정리합니다.</description><category>Database</category><pubDate>Sat, 12 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>@Transactional 롤백 안 되는 원인 [프록시]</title><link>https://qkrxodud.github.io/tech-blog/posts/transaction-rollback-proxy/</link><guid>https://qkrxodud.github.io/tech-blog/posts/transaction-rollback-proxy/</guid><description>같은 서비스 안에서 @Transactional 메서드를 자기 호출하면 프록시가 적용되지 않아 롤백이 안 되는 원인을 정리합니다.</description><category>Spring</category><pubDate>Fri, 04 Aug 2023 00:00:00 GMT</pubDate></item>
<item><title>@Transactional try ~ catch 롤백 안 되는 원인</title><link>https://qkrxodud.github.io/tech-blog/posts/transactional-try-catch-rollback/</link><guid>https://qkrxodud.github.io/tech-blog/posts/transactional-try-catch-rollback/</guid><description>@Transactional 안에서 try ~ catch로 예외를 감쌀 때 롤백이 동작하지 않는 원인을 TransactionAspectSupport 내부 동작으로 분석하고 해결 방법을 정리합니다.</description><category>Spring</category><pubDate>Sat, 29 Jul 2023 00:00:00 GMT</pubDate></item>
<item><title>레거시 코드 리팩터링 — 1단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-legacy-refactor/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-legacy-refactor/</guid><description>레거시 QnaService의 삭제 로직을 도메인 모델로 옮기는 리팩터링 과제와 그에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category><pubDate>Sun, 18 Jun 2023 00:00:00 GMT</pubDate></item>
<item><title>스트림, 람다, Optional — 1단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-01-stream-lambda-optional/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-01-stream-lambda-optional/</guid><description>익명 클래스를 람다로 바꾸고 스트림의 map, filter, reduce와 Optional을 활용해 리팩토링한 학습 기록입니다.</description><category>클린 코드 with Java</category></item>
<item><title>Set 컬렉션으로 배우는 학습 테스트 — 1단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-02-learning-test/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-02-learning-test/</guid><description>Set 컬렉션을 대상으로 학습 테스트를 작성하고 JUnit5의 ParameterizedTest로 중복 코드를 제거한 기록입니다.</description><category>클린 코드 with Java</category></item>
<item><title>문자열 계산기 — 1단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-string-calculator-step1/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-string-calculator-step1/</guid><description>들여쓰기 depth와 메서드 크기 제한, else 금지 조건 아래 문자열 사칙연산 계산기를 구현한 과제와 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category><pubDate>Tue, 25 Apr 2023 00:00:00 GMT</pubDate></item>
<item><title>문자열 덧셈 계산기로 배우는 TDD — 2단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-03-string-calculator/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-03-string-calculator/</guid><description>문자열 덧셈 계산기를 TDD로 구현하고 리뷰 피드백에 따라 상수화, 책임 분리, 예외 처리를 리팩토링한 기록입니다.</description><category>클린 코드 with Java</category></item>
<item><title>로또 자동 — 2단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-04-lotto-auto/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-04-lotto-auto/</guid><description>로또 자동 구매 기능을 TDD로 구현하고 리뷰를 통해 상수 위치와 전략 인터페이스 네이밍을 개선한 기록입니다.</description><category>클린 코드 with Java</category></item>
<item><title>로또 게임 2등 — 3단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-05-lotto-second-prize/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-05-lotto-second-prize/</guid><description>로또 2등 당첨 로직을 enum과 일급 컬렉션으로 구현하고 싱글톤, 스트림 리팩토링을 반영한 기록입니다.</description><category>클린 코드 with Java</category></item>
<item><title>로또 수동 — 4단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-06-lotto-manual/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-06-lotto-manual/</guid><description>로또 수동 구매 기능을 값 객체와 일급 컬렉션으로 설계하고 리뷰를 반영해 구조를 리팩토링한 기록입니다.</description><category>클린 코드 with Java</category></item>
<item><title>사다리 생성 — 2단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-07-ladder-create/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-07-ladder-create/</guid><description>사다리 게임에 참여자 이름을 출력하는 기능을 구현하고, 생성자 책임 분리와 제네릭 활용에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category></item>
<item><title>사다리 게임 실행 — 3단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-08-ladder-run/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-08-ladder-run/</guid><description>사다리 게임 실행 결과를 출력하는 기능을 구현하고, 유틸리티 클래스 분리와 명령·조회 책임 분리에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category></item>
<item><title>사다리 리팩터링 — 4단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-09-ladder-refactor/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-09-ladder-refactor/</guid><description>사다리 게임 코드를 리팩터링하며 방어적 복사와 전략 인터페이스 설계에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category></item>
<item><title>자동차 경주 — 3단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-10-racing-car/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-10-racing-car/</guid><description>자동차 경주 게임을 처음 구현하며 View 책임 분리와 축약어 지양, 경계값 테스트에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category></item>
<item><title>자동차 경주 우승자 — 4단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-11-racing-winner/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-11-racing-winner/</guid><description>자동차 이름과 우승자 판별 기능을 추가하며 원시값 포장과 일급 컬렉션 설계에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category></item>
<item><title>자동차 경주 리팩터링 — 5단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-12-racing-refactor/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-12-racing-refactor/</guid><description>자동차 경주 코드를 MVC 패턴으로 리팩터링하며 사용자 정의 예외와 전략 패턴 적용에 대한 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category></item>
<item><title>수강신청 도메인 모델 — 2단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-enrollment-domain/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-enrollment-domain/</guid><description>넥스트스텝 수강신청 미션에서 DB 설계 없이 도메인 모델부터 TDD로 구현하며 받은 리뷰 피드백을 정리합니다.</description><category>클린 코드 with Java</category><pubDate>Sun, 18 Jun 2023 00:00:00 GMT</pubDate></item>
<item><title>수강신청 DB 적용 — 3단계</title><link>https://qkrxodud.github.io/tech-blog/posts/ccj-enrollment-db/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ccj-enrollment-db/</guid><description>2단계에서 만든 도메인 구조를 유지하면서 DB 테이블과 매핑한 수강신청 미션 3단계 리뷰 기록입니다.</description><category>클린 코드 with Java</category><pubDate>Tue, 18 Jul 2023 00:00:00 GMT</pubDate></item>
<item><title>Stream을 활용한 예제 모음</title><link>https://qkrxodud.github.io/tech-blog/posts/java-stream-examples/</link><guid>https://qkrxodud.github.io/tech-blog/posts/java-stream-examples/</guid><description>for문 대신 자바 Stream을 활용해 리스트·맵 변환, 중복 체크, null 처리, reduce 등을 정리한 예제 모음입니다.</description><category>Java · JVM</category><pubDate>Fri, 19 May 2023 00:00:00 GMT</pubDate></item>
<item><title>익명 클래스</title><link>https://qkrxodud.github.io/tech-blog/posts/anonymous-class/</link><guid>https://qkrxodud.github.io/tech-blog/posts/anonymous-class/</guid><description>자바의 익명 클래스가 무엇인지 살펴보고, 중복 코드를 익명 클래스로 리팩토링하는 예제와 인터페이스 구현 방식, 사용 시 얻을 수 있는 이점을 정리합니다.</description><category>객체지향 · 설계</category><pubDate>Tue, 16 May 2023 00:00:00 GMT</pubDate></item>
<item><title>데이터 적재 및 문제 해결방법</title><link>https://qkrxodud.github.io/tech-blog/posts/db-data-loading/</link><guid>https://qkrxodud.github.io/tech-blog/posts/db-data-loading/</guid><description>1억 건 규모 테이블의 슬로우 쿼리와 DB 메모리 적재 문제를 실무에서 겪은 과정과, 샤딩·파티셔닝을 통한 해결 방법을 정리합니다.</description><category>Database</category><pubDate>Sat, 06 May 2023 00:00:00 GMT</pubDate></item>
<item><title>일급컬렉션</title><link>https://qkrxodud.github.io/tech-blog/posts/first-class-collection/</link><guid>https://qkrxodud.github.io/tech-blog/posts/first-class-collection/</guid><description>Collection을 감싸고 다른 멤버 변수를 두지 않는 일급 컬렉션의 장점을 로또 번호 예제 코드와 함께 정리합니다.</description><category>객체지향 · 설계</category><pubDate>Sat, 22 Apr 2023 00:00:00 GMT</pubDate></item>
<item><title>원시값 포장</title><link>https://qkrxodud.github.io/tech-blog/posts/primitive-wrapping/</link><guid>https://qkrxodud.github.io/tech-blog/posts/primitive-wrapping/</guid><description>원시 타입 변수를 값 객체로 감싸면 유효성 검증 책임이 객체 안으로 옮겨져 코드가 더 명확해지는 이유를 예제로 설명합니다.</description><category>객체지향 · 설계</category><pubDate>Sat, 22 Apr 2023 00:00:00 GMT</pubDate></item>
<item><title>정적 팩토리 메소드 패턴</title><link>https://qkrxodud.github.io/tech-blog/posts/static-factory-method/</link><guid>https://qkrxodud.github.io/tech-blog/posts/static-factory-method/</guid><description>정적 팩토리 메소드 패턴으로 객체 생성 로직을 캡슐화하는 방법과, from·of·getInstance 등 네이밍 컨벤션을 정리합니다.</description><category>객체지향 · 설계</category><pubDate>Sat, 22 Apr 2023 00:00:00 GMT</pubDate></item>
<item><title>전략 패턴</title><link>https://qkrxodud.github.io/tech-blog/posts/strategy-pattern/</link><guid>https://qkrxodud.github.io/tech-blog/posts/strategy-pattern/</guid><description>전략 패턴을 활용해 자동차 이동 로직의 랜덤 값 생성 부분을 인터페이스로 분리하고, 의존성 주입으로 유연하게 교체하는 방법을 정리합니다.</description><category>객체지향 · 설계</category><pubDate>Sat, 22 Apr 2023 00:00:00 GMT</pubDate></item>
<item><title>Bean Validation으로 요청 값 검증하기</title><link>https://qkrxodud.github.io/tech-blog/posts/java-validation/</link><guid>https://qkrxodud.github.io/tech-blog/posts/java-validation/</guid><description>Spring Boot에서 제공하는 유효성 검사 어노테이션 종류와 실제 사용 예시를 정리합니다.</description><category>Spring</category><pubDate>Wed, 22 Mar 2023 00:00:00 GMT</pubDate></item>
<item><title>@JsonIgnoreProperties(ignoreUnknown=true)</title><link>https://qkrxodud.github.io/tech-blog/posts/jsonignoreproperties/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jsonignoreproperties/</guid><description>@JsonIgnoreProperties(ignoreUnknown=true) 어노테이션으로 정의되지 않은 JSON 프로퍼티를 무시해 역직렬화 오류를 방지하는 방법을 정리합니다.</description><category>Spring</category><pubDate>Sun, 19 Mar 2023 00:00:00 GMT</pubDate></item>
<item><title>Collectors.toMap에서 만난 Duplicate Key 예외</title><link>https://qkrxodud.github.io/tech-blog/posts/java-stream-duplicate-key/</link><guid>https://qkrxodud.github.io/tech-blog/posts/java-stream-duplicate-key/</guid><description>Collectors.toMap()에서 키가 중복될 때 발생하는 Duplicate Key 예외와 Merge Function으로 해결하는 방법을 정리합니다.</description><category>Java · JVM</category><pubDate>Tue, 14 Mar 2023 00:00:00 GMT</pubDate></item>
<item><title>RestTemplate 이란, 메소드, 사용예시</title><link>https://qkrxodud.github.io/tech-blog/posts/resttemplate/</link><guid>https://qkrxodud.github.io/tech-blog/posts/resttemplate/</guid><description>Spring이 제공하는 HTTP 클라이언트 RestTemplate의 개념과 주요 메서드, 실전 사용 예시를 정리합니다.</description><category>Spring</category><pubDate>Thu, 09 Mar 2023 00:00:00 GMT</pubDate></item>
<item><title>LazyInitializationException이 나는 이유</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-lazy-init-exception/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-lazy-init-exception/</guid><description>배치에서 Quartz로 실행할 때만 FetchType.LAZY 객체를 불러오지 못하고 LazyInitializationException이 발생한 원인과 해결 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 20 Jan 2023 00:00:00 GMT</pubDate></item>
<item><title>Save와 SaveAll 테스트 및 성능 테스트</title><link>https://qkrxodud.github.io/tech-blog/posts/save-vs-saveall/</link><guid>https://qkrxodud.github.io/tech-blog/posts/save-vs-saveall/</guid><description>JPA의 save와 saveAll을 각각 10,000건씩 테스트하여 실행 시간을 비교하고, saveAll이 더 빠른 이유를 프록시 기반 @Transactional 동작 원리로 설명합니다.</description><category>Spring JPA</category><pubDate>Sun, 15 Jan 2023 00:00:00 GMT</pubDate></item>
<item><title>테스트에서 만난 NoUniqueBeanDefinitionException</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-no-unique-bean/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-no-unique-bean/</guid><description>여러 개의 트랜잭션 매니저 빈이 등록된 환경에서 테스트 코드가 NoUniqueBeanDefinitionException을 던진 원인과 해결 과정을 정리합니다.</description><category>Spring</category><pubDate>Thu, 22 Dec 2022 00:00:00 GMT</pubDate></item>
<item><title>@Transactional 이란? 트랜잭션 성질</title><link>https://qkrxodud.github.io/tech-blog/posts/transactional-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/transactional-basics/</guid><description>트랜잭션의 ACID 성질과 @Transactional의 propagation, isolation, rollbackFor 등 주요 옵션을 정리합니다.</description><category>Spring</category><pubDate>Wed, 30 Nov 2022 00:00:00 GMT</pubDate></item>
<item><title>Ehcache 사용방법</title><link>https://qkrxodud.github.io/tech-blog/posts/ehcache-usage/</link><guid>https://qkrxodud.github.io/tech-blog/posts/ehcache-usage/</guid><description>Spring Boot에서 Ehcache로 캐시를 설정하고 @Cacheable로 조회 성능을 개선하는 방법을 정리합니다.</description><category>Spring</category><pubDate>Thu, 17 Nov 2022 00:00:00 GMT</pubDate></item>
<item><title>NPE를 막는 자바 방어 코드 모음</title><link>https://qkrxodud.github.io/tech-blog/posts/java-null-safe-functions/</link><guid>https://qkrxodud.github.io/tech-blog/posts/java-null-safe-functions/</guid><description>NPE를 예방하기 위해 사용했던 null 체크, partition, Function.identity() 방어 코드를 모아 정리합니다.</description><category>Java · JVM</category><pubDate>Tue, 01 Nov 2022 00:00:00 GMT</pubDate></item>
<item><title>이미지 다운로드에서 터진 NPE와 방어 코드</title><link>https://qkrxodud.github.io/tech-blog/posts/java-npe-defensive-code/</link><guid>https://qkrxodud.github.io/tech-blog/posts/java-npe-defensive-code/</guid><description>프록시 서버를 거쳐 이미지를 받아오는 코드에서 방어 코드와 예외 처리가 부실해 발생한 NPE를 해결한 과정을 정리합니다.</description><category>Java · JVM</category><pubDate>Thu, 20 Oct 2022 00:00:00 GMT</pubDate></item>
<item><title>쿠버네티스 알아보기</title><link>https://qkrxodud.github.io/tech-blog/posts/kubernetes-intro/</link><guid>https://qkrxodud.github.io/tech-blog/posts/kubernetes-intro/</guid><description>쿠버네티스의 아키텍처(Master, Node, etcd, API Server)와 Pod, ReplicaSet, Deployment, Service, Ingress 등 핵심 개념을 정리합니다.</description><category>인프라 · 컨테이너</category><pubDate>Mon, 12 Sep 2022 00:00:00 GMT</pubDate></item>
<item><title>YAML 문법</title><link>https://qkrxodud.github.io/tech-blog/posts/yaml-syntax/</link><guid>https://qkrxodud.github.io/tech-blog/posts/yaml-syntax/</guid><description>들여쓰기, 맵과 배열, 주석, 줄바꿈 표현 등 쿠버네티스 매니페스트 작성에 필요한 YAML 기본 문법을 정리합니다.</description><category>인프라 · 컨테이너</category><pubDate>Mon, 12 Sep 2022 00:00:00 GMT</pubDate></item>
<item><title>컨테이너 오케스트레이션</title><link>https://qkrxodud.github.io/tech-blog/posts/container-orchestration/</link><guid>https://qkrxodud.github.io/tech-blog/posts/container-orchestration/</guid><description>서버 관리 방식의 변화부터 도커 컨테이너의 등장, 컨테이너 오케스트레이션이 필요한 이유까지 정리합니다.</description><category>인프라 · 컨테이너</category><pubDate>Sun, 11 Sep 2022 00:00:00 GMT</pubDate></item>
<item><title>프로젝트 생성과 환경 설정</title><link>https://qkrxodud.github.io/tech-blog/posts/querydsl-setup/</link><guid>https://qkrxodud.github.io/tech-blog/posts/querydsl-setup/</guid><description>Querydsl 학습을 위해 스프링 부트 프로젝트를 생성하고, Gradle 빌드 설정과 H2 데이터베이스, 쿼리 로그 확인 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate></item>
<item><title>예제 도메인 모델</title><link>https://qkrxodud.github.io/tech-blog/posts/querydsl-domain-model/</link><guid>https://qkrxodud.github.io/tech-blog/posts/querydsl-domain-model/</guid><description>Querydsl 실습에 사용할 Member, Team 엔티티를 설계하고 양방향 연관관계와 롬복 설정을 정리합니다.</description><category>Spring JPA</category><pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate></item>
<item><title>기본 문법</title><link>https://qkrxodud.github.io/tech-blog/posts/querydsl-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/querydsl-basics/</guid><description>JPQL과 비교하며 Querydsl의 기본 문법인 검색 조건, 정렬, 페이징, 집합, 조인, 서브쿼리, Case문을 정리합니다.</description><category>Spring JPA</category><pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate></item>
<item><title>중급 문법</title><link>https://qkrxodud.github.io/tech-blog/posts/querydsl-intermediate/</link><guid>https://qkrxodud.github.io/tech-blog/posts/querydsl-intermediate/</guid><description>Querydsl의 프로젝션과 DTO 조회 방법, BooleanBuilder와 Where절을 활용한 동적 쿼리, 벌크 연산과 SQL Function 호출법을 정리합니다.</description><category>Spring JPA</category><pubDate>Mon, 16 May 2022 00:00:00 GMT</pubDate></item>
<item><title>순수 JPA와 함께 쓰기</title><link>https://qkrxodud.github.io/tech-blog/posts/querydsl-pure-jpa/</link><guid>https://qkrxodud.github.io/tech-blog/posts/querydsl-pure-jpa/</guid><description>순수 JPA 리포지토리에 Querydsl을 도입하고, BooleanBuilder와 Where절 파라미터로 동적 쿼리를 최적화한 뒤 조회 API를 만드는 과정을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 17 May 2022 00:00:00 GMT</pubDate></item>
<item><title>스프링 데이터 JPA와 함께 쓰기</title><link>https://qkrxodud.github.io/tech-blog/posts/querydsl-spring-data/</link><guid>https://qkrxodud.github.io/tech-blog/posts/querydsl-spring-data/</guid><description>스프링 데이터 JPA 리포지토리에 Querydsl을 결합하는 사용자 정의 리포지토리 패턴과, 카운트 쿼리를 최적화한 페이징 처리 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 17 May 2022 00:00:00 GMT</pubDate></item>
<item><title>인터넷 네트워크</title><link>https://qkrxodud.github.io/tech-blog/posts/http-internet-network/</link><guid>https://qkrxodud.github.io/tech-blog/posts/http-internet-network/</guid><description>인터넷에서 IP, TCP/UDP, PORT, DNS가 각각 어떤 역할을 하며 데이터를 주고받는지 정리합니다.</description><category>네트워크 · HTTP</category></item>
<item><title>URI와 웹 브라우저 요청 흐름</title><link>https://qkrxodud.github.io/tech-blog/posts/http-uri-flow/</link><guid>https://qkrxodud.github.io/tech-blog/posts/http-uri-flow/</guid><description>URI, URL, URN의 개념과 URL 문법을 정리하고, 브라우저가 서버에 요청을 보내 응답을 렌더링하기까지의 흐름을 살펴봅니다.</description><category>네트워크 · HTTP</category><pubDate>Sun, 08 May 2022 00:00:00 GMT</pubDate></item>
<item><title>HTTP 기본</title><link>https://qkrxodud.github.io/tech-blog/posts/http-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/http-basics/</guid><description>HTTP의 역사와 특징, 클라이언트-서버 구조, 무상태성과 비연결성, HTTP 메시지 구조를 정리합니다.</description><category>네트워크 · HTTP</category></item>
<item><title>HTTP 메서드</title><link>https://qkrxodud.github.io/tech-blog/posts/http-methods/</link><guid>https://qkrxodud.github.io/tech-blog/posts/http-methods/</guid><description>회원 API 설계를 예로 URI와 리소스 개념을 짚고, GET·POST·PUT·PATCH·DELETE의 의미와 안전·멱등·캐시 가능 속성을 정리합니다.</description><category>네트워크 · HTTP</category></item>
<item><title>HTTP 메서드 활용</title><link>https://qkrxodud.github.io/tech-blog/posts/http-method-usage/</link><guid>https://qkrxodud.github.io/tech-blog/posts/http-method-usage/</guid><description>GET 쿼리 파라미터와 POST 메시지 바디를 통한 데이터 전송 방식, 그리고 정적/동적 데이터 조회부터 HTML Form, HTTP API 활용까지 상황별 사용법을 정리합니다.</description><category>네트워크 · HTTP</category><pubDate>Tue, 17 May 2022 00:00:00 GMT</pubDate></item>
<item><title>프로젝트 환경설정</title><link>https://qkrxodud.github.io/tech-blog/posts/data-jpa-setup/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-jpa-setup/</guid><description>스프링 데이터 JPA 실습 프로젝트의 Gradle 설정, 라이브러리 구성, H2 데이터베이스 연동과 기본 동작 확인 과정을 정리합니다.</description><category>Spring JPA</category><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate></item>
<item><title>예제 도메인 모델과 동작 확인</title><link>https://qkrxodud.github.io/tech-blog/posts/data-jpa-domain-model/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-jpa-domain-model/</guid><description>실습에 사용할 Member, Team 엔티티와 양방향 연관관계를 정의하고, 순수 JPA로 저장·조회 동작을 확인합니다.</description><category>Spring JPA</category><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate></item>
<item><title>공통 인터페이스 기능</title><link>https://qkrxodud.github.io/tech-blog/posts/data-jpa-common-interface/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-jpa-common-interface/</guid><description>순수 JPA로 기본 CRUD 리포지토리를 만들어본 뒤, 스프링 데이터 JPA의 공통 인터페이스 JpaRepository로 대체하는 과정을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 03 May 2022 00:00:00 GMT</pubDate></item>
<item><title>쿼리 메소드 기능</title><link>https://qkrxodud.github.io/tech-blog/posts/data-jpa-query-methods/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-jpa-query-methods/</guid><description>메소드 이름으로 쿼리를 생성하는 방법부터 @Query, 파라미터 바인딩, 페이징과 정렬, 벌크 연산, @EntityGraph까지 쿼리 메소드 기능을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 03 May 2022 00:00:00 GMT</pubDate></item>
<item><title>확장 기능</title><link>https://qkrxodud.github.io/tech-blog/posts/data-jpa-extensions/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-jpa-extensions/</guid><description>사용자 정의 리포지토리 구현, Auditing, 도메인 클래스 컨버터, 웹 페이징·정렬 등 스프링 데이터 JPA의 확장 기능을 정리합니다.</description><category>Spring JPA</category><pubDate>Mon, 09 May 2022 00:00:00 GMT</pubDate></item>
<item><title>스프링 데이터 JPA는 어떻게 동작하는가</title><link>https://qkrxodud.github.io/tech-blog/posts/data-jpa-internals/</link><guid>https://qkrxodud.github.io/tech-blog/posts/data-jpa-internals/</guid><description>스프링 데이터 JPA 공통 인터페이스 구현체 SimpleJpaRepository의 동작과 save() 메서드의 신규 엔티티 판단 로직을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 10 May 2022 00:00:00 GMT</pubDate></item>
<item><title>2장 의미있는 이름</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch2-names/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch2-names/</guid><description>클린 코드 2장을 읽고 의도를 드러내는 이름 짓기와 그릇된 정보를 피하는 네이밍 원칙을 정리합니다.</description><category>Clean Code</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>3장 함수</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch3-functions/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch3-functions/</guid><description>함수를 작게 만들고 한 가지 일만 하도록 설계하는 원칙과 인수, 부수 효과, try/catch 분리 등 실전 예제를 정리합니다.</description><category>Clean Code</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>4장 주석</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch4-comments/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch4-comments/</guid><description>클린 코드 4장을 읽고 나쁜 주석이 코드를 어떻게 해치는지와 남길 만한 좋은 주석의 유형을 정리합니다.</description><category>Clean Code</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>5장 형식맞추기</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch5-formatting/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch5-formatting/</guid><description>행 길이, 빈 행, 수직 거리, 가로 공백 등 코드 형식을 잡는 기준을 정리하고 결국 가장 중요한 것은 팀 규칙이라는 결론을 내립니다.</description><category>Clean Code</category><pubDate>Sat, 30 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>6장 객체와 자료구조</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch6-objects/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch6-objects/</guid><description>객체와 자료구조의 비대칭성을 예제로 비교하고, 디미터 법칙을 통해 결합도를 낮추는 방법을 정리합니다.</description><category>Clean Code</category><pubDate>Sat, 30 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>7장 오류처리</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch7-errors/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch7-errors/</guid><description>오류 코드 대신 예외를 사용하고, checked Exception의 캡슐화 문제와 null을 반환하지 않는 방법 등 오류 처리 원칙을 정리합니다.</description><category>Clean Code</category><pubDate>Sat, 30 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>8장 경계</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch8-boundaries/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch8-boundaries/</guid><description>외부 패키지나 프레임워크를 사용할 때 생기는 경계 문제를, java.util.Map을 캡슐화하는 예제로 정리합니다.</description><category>Clean Code</category><pubDate>Sun, 01 May 2022 00:00:00 GMT</pubDate></item>
<item><title>10장 클래스</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch10-classes/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch10-classes/</guid><description>클린 코드 10장을 읽고 클래스를 작게 유지해야 하는 이유와 단일 책임 원칙, 응집도, 결합도를 낮추는 설계 방법을 정리합니다.</description><category>Clean Code</category><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate></item>
<item><title>11장 시스템 (1)</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch11-systems-1/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch11-systems-1/</guid><description>클린 코드 11장을 읽고 시스템 제작과 사용의 분리, Main 분리, 추상 팩토리, 의존성 주입 개념을 예제와 함께 정리합니다.</description><category>Clean Code</category><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate></item>
<item><title>11장 시스템 (2)</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch12-systems-2/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-ch12-systems-2/</guid><description>자바 프록시와 스프링 AOP 예제를 비교하며 횡단 관심사를 분리하는 방법과 POJO 시스템이 주는 기민함을 정리합니다.</description><category>Clean Code</category><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate></item>
<item><title>클린 코드 11장까지의 리뷰와 앞으로의 진행 방향</title><link>https://qkrxodud.github.io/tech-blog/posts/clean-code-review-progress/</link><guid>https://qkrxodud.github.io/tech-blog/posts/clean-code-review-progress/</guid><description>클린 코드 학습을 11장까지 진행한 상황을 돌아보고, Spring 기초를 보완한 뒤 12장부터 이어가겠다는 계획을 정리합니다.</description><category>Clean Code</category><pubDate>Mon, 02 May 2022 00:00:00 GMT</pubDate></item>
<item><title>JPA 시작하기</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-getting-started/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-getting-started/</guid><description>JPA 프로젝트에 필요한 라이브러리 설정부터 EntityManager로 엔티티를 저장·조회하는 기본 동작 방식, JPQL 사용법까지 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>영속성 컨텍스트</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-persistence-context/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-persistence-context/</guid><description>엔티티의 생명주기와 1차 캐시, 쓰기 지연, 변경 감지, 플러시 등 영속성 컨텍스트가 제공하는 핵심 기능을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>엔티티 매핑</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-entity-mapping/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-entity-mapping/</guid><description>@Entity, @Table, @Column 등 엔티티와 테이블을 매핑하는 어노테이션과 IDENTITY·SEQUENCE·TABLE 기본 키 생성 전략을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>연관관계 매핑 기초</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-association-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-association-basics/</guid><description>객체와 테이블의 연관관계 차이를 이해하고, 단방향·양방향 매핑과 연관관계의 주인을 정하는 기준을 예제로 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>다양한 연관관계 매핑</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-association-types/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-association-types/</guid><description>다대일·일대다·일대일 연관관계를 단방향과 양방향으로 매핑하는 방법과 각 전략의 장단점을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>상속관계 매핑과 @MappedSuperclass</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-advanced-mapping/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-advanced-mapping/</guid><description>객체의 상속 구조를 테이블로 옮기는 세 가지 전략을 비교하고, 공통 매핑 정보를 모으는 @MappedSuperclass의 쓰임을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>프록시의 동작 원리</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-proxy/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-proxy/</guid><description>JPA 프록시 객체가 만들어지고 초기화되는 과정을 em.getReference() 예제로 살펴보고, 프록시 사용 시 주의할 점을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>즉시 로딩과 지연 로딩</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-lazy-eager-loading/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-lazy-eager-loading/</guid><description>지연 로딩과 즉시 로딩의 동작 차이를 프록시 조회 관점에서 정리하고, 실무에서 지연 로딩을 써야 하는 이유를 짚습니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>영속성 전이와 고아 객체</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-cascade/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-cascade/</guid><description>JPA CASCADE 옵션으로 부모와 자식 엔티티를 함께 영속화하는 방법과 orphanRemoval로 고아 객체를 제거하는 원리를 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>값 타입 기초 - 기본값 타입과 임베디드 타입</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-value-types/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-value-types/</guid><description>JPA의 값 타입 개념과 기본값 타입, 임베디드 타입의 사용법, @AttributeOverride로 컬럼명을 재정의하는 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>값 타입 공유와 불변 객체</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-immutable-value-types/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-immutable-value-types/</guid><description>값 타입을 공유할 때 발생하는 부작용과 불변 객체 설계, 값 타입 컬렉션의 제약과 이를 엔티티로 대체하는 실무 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>JPQL 기본 문법</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-jpql-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-jpql-basics/</guid><description>JPQL의 기본 문법과 TypedQuery, 파라미터 바인딩, 프로젝션, 페이징, 조인, 서브쿼리, CASE 식 등 자주 쓰는 문법을 정리합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>JPQL 경로 표현식과 페치 조인</title><link>https://qkrxodud.github.io/tech-blog/posts/jpa-jpql-advanced/</link><guid>https://qkrxodud.github.io/tech-blog/posts/jpa-jpql-advanced/</guid><description>JPQL 경로 표현식에서 명시적 조인과 묵시적 조인의 차이를 정리하고, 페치 조인의 동작 방식과 페이징·DISTINCT 관련 한계를 설명합니다.</description><category>Spring JPA</category><pubDate>Fri, 29 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>스프링 부트와 JPA로 만드는 API 기본</title><link>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-api-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-api-basics/</guid><description>회원 등록·수정·조회 API를 예제로, 엔티티 대신 DTO를 사용해 API 스펙과 엔티티를 분리하는 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 26 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>지연 로딩과 조회 성능 최적화</title><link>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-lazy-loading/</link><guid>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-lazy-loading/</guid><description>엔티티 직접 노출부터 DTO 변환, 페치 조인, DTO 직접 조회까지 주문 조회 API의 성능을 단계적으로 최적화하는 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 26 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>컬렉션 조회 최적화</title><link>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-collection-query/</link><guid>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-collection-query/</guid><description>일대다 컬렉션을 포함한 주문 조회 API를 엔티티 노출부터 페치 조인, 배치 사이즈, DTO 직접 조회, 플랫 데이터까지 단계별로 최적화하는 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Tue, 26 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>API 개발 성능 최적화 정리</title><link>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-advanced-optimization/</link><guid>https://qkrxodud.github.io/tech-blog/posts/boot-jpa-advanced-optimization/</guid><description>OSIV를 켰을 때와 껐을 때의 트레이드오프를 살펴보고, Command와 Query를 분리해 복잡성을 관리하는 방법을 정리합니다.</description><category>Spring JPA</category><pubDate>Thu, 28 Apr 2022 00:00:00 GMT</pubDate></item>
<item><title>완전 탐색 문제 풀이</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-brute-force/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-brute-force/</guid><description>프로그래머스 완전 탐색 문제 중 모의고사 문제를 풀이하며 접근 방법을 정리합니다.</description><category>알고리즘</category></item>
<item><title>프로그래머스 — 해시</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-programmers-hash/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-programmers-hash/</guid><description>HashMap을 활용한 프로그래머스 문제 완주하지 못한 선수, 전화번호 목록, 위장을 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>프로그래머스 — 정렬</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-programmers-sort/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-programmers-sort/</guid><description>정렬을 활용한 프로그래머스 문제 K번째 수와 가장 큰 수를 자바로 풀이하고 compareTo 동작 원리를 정리합니다.</description><category>알고리즘</category></item>
<item><title>문자열 다루기</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-string/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-string/</guid><description>문자 카운트, 대소문자 변환, 팰린드롬 판별, 문자열 압축 등 문자열 처리 문제 12개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>투 포인터와 슬라이딩 윈도우</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-two-pointer/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-two-pointer/</guid><description>투 포인터와 슬라이딩 윈도우 기법으로 배열 병합, 최대 매출, 연속 부분수열 등 문제 6개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>스택과 큐</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-stack-queue/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-stack-queue/</guid><description>스택과 큐를 이용해 괄호 검증, 후위 연산, 카카오 인형뽑기 등 코딩 테스트 문제 8개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>정렬과 이분 탐색</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-sorting-searching/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-sorting-searching/</guid><description>선택·버블·삽입 정렬, LRU 캐시, 이분 탐색 기반 결정 알고리즘까지 코딩 테스트 문제 5개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>해시맵과 트리셋</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-hashmap-treeset/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-hashmap-treeset/</guid><description>HashMap과 TreeSet을 활용해 투표 집계, 아나그램 판별, 슬라이딩 윈도우 매출 분석 등 문제 5개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>BFS와 DFS</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-bfs-dfs/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-bfs-dfs/</guid><description>BFS와 DFS를 이용해 최단 경로, 부분집합, 배낭형 문제 등 코딩 테스트 문제 6개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>배열 — 1차원과 2차원</title><link>https://qkrxodud.github.io/tech-blog/posts/algo-array/</link><guid>https://qkrxodud.github.io/tech-blog/posts/algo-array/</guid><description>1차원·2차원 배열을 활용해 정렬, 소수 판별, 격자 탐색 등 코딩 테스트 기본 문제 8개를 자바로 풀이합니다.</description><category>알고리즘</category></item>
<item><title>Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-test-mistakes/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-test-mistakes/</guid><description>Java/Spring 테스트 강의를 들으며 배운 의존성 주입과 의존성 역전을 활용해 Clock 같은 외부 의존을 테스트 가능하게 만드는 방법을 정리합니다.</description><category>테스트</category></item>
<item><title>commit message 규칙</title><link>https://qkrxodud.github.io/tech-blog/posts/git-commit-message/</link><guid>https://qkrxodud.github.io/tech-blog/posts/git-commit-message/</guid><description>Git 커밋 메시지를 작성할 때 지켜야 할 7가지 규칙과 타입(feat, fix 등) 구분 기준을 정리합니다.</description><category>Git · 협업</category></item>
<item><title>한 번 읽으면 두 번 깨닫는 객체지향 프로그래밍</title><link>https://qkrxodud.github.io/tech-blog/posts/oop-book-review/</link><guid>https://qkrxodud.github.io/tech-blog/posts/oop-book-review/</guid><description>객체지향 입문서를 읽으며 낮은 결합도와 높은 응집도, 캡슐화, 상속 같은 핵심 개념을 정리하고 느낀 점을 남긴 독서 리뷰입니다.</description><category>객체지향 · 설계</category></item>
<item><title>웹 애플리케이션 이해</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-web-app/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-web-app/</guid><description>웹 서버와 WAS의 차이, 웹 시스템 구성 방식, 서블릿이 필요한 이유와 멀티 쓰레드 처리 방식을 정리합니다.</description><category>Spring</category></item>
<item><title>서블릿</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-servlet/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-servlet/</guid><description>스프링 부트 내장 톰캣 환경에서 서블릿을 등록하고, HttpServletRequest와 HttpServletResponse로 요청과 응답을 다루는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>서블릿, JSP, MVC 패턴</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-servlet-jsp-pattern/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-servlet-jsp-pattern/</guid><description>서블릿과 JSP만으로 회원 관리 애플리케이션을 만들어보며 한계를 확인하고, 컨트롤러·모델·뷰로 역할을 분리하는 MVC 패턴을 적용합니다.</description><category>Spring</category></item>
<item><title>MVC 프레임워크 만들기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-framework/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-mvc-framework/</guid><description>프론트 컨트롤러 패턴을 v1부터 v5까지 점진적으로 발전시키며, 스프링 MVC의 핵심 구조가 만들어지는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>웹 개발 기초: 정적 컨텐츠, MVC와 템플릿 엔진</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-web-basics/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-web-basics/</guid><description>스프링 부트가 정적 컨텐츠와 MVC 템플릿 엔진, API 응답을 각각 어떻게 처리하는지 예제 코드로 정리합니다.</description><category>Spring</category></item>
<item><title>회원 관리 예제 — 백엔드 개발 (1)</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-member-backend-1/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-member-backend-1/</guid><description>회원 도메인과 메모리 기반 리포지토리를 인터페이스로 설계하고, JUnit으로 저장/조회 기능을 검증하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>회원 관리 예제 — 백엔드 개발 (2)</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-member-backend-2/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-member-backend-2/</guid><description>회원가입 중복 검증 로직을 담은 Service 계층을 구현하고, given-when-then 패턴으로 정상 케이스와 예외 케이스를 테스트합니다.</description><category>Spring</category></item>
<item><title>회원 웹 기능 — 등록, 출력</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-member-web/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-member-web/</guid><description>Thymeleaf로 홈, 회원 등록 폼, 회원 목록 화면을 구성하고 HomeController에서 등록·조회 요청을 처리하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>순수 JDBC 사용과 연동</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-jdbc/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-jdbc/</guid><description>순수 JDBC로 MemberRepository를 구현하고, SpringConfig의 빈 설정만 바꿔서 메모리 저장소를 DB로 교체하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>스프링 JPA 통합 테스트</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-jpa-test/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-jpa-test/</guid><description>JPA 엔티티 매핑과 EntityManager 기반 리포지토리를 구현하고, SpringConfig의 빈 설정만 바꿔 JDBC 구현체를 JPA로 교체하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>객체 지향 설계와 스프링</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-oop-design/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-oop-design/</guid><description>스프링을 배우기에 앞서 다형성과 역할-구현 분리, SOLID 5원칙이 왜 좋은 객체 지향 설계의 토대가 되는지 정리합니다.</description><category>Spring</category></item>
<item><title>예제 만들기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-example/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-example/</guid><description>회원 조회와 주문 할인 정책 예제를 구현하며 DIP 위반 문제를 발견하고, AppConfig로 관심사를 분리하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>AppConfig 리팩터링</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-appconfig-refactor/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-appconfig-refactor/</guid><description>중복이 있던 AppConfig를 리팩터링해 역할과 구현이 한눈에 드러나도록 정리하고, 그 과정에서 지켜지는 SOLID 원칙을 살펴봅니다.</description><category>Spring</category></item>
<item><title>스프링 빈으로 전환하기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-bean-conversion/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-bean-conversion/</guid><description>순수 자바 코드로 작성했던 AppConfig를 @Configuration과 @Bean으로 전환해 스프링 컨테이너에 빈을 등록하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>BeanFactory와 ApplicationContext</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-beanfactory/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-beanfactory/</guid><description>스프링 컨테이너의 최상위 인터페이스인 BeanFactory와, 이를 상속해 다양한 부가 기능을 제공하는 ApplicationContext의 역할을 정리합니다.</description><category>Spring</category></item>
<item><title>XML로 스프링 빈 설정하기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-xml-config/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-xml-config/</guid><description>자바 코드 대신 XML로 스프링 빈을 설정하는 방법과, 다양한 설정 형식을 가능하게 하는 BeanDefinition 추상화를 정리합니다.</description><category>Spring</category></item>
<item><title>웹 애플리케이션과 싱글톤</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-singleton-web/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-singleton-web/</guid><description>매번 new로 객체를 생성하던 AppConfig의 문제를 직접 구현한 싱글톤 패턴과 스프링 컨테이너로 각각 해결해 봅니다.</description><category>Spring</category></item>
<item><title>싱글톤 방식의 주의점</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-singleton-caution/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-singleton-caution/</guid><description>싱글톤 빈은 상태를 공유하기 때문에 무상태로 설계해야 한다는 점을 StatefulService 예제로 확인합니다.</description><category>Spring</category></item>
<item><title>싱글톤 컨테이너와 @Configuration</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-singleton/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-singleton/</guid><description>AppConfig가 여러 번 호출되어도 싱글톤이 보장되는 이유를 @Configuration과 CGLIB 바이트코드 조작을 통해 분석합니다.</description><category>Spring</category></item>
<item><title>컴포넌트 스캔</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-component-scan/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-component-scan/</guid><description>설정 정보 없이 스프링 빈을 자동으로 등록하는 컴포넌트 스캔과 @Autowired 의존관계 자동 주입의 동작 방식을 정리합니다.</description><category>Spring</category></item>
<item><title>생성자 주입을 선택해야 하는 이유</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-constructor-injection/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-constructor-injection/</guid><description>수정자 주입 대신 생성자 주입을 권장하는 이유와, 롬복의 @RequiredArgsConstructor로 생성자 코드를 줄이는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>조회 빈이 2개 이상 충돌할 때</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-bean-conflict/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-bean-conflict/</guid><description>스프링에서 @Autowired로 조회한 빈이 2개 이상일 때 발생하는 충돌을 필드명 매칭, @Qualifier, @Primary로 해결하는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>의존관계 주입 애노테이션 직접 만들기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-custom-annotation/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-custom-annotation/</guid><description>문자열 기반 @Qualifier의 오타 위험을 없애기 위해 전용 애노테이션을 직접 만들어 타입 안전하게 의존관계를 주입하는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>자동과 수동, 실무에서의 판단 기준</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-auto-manual/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-auto-manual/</guid><description>스프링 빈을 자동 등록과 수동 등록 중 어떤 기준으로 선택해야 하는지, 업무 로직과 기술 지원 로직을 나누어 정리합니다.</description><category>Spring</category></item>
<item><title>빈 생명주기 콜백</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-bean-lifecycle/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-bean-lifecycle/</guid><description>스프링 빈의 생명주기와 초기화·소멸 콜백을 인터페이스, 설정 정보, @PostConstruct/@PreDestroy 세 가지 방식으로 비교해 정리합니다.</description><category>Spring</category></item>
<item><title>프로토타입 스코프와 싱글톤 빈</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-prototype-scope/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-prototype-scope/</guid><description>싱글톤과 프로토타입 빈 스코프의 차이를 살펴보고, 싱글톤 빈이 프로토타입 빈을 주입받을 때 발생하는 문제를 예제로 정리합니다.</description><category>Spring</category></item>
<item><title>프로토타입과 싱글톤을 함께 쓸 때 Provider로 푸는 법</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-provider/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-provider/</guid><description>싱글톤 빈이 프로토타입 빈을 매번 새로 받아 쓰지 못하는 문제를 ObjectProvider로 해결하는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>웹 스코프</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-core-web-scope/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-core-web-scope/</guid><description>웹 스코프와 request 스코프의 동작 방식을 살펴보고, ObjectProvider와 CGLIB 프록시로 스코프 문제를 해결하는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>컴포넌트 스캔과 자동 의존관계 설정</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-component-scan/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-component-scan/</guid><description>@Component 애노테이션이 붙은 클래스를 스프링 빈으로 자동 등록하고, 생성자를 통해 의존관계를 자동으로 주입받는 컴포넌트 스캔 방식을 정리합니다.</description><category>Spring</category></item>
<item><title>자바 코드로 스프링 빈 직접 등록하기</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-java-config/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-java-config/</guid><description>아직 데이터베이스가 정해지지 않은 상황에서 SpringConfig 자바 클래스로 스프링 빈을 직접 등록하는 방법을 정리합니다.</description><category>Spring</category></item>
<item><title>H2 데이터베이스 설치와 연동</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-h2/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-h2/</guid><description>H2 데이터베이스를 설치하고 build.gradle과 application.properties를 설정해 스프링 프로젝트와 연동하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>스프링 통합 테스트</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-integration-test/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-integration-test/</guid><description>@SpringBootTest와 @Transactional로 회원 서비스의 회원가입, 중복 검증, 조회 기능을 통합 테스트하는 과정을 정리합니다.</description><category>Spring</category></item>
<item><title>스프링 데이터 JPA와 통합 테스트</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-data-jpa/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-data-jpa/</guid><description>JpaRepository를 상속하는 인터페이스만으로 리포지토리 구현체를 자동 생성하는 스프링 데이터 JPA 사용법을 정리합니다.</description><category>Spring</category></item>
<item><title>AOP가 필요한 상황, 사용법</title><link>https://qkrxodud.github.io/tech-blog/posts/spring-intro-aop/</link><guid>https://qkrxodud.github.io/tech-blog/posts/spring-intro-aop/</guid><description>함수 실행 시간 측정을 예로 삼아 핵심 로직과 공통 관심사를 분리하는 AOP의 필요성과 사용법을 정리합니다.</description><category>Spring</category></item>
</channel></rss>