N+1 문제란? 발생 원인과 해결 방법
N+1 문제란 무엇이고 왜 발생하는지, JPA 지연 로딩 예시와 함께 fetch join, EntityGraph, batch size 등 실무 해결 방법을 초보자도 이해하기 쉽게 정리했습니다.
N+1 문제란 무엇이고 왜 발생하는지, JPA 지연 로딩 예시와 함께 fetch join, EntityGraph, batch size 등 실무 해결 방법을 초보자도 이해하기 쉽게 정리했습니다.
Merge와 Rebase의 정의 두 브랜치를 합치는 방법에는 크게 git merge와 git rebase가 있습니다. Merge는 두 브랜치의 변경 내용을 합쳐서 ‘병합 커밋’이라는 새로운 커밋을 만드는 방식입니다. 반면 Rebase는 내 브랜치의 커밋들을 통째로 들어서, 다른 브랜치의 최신 커밋 뒤에 다시 쌓아 올리는 방식입니다. 즉, 커밋의 ‘베이스(기준점)’를 바꾼다는 뜻에서 rebase라는 이름이 붙었습니다. 동작 원리와 예시 비유로 설명하면, Merge는 … 더 읽기
Bloom Filter(블룸 필터)는 적은 메모리로 데이터 존재 여부를 빠르게 판별하는 확률적 자료구조입니다. 동작 원리와 거짓 양성 개념, DB·캐시 시스템 활용 사례까지 쉽게 정리했습니다.
멱등성(Idempotency)의 개념과 HTTP 메서드별 동작 원리, API 설계 시 재시도 로직에서 왜 중요한지 실무 예시와 비유로 쉽게 설명합니다.
SRI란 무엇인가 웹 개발을 하다 보면 jQuery나 Bootstrap 같은 라이브러리를 직접 다운로드하지 않고 CDN(Content Delivery Network)에서 불러와 사용하는 경우가 많습니다. 속도도 빠르고 관리도 편하기 때문이죠. 그런데 만약 이 CDN 서버가 해킹당해서 원래의 정상 파일이 악성 코드로 바뀐다면 어떻게 될까요? 내 사이트를 방문하는 모든 사용자가 그 악성 스크립트를 그대로 실행하게 됩니다. SRI(Subresource Integrity)는 이런 문제를 막기 … 더 읽기
Trunk Based Development란 무엇인가 Trunk Based Development(TBD)는 모든 개발자가 ‘main’ 혹은 ‘trunk’라고 부르는 단일 브랜치에 코드를 짧은 주기로 병합하는 브랜치 전략입니다. Git Flow처럼 feature, develop, release 등 여러 브랜치를 오래 유지하는 대신, 하나의 트렁크 브랜치를 중심에 두고 작업 단위를 최대한 잘게 쪼개어 자주 통합하는 것이 핵심입니다. 비유하자면 Git Flow가 여러 지류가 합쳐지는 강 하구와 같다면, … 더 읽기
12 Factor App의 정의 12 Factor App은 2011년 Heroku의 엔지니어들이 정리한 애플리케이션 설계 방법론으로, 클라우드 환경에서 확장 가능하고 유지보수하기 쉬운 SaaS 앱을 만들기 위한 12가지 원칙을 담고 있습니다. 특정 언어나 프레임워크에 종속되지 않는 일반적인 가이드라인이며, 오늘날 마이크로서비스와 컨테이너 기반 아키텍처의 이론적 토대로 널리 인용됩니다. 쉽게 비유하면 ‘이사 다니기 쉬운 집’을 짓는 규칙과 같습니다. 가구가 벽에 … 더 읽기
Mass Assignment란 무엇인가 Mass Assignment는 사용자가 보낸 요청 데이터를 검증 없이 객체나 모델에 한꺼번에 바인딩할 때 발생하는 취약점입니다. 많은 웹 프레임워크는 개발 편의를 위해 요청 파라미터를 모델 필드에 자동으로 매핑해주는 기능을 제공합니다. 예를 들어 Ruby on Rails, Spring, Laravel 같은 프레임워크는 폼 데이터를 객체에 자동으로 채워 넣어줍니다. 문제는 이 과정에서 개발자가 의도하지 않은 필드까지 사용자가 … 더 읽기
IDOR란 무엇인가 IDOR(Insecure Direct Object Reference)는 ‘안전하지 않은 직접 객체 참조’라는 뜻으로, 사용자가 자신의 권한 범위를 벗어난 데이터에 직접 접근할 수 있게 되는 취약점을 말합니다. 예를 들어 게시글이나 주문 내역처럼 각 데이터에 고유 ID가 부여된 시스템에서, 서버가 ‘이 ID의 소유자가 요청자와 같은가’를 확인하지 않으면 발생합니다. 흔한 예시는 URL 파라미터입니다. 내 주문 내역을 보기 위해 GET … 더 읽기
정의: 두 프로브는 각각 무엇을 확인하나 쿠버네티스에서 컨테이너의 상태를 체크하는 방법으로 Liveness Probe와 Readiness Probe가 있습니다. 이름은 비슷하지만 목적이 완전히 다릅니다. Liveness Probe는 ‘이 컨테이너가 살아있는가’를 확인합니다. 만약 실패하면 쿠버네티스는 해당 컨테이너를 강제로 재시작합니다. 반면 Readiness Probe는 ‘이 컨테이너가 트래픽을 받을 준비가 되었는가’를 확인합니다. 실패하면 재시작하지 않고, 대신 서비스의 로드밸런싱 대상에서 잠시 제외시킵니다. 동작 원리와 … 더 읽기