Press / to search, Esc to close, ↑↓ to navigate

DooDoo IT Blog

Software Developer
DooDoo IT Blog avatar

DoYoon Kim

Backend Developer

Writing about Backend Development, Algorithms, Kotlin, Java & Spring

Last updated: April 2026

데이터베이스 트랜잭션과 격리 수준

들어가며 트랜잭션은 데이터베이스의 가장 근본적인 개념이다. “데이터 정합성”이라는 단어를 들어봤다면, 그 정합성을 보장하는 메커니즘이 바로 트랜잭션이다. 하지만 트랜잭션을 단순히 “커밋 아니면 롤백”으로만 이해하면 실무에서 동시성 문제에 부딪힌다. 이 글에서는 ACID 특성부터 격리 수준, 데드락, 락 전략까지 트랜잭션의 전체 그림을 정리한다. ...

Read Post →
Spring
Spring Security Authentication Authorization JWT Backend

Spring Security 아키텍처 완전 이해

필터 체인 구조부터 JWT 인증, Method Security, CSRF/CORS 설정까지

들어가며 Spring Security는 Spring 기반 애플리케이션의 인증(Authentication)과 인가(Authorization)를 담당하는 프레임워크다. 강력하지만 그만큼 내부 구조가 복잡하다. ...

35 min read
JPA
JPA Spring Hibernate Performance Backend

JPA N+1 문제 완전 정복

발생 원인부터 Fetch Join, @EntityGraph, Batch Size, QueryDSL까지 해결 전략 총정리

들어가며 Spring Boot + JPA 기초에서 기본적인 CRUD API를 구현했다면, 실무에서 반드시 만나게 되는 문제가 있다. 바로 N+1 문제다. 엔티티 하나를 조회했을 뿐인데 연관된 엔티티를 가져오기...

19 min read
Kafka
Kafka MessageQueue EventStreaming Backend

Apache Kafka 입문부터 실전까지

핵심 개념, 메시지 보장, Spring Boot 연동, Dead Letter Queue까지

Apache Kafka는 분산 이벤트 스트리밍 플랫폼이다. 단순한 메시지 큐를 넘어서 실시간 데이터 파이프라인과 이벤트 기반 아키텍처의 중심에 있다. 이 글에서는 핵심 개념부터 실전 패턴까지 정리한다. 1...

37 min read
Redis
Redis Caching Backend Performance

Redis 캐싱 전략 완전 정복

캐시 패턴 비교부터 Cache Stampede 해결, Spring Boot 연동까지

캐싱은 백엔드 성능 최적화의 핵심이다. 캐싱 전략 기초에서 Cache-Aside, Write-Through, Write-Behind 패턴의 개념을 다뤘다면, 이 글에서는 Redis를 활용한 구체적인 구현과 실전...

32 min read
RateLimiting
RateLimiting SystemDesign Redis Backend Spring

API Rate Limiting — 설계와 구현 전략

Token Bucket부터 분산 Redis Rate Limiter까지, Spring Boot 실전 구현

Rate Limiting이 필요한 이유 공개 API를 운영하면 예상치 못한 트래픽 폭주를 경험하게 된다. 의도적인 DDoS 공격이 아니더라도, 클라이언트의 버그나 잘못된 재시도 로직만으로 서버가 과부하에 빠질...

24 min read
Spring
Spring Spring Security JWT Backend

Spring Security 6 + JWT 인증 구현

SecurityFilterChain부터 토큰 갱신 전략까지 — Spring Boot 3.x 실전 가이드

들어가며 이전 글(Spring Boot + JPA로 REST API 만들기)에서 기본적인 CRUD API를 구현했다. 이번에는 이 API에 인증(Authentication) 을 적용한다. 세션 기반 인증 대신...

35 min read
React
React JavaScript Frontend

React Hooks 완전 정복 — useState부터 Custom Hook까지

useEffect 의존성 배열 함정, useMemo 남용 경계, 커스텀 훅 설계 원칙

Class에서 Hooks로 React 16.8 이전에는 상태 관리와 생명주기 로직을 사용하려면 반드시 클래스 컴포넌트를 작성해야 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

24 min read
Kotlin
Kotlin Coroutines Async Concurrency

Kotlin Coroutines 실전 가이드

suspend, launch, async부터 Flow와 예외 처리까지

Kotlin의 코루틴은 비동기 프로그래밍을 동기 코드처럼 작성할 수 있게 해주는 경량 동시성 프레임워크다. 이 글에서는 기본 개념부터 실전 패턴까지 정리한다. 1. Coroutine 기본 개념 1.1 s...

22 min read
Kotlin
Kotlin

Kotlin 고급 문법

Advanced Kotlin Syntax

Kotlin 고급 문법 Kotlin의 기본 문법에 이어, 실무와 코딩 테스트에서 자주 활용되는 고급 문법을 정리한다. 1. Lambda 1 2 3 4 5 val square: (Int) -> In...

14 min read
Kubernetes
Kubernetes Docker Infrastructure DevOps

Kubernetes 핵심 개념 — Pod부터 Deployment까지

Docker만으로는 부족할 때 — 쿠버네티스로 컨테이너 오케스트레이션 시작하기

왜 Kubernetes인가 이전 Docker 포스트에서 컨테이너를 만들고 docker-compose로 멀티 컨테이너 환경을 구성하는 법을 다뤘다. 로컬 개발이나 소규모 서비스에서는 충분하지만, 프로덕션 환경에...

20 min read
MySQL
MySQL PostgreSQL Database Backend

MySQL vs PostgreSQL — 백엔드 개발자가 알아야 할 차이

라이선스, 아키텍처, 성능 차이부터 실무 선택 기준까지

라이선스와 아키텍처 차이 라이선스 MySQL은 Oracle이 소유하고 있으며 듀얼 라이선스 정책을 따른다. Community Edition은 GPL v2로 무료이지만, 상용 라이선스가 별도로 존재한다. Or...

15 min read
CS
CS CS Fundamentals

Data Representation - Integer

정수의 데이터 표현 방식

Integers, or whole number from elemental mathematics, are the most common and fundamental numbers used in the compute...

16 min read
CS
CS CS Fundamentals

부동소수점(Floating Point) 표현 — IEEE 754 완전 정복

IEEE 754 단정도/배정도 구조와 백엔드 개발자가 알아야 할 함정들

이전 글(Data Representation - Integer)에서 정수의 표현 방식을 알아보았다. 정수는 fixed-point(고정소수점)으로 표현된다고 했는데, 이번에는 실수를 표현하는 방식인 부동소수점(f...

16 min read
Algorithm
Algorithm Tree

Trie 자료구조 — 원리와 구현

문자열 검색에 최적화된 트리 구조

Trie란 검색 트리의 일종으로, 문자열을 저장하고 탐색하는데 효율적인 자료구조이다. Trie는 문자열의 접두사(Prefix)를 이용하여 트리를 구성하므로, 특히나 문자열 검색에 유용하다. 이름은 retrie...

9 min read
System Design
System Design Backend Redis

시스템 디자인: 캐싱 전략 (Cache-Aside, Write-Through, Write-Behind)

Redis 기반 캐싱 패턴 비교와 실무 선택 기준

캐싱이 필요한 이유 데이터베이스는 신뢰성과 일관성에 최적화된 저장소다. 하지만 모든 요청이 DB까지 도달하면 응답 지연이 발생하고, 트래픽이 몰리면 DB가 병목이 된다. 캐시는 자주 접근하는 데이터를 메모리에...

9 min read
PostgreSQL
PostgreSQL Database Backend

PostgreSQL 인덱스 제대로 이해하기

B-Tree 인덱스, EXPLAIN ANALYZE, 복합 인덱스 전략까지

인덱스가 왜 필요한가 100만 건의 주문 데이터에서 특정 사용자의 주문을 찾는다고 하자. 1 SELECT * FROM orders WHERE user_id = 42; 인덱스가 없으면 PostgreSQL은...

6 min read
Docker
Docker DevOps Backend

Docker 입문: 컨테이너로 개발 환경 통일하기

Dockerfile 작성부터 docker-compose까지 한 번에 정리

Docker를 왜 쓰는가 “제 컴퓨터에서는 되는데요?” — 개발자라면 한 번쯤 들어본 말이다. 팀원마다 OS, JDK 버전, 로컬 DB 설정이 다르면 동일한 코드가 다른 결과를 낳는다. Docker는 애플리...

6 min read
Spring
Spring Backend Java

Spring Boot + JPA로 REST API 만들기

Entity, Repository, Service, Controller 패턴으로 CRUD API 구축하기

들어가며 Spring Boot와 JPA를 사용하면 놀라울 정도로 적은 코드로 REST API를 만들 수 있다. 이번 글에서는 가장 기본적인 Entity → Repository → Service → Contro...

10 min read
React
React

How to use React in Jekyll app

React with Jekyll

How to Use React in Jekyll Create react app Create react app in base directory that your Jekyll project. Use below c...

3 min read
Algorithm
Algorithm Graph

Minimum Spanning Tree

Implement a MST

MST 최소 신장 트리 신장 트리란 하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 최소한의 비용으로 신장 트리를 찾는 것이 MST 알고리즘이다. MST 구현 ...

4 min read
Algorithm
Algorithm Graph

Floyd Warshall

Implement a Floyd Warshall

플로이드-워셜 알고리즘이란 그래프에서 모든 노드 쌍 간의 최단 경로를 찾는 알고리즘 다익스트라와 다르게 음수 가중치를 가진 그래프에서도 동작한다. 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하...

2 min read
Kotlin
Kotlin Java

Kotlin vs Java

What is difference between Kotlin and Java

개발자들은 평생동안 코드를 쓰는 것 보다 읽는 것에 더 많은 시간을 할애한다. 코틀린은 가독성에 초점을 뒀다. 「이사코바」 많은 서비스의 Backend 시스템은 자바로 이루어져 있습니다. 몇몇 회사와 ...

7 min read
Kotlin
Kotlin

Kotlin 기본 문법

basics of kotlin

Kotlin 기본 문법 1. 함수 1 2 3 4 5 6 fun helloWorld() : Unit { println("Hello World") } fun add (a : Int, b : Int) : In...

7 min read
Algorithm
Algorithm Tree

Segment tree

Implement a segment tree

세그먼트 트리란 주어진 쿼리에 대해 빠르게 응답하기 위해 만들어진 자료구조이다. 따라서 많은 쿼리가 반복되는 상황에 유리하다. 세그먼트 트리의 전체 크기 크기가 N인 배열에 대해 1 2 트리의 높이 - c...

3 min read