PageSourceSearch

https://rookedsysc.vercel.app/_next/static/chunks/pages/blog/anki/next-step-d8be6fac6a647e8c.js

js rookedsysc.vercel.app collected 2026-10-03 07:41:38 UTC 157,597 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[61436],{91595:function(e,n,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/blog/anki/next-step",function(){return i(83013)}])},83013:function(e,n,i){"use strict";i.r(n),i.d(n,{__toc:function(){return o}});var r=i(85893),a=i(92673),t=i(37320),d=i(39812);i(16719),i(46834);var s=i(82643);let o=[{depth:2,value:"Database",id:"database"},{depth:3,value:"1. 성능 최적화 & 튜닝",id:"1-성능-최적화--튜닝"},{depth:3,value:"2. 트랜잭션 & 동시성 제어",id:"2-트랜잭션--동시성-제어"},{depth:3,value:"3. 복제 & 고가용성",id:"3-복제--고가용성"},{depth:3,value:"4. 샤딩 & 파티셔닝",id:"4-샤딩--파티셔닝"},{depth:3,value:"5. 스키마 설계 & 모델링",id:"5-스키마-설계--모델링"},{depth:3,value:"6. 백업 & 복구",id:"6-백업--복구"},{depth:3,value:"7. 캐싱 전략",id:"7-캐싱-전략"},{depth:3,value:"8. 모니터링 & 장애 대응",id:"8-모니터링--장애-대응"},{depth:3,value:"9. 마이그레이션 & 스키마 변경",id:"9-마이그레이션--스키마-변경"},{depth:3,value:"10. 보안",id:"10-보안"},{depth:3,value:"11. 실제 장애 사례 기반 질문",id:"11-실제-장애-사례-기반-질문"},{depth:2,value:"Redis",id:"redis"},{depth:3,value:"1. 기본 개념 & 아키텍처",id:"1-기본-개념--아키텍처"},{depth:3,value:"2. 데이터 타입 & 활용",id:"2-데이터-타입--활용"},{depth:3,value:"3. 캐싱 전략",id:"3-캐싱-전략"},{depth:3,value:"4. 분산 락 (Distributed Lock)",id:"4-분산-락-distributed-lock"},{depth:3,value:"5. 영속성 (Persistence)",id:"5-영속성-persistence"},{depth:3,value:"6. 복제 (Replication)",id:"6-복제-replication"},{depth:3,value:"7. 고가용성 (Sentinel)",id:"7-고가용성-sentinel"},{depth:3,value:"8. 클러스터 (Redis Cluster)",id:"8-클러스터-redis-cluster"},{depth:3,value:"9. 성능 최적화",id:"9-성능-최적화"},{depth:3,value:"10. 트랜잭션 & 원자성",id:"10-트랜잭션--원자성"},{depth:3,value:"11. 모니터링 & 장애 대응",id:"11-모니터링--장애-대응"},{depth:3,value:"12. Rate Limiting",id:"12-rate-limiting"},{depth:3,value:"13. 세션 관리",id:"13-세션-관리"},{depth:3,value:"14. 실시간 기능 구현",id:"14-실시간-기능-구현"},{depth:3,value:"15. 보안",id:"15-보안"},{depth:3,value:"16. 실제 장애 사례 기반",id:"16-실제-장애-사례-기반"},{depth:3,value:"17. 아키텍처 설계",id:"17-아키텍처-설계"},{depth:2,value:"Spring",id:"spring"},{depth:3,value:"1. Spring Core (IoC, DI, AOP)",id:"1-spring-core-ioc-di-aop"},{depth:3,value:"2. Spring Boot",id:"2-spring-boot"},{depth:3,value:"3. Spring MVC / WebFlux",id:"3-spring-mvc--webflux"},{depth:3,value:"4. Spring Data JPA",id:"4-spring-data-jpa"},{depth:3,value:"5. Transaction Management",id:"5-transaction-management"},{depth:3,value:"6. Spring Security",id:"6-spring-security"},{depth:3,value:"7. 성능 최적화",id:"7-성능-최적화"},{depth:3,value:"8. 테스팅",id:"8-테스팅"},{depth:3,value:"9. 비동기 처리 & 스케줄링",id:"9-비동기-처리--스케줄링"},{depth:3,value:"10. API 설계 & 버전관리",id:"10-api-설계--버전관리"},{depth:3,value:"11. 에러 핸들링 & 로깅",id:"11-에러-핸들링--로깅"},{depth:3,value:"12. 클라우드 & 컨테이너",id:"12-클라우드--컨테이너"},{depth:3,value:"13. 멀티모듈 & 아키텍처",id:"13-멀티모듈--아키텍처"},{depth:3,value:"14. 실제 장애 사례 기반",id:"14-실제-장애-사례-기반"},{depth:3,value:"15. 코드 품질 & 설계",id:"15-코드-품질--설계"},{depth:3,value:"16. 성능 측정 & 프로파일링",id:"16-성능-측정--프로파일링"},{depth:3,value:"17. 최신 기술 & 트렌드",id:"17-최신-기술--트렌드"},{depth:2,value:"Java",id:"java"},{depth:3,value:"Java 기본 개념",id:"java-기본-개념"},{depth:3,value:"객체지향 프로그래밍(OOP)",id:"객체지향-프로그래밍oop"},{depth:3,value:"메모리 관리",id:"메모리-관리"},{depth:3,value:"자료형과 변수",id:"자료형과-변수"},{depth:3,value:"예외 처리",id:"예외-처리"},{depth:3,value:"제네릭(Generic)",id:"제네릭generic"},{depth:3,value:"컬렉션 프레임워크",id:"컬렉션-프레임워크"},{depth:3,value:"람다와 스트림",id:"람다와-스트림"},{depth:3,value:"멀티스레딩",id:"멀티스레딩"},{depth:3,value:"Java 8+ 주요 기능",id:"java-8-주요-기능"},{depth:3,value:"클래스 로딩",id:"클래스-로딩"},{depth:3,value:"성능과 최적화",id:"성능과-최적화"},{depth:3,value:"기타 중요 개념",id:"기타-중요-개념"},{depth:3,value:"출처",id:"출처"}];function _createMdxContent(e){let n=Object.assign({h2:"h2",p:"p",h3:"h3",strong:"strong",ul:"ul",li:"li",ol:"ol",a:"a"},(0,s.a)(),e.components);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"database",children:"Database"}),"\n",(0,r.jsx)(n.p,{children:"데이터베이스 실무 질문들을 난이도별로 정리했습니다."}),"\n",(0,r.jsx)(n.h3,{id:"1-성능-최적화--튜닝",children:"1. 성능 최적화 & 튜닝"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"인덱스를 추가했는데 오히려 성능이 떨어졌습니다. 왜 그럴까요? ✅"}),"\n",(0,r.jsx)(n.li,{children:"EXPLAIN 결과에서 type이 ALL로 나오는데 어떻게 개선할 수 있나요? ✅"}),"\n",(0,r.jsx)(n.li,{children:"쿼리 속도가 느린데 인덱스 문제인지 어떻게 판단하나요? ✅"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Covering Index와 일반 Index의 실제 성능 차이는 얼마나 될까요? ✅"}),"\n",(0,r.jsx)(n.li,{children:"JOIN 순서가 성능에 어떤 영향을 미치나요? 옵티마이저가 항상 최적의 순서를 선택하나요? ✅"}),"\n",(0,r.jsx)(n.li,{children:"복합 인덱스에서 컬럼 순서를 어떻게 결정해야 하나요?"}),"\n",(0,r.jsx)(n.li,{children:"WHERE 절에 함수를 사용하면 왜 인덱스를 못 타나요? 해결 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"페이징 쿼리에서 OFFSET이 크면 느려지는데, 어떻게 개선할 수 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"10억 건의 데이터에서 GROUP BY 집계 쿼리가 너무 느립니다. 어떻게 최적화하시겠습니까?"}),"\n",(0,r.jsx)(n.li,{children:"Index Skip Scan은 언제 발생하고, 어떻게 활용할 수 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Cardinality가 낮은 컬럼에 인덱스를 걸어야 할 때가 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Buffer Pool 크기는 어떻게 설정해야 최적일까요?"}),"\n",(0,r.jsx)(n.li,{children:"통계 정보가 오래되어 실행 계획이 잘못 수립되는 경우 어떻게 대응하나요?"}),"\n"]}
1),"\n",(0,r.jsx)(n.h3,{id:"2-트랜잭션--동시성-제어",children:"2. 트랜잭션 & 동시성 제어"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"READ COMMITTED와 REPEATABLE READ의 실제 차이를 경험한 적이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"트랜잭션이 길어지면 어떤 문제가 발생하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Deadlock이 발생했을 때 어떻게 해결하셨나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"재고 차감 로직에서 동시성 문제를 어떻게 해결하셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"SELECT FOR UPDATE와 비관적 락, 낙관적 락 중 어떤 것을 선택하셨고 왜 그랬나요?"}),"\n",(0,r.jsx)(n.li,{children:"Lost Update 문제를 실제로 경험하신 적 있나요? 어떻게 해결하셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"분산 환경에서 DB 락만으로 동시성을 제어하기 어려운 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"SERIALIZABLE로 설정하면 성능이 얼마나 떨어지나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Phantom Read를 방지하기 위해 Gap Lock을 사용했는데, Deadlock이 자주 발생합니다. 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"MVCC 환경에서 Long Transaction이 Undo Log를 계속 쌓이게 만드는 문제를 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Write Skew 문제를 경험하신 적 있나요? 어떻게 감지하고 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"2PL과 MVCC의 실제 성능 차이를 측정해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"3-복제--고가용성",children:"3. 복제 & 고가용성"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Master-Slave 구조에서 Replication Lag이 발생하는 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Read Replica에 쿼리를 보냈는데 방금 INSERT한 데이터가 안 보입니다. 왜 그럴까요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Replication Lag을 모니터링하는 방법은? 얼마나 지연되면 문제인가요?"}),"\n",(0,r.jsx)(n.li,{children:"Master가 죽었을 때 Failover 과정에서 데이터 유실을 방지하려면?"}),"\n",(0,r.jsx)(n.li,{children:"비동기 복제와 동기 복제의 장단점을 실제 경험에 비추어 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Active-Active 구조의 문제점은 무엇인가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Multi-Master Replication에서 충돌을 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Statement-based vs Row-based vs Mixed Replication의 차이와 선택 기준은?"}),"\n",(0,r.jsx)(n.li,{children:"Split Brain 상황을 어떻게 감지하고 복구하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Binlog를 이용한 CDC(Change Data Capture)를 구현해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"4-샤딩--파티셔닝",children:"4. 샤딩 & 파티셔닝"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"수평 파티셔닝과 샤딩의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"파티셔닝했을 때 인덱스는 어떻게 되나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Range vs Hash vs List 파티셔닝 중 어떤 것을 선택하셨고, 그 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"샤딩 키를 잘못 선택하면 어떤 문제가 생기나요?"}),"\n",(0,r.jsx)(n.li,{children:"여러 샤드에 걸친 JOIN이나 GROUP BY는 어떻게 처리하나요?"}),"\n",(0,r.jsx)(n.li,{children:"샤드 리밸런싱은 어떻게 하나요? 서비스 중단 없이 가능한가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Consistent Hashing을 실제로 구현해보신 적 있나요?"}
1),"\n",(0,r.jsx)(n.li,{children:"샤드가 불균형하게 커졌을 때(Hot Shard) 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"글로벌 유니크 ID를 어떻게 생성하나요? (Snowflake, UUID, etc.)"}),"\n",(0,r.jsx)(n.li,{children:"샤딩된 DB에서 트랜잭션 일관성을 어떻게 보장하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"5-스키마-설계--모델링",children:"5. 스키마 설계 & 모델링"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"1:N 관계와 N:M 관계를 어떻게 테이블로 표현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"NULL을 허용해야 할 때와 안 할 때의 기준은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"JSON 컬럼을 사용한 경험이 있나요? 언제 사용하고 언제 사용하지 말아야 하나요?"}),"\n",(0,r.jsx)(n.li,{children:"소프트 삭제(deleted_at)와 하드 삭제 중 어떤 것을 선택하나요?"}),"\n",(0,r.jsx)(n.li,{children:"이력 관리(History) 테이블은 어떻게 설계하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Polymorphic Association을 DB에서 어떻게 구현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"ENUM vs VARCHAR vs 별도 테이블, 어떤 것을 선택하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Time Series 데이터는 어떻게 설계하고 최적화하나요?"}),"\n",(0,r.jsx)(n.li,{children:"계층 구조(Tree) 데이터를 표현하는 여러 방법(Adjacency List, Nested Set, Path Enumeration)의 장단점은?"}),"\n",(0,r.jsx)(n.li,{children:"정규화와 비정규화의 선택 기준은? 실제로 비정규화를 선택한 사례가 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Event Sourcing 패턴을 DB에 적용해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"6-백업--복구",children:"6. 백업 & 복구"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"논리 백업과 물리 백업의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"mysqldump로 백업 중에도 서비스가 가능한가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Point-in-Time Recovery(PITR)를 어떻게 구현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"백업 시간을 단축하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"백업 검증은 어떻게 하나요?"}),"\n",(0,r.jsx)(n.li,{children:"증분 백업의 장단점은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"100TB 데이터베이스의 백업 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"Binlog를 이용한 복구 시 주의사항은?"}),"\n",(0,r.jsx)(n.li,{children:"크로스 리전 백업 전략은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"7-캐싱-전략",children:"7. 캐싱 전략"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"어떤 데이터를 캐싱하고 어떤 데이터를 캐싱하지 않나요?"}),"\n",(0,r.jsx)(n.li,{children:"Cache Invalidation은 어떻게 처리하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Cache Aside vs Write Through vs Write Behind 중 어떤 것을 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Cache Stampede 문제를 경험하신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"DB와 Redis의 데이터 불일치를 어떻게 방지하나요?"}),"\n",(0,r.jsx)(n.li,{children:"TTL을 어떻게 설정하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Look-aside Cache에서 발생할 수 있는 Race Condition은?"}),"\n",(0,r.jsx)(n.li,{children:"분산 캐시 환경에서 일관성을 어떻게 보장하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Cache Warming 전략은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"8-모니터링--장애-대응",children:"8. 모니터링 & 장애 대응"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"어떤 메트릭을 모니터링하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Slow Query를 어떻게 찾고 개선하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Connection Pool 크기는 어떻게 설정하나요?"}),"\n",(0,r.jsx)(n.li,{children:"DB CPU가 100%일 때 원인을 찾는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Table Lock이 걸려서 서비스 장애가 발생했습니다. 어떻게 대응하나요?"}),"\n",(0,r.jsx)(n.li,{children:"DB 디스크가 꽉 찼을 때 긴급 대응 방법은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"InnoDB Buffer Pool의 Hit Rate가 낮을 때 원인과 해결책은?"}),"\n",(0,r.jsx)(n.li,{children:"갑자기 Connection이 고갈되었을 때 원인을 찾는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Replication Lag이 계속 늘어나는 상황에서 어떻게 대응하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Query of Death가 발생했을 때 어떻게 빠르게 Kill하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"9-마이그레이션--스키마-변경",children:"9. 마이그레이션 & 스키마 변경"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"ALTER TABLE 실행 중에 서비스 중단이 발생하나요?"}),"\n",(0,r.jsx)(n.li,{children:"테이블명을 변경하려면 어떻게 해야 하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Online DDL의 동작 원리는?"}),"\n",(0,r.jsx)(n.li,{children:"NOT NULL 제약조건을 추가할 때 주의사항은?"}),"\n",(0,r.jsx)(n.li,{children:"대용량 테이블에 컬럼을 추가하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"pt-online-schema-change를 사용해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Zero Downtime Migration을 어떻게 달성하나요?"}),"\n",(0,r.jsx)(n.li,{children:"샤딩된 DB를 리샤딩하는 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"DB를 PostgreSQL에서 MySQL로(또는 반대로) 마이그레이션한 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"10-보안",children:"10. 보안"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"SQL Injection을 방지하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"DB 계정 권한은 어떻게 관리하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"개인정보를 암호화해서 저장해야 할 때 어떻게 구현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"민감한 데이터의 접근 로그는 어떻게 남기나요?"}),"\n",(0,r.jsx)(n.li,{children:"DB Audit은 어떻게 설정하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Column-level Encryption vs Transparent Data Encryption의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"데이터 마스킹 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"Credential Rotation은 어떻게 구현하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"11-실제-장애-사례-기반-질문",children:"11. 실제 장애 사례 기반 질문"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'"트랜잭션에서 외부 API를 호출했더니 DB Connection이 고갈되었습니다. 원인과 해결책은?"'}),"\n",(0,r.jsx)(n.li,{children:'"배치 작업이 실행되는 새벽에만 Deadlock이 발생합니다. 어떻게 디버깅하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"갑자기 INSERT 성능이 10배 느려졌습니다. 가능한 원인들은?"'}),"\n",(0,r.jsx)(n.li,{children:'"AUTO_INCREMENT가 고갈될 것 같습니다. 어떻게 대응하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"FK 제약조건 때문에 DELETE가 너무 느립니다. 어떻게 해결하나요?"'}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"redis",children:"Redis"}),"\n",(0,r.jsx)(n.p,{children:"Redis 관련 실무 면접 질문들을 난이도별로 정리했습니다."}),"\n",(0,r.jsx)(n.h3,{id:"1-기본-개념--아키텍처",children:"1. 기본 개념 & 아키텍처"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis가 빠른 이유는 무엇인가요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis는 Single Thread인데 어떻게 동시에 여러 요청을 처리하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis와 Memcached의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 메모리가 부족하면 어떻게 되나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis 6.0부터 Multi-threaded I/O가 도입되었는데, 이게 정확히 무엇인가요?"}),"\n",(0,r.jsx)(n.li,{children:"Event Loop 방식으로 동작한다는데, 구체적으로 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 메모리 할당 전략(jemalloc)에 대해 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Copy-on-Write는 어떻게 동작하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis 7.0의 Functions와 Lua Script의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 Lazy Free는 언제 사용되고 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Reactor Pattern이 Redis에서 어떻게 구현되어 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 Object Encoding 전략에 대해 설명해주세요 (int, embstr, raw, ziplist 등)"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"2-데이터-타입--활용",children:"2. 데이터 타입 & 활용"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"String, List, Set, Sorted Set, Hash의 사용 사례를 각각 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Sorted Set은 어떻게 구현되어 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"List를 Queue로 사용할 때 LPUSH/RPOP vs RPUSH/LPOP 중 어떤 것을 선택하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"HyperLogLog는 언제 사용하고, 정확도는 어느 정도인가요?"}),"\n",(0,r.jsx)(n.li,{children:"Bitmap으로 DAU를 계산하는 방법을 구현해보세요"}),"\n",(0,r.jsx)(n.li,{children:"Geo 자료구조로 반경 검색을 구현한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Stream을 사용한 경험이 있나요? Kafka와의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Bloom Filter를 Redis에서 사용해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Sorted Set의 내부 구조(Skiplist + Hash Table)를 설명하고, 왜 이런 구조를 선택했을까요?"}),"\n",(0,r.jsx)(n.li,{children:"Ziplist의 장단점과 언제 다른 인코딩으로 전환되나요?"}),"\n",(0,r.jsx)(n.li,{children:"Listpack이 Ziplist를 대체하는 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Redis Stack의 JSON, Search, Time Series 모듈을 사용해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"3-캐싱-전략",children:"3. 캐싱 전략"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Cache Aside 패턴을 설명하고, 장단점을 말해주세요"}),"\n",(0,r.jsx)(n.li,{children:"TTL은 어떻게 설정하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Cache Miss가 발생하면 어떻게 처리하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Cache Stampede 문제를 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Write Behind vs Write Through 중 어떤 것을 선택하고 왜 그랬나요?"}),"\n",(0,r.jsx)(n.li,{children:"Hot Key 문제를 경험하신 적 있나요? 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Cache Warming은 어떻게 구현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Stale Cache 문제를 어떻게 방지하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Look-aside Cache에서 발생하는 Race Condition을 설명하고 해결책을 제시해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Cache와 DB의 정합성을 보장하는 여러 패턴을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Probabilistic Early Expiration을 구현해보신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Refresh-ahead 전략은 언제 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"2-tier Cache 구조(Local Cache + Redis)를 사용해보신 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"4-분산-락-distributed-lock",children:"4. 분산 락 (Distributed Lock)"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis로 분산 락을 구현하는 방법을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"SETNX의 문제점은 무엇인가요?"}),"\n",(0,r.jsx)(n.li,{children:"SET NX EX를 사용하는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redlock 알고리즘을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Redisson을 사용한 경험이 있나요? 내부적으로 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Lock의 timeout은 어떻게 설정하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Spin Lock vs Sleep 방식의 차이는?"}
1),"\n",(0,r.jsx)(n.li,{children:"락 갱신(Lock Renewal)은 어떻게 구현하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redlock의 문제점과 Martin Kleppmann의 비판에 대해 아시나요?"}),"\n",(0,r.jsx)(n.li,{children:"Fencing Token을 사용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis Cluster 환경에서 분산 락의 안정성 문제는?"}),"\n",(0,r.jsx)(n.li,{children:"Watch를 이용한 Optimistic Lock을 구현해보신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Lua Script로 원자성을 보장하는 락을 구현한 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"5-영속성-persistence",children:"5. 영속성 (Persistence)"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"RDB와 AOF의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Redis를 캐시가 아닌 데이터베이스로 사용할 수 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"RDB snapshot 생성 시 서비스에 미치는 영향은?"}),"\n",(0,r.jsx)(n.li,{children:"AOF Rewrite는 언제 발생하고 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"fsync 정책(always, everysec, no)의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"RDB와 AOF를 동시에 사용하면 어떻게 되나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fork() 시 메모리 사용량이 2배로 증가하나요?"}),"\n",(0,r.jsx)(n.li,{children:"AOF와 RDB의 복구 우선순위와 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Redis 7.0의 Multi-part AOF의 장점은?"}),"\n",(0,r.jsx)(n.li,{children:"Copy-on-Write 과정에서 메모리 단편화 문제를 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Diskless Replication은 언제 사용하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"6-복제-replication",children:"6. 복제 (Replication)"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Master-Slave 복제 구조를 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Replication Lag이 발생하는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Partial Resync vs Full Resync의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Replication Buffer와 Backlog의 역할은?"}),"\n",(0,r.jsx)(n.li,{children:"Slave가 Master로 승격되는 과정을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Read Replica의 개수를 늘리면 어떤 문제가 생길 수 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"PSYNC2의 개선사항은 무엇인가요?"}),"\n",(0,r.jsx)(n.li,{children:"Replication Offset을 이용한 데이터 일관성 검증 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Master가 죽었을 때 데이터 유실을 최소화하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Diskless Replication의 동작 원리와 장단점은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"7-고가용성-sentinel",children:"7. 고가용성 (Sentinel)"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Sentinel의 역할은 무엇인가요?"}),"\n",(0,r.jsx)(n.li,{children:"Sentinel은 몇 개를 띄워야 하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Quorum과 Majority의 차이를 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Sentinel이 Master 장애를 감지하는 과정을 상세히 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"SDOWN vs ODOWN의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Failover 과정에서 데이터 유실이 발생할 수 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Sentinel의 Gossip Protocol에 대해 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Split Brain 상황을 어떻게 방지하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Sentinel 자체의 단일 장애점 문제는?"}),"\n",(0,r.jsx)(n.li,{children:"min-slaves-to-write 설정의 의미와 사용 시나리오는?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"8-클러스터-redis-cluster",children:"8. 클러스터 (Redis Cluster)"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis Cluster가 필요한 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Hash Slot은 무엇이고 왜 16384개인가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis Cluster는 어떻게 샤딩하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Resharding은 어떻게 진행되나요?"}),"\n",(0,r.jsx)(n.li,{children:"MOVED vs ASK 리다이렉션의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Multi-key 연산이 왜 제한되나요? 해결 방법은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Gossip Protocol로 클러스터 상태를 동기화하는 과정을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Hash Tag를 사용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"클러스터 파티션(Split Brain) 상황에서 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Replica Migration은 언제 발생하나요?"}),"\n",(0,r.jsx)(n.li,{children:"클러스터 환경에서 Lua Script 사용 시 제약사항은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"9-성능-최적화",children:"9. 성능 최적화"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Pipeline을 사용하는 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"KEYS 명령어를 프로덕션에서 사용하면 안 되는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Pipeline vs Transaction의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Big Key 문제를 어떻게 발견하고 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"SCAN의 동작 원리와 사용법을 설명해주세요"}
1),"\n",(0,r.jsx)(n.li,{children:"Batch 작업 시 성능 최적화 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Slowlog는 어떻게 활용하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"O(N) 명령어들(KEYS, SMEMBERS, HGETALL 등)의 대안은?"}),"\n",(0,r.jsx)(n.li,{children:"메모리 단편화 문제를 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Active Defragmentation은 언제 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Client-side Caching을 구현해보신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 Eviction Policy 선택 기준은? (LRU, LFU, Random 등)"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"10-트랜잭션--원자성",children:"10. 트랜잭션 & 원자성"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"MULTI/EXEC의 동작 원리를 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 트랜잭션은 ACID를 보장하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"WATCH를 사용한 Optimistic Lock을 구현해보세요"}),"\n",(0,r.jsx)(n.li,{children:"MULTI/EXEC 내에서 에러가 발생하면 어떻게 되나요?"}),"\n",(0,r.jsx)(n.li,{children:"Lua Script vs MULTI/EXEC의 차이는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Lua Script로 복잡한 원자적 연산을 구현한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"EVAL vs EVALSHA의 차이와 성능 최적화 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Lua Script의 실행 시간 제한과 대응 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Redis Transaction이 Rollback을 지원하지 않는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"11-모니터링--장애-대응",children:"11. 모니터링 & 장애 대응"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis의 주요 모니터링 메트릭은?"}),"\n",(0,r.jsx)(n.li,{children:"INFO 명령어로 어떤 정보를 확인할 수 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"메모리 사용률이 급증할 때 원인을 찾는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Connection이 계속 증가할 때 어떻게 대응하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Latency가 갑자기 증가했을 때 디버깅 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 메모리 사용량을 분석하는 도구는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Intrinsic Latency vs Network Latency를 어떻게 구분하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Fork 시 발생하는 Latency Spike를 어떻게 최소화하나요?"}),"\n",(0,r.jsx)(n.li,{children:"CLIENT LIST로 문제 있는 클라이언트를 찾는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Redis의 Blocked Clients 문제는 어떻게 해결하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"12-rate-limiting",children:"12. Rate Limiting"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis로 Rate Limiter를 구현하는 방법은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed Window vs Sliding Window의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Token Bucket 알고리즘을 Redis로 구현해보세요"}),"\n",(0,r.jsx)(n.li,{children:"Leaky Bucket vs Token Bucket의 차이는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Sliding Window Log vs Sliding Window Counter의 성능 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"분산 환경에서 정확한 Rate Limiting을 구현하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Redis Cell 모듈을 사용해보신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Rate Limiter의 메모리 최적화 방법은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"13-세션-관리",children:"13. 세션 관리"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis를 세션 스토어로 사용하는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Session Clustering 시 고려사항은?"}),"\n",(0,r.jsx)(n.li,{children:"Session TTL을 어떻게 설정하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Sticky Session vs Session Replication의 차이는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Multi-region 환경에서 세션 동기화 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"Session Fixation 공격을 어떻게 방지하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Redis와 JWT 중 어떤 것을 선택하고 왜 그랬나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"14-실시간-기능-구현",children:"14. 실시간 기능 구현"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Pub/Sub의 동작 원리를 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Pub/Sub의 한계는 무엇인가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis Stream vs Pub/Sub의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Consumer Group은 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Leaderboard를 Sorted Set으로 구현한 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Pub/Sub에서 메시지 유실 문제를 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Stream의 XREAD vs XREADGROUP의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Real-time Analytics를 Redis로 구현한 사례가 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"15-보안",children:"15. 보안"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis의 기본 보안 설정은?"}),"\n",(0,r.jsx)(n.li,{children:"requirepass는 충분히 안전한가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"ACL을 설정해보신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"RENAME-COMMAND를 사용하는 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Protected Mode는 무엇인가요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Redis에 Encryption at Rest를 적용하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"TLS/SSL을 설정해보신 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Command Filtering 전략은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"16-실제-장애-사례-기반",children:"16. 실제 장애 사례 기반"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'"Lua Script가 무한 루프에 빠져서 Redis가 멈췄습니다. 어떻게 대응하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Fork 실패로 RDB snapshot을 만들 수 없습니다. 원인과 해결책은?"'}),"\n",(0,r.jsx)(n.li,{children:'"갑자기 모든 Redis 요청이 timeout 됩니다. 어떻게 디버깅하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"메모리는 충분한데 OOM이 발생합니다. 가능한 원인들은?"'}),"\n",(0,r.jsx)(n.li,{children:'"Replication Lag이 계속 증가합니다. 어떻게 해결하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"특정 시간에만 Redis 성능이 급격히 떨어집니다. 원인을 찾아보세요"'}),"\n",(0,r.jsx)(n.li,{children:'"Master와 Slave의 데이터가 불일치합니다. 어떻게 감지하고 복구하나요?"'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"17-아키텍처-설계",children:"17. 아키텍처 설계"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'"월 1억 명이 사용하는 서비스의 Redis 아키텍처를 설계해주세요"'}),"\n",(0,r.jsx)(n.li,{children:'"Multi-region 환경에서 Redis 구성 전략은?"'}),"\n",(0,r.jsx)(n.li,{children:'"Redis를 Primary DB로 사용할 수 있나요? 고려사항은?"'}),"\n",(0,r.jsx)(n.li,{children:'"Cache + Message Queue + Session Store를 모두 Redisë¡
1œ? 분리해야 하나요?"'}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"spring",children:"Spring"}),"\n",(0,r.jsx)(n.h3,{id:"1-spring-core-ioc-di-aop",children:"1. Spring Core (IoC, DI, AOP)"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"@Component, @Service, @Repository의 차이는 단순히 의미적인 차이인가요?"}),"\n",(0,r.jsx)(n.li,{children:"순환 참조가 발생했을 때 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Autowired vs 생성자 주입, 실무에서 어떤 것을 선택하나요?"}),"\n",(0,r.jsx)(n.li,{children:"ApplicationContext와 BeanFactory의 차이는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Bean의 생명주기를 설명하고, 각 단계에서 할 수 있는 작업은?"}),"\n",(0,r.jsx)(n.li,{children:"@PostConstruct vs InitializingBean vs @Bean(initMethod), 언제 무엇을 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"같은 타입의 Bean이 여러 개일 때 어떻게 주입받나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Primary vs @Qualifier의 선택 기준은?"}),"\n",(0,r.jsx)(n.li,{children:"Prototype Bean을 Singleton Bean에 주입하면 어떻게 되나요?"}),"\n",(0,r.jsx)(n.li,{children:"AOP의 Proxy 방식(JDK Dynamic Proxy vs CGLIB)의 차이와 성능 영향은?"}),"\n",(0,r.jsx)(n.li,{children:"@Transactional이 private 메서드에서 동작하지 않는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"BeanPostProcessor를 직접 구현해본 적 있나요? 어떤 경우에 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Async의 내부 동작 원리와 Thread Pool 설정 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"ApplicationContext를 여러 개 계층적으로 구성한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Lazy Initialization의 장단점과 실무 적용 사례는?"}),"\n",(0,r.jsx)(n.li,{children:"AOP에서 this vs target의 차이와 self-invocation 문제는?"}),"\n",(0,r.jsx)(n.li,{children:"Around Advice에서 ProceedingJoinPoint를 proceed() 하지 않으면?"}),"\n",(0,r.jsx)(n.li,{children:"AspectJ Weaving (Compile-time, Load-time) vs Spring AOP의 선택 기준은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"2-spring-boot",children:"2. Spring Boot"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Springê³¼ Spring Boot의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Auto Configuration은 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"application.yml vs application.properties, 어떤 것을 선택하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"@SpringBootApplication이 하는 일을 상세히 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Profile을 어떻게 관리하나요? (dev, staging, prod)"}),"\n",(0,r.jsx)(n.li,{children:"외부 설정을 주입받는 여러 방법(@Value, @ConfigurationProperties)의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Spring Boot Actuator로 어떤 메트릭을 모니터링하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Custom Auto Configuration을 만들어본 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Conditional Annotation들(@ConditionalOnProperty 등)을 활용한 사례는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Spring Boot의 Graceful Shutdown은 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Embedded Tomcat vs External Tomcat, 언제 무엇을 선택하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Spring Boot 애플리케이션의 시작 시간을 최적화하는 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"Layered JAR는 무엇이고 왜 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Spring Native(GraalVM)를 고려해본 적 있나요? 장단점은?"}),"\n",(0,r.jsx)(n.li,{children:"FailureAnalyzer를 커스터마이징해본 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"3-spring-mvc--webflux",children:"3. Spring MVC / WebFlux"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"DispatcherServlet의 동작 흐름을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"@RestController vs @Controller의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"@RequestBody vs @ModelAttribute의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"ResponseEntity를 사용하는 이유는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Interceptor vs Filter vs AOP의 차이와 사용 시나리오는?"}),"\n",(0,r.jsx)(n.li,{children:"HandlerMethodArgumentResolver를 직접 구현해본 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"MessageConverter는 어떻게 동작하나요? (Jackson, Gson 등)"}),"\n",(0,r.jsx)(n.li,{children:"Content Negotiation은 어떻게 처리되나요?"}),"\n",(0,r.jsx)(n.li,{children:"Validation을 어디서 수행하나요? (@Valid, @Validated 차이)"}),"\n",(0,r.jsx)(n.li,{children:"CORS는 어떻게 설정하고, Preflight는 언제 발생하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"WebFlux와 MVC를 선택하는 기준은? 실제로 WebFlux를 프로덕션에 적용해보셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"Reactive Stream의 Backpressure를 어떻게 처리하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Thread-per-request vs Event Loop, 각각의 장단점은?"}),"\n",(0,r.jsx)(n.li,{children:"WebClient vs RestTemplate, 성능 차이는 얼마나 되나요?"}),"\n",(0,r.jsx)(n.li,{children:"Servlet 3.0의 Async Processing을 사용해본 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"SSE(Server-Sent Events)를 구현한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"WebSocket + STOMP를 사용한 실시간 통신 구현 경험은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"4-spring-data-jpa",children:"4. Spring Data JPA"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"JPA의 영속성 컨텍스트란?"}),"\n",(0,r.jsx)(n.li,{children:"1ì°¨ 캐시와 2ì°¨ 캐시의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Eager Loading vs Lazy Loading, 언제 무엇을 사용하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"N+1 문제를 경험하신 적 있나요? 어떻게 해결하
1셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Query vs QueryDSL vs Criteria API, 각각의 장단점은?"}),"\n",(0,r.jsx)(n.li,{children:"@EntityGraph를 사용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Dirty Checking은 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"save() 메서드는 내부적으로 어떻게 동작하나요? (isNew() 판단)"}),"\n",(0,r.jsx)(n.li,{children:"@ManyToOne에서 FetchType.EAGER를 사용하면 안 되는 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Pagination 성능 최적화 방법은? (Offset vs Cursor)"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"JPA에서 Batch Insert는 어떻게 최적화하나요?"}),"\n",(0,r.jsx)(n.li,{children:"OSIV(Open Session In View)의 문제점과 해결 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"QueryDSL의 동적 쿼리 최적화 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Transactional(readOnly=true)가 성능에 미치는 영향은?"}),"\n",(0,r.jsx)(n.li,{children:"엔티티를 DTO로 변환하는 시점과 전략은? (Mapper, MapStruct 등)"}),"\n",(0,r.jsx)(n.li,{children:"Hibernate의 2ì°¨ 캐시(EhCache, Redis) 설정 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Pessimistic Lock vs Optimistic Lock, 실무에서의 선택 기준은?"}),"\n",(0,r.jsx)(n.li,{children:"JPA에서 Native Query를 사용할 때 주의사항은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"5-transaction-management",children:"5. Transaction Management"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"@Transactional은 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Checked Exception vs Unchecked Exception, 어떤 것이 롤백되나요?"}),"\n",(0,r.jsx)(n.li,{children:"Propagation의 REQUIRED vs REQUIRES_NEW의 차이는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"트랜잭션이 너무 길면 어떤 문제가 발생하나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Transactional이 동작하지 않는 경우들을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Isolation Level을 변경해본 경험이 있나요? 언제 변경하나요?"}),"\n",(0,r.jsx)(n.li,{children:"분산 트랜잭션(2PC, Saga)을 구현해본 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"TransactionSynchronization을 사용해본 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Spring의 트랜잭션 동기화는 어떻게 구현되어 있나요? (ThreadLocal)"}),"\n",(0,r.jsx)(n.li,{children:"트랜잭션 내에서 외부 API를 호출하면 어떤 문제가 생기나요?"}),"\n",(0,r.jsx)(n.li,{children:"TransactionTemplate vs @Transactional, 언제 무엇을 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Programmatic Transaction Management가 필요한 경우는?"}),"\n",(0,r.jsx)(n.li,{children:"트랜잭션 커밋 후에 특정 작업을 수행하려면? (@TransactionalEventListener)"}),"\n",(0,r.jsx)(n.li,{children:"JTA를 사용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Seata, Atomikos 같은 분산 트랜잭션 라이브러리를 사용해보셨나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"6-spring-security",children:"6. Spring Security"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Spring Security의 인증/인가 흐름을 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Filter Chain은 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"JWT 인증을 구현한 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"SecurityContext는 어떻게 관리되나요? (ThreadLocal)"}),"\n",(0,r.jsx)(n.li,{children:"Session vs Token 기반 인증의 장단점은?"}),"\n",(0,r.jsx)(n.li,{children:"CSRF 방어는 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"OAuth2 로그인을 구현한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Method Security (@PreAuthorize, @Secured)는 언제 사용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Password Encoder 선택 기준은? (BCrypt, SCrypt, Argon2)"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"JWT Refresh Token 전략을 어떻게 설계하셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"Stateless 인증 환경에서 사용자 권한 변경 시 ì
1–´ë–»ê²Œ 처리하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Spring Security에서 Custom AuthenticationProvider를 만든 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Multi-tenancy 환경에서 Security를 어떻게 구성하나요?"}),"\n",(0,r.jsx)(n.li,{children:"WebFlux Security와 MVC Security의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Rate Limiting을 Spring Security에 통합한 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"7-성능-최적화",children:"7. 성능 최적화"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Spring 애플리케이션의 성능 병목을 어떻게 찾나요?"}),"\n",(0,r.jsx)(n.li,{children:"Connection Pool 크기는 어떻게 설정하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Thread Pool 크기 설정 전략은? (Tomcat, @Async)"}),"\n",(0,r.jsx)(n.li,{children:"Lazy Initialization이 시작 시간에 미치는 영향은?"}),"\n",(0,r.jsx)(n.li,{children:"@Cacheable을 어떻게 활용하나요? (Redis, EhCache)"}),"\n",(0,r.jsx)(n.li,{children:"HTTP Client의 Keep-Alive 설정 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"RestTemplate vs WebClient, 성능 테스트 결과는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"JVM 튜닝 경험이 있나요? (Heap, GC 설정)"}),"\n",(0,r.jsx)(n.li,{children:"Spring Boot 애플리케이션의 메모리 누수를 어떻게 찾나요?"}),"\n",(0,r.jsx)(n.li,{children:"Reactive Programming으로 전환했을 때 성능 개선 효과는?"}),"\n",(0,r.jsx)(n.li,{children:"Database Connection Pool 고갈 문제를 어떻게 해결하나요?"}),"\n",(0,r.jsx)(n.li,{children:"API 응답 시간을 10ë°° 개선한 경험을 구체적으로 설명해주세요"}),"\n",(0,r.jsx)(n.li,{children:"Virtual Thread(Project Loom)를 고려해보셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"Netty의 EventLoop 튜닝 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"8-테스팅",children:"8. 테스팅"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"@SpringBootTest vs @WebMvcTest의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Mocking은 언제 사용하나요? (Mockito)"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"TestContainers를 사용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"@DataJpaTest에서는 어떤 Bean들이 로드되나요?"}),"\n",(0,r.jsx)(n.li,{children:"테스트 격리(Test Isolation)는 어떻게 보장하나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Transactional이 테스트에서 어떻게 동작하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Integration Test vs Unit Test의 비율은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"테스트 성능을 개선하는 방법은? (Context Caching)"}),"\n",(0,r.jsx)(n.li,{children:"Fixture를 어떻게 관리하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Contract Testing(Pact)을 도입한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Chaos Engineering을 Spring 환경에 적용해보셨나요?"}),"\n",(0,r.jsx)(n.li,{children:"Embedded Redis/Kafka를 테스트에 사용한 경험은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"9-비동기-처리--스케줄링",children:"9. 비동기 처리 & 스케줄링"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"@Async의 동작 원리는?"}),"\n",(0,r.jsx)(n.li,{children:"@Scheduled는 어떻게 동작하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"CompletableFuture를 Spring에서 어떻게 활용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"@Async 메서드에서 Exception이 발생하면?"}),"\n",(0,r.jsx)(n.li,{children:"ShedLock을 사용한 분산 스케줄링 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Quartz Scheduler vs Spring @Scheduled, 언제 무엇을 선택하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"대용량 배치 처리를 어떻게 최적화하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Spring Batch vs Spring Cloud Data Flow의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Event-Driven Architecture를 Spring으로 구현한 경험은?"}),"\n",(0,r.jsx)(n.li,{children:"Kafka/RabbitMQ와 Spring의 통합 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"TaskExecutor의 종류와 선택 기준은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"10-api-설계--버전관리",children:"10. API 설계 & 버전관리"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"REST API 설계 원칙은?"}),"\n",(0,r.jsx)(n.li,{children:"HTTP Status Code는 어떻게 선택하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"API 버전 관리 전략은? (URI vs Header vs Query Parameter)"}),"\n",(0,r.jsx)(n.li,{children:"API Rate Limiting은 어떻게 구현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"HATEOAS를 적용해본 적 있나요?"}
1),"\n",(0,r.jsx)(n.li,{children:"OpenAPI(Swagger) 문서 자동화 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"API Gateway 패턴을 적용한 경험은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"GraphQL vs REST, 실무에서의 선택 기준은?"}),"\n",(0,r.jsx)(n.li,{children:"API Deprecation 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"Backward Compatibility를 어떻게 유지하나요?"}),"\n",(0,r.jsx)(n.li,{children:"gRPC를 Spring과 통합한 경험이 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"11-에러-핸들링--로깅",children:"11. 에러 핸들링 & 로깅"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"@ExceptionHandler vs @ControllerAdvice의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"표준 에러 응답 형식을 어떻게 설계하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"전역 예외 처리 전략은?"}),"\n",(0,r.jsx)(n.li,{children:"로깅 레벨(DEBUG, INFO, WARN, ERROR)을 어떻게 설정하나요?"}),"\n",(0,r.jsx)(n.li,{children:"MDC(Mapped Diagnostic Context)를 활용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Request ID를 추적하는 방법은?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Circuit Breaker(Resilience4j)를 적용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Structured Logging을 구현한 방법은?"}),"\n",(0,r.jsx)(n.li,{children:"ELK Stack과 Spring Boot의 통합 경험은?"}),"\n",(0,r.jsx)(n.li,{children:"Sentry, Datadog 같은 APM 도구 연동 경험은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"12-클라우드--컨테이너",children:"12. 클라우드 & 컨테이너"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Docker에서 Spring Boot를 실행할 때 주의사항은?"}),"\n",(0,r.jsx)(n.li,{children:"Health Check Endpoint는 어떻게 구현하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Kubernetes에서 Spring Boot 배포 시 설정은?"}),"\n",(0,r.jsx)(n.li,{children:"12 Factor App 원칙을 어떻게 적용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Config Server를 사용한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Service Discovery(Eureka, Consul)를 사용해보셨나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Blue-Green vs Canary 배포를 어떻게 구현하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Spring Cloud Gateway vs Netflix Zuul의 차이는?"}),"\n",(0,r.jsx)(n.li,{children:"Distributed Tracing(Zipkin, Jaeger)을 적용한 경험은?"}),"\n",(0,r.jsx)(n.li,{children:"Multi-region 배포 시 고려사항은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"13-멀티모듈--아키텍처",children:"13. 멀티모듈 & 아키텍처"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"멀티모듈 프로젝트의 장점은?"}),"\n",(0,r.jsx)(n.li,{children:"계층형 아키텍처 vs 헥사고날 아키텍처의 차이는?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"공통 모듈은 어떻게 설계하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Domain 모듈과 Infrastructure 모듈의 의존성 방향은?"}),"\n",(0,r.jsx)(n.li,{children:"CQRS 패턴을 적용해본 적 있나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"DDD(Domain-Driven Design)를 Spring에 어떻게 적용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"Event Sourcing을 구현한 경험이 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Modular Monolith를 고려한 적 있나요?"}),"\n",(0,r.jsx)(n.li,{children:"Microservices로 전환한 경험과 어려움은?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"14-실제-장애-사례-기반",children:"14. 실제 장애 사례 기반"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'"OutOfMemoryError가 발생했습니다. 어떻게 원인을 찾고 해결하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Connection Pool이 고갈되어 서비스가 멈췄습니다. 원인과 대응 방법은?"'}),"\n",(0,r.jsx)(n.li,{children:'"배포 후 트랜잭션이 커밋되지 않는 현상이 발생했습니다. 어떻게 디버깅하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"@Transactional이 동작하지 않아 데이터 정합성 문제가 발생했습니다. 가능한 원인들은?"'}),"\n",(0,r.jsx)(n.li,{children:'"특정 API만 응답 시간이 10초 이상 걸립니다. 어떻게 원인을 찾나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Lazy Loading으로 인한 LazyInitializationException이 발생했습니다. 해결 방법은?"'}),"\n",(0,r.jsx)(n.li,{children:'"동시에 같은 데이터를 수정하면서 Lost Update가 발생했습니다. 어떻게 방지하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Batch Job이 실행 중 메모리가 부족해집니다. 어떻게 최적화하나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Circuit이 Open 상태로 계속 유지됩니다. 어떻게 복구하나요?"'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"15-코드-품질--설계",children:"15. 코드 품질 & 설계"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"기본:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"SOLID 원칙을 Spring에서 어떻게 적용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"DTO vs Entity, 어떻게 변환하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"중급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Strategy Pattern을 Spring Bean으로 구현한 경험은?"}),"\n",(0,r.jsx)(n.li,{children:"Mapper 구현 방법은? (수동 vs ModelMapper vs MapStruct)"}),"\n",(0,r.jsx)(n.li,{children:"Validation을 어디에서 수행하나요? (Controller, Service, Domain)"}),"\n",(0,r.jsx)(n.li,{children:"Lombok의 장단점은? 프로덕션에서 사용하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"고급:"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Anemic Domain Model vs Rich Domain Model의 선택 기준은?"}),"\n",(0,r.jsx)(n.li,{children:"Value Object를 어떻게 활용하나요?"}),"\n",(0,r.jsx)(n.li,{children:"불변 객체를 선호하는 이유는?"}),"\n",(0,r.jsx)(n.li,{children:"Functional Programming 스타일을 Java/Spring에 어떻게 적용하나요?"}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"16-성능-측정--프로파일링",children:"16. 성능 측정 & 프로파일링"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'"Profiler(JProfiler, VisualVM, Async-profiler)를 사용한 경험이 있나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Thread Dump를 분석해본 적 있나요? 어떤 정보를 얻을 수 있나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Heap Dump를 분석하는 방법은?"'}),"\n",(0,r.jsx)(n.li,{children:'"JMeter, Gatling으로 부하 테스트를 진행한 경험은?"'}),"\n",(0,r.jsx)(n.li,{children:'"성능 테스트 결과를 어떻게 해석하고 개선하나요?"'}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"17-최신-기술--트렌드",children:"17. 최신 기술 & 트렌드"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:'"Java 17/21의 새로운 기능을 프로젝트에 적용해보셨나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Spring Boot 3.x로 마이그레이션한 경험이 있나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Virtual Threads를 적용할 계획이 있나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Spring AOT와 Native Image를 고려한 적 있나요?"'}),"\n",(0,r.jsx)(n.li,{children:'"Kotlin + Spring을 고려해보셨나요?"'}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"java",children:"Java"}),"\n",(0,r.jsx)(n.p,{children:"Java 면접에서 출제 빈도가 높은 핵심 질문들을 정리해드리겠습니다."}),"\n",(0,r.jsx)(n.h3,{id:"java-기본-개념",children:(0,r.jsx)(n.strong,{children:"Java 기본 개념"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java의 주요 특징과 장단점에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JVM(Java Virtual Machine)의 구조와 동작 원리에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java 프로그램의 컴파일 및 실행 과정에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JDK, JRE, JVM의 차이점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"객체지향-프로그래밍oop",children:(0,r.jsx)(n.strong,{children:"객체지향 프로그래밍(OOP)"})}),"\n",(0,r.jsxs)(n.ol,{start:"5",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"객체지향 프로그래밍의 4대 특징(캡슐화, 상속, 추상화, 다형성)에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Overloading과 Overriding의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"추상 클래스(Abstract Class)와 인터페이스(Interface)의 차이점은 무엇이며, 각각 언제 사용하나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"static 메서드는 오버라이딩이 가능한가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"메모리-관리",children:(0,r.jsx)(n.strong,{children:"메모리 관리"})}),"\n",(0,r.jsxs)(n.ol,{start:"9",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JVM의 Runtime Data Area 구조에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Heap 영역과 Stack 영역의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"지역변수, 인스턴스 변수, 클래스 변수는 각각 메모리의 어느 영역에 저장되나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Garbage Collection(GC)이란 무엇이며, 어떻게 동작하나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Minor GC와 Major GC(Full GC)의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Stop-The-World 현상이란 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"대표적인 GC 알고리즘들의 종류와 특징을 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Mark and Sweep 알고리즘에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java에서 메모리 누수(Memory Leak)가 발생할 수 있는 상황은 어떤 것들이 있나요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"자료형과-변수",children:(0,r.jsx)(n.strong,{children:"자료형과 변수"})}),"\n",(0,r.jsxs)(n.ol,{start:"18",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Wrapper Class란 무엇이며, Boxing과 Unboxing은 언제 발생하나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"String, StringBuffer, StringBuilder의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"String 객
1체가 불변(Immutable)으로 설계된 이유는 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"String Pool에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"== 연산자와 equals() 메서드의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"equals()를 재정의할 때 hashCode()도 함께 재정의해야 하는 이유는 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"final 키워드가 변수, 메서드, 클래스에 사용될 때 각각 어떤 의미를 가지나요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"예외-처리",children:(0,r.jsx)(n.strong,{children:"예외 처리"})}),"\n",(0,r.jsxs)(n.ol,{start:"26",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Error와 Exception의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Checked Exception과 Unchecked Exception의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"try-catch-finally 구문의 동작 순서를 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"try-with-resources 구문이란 무엇이며, 어떤 장점이 있나요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"제네릭generic",children:(0,r.jsx)(n.strong,{children:"제네릭(Generic)"})}),"\n",(0,r.jsxs)(n.ol,{start:"30",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"제네릭(Generic)이란 무엇이며, 사용하는 이유는 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"제네릭의 타입 소거(Type Erasure)란 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"와일드카드(Wildcard)의 종류와 각각의 차이점에 대해 설명해주세요."})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"컬렉션-프레임워크",children:(0,r.jsx)(n.strong,{children:"컬렉션 프레임워크"})}),"\n",(0,r.jsxs)(n.ol,{start:"33",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"List, Set, Map 인터페이스의 주요 특징과 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"ArrayList와 LinkedList의 차이점과 각각의 시간 복잡도에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"ArrayList는 내부적으로 크기를 어떻게 조절하나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"HashMap의 동작 원리와 해시 충돌 해결 방법에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"HashMap, HashTable, ConcurrentHashMap의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"HashSet이 중복을 제거하는 원리에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"fail-fast Iterator와 fail-safe Iterator의 차이점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"람다와-스트림",children:(0,r.jsx)(n.strong,{children:"람다와 스트림"})}),"\n",(0,r.jsxs)(n.ol,{start:"40",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"람다 표현식(Lambda Expression)이란 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"함수형 인터페이스(Functional Interface)란 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Stream API의 특징과 장점에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Stream의 중간 연산과 최종 연산의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"map()과 flatMap()의 차이점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"멀티스레딩",children:(0,r.jsx)(n.strong,{children:"멀티스레딩"})}),"\n",(0,r.jsxs)(n.ol,{start:"45",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"프로세스와 스레드의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"멀티스레딩 환경의 장단점에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java에서 스레드를 생성하는 방법들에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java의 동기화(Synchronized) 키워드에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"volatile 키워드의 역할과 언제 사용해야 하는지 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"데드락(Deadlock)이란 무엇이며, 발생 조건 4가지는 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Thread-Safe한 프로그램을 작성하기 위한 방법에는 어떤 것들이 있나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Callable과 Runnable 인터페이스의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"ExecutorService 프레임워크에 대해 설명해주세요."})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"java-8-주요-기능",children:(0,r.jsx)(n.strong,{children:"Java 8+ 주요 기능"})}),"\n",(0,r.jsxs)(n.ol,{start:"54",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java 8에서 추가된 주요 기능들에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Optional이란 무엇이며, 사용하는 이유는 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"인터페이스의 Default Method란 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Java 8의 Date/Time API가 기존 방식(Date, Calendar)과 다른 점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"클래스-로딩",children:(0,r.jsx)(n.strong,{children:"클래스 로딩"})}),"\n",(0,r.jsxs)(n.ol,{start:"58",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"클래스 로더(ClassLoader)의 역할은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JVM의 클래스 로딩 과정(Loading, Linking, Initialization)에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"ClassNotFoundException과 NoClassDefFoundError의 차이점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"성능과-최적화",children:(0,r.jsx)(n.strong,{children:"성능과 최적화"})}),"\n",(0,r.jsxs)(n.ol,{start:"61",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"리플렉션(Reflection)이란 무엇이며, 사용 시 주의할 점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"자바 직렬화(Serialization)란 무엇이며, 언제 사용하나요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"transient 키워드의 역할은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"얕은 복사와 깊은 복사의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"불변(Immutable) 객체의 장점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"기타-중요-개념",children:(0,r.jsx)(n.strong,{children:"기타 중요 개념"})}),"\n",(0,r.jsxs)(n.ol,{start:"66",children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"JIT 컴파일러의 역할과 동작 방식에 대해 설명해주세요."})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"정적 바인딩과 동적 바인딩의 차이점은 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"Marker Interface란 무엇이며, 대표적인 예시는 무엇인가요?"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.strong,{children:"컴파일 타임(Compile Time)과 런타임(Runtime)의 차이점은 무엇인가요?"})}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"출처",children:(0,r.jsx)(n.strong,{children:"출처"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://velog.io/@ka0ka0ka/1-3d8vtbh5",children:"https://velog.io/@ka0ka0ka/1-3d8vtbh5"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://smjeon.dev/etc/interview-question/",children:"https://smjeon.dev/etc/interview-question/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-java.html",children:"https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-java.html"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/ksundong/backend-interview-question",children:"https://github.com/ksundong/backend-interview-question"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://johngrib.github.io/wiki/jvm-memory/",children:"https://johngrib.github.io/wiki/jvm-memory/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://github.com/hongcheol/CS-study/issues/138",children:"https://github.com/hongcheol/CS-study/issues/138"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://devfoxstar.github.io/java/technical-interview/",children:"https://devfoxstar.github.io/java/technical-interview/"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS1626582373",children:"https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS1626582373"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"이 질문들은 신입부터 경력까지 공통적으로 많이 나오는 질문들입니다. 각 질문에 대해 명확하게 답변할 수 있도록 준비하시면 좋을 것 같습니다."})]})}let l={MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,s.a)(),e.components);return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(_createMdxContent,{...e})}):_createMdxContent(e)},pageOpts:{filePath:"pages/blog/anki/next-step.mdx",route:"/blog/anki/next-step",pageMap:[{kind:"Meta",data:{"java-and-spring":{type:"page",title:"Spring"},etc:{type:"page",title:"Etc Programming"},algorithm:{type:"page",title:"Algorithm"},theory:{type:"page",title:"Theory"},"js-framework":{type:"page",title:"Node"},docs:{type:"page",title:"Docs"},blog:{type:"page",title:"Blog"},index:{type:"page",title:"Introduce"}}},{kind:"Folder",name:"algorithm",route:"/algorithm",children:[{kind:"Meta",data:{"search-algorithm-complete-guide":"탐색 알고리즘 완전 정복",lcs:"LCS","prefix-sum":"누적합",comb
1ination:"조합과 순열","sleve-of-eratosthenes":"에라토스테네스의 체",backtracking:"백트래킹","python-grammar":"파이썬 문법",list:"List",queue:"큐와 스택","hash-table":"해시 테이블",tree:"트리",graph:"그래프",dp:"Dynamic Programming",dijkstra:"Dijkstra",mst:"MST",sort:"정렬",search:"탐색",leetcode:"LeetCode",baekjoon:"백준",programmers:"프로그래머스",codetree:"코드트리",custom:"창작문제","next-step":"Next Step"}},{kind:"MdxPage",name:"backtracking",route:"/algorithm/backtracking"},{kind:"Folder",name:"baekjoon",route:"/algorithm/baekjoon",children:[{kind:"MdxPage",name:"13397",route:"/algorithm/baekjoon/13397"},{kind:"MdxPage",name:"15650",route:"/algorithm/baekjoon/15650"},{kind:"MdxPage",name:"1937",route:"/algorithm/baekjoon/1937"},{kind:"Meta",data:{1937:"욕심쟁이 판다",13397:"구간 나누기 2",15650:"N과 M (2)",python:"Python"}},{kind:"Folder",name:"python",route:"/algorithm/baekjoon/python",children:[{kind:"MdxPage",name:"1003",route:"/algorithm/baekjoon/python/1003"},{kind:"MdxPage",name:"1005",route:"/algorithm/baekjoon/python/1005"},{kind:"MdxPage",name:"1107",route:"/algorithm/baekjoon/python/1107"},{kind:"MdxPage",name:"1157",route:"/algorithm/baekjoon/python/1157"},{kind:"MdxPage",name:"1197",route:"/algorithm/baekjoon/python/1197"},{kind:"MdxPage",name:"12100",route:"/algorithm/baekjoon/python/12100"},{kind:"MdxPage",name:"13460",route:"/algorithm/baekjoon/python/13460"},{kind:"MdxPage",name:"14890",route:"/algorithm/baekjoon/python/14890"},{kind:"MdxPage",name:"14891",route:"/algorithm/baekjoon/python/14891"},{kind:"MdxPage",name:"15684",route:"/algorithm/baekjoon/python/15684"},{kind:"MdxPage",name:"15685",route:"/algorithm/baekjoon/python/15685"},{kind:"MdxPage",name:"16234",route:"/algorithm/baekjoon/python/16234"},{kind:"MdxPage",name:"1654",route:"/algorithm/baekjoon/python/1654"},{kind:"MdxPage",name:"1697",route:"/algorithm/baekjoon/python/1697"},{kind:"MdxPage",name:"1931",route:"/algorithm/baekjoon/python/1931"},{kind:"MdxPage",name:"2579",route:"/algorithm/baekjoon/python/2579"},{kind:"MdxPage",name:"2839",route:"/algorithm/baekjoon/python/2839"},{kind:"Meta",data:{1003:"피보나치 함수",1005:"ACM Craft",1107:"리모컨",1157:"단어 공부",1197:"최소 스패닝 트리",1654:"랜선 자르기",1697:"숨바꼭질",1931:"회의실 배정",2579:"계단 오르기",2839:"설탈 배달",12100:"2048 (Easy)",13460:"구슬 탈출 2",14890:"경사로",14891:"톱니 바퀴",15684:"사다리 조작",15685:"드래곤 커브",16234:"인구이동","baek-joon":"백준 사용법"}},{kind:"MdxPage",name:"baek-joon",route:"/algorithm/baekjoon/python/baek-joon"}]}]},{kind:"Folder",name:"codetree",route:"/algorithm/codetree",children:[{kind:"Meta",data:{"doubling-sequence-solution":"두 배까지 커지는 수열","calculating-change":"거스름돈 계산하기"}},{kind:"MdxPage",name:"calculating-change",route:"/algorithm/codetree/calculating-change"},{kind:"MdxPage",name:"doubling-sequence-solution",route:"/algorithm/codetree/doubling-sequence-solution"}]},{kind:"MdxPage",name:"combination",route:"/algorithm/combination"},{kind:"Folder",name:"custom",route:"/algorithm/custom",children:[{kind:"Meta",data:{"binary-conversion":"2진수 변환"}},{kind:"MdxPage",name:"binary-conversion",route:"/algorithm/custom/binary-conversion"}]},{kind:"MdxPage",name:"dijkstra",route:"/algorithm/dijkstra"},{kind:"MdxPage",name:"dp",route:"/algorithm/dp"},{kind:"MdxPage",name:"graph",route:"/algorithm/graph"},{kind:"MdxPage",name:"hash-table",route:"/algorithm/hash-table"},{kind:"MdxPage",name:"lcs",route:"/algorithm/lcs"},{kind:"Folder",name:"leetcode",route:"/algorithm/leetcode",children:[{kind:"MdxPage",name:"3sum",route:"/algorithm/leetcode/3sum"},{kind:"Meta",data:{java:"Java","n-queen":"N-Queen","extra-leetcode":"맞춘 문제들","valid-palindrome":"유효한 팰린드롬(자바)",candy:"Candy","network-delay":"Network Delay Time","lowest-common-ancestor":"가장 작은 조상","maximum-depth-of-binary-tree":"최대깊이","trapping-rain-water":"빗물 트래핑(틀림)","3sum":"세 수의 합(틀림)","product-of-array-except-self":"자신 제외 모든 곱(틀림)","add-two-numbers":"Add Two Numbers","number-of-islands":"Number of Islands(틀림)","shortest-path-in-binary-matrix":"Shortest Path in Binary Matrix(틀림)","climbing-stairs":"Climbing Stairs(틀림)","number-of-island":"Number of Island"}},{kind:"MdxPage",name:"add-two-numbers",route:"/algorithm/leetcode/add-two-numbers"},{kind:"MdxPage",name:"candy",route:"/algorithm/leetcode/candy"},{kind:"MdxPage",name:"climbing-stairs",route:"/algorithm/leetcode/climbing-stairs"},{kind:"MdxPage",name:"extra-leetcode",route:"/algorithm/leetcode/extra-leetcode"},{kind:"Folder",name:"java",route:"/algorithm/leetcode/java",children:[{kind:"Meta",data:{"longest-palindromic-substring":"가장 긴 팰린드롬 부분 문자열","group-anagrams":"그룹 애너그램","most-common-word":"가장 흔한 단어"}},{kind:"MdxPage",name:"group-anagrams",route:"/algorithm/leetcode/java/group-anagrams"},{kind:"MdxPage",name:"longest-palindromic-substring",route:"/algorithm/leetcode/java/longest-palindromic-substring"},{kind:"MdxPage",name:"most-common-word",route:"/algorithm/leetcode/java/most-common-word"}]},{kind:"MdxPage",name:"lowest-common-ancestor",route:"/algorithm/leetcode/lowest-common-ancestor"},{kind:"MdxPage",name:"maximum-depth-of-binary-tree",route:"/algorithm/leetcode/maximum-depth-of-binary-tree"},{kind:"MdxPage",name:"n-queen",route:"/algorithm/leetcode/n-queen"},{kind:"MdxPage",name:"network-delay",route:"/algorithm/leetcode/network-delay"},{kind:"MdxPage",name:"number-of-island",route:"/algorithm/leetcode/number-of-island"},{kind:"MdxPage",name:"product-of-array-except-self",route:"/algorithm/leetcode/product-of-array-except-self"},{kind:"MdxPage",name:"shortest-path-in-binary-matrix",route:"/algorithm/leetcode/shortest-path-in-binary-matrix"},{kind:"MdxPage",name:"trapping-rain-water",route:"/algorithm/leetcode/trapping-rain-water"},{kind:"MdxPage",name:"valid-palindrome",route:"/algorithm/leetcode/valid-palindrome"}]},{kind:"MdxPage",name:"list",route:"/algorithm/list"},{kind:"MdxPage",name:"mst",route:"/algorithm/mst"},{kind:"MdxPage",name:"next-step",route:"/algorithm/next-step"},{kind:"MdxPage",name:"prefix-sum",route:"/algorithm/prefix-sum"},{kind:"Folder",name:"programmers",route:"/algorithm/programmers",children:[{kind:"Meta",data:{java:"Java",python:"Python",sql:"SQL"}},{kind:"Folder",name:"java",route:"/algorithm/programmers/java",children:[{kind:"MdxPage",name:"12949",route:"/algorithm/programmers/java/12949"},{kind:"MdxPage",name:"150368",route:"/algorithm/programmers/java/150368"},{kind:"MdxPage",name:"17681",route:"/algorithm/programmers/java/17681"},{kind:"MdxPage",name:"17686",route:"/algorithm/programmers/java/17686"},{kind:"MdxPage",name:"42579",route:"/algorithm/programmers/java/42579"},{kind:"MdxPage",name:"42584",route:"/algorithm/programmers/java/42584"},{kind:"MdxPage",name:"42586",route:"/algorithm/programmers/java/42586"},{kind:"MdxPage",name:"42746",route:"/algorithm/programmers/java/42746"},{kind:"MdxPage",name:"42840",route:"/algorithm/programmers/java/42840"},{kind:"MdxPage",name:"42890",route:"/algorithm/programmers/java/42890"},{kind:"MdxPage",name:"60057",route:"/algorithm/programmers/java/60057"},{kind:"MdxPage",name:"64065",route:"/algorithm/programmers/java/64065"},{kind:"MdxPage",name:"67257",route:"/algorithm/programmers/java/67257"},{kind:"MdxPage",name:"68644",route:"/algorithm/programmers/java/68644"},{kind:"MdxPage",name:"72411",route:"/algorithm/programmers/java/72411"},{kind:"MdxPage",name:"72412",route:"/algorithm/programmers/java/72412"},{kind:"MdxPage",name:"76502",route:"/algorithm/programmers/java/76502"},{kind:"MdxPage",name:"81302",route:"/algorithm/programmers/java/81302"},{kind:"MdxPage",name:"81303",route:"/algorithm/programmers/java/81303"},{kind:"MdxPage",name:"92335",route:"/algorithm/programmers/java/92335"},{kind:"MdxPage",name:"92341",route:"/algorithm/programmers/java/92341"},{kind:"MdxPage",name:"92342",route:"/algorithm/programmers/java/92342"},{kind:"Meta",data:{12949:"행렬의 곱셈",17681:"비밀 지도",17686:"파일명 정렬",42579:"베스트 앨범",42584:"주식가격",42586:"기능개발",42746:"가장 큰 수",42840:"모의고사",42890:"후보키",60057:"문자열 압축",64065:"튜플",67257:"수식 최대화",68644:"두 개 뽑아서 더하기",72411:"메뉴 리뉴얼",72412:"순위 검색",76502:"괄호 회전하기",81302:"거리두기 확인하기",81303:"표 편집",92335:"k진수에서 소수 개수 구하기",92341:"주차 요금 계산",92342:"양궁대회",150368:"이모티콘 할인행사","failure-rate":"실패율","correct-parentheses":"올바른 괄호"}},{kind:"MdxPage",name:"correct-parentheses",route:"/algorithm/programmers/java/correct-parentheses"},{kind:"MdxPage",name:"failure-rate",route:"/algorithm/programmers/java/failure-rate"}]},{kind:"Folder",name:"python",route:"/algorithm/programmers/python",children:[{kind:"MdxPage",name:"118667",route:"/algorithm/programmers/python/118667"},{kind:"Meta",data:{118667:"두 큐의 합 같게 만들기","dart-game":"다트 게임","failure-rate":"실패율","press-keypad":"키패드 누르기","recommend-newid":"신규 아이디 추천",receiving_report_results:"신고 결과 받기","get-item":"아이템 줍기","donuts-and-bar-graphs":"도넛 차트와 막대 그래프","crossing-the-stepping-bridge":"징검다리 건너기","pccp-1":"PCCP 1번 붕대감기","personality-type-test":"성격 유형 검사","numeric-characters-and-english-word":"숫자 문자열과 영단어","delivery-and-collection-of-packages":"택배 배달과 수거하기","matrices-and-operations":"행렬과 연산","target-number":"타겟넘버",phoneketmon:"폰켓몬","phone-book":"전화번호 목록","the-largest-number":"가장 큰 수",process:"프로세스","stock-price":"주식 가격","mock-test":"모의고사","functional-development":"기능개발","programmers-etc":"Programmers Etc","receiving-report-results":"Receiving Report Results"}},{kind:"MdxPage",name:"crossing-the-stepping-bridge",route:"/algorithm/programmers/python/crossing-the-stepping-bridge"},{kind:"MdxPage",name:"dart-game",route:"/algorithm/programmers/python/dart-game"},{kind:"MdxPage",name:"delivery-and-collection-of-packages",route:"/algorithm/programmers/python/delivery-and-collection-of-packages"},{kind:"MdxPage",name:"donuts-and-bar-graphs",route:"/algorithm/programmers/python/donuts-and-bar-graphs"},{kind:"MdxPage",name:"failure-rate",route:"/algorithm/programmers/python/failure-rate"},{kind:"MdxPage",name:"functional-development",route:"/algorithm/programmers/python/functional-development"},{kind:"MdxPage",name:"get-item",route:"/algorithm/programmers/python/get-item"},{kind:"MdxPage",name:"matrices-and-operations",route:"/algorithm/programmers/python/matrices-and-operations"},{kind:"MdxPage",name:"mock-test",route:"/algorithm/programmers/python/mock-test"},{kind:"MdxPage",name:"numeric-characters-and-english-word",route:"/algorithm/programmers/python/numeric-characters-and-english-word"},{kind:"MdxPage",name:"pccp-1",route:"/algorithm/programmers/python/pccp-1"},{kind:"MdxPage",name:"personality-type-test",route:"/algorithm/programmers/python/personality-type-test"},{kind:"MdxPage",name:"phone-book",route:"/algorithm/programmers/python/phone-book"},{kind:"MdxPage",name:"phoneketmon",route:"/algorithm/programmers/python/phoneketmon"},{kind:"MdxPage",name:"press-keypad",route:"/algorithm/programmers/python/press-keypad"},{kind:"MdxPage",name:"process",route:"/algorithm/programmers/python/process"},{kind:"MdxPage",name:"programmers-etc",route:"/algorithm/programmers/python/programmers-etc"},{kind:"MdxPage",name:"receiving-report-results",route:"/algorithm/programmers/python/receiving-report-results"},{kind:"MdxPage",name:"recommend-newid",route:"/algorithm/programmers/python/recommend-newid"},{kind:"MdxPage",name:"stock-price",route:"/algorithm/programmers/python/stock-price"},{kind:"MdxPage",name:"target-number",route:"/algorithm/programmers/python/target-number"},{kind:"MdxPage",name:"the-largest-number",route:"/algorithm/programmers/python/the-largest-number"}]},{kind:"Folder",name:"sql",route:"/algorithm/programmers/sql",children:[{kind:"Meta",data:{most_favorite_restaurant:"즐겨찾기가 가장 많은 식당 정보"}},{kind:"MdxPage",name:"most_favorite_restaurant",route:"/algorithm/programmers/sql/most_favorite_restaurant"}]}]},{kind:"MdxPage",name:"python-grammar",route:"/algorithm/python-grammar"},{kind:"MdxPage",name:"queue",route:"/algorithm/queue"},{kind:"MdxPage",name:"search-algorithm-complete-guide",route:"/algorithm/search-algorithm-complete-guide",frontMatter:{title:"검색 알고리즘 완벽 가이드: Fuzzy Search, Trie, Aho-Corasick, 벡터 DB",description:"Fuzzy Search, Full Text Index, Trie, 아호코라식 알고리즘, 벡터 데이터베이스(HNSW, IVF)의 원리와 구현을 중학생도 이해할 수 있게 수학적 증명과 시각화로 설명합니다",date:"2025-12-11",tags:["알고리즘","search","trie","aho-corasick","vector-database","HNSW","IVF"]}},{kind:"MdxPage",name:"search",route:"/algorithm/search"},{kind:"MdxPage",name:"sleve-of-eratosthenes",route:"/algorithm/sleve-of-eratosthenes"},{kind:"MdxPage",name:"sort",route:"/algorithm/sort"},{kind:"MdxPage",name:"tree",route:"/algorithm/tree"}]},{kind:"Folder",name:"blog",route:"/blog",children:[{kind:"Meta",data:{cs:"컴퓨터 공학",finance:"금융 도메인",conference:"컨퍼런스",study:"스터디",linux:"리눅스 팁","lecture-review":"강의 리뷰","book-review":"책 리뷰",tools:"Tools","electronic-product":"전자제품 리뷰","ai-log":"AI",cpp:"C++",anki:"Anki","be-writer":"글쓰기","python-script":"Python Script","cover-letter":"자기소개서",portfolio:"Portfolio"}},{kind:"Folder",name:"ai-log",route:"/blog/ai-log",children:[{kind:"Meta",data:{"next-step":"Next Step",notebook:"메모장",basic:"Basic"}},{kind:"Folder",name:"basic",route:"/blog/ai-log/basic",children:[{kind:"Meta",data:{anaconda:"Anaconda"}},{kind:"MdxPage",name:"anaconda",route:"/blog/ai-log/basic/anaconda"}]},{kind:"MdxPage",name:"next-step",route:"/blog/ai-log/next-step"},{kind:"MdxPage",name:"notebook",route:"/blog/ai-log/notebook"}]},{kind:"Folder",name:"anki",route:"/blog/anki",children:[{kind:"Meta",data:{"next-step":"다음 단계",interview:"면접 질문 대비","operating-system":"운영체제","software-engineering":"소프트웨어 공학",
1spring:"Spring",java:"Java","java-problem":"Java 문제","database-internal":"데이터베이스 이론",database:"데이터베이스 문제","db-problem":"데이터베이스 문제",sql:"SQL 코테문제",redis:"Redis",rabbitmq:"RabbitMQ",ohksj77:"ohks 면접질문",network:"네트워크","computer-science":"컴퓨터 과학",architecture:"소프트웨어 아키텍처",python:"Python"}},{kind:"MdxPage",name:"architecture",route:"/blog/anki/architecture"},{kind:"MdxPage",name:"computer-science",route:"/blog/anki/computer-science"},{kind:"MdxPage",name:"database-internal",route:"/blog/anki/database-internal"},{kind:"MdxPage",name:"database",route:"/blog/anki/database"},{kind:"Folder",name:"db-problem",route:"/blog/anki/db-problem",children:[{kind:"MdxPage",name:"20251204-database-problem",route:"/blog/anki/db-problem/20251204-database-problem"},{kind:"MdxPage",name:"20251214-database-problem",route:"/blog/anki/db-problem/20251214-database-problem"},{kind:"MdxPage",name:"20251219-database-problem",route:"/blog/anki/db-problem/20251219-database-problem"},{kind:"Meta",data:{"20251204-database-problem":"20251204 데이터베이스 문제","20251214-database-problem":"20251214 데이터베이스 문제","20251219-database-problem":"20251219 데이터베이스 문제"}}]},{kind:"MdxPage",name:"interview",route:"/blog/anki/interview"},{kind:"Folder",name:"java-problem",route:"/blog/anki/java-problem",children:[{kind:"MdxPage",name:"20251212-java-problem",route:"/blog/anki/java-problem/20251212-java-problem"},{kind:"Meta",data:{"20251212-java-problem":"20251212 자바 문제"}}]},{kind:"MdxPage",name:"java",route:"/blog/anki/java"},{kind:"MdxPage",name:"network",route:"/blog/anki/network"},{kind:"MdxPage",name:"next-step",route:"/blog/anki/next-step"},{kind:"MdxPage",name:"ohksj77",route:"/blog/anki/ohksj77"},{kind:"MdxPage",name:"operating-system",route:"/blog/anki/operating-system"},{kind:"MdxPage",name:"python",route:"/blog/anki/python"},{kind:"MdxPage",name:"rabbitmq",route:"/blog/anki/rabbitmq"},{kind:"MdxPage",name:"redis",route:"/blog/anki/redis"},{kind:"MdxPage",name:"software-engineering",route:"/blog/anki/software-engineering"},{kind:"MdxPage",name:"spring",route:"/blog/anki/spring"},{kind:"MdxPage",name:"sql",route:"/blog/anki/sql"}]},{kind:"MdxPage",name:"be-writer",route:"/blog/be-writer"},{kind:"Folder",name:"book-review",route:"/blog/book-review",children:[{kind:"Meta",data:{"secret-of-the-underlying-computer":"컴퓨터 밑바닥의 비밀","headfirst-design-patterns":"헤드퍼스트 디자인 패턴",hexagonalarchitecturedesignandimplementation:"헥사고날 아키텍처 설계와 구현","clean-architecture-learning-in-the-making":"만들면서 배우는 클린 아키텍처","real-mysql":"리얼 MySQL","pragmatic-programming-for-java-spring":"자바 스프링 개발자를 위한 실용주의 프로그래밍","nginx-cookbook":"Nginx 쿡북"}},{kind:"MdxPage",name:"clean-architecture-learning-in-the-making",route:"/blog/book-review/clean-architecture-learning-in-the-making"},{kind:"MdxPage",name:"headfirst-design-patterns",route:"/blog/book-review/headfirst-design-patterns"},{kind:"MdxPage",name:"hexagonalarchitecturedesignandimplementation",route:"/blog/book-review/hexagonalarchitecturedesignandimplementation"},{kind:"MdxPage",name:"nginx-cookbook",route:"/blog/book-review/nginx-cookbook"},{kind:"MdxPage",name:"pragmatic-programming-for-java-spring",route:"/blog/book-review/pragmatic-programming-for-java-spring"},{kind:"Folder",name:"real-mysql",route:"/blog/book-review/real-mysql",children:[{kind:"MdxPage",name:"05-transaction-and-lcok",route:"/blog/book-review/real-mysql/05-transaction-and-lcok"},{kind:"MdxPage",name:"06-data-compress",route:"/blog/book-review/real-mysql/06-data-compress"},{kind:"MdxPage",name:"07-data-encryption",route:"/blog/book-review/real-mysql/07-data-encryption"},{kind:"MdxPage",name:"08-index",route:"/blog/book-review/real-mysql/08-index"},{kind:"MdxPage",name:"09-optimizer-hint",route:"/blog/book-review/real-mysql/09-optimizer-hint"},{kind:"MdxPage",name:"10-query-explain-plan",route:"/blog/book-review/real-mysql/10-query-explain-plan"},{kind:"Meta",data:{"05-transaction-and-lcok":"5장 트랜잭션과 잠금","06-data-compress":"6장 데이터 압축","07-data-encryption":"7장 데이터 암호화","08-index":"8장 인덱스","09-optimizer-hint":"9장 옵티마이저와 힌트","10-query-explain-plan":"10장 쿼리 실행 계획",deadlock:"Deadlock","mysql-index":"MySQL Index","basic-data-processing":"기본 데이터 처리",replication:"Replication",etc:"Etc"}},{kind:"MdxPage",name:"basic-data-processing",route:"/blog/book-review/real-mysql/basic-data-processing"},{kind:"MdxPage",name:"deadlock",route:"/blog/book-review/real-mysql/deadlock"},{kind:"MdxPage",name:"etc",route:"/blog/book-review/real-mysql/etc"},{kind:"MdxPage",name:"mysql-index",route:"/blog/book-review/real-mysql/mysql-index"},{kind:"MdxPage",name:"replication",route:"/blog/book-review/real-mysql/replication"}]},{kind:"Folder",name:"secret-of-the-underlying-computer",route:"/blog/book-review/secret-of-the-underlying-computer",children:[{kind:"Meta",data:{"sotuc-chapter-1":"프로그래밍 언어부터 프로그램 실행까지, 이렇게 진행된다.","sotuc-chapter-2":"Sotuc Chapter 2"}},{kind:"MdxPage",name:"sotuc-chapter-1",route:"/blog/book-review/secret-of-the-underlying-computer/sotuc-chapter-1"},{kind:"MdxPage",name:"sotuc-chapter-2",route:"/blog/book-review/secret-of-the-underlying-computer/sotuc-chapter-2"}]}]},{kind:"Folder",name:"conference",route:"/blog/conference",children:[{kind:"Meta",data:{"flutter-seoul":"플러터 서울","dev-fest-2024"
1:"Dev Fest 2024"}},{kind:"MdxPage",name:"dev-fest-2024",route:"/blog/conference/dev-fest-2024"},{kind:"MdxPage",name:"flutter-seoul",route:"/blog/conference/flutter-seoul"}]},{kind:"MdxPage",name:"cover-letter",route:"/blog/cover-letter"},{kind:"Folder",name:"cpp",route:"/blog/cpp",children:[{kind:"Meta",data:{index:"CPP 문법"}},{kind:"MdxPage",name:"index",route:"/blog/cpp"}]},{kind:"Folder",name:"cs",route:"/blog/cs",children:[{kind:"Meta",data:{"computer-orgranization":"컴퓨터 구조",database:"Database",ipie:"IPIE","software-architecture":"소프트웨어 아키텍처"}},{kind:"Folder",name:"computer-orgranization",route:"/blog/cs/computer-orgranization",children:[{kind:"Meta",data:{"compiler-and-interpreter":"Compiler & Interperter"}},{kind:"MdxPage",name:"compiler-and-interpreter",route:"/blog/cs/computer-orgranization/compiler-and-interpreter"}]},{kind:"Folder",name:"database",route:"/blog/cs/database",children:[{kind:"Meta",data:{sql:"SQL",mysql:"MySQL",redis:"Redis"}},{kind:"MdxPage",name:"mysql",route:"/blog/cs/database/mysql"},{kind:"Folder",name:"redis",route:"/blog/cs/database/redis",children:[{kind:"Meta",data:{"redis-session":"레디스 세션 관리","redis-index":"레디스 기본 사용법","redis-memory-policy":"레디스 메모리 정책"}},{kind:"MdxPage",name:"redis-index",route:"/blog/cs/database/redis/redis-index"},{kind:"MdxPage",name:"redis-memory-policy",route:"/blog/cs/database/redis/redis-memory-policy"},{kind:"MdxPage",name:"redis-session",route:"/blog/cs/database/redis/redis-session"}]},{kind:"MdxPage",name:"sql",route:"/blog/cs/database/sql"}]},{kind:"Folder",name:"ipie",route:"/blog/cs/ipie",children:[{kind:"Meta",data:{"usability-test":"사용성 테스트",diagram:"다이어그램"}},{kind:"MdxPage",name:"diagram",route:"/blog/cs/ipie/diagram"},{kind:"MdxPage",name:"usability-test",route:"/blog/cs/ipie/usability-test"}]},{kind:"Folder",name:"software-architecture",route:"/blog/cs/software-architecture",children:[{kind:"Meta",data:{pagination:"페이지 네이션","clean-code":"클린 코드","clean-architecture":"클린 아키텍쳐",oop:"객체지향 프로그래밍","design-pattern":"디자인 패턴",mvvm:"MVC vs MVP vs MVVM",tools:"Tools","immutable-data":"Immutable"}},{kind:"MdxPage",name:"clean-architecture",route:"/blog/cs/software-architecture/clean-architecture"},{kind:"MdxPage",name:"clean-code",route:"/blog/cs/software-architecture/clean-code"},{kind:"MdxPage",name:"design-pattern",route:"/blog/cs/software-architecture/design-pattern"},{kind:"MdxPage",name:"immutable-data",route:"/blog/cs/software-architecture/immutable-data"},{kind:"MdxPage",name:"mvvm",route:"/blog/cs/software-architecture/mvvm"},{kind:"MdxPage",name:"oop",route:"/blog/cs/software-architecture/oop"},{kind:"MdxPage",name:"pagination",route:"/blog/cs/software-architecture/pagination"}]}]},{kind:"Folder",name:"electronic-product",route:"/blog/electronic-product",children:[{kind:"Meta",data:{"nreal-air":"Nreal - Air"}},{kind:"MdxPage",name:"nreal-air",route:"/blog/electronic-product/nreal-air"}]},{kind:"Folder",name:"finance",route:"/blog/finance",children:[{kind:"Meta",data:{"financial-terminology":"금융 용어 정리"}},{kind:"MdxPage",name:"financial-terminology",route:"/blog/finance/financial-terminology"}]},{kind:"Folder",name:"lecture-review",route:"/blog/lecture-review",children:[{kind:"Meta",data:{"oop-foo":"실무 자바 개발을 위한 OOP와 핵심 디자인 패턴","white-ship-gof-design-pattern":"백기선 GoF 디자인 패턴","database-engineering":"데이터베이스 엔지니어링",resilience4j:"Resilience4j"}},{kind:"MdxPage",name:"database-engineering",route:"/blog/lecture-review/database-engineering"},{kind:"MdxPage",name:"oop-foo",route:"/blog/lecture-review/oop-foo"},{kind:"MdxPage",name:"resilience4j",route:"/blog/lecture-review/resilience4j"},{kind:"Folder",name:"white-ship-gof-design-pattern",route:"/blog/lecture-review/white-ship-gof-design-pattern",children:[{kind:"Meta",data:{index:"Index","behavioral-patterns":"Behavioral Patterns","
1structual-patterns":"Structural Patterns"}},{kind:"Folder",name:"behavioral-patterns",route:"/blog/lecture-review/white-ship-gof-design-pattern/behavioral-patterns",children:[{kind:"Meta",data:{"template-method":"Template Method",facade:"Facade"}},{kind:"MdxPage",name:"facade",route:"/blog/lecture-review/white-ship-gof-design-pattern/behavioral-patterns/facade"},{kind:"MdxPage",name:"template-method",route:"/blog/lecture-review/white-ship-gof-design-pattern/behavioral-patterns/template-method"}]},{kind:"MdxPage",name:"index",route:"/blog/lecture-review/white-ship-gof-design-pattern"},{kind:"Folder",name:"structual-patterns",route:"/blog/lecture-review/white-ship-gof-design-pattern/structual-patterns",children:[{kind:"Meta",data:{proxy:"Proxy"}},{kind:"MdxPage",name:"proxy",route:"/blog/lecture-review/white-ship-gof-design-pattern/structual-patterns/proxy"}]}]}]},{kind:"MdxPage",name:"linux",route:"/blog/linux"},{kind:"Folder",name:"portfolio",route:"/blog/portfolio",children:[{kind:"Meta",data:{questi:"Questi"}},{kind:"MdxPage",name:"questi",route:"/blog/portfolio/questi"}]},{kind:"MdxPage",name:"python-script",route:"/blog/python-script"},{kind:"Folder",name:"study",route:"/blog/study",children:[{kind:"Meta",data:{dingcodingco:"딩코딩코 스터디","someone-pooped-on-my-cs":"Someone pooped on my CS",infiniteloop:"무한루프 CS 스터디","woowa-course":"우아한테크코스","tech-dive":"Tech Dive",groom:"구름 핀테크 인턴쉽 풀스택"}},{kind:"Folder",name:"cs-study",route:"/blog/study/cs-study",children:[{kind:"Folder",name:"1",route:"/blog/study/cs-study/1",children:[{kind:"Meta",data:{systemcall:"시스템 콜","osi-7-layer":"OSI 7 계층","rdb-vs-nosql":"RDB vs NoSQL",jvm:"JVM",servlet:"Servlet"}},{kind:"MdxPage",name:"jvm",route:"/blog/study/cs-study/1/jvm"},{kind:"MdxPage",name:"osi-7-layer",route:"/blog/study/cs-study/1/osi-7-layer"},{kind:"MdxPage",name:"rdb-vs-nosql",route:"/blog/study/cs-study/1/rdb-vs-nosql"},{kind:"MdxPage",name:"servlet",route:"/blog/study/cs-study/1/servlet"},{kind:"MdxPage",name:"systemcall",route:"/blog/study/cs-study/1/systemcall"}]},{kind:"Folder",name:"11",route:"/blog/study/cs-study/11",children:[{kind:"MdxPage",name:"3-way-handshake",route:"/blog/study/cs-study/11/3-way-handshake"},{kind:"Meta",data:{"mutex-and-semaphore":"뮤텍스와 세마포어","db-join":"데이터베이스 조인","3-way-handshake":"3-way 핸드쉐이크",transactional:"@Transactional"}},{kind:"MdxPage",name:"db-join",route:"/blog/study/cs-study/11/db-join"},{kind:"MdxPage",name:"mutex-and-semaphore",route:"/blog/study/cs-study/11/mutex-and-semaphore"},{kind:"MdxPage",name:"transactional",route:"/blog/study/cs-study/11/transactional"}]},{kind:"Folder",name:"12",route:"/blog/study/cs-study/12",children:[{kind:"MdxPage",name:"4-way-handshacking",route:"/blog/study/cs-study/12/4-way-handshacking"},{kind:"Meta",data:{"threadpool-forkandjoin":"Thread Pool, Fork/Join","4-way-handshacking":"4 way handshacking","db-traffic":"DB 트래픽",oop:"OOP"}},{kind:"MdxPage",name:"db-traffic",route:"/blog/study/cs-study/12/db-traffic"},{kind:"MdxPage",name:"oop",route:"/blog/study/cs-study/12/oop"},{kind:"MdxPage",name:"threadpool-forkandjoin",route:"/blog/study/cs-study/12/threadpool-forkandjoin"}]},{kind:"Folder",name:"13",route:"/blog/study/cs-study/13",children:[{kind:"Meta",data:{deadlock:"데드락","ip-address":"IP 주소",dbcp:"DBCP","design-pattern-in-spring":"스프링 디자인 패턴",servlet:"서블릿"}},{kind:"MdxPage",name:"dbcp",route:"/blog/study/cs-study/13/dbcp"},{kind:"MdxPage",name:"deadlock",route:"/blog/study/cs-study/13/deadlock"},{kind:"MdxPage",name:"design-pattern-in-spring",route:"/blog/study/cs-study/13/design-pattern-in-spring"},{kind:"MdxPage",name:"ip-address",route:"/blog/study/cs-study/13/ip-address"},{kind:"MdxPage",name:"servlet",route:"/blog/study/cs-study/13/servlet"}]},{kind:"Folder",name:"14",route:"/blog/study/cs-study/14",children:[{kind:"Meta",data:{"cache-memory":"캐시 메모리",router:"라우터","db-locking":"데이터베이스 락",lambda:"Lambda","dispatcher-servelet":"디스패처 서블릿"}},{kind:"MdxPage",name:"cache-memory",route:"/blog/study/cs-study/14/cache-memory"},{kind:"MdxPage",name:"db-locking",route:"/blog/study/cs-study/14/db-locking"},{kind:"MdxPage",name:"dispatcher-servelet",route:"/blog/study/cs-study/14/dispatcher-servelet"},{kind:"MdxPage",name:"lambda",route:"/blog/study/cs-study/14/lambda"},{kind:"MdxPage",name:"router",route:"/blog/study/cs-study/14/router"}]},{kind:"Folder",name:"15",route:"/blog/study/cs-study/15",children:[{kind:"Meta",data:{"memory-allocation-and-fragmentation":"메모리 할당과 단편화","subnetmask-gateway":"서브넷 마스크와 게이트웨이","sql-injection":"SQL 인젝션","java-annotation":"자바 어노테이션",tomcat:"톰캣"}},{kind:"MdxPage",name:"java-annotation",route:"/blog/study/cs-study/15/java-annotation"},{kind:"MdxPage",name:"memory-allocation-and-fragmentation",route:"/blog/study/cs-study/15/memory-allocation-and-fragmentation"},{kind:"MdxPage",name:"sql-injection",route:"/blog/study/cs-study/15/sql-injection"},{kind:"MdxPage",name:"subnetmask-gateway",route:"/blog/study/cs-study/15/subnetmask-gateway"},{kind:"MdxPage",name:"tomcat",route:"/blog/study/cs-study/15/tomcat"}]},{kind:"Folder",name:"16",route:"/blog/study/cs-study/16",children:[{kind:"Meta",data:{"virtual-memory":"가상 메모리",dhcp:"DHCP","inno-db-engine":"Inno DB 엔진","string-string-builder
1-string-buffer":"String, StringBuilder, StringBuffer","servlet-filter-spring-interceptor":"서블릿 필터와 스프링 인터셉터"}},{kind:"MdxPage",name:"dhcp",route:"/blog/study/cs-study/16/dhcp"},{kind:"MdxPage",name:"inno-db-engine",route:"/blog/study/cs-study/16/inno-db-engine"},{kind:"MdxPage",name:"servlet-filter-spring-interceptor",route:"/blog/study/cs-study/16/servlet-filter-spring-interceptor"},{kind:"MdxPage",name:"string-string-builder-string-buffer",route:"/blog/study/cs-study/16/string-string-builder-string-buffer"},{kind:"MdxPage",name:"virtual-memory",route:"/blog/study/cs-study/16/virtual-memory"}]},{kind:"Folder",name:"17",route:"/blog/study/cs-study/17",children:[{kind:"Meta",data:{"segmentation-paging":"세그멘테이션과 페이징","type-url-in-browser":"브라우저에 URL을 입력하면 생기는 일","mysql-engine":"MySQL 엔진 아키텍처","java-version":"자바 8 vs 자바 11 vs 자바 17","data-model":"DTO, DAO, VO, Entity"}},{kind:"MdxPage",name:"data-model",route:"/blog/study/cs-study/17/data-model"},{kind:"MdxPage",name:"java-version",route:"/blog/study/cs-study/17/java-version"},{kind:"MdxPage",name:"mysql-engine",route:"/blog/study/cs-study/17/mysql-engine"},{kind:"MdxPage",name:"segmentation-paging",route:"/blog/study/cs-study/17/segmentation-paging"},{kind:"MdxPage",name:"type-url-in-browser",route:"/blog/study/cs-study/17/type-url-in-browser"}]},{kind:"Folder",name:"19",route:"/blog/study/cs-study/19",children:[{kind:"MdxPage",name:"AOP",route:"/blog/study/cs-study/19/AOP"},{kind:"Meta",data:{AOP:"AOP"}}]},{kind:"Folder",name:"2",route:"/blog/study/cs-study/2",children:[{kind:"Meta",data:{interrupt:"인터럽트","multiplexing-demultiplexing":"Multiplexing / Demultiplexing",schema:"스키마","garbage-collection":"가비지 컬렉션","dispatcher-servlet":"Dispatcher Servlet"}},{kind:"MdxPage",name:"dispatcher-servlet",route:"/blog/study/cs-study/2/dispatcher-servlet"},{kind:"MdxPage",name:"garbage-collection",route:"/blog/study/cs-study/2/garbage-collection"},{kind:"MdxPage",name:"interrupt",route:"/blog/study/cs-study/2/interrupt"},{kind:"MdxPage",name:"multiplexing-demultiplexing",route:"/blog/study/cs-study/2/multiplexing-demultiplexing"},{kind:"MdxPage",name:"schema",route:"/blog/study/cs-study/2/schema"}]},{kind:"Folder",name:"20",route:"/blog/study/cs-study/20",children:[{kind:"Meta",data:{"page-replace-algorithm":"페이지 교체 알고리즘",sop:"SOP 정책",redis:"Redis",optional:"Optional","ioc-di":"IoC/DI"}},{kind:"MdxPage",name:"ioc-di",route:"/blog/study/cs-study/20/ioc-di"},{kind:"MdxPage",name:"optional",route:"/blog/study/cs-study/20/optional"},{kind:"MdxPage",name:"page-replace-algorithm",route:"/blog/study/cs-study/20/page-replace-algorithm"},{kind:"MdxPage",name:"redis",route:"/blog/study/cs-study/20/redis"},{kind:"MdxPage",name:"sop",route:"/blog/study/cs-study/20/sop"}]},{kind:"Folder",name:"21",route:"/blog/study/cs-study/21",children:[{kind:"Meta",data:{"file-system":"파일시스템","xss-csrf":"XSS와 CSRF","apache-kafka":"아파치 카프카",jdbc:"JDBC"}},{kind:"MdxPage",name:"apache-kafka",route:"/blog/study/cs-study/21/apache-kafka"},{kind:"MdxPage",name:"file-system",route:"/blog/study/cs-study/21/file-system"},{kind:"MdxPage",name:"jdbc",route:"/blog/study/cs-study/21/jdbc"},{kind:"MdxPage",name:"xss-csrf",route:"/blog/study/cs-study/21/xss-csrf"}]},{kind:"Folder",name:"22",route:"/blog/study/cs-study/22",children:[{kind:"Meta",data:{"async-non-block":"동기 비동기 vs 블로킹 논블로킹",grpc:"gRPC",flyway:"Flyway",jackson:"Jackson","spring-data-jpa":"Spring Data JPA"}},{kind:"MdxPage",name:"async-non-block",route:"/blog/study/cs-study/22/async-non-block"},{kind:"MdxPage",name:"flyway",route:"/blog/study/cs-study/22/flyway"},{kind:"MdxPage",name:"grpc",route:"/blog/study/cs-study/22/grpc"},{kind:"MdxPage",name:"jackson",route:"/blog/study/cs-study/22/jackson"},{kind:"MdxPage",name:"spring-data-jpa",route:"/blog/study/cs-study/22/spring-data-jpa"}]},{kind:"Folder",name:"23",route:"/blog/study/cs-study/23",children:[{kind:"Meta",data:{dmz:"DMZ","procedure-trigger":"프로시저와 트리거","table-scan-vs-index-scan":"테이블 스캔과 인덱스 스캔","persistence-context":"Persistence Context","java-generic":"Java Generic"}},{kind:"MdxPage",name:"dmz",route:"/blog/study/cs-study/23/dmz"},{kind:"MdxPage",name:"java-generic",route:"/blog/study/cs-study/23/java-generic"},{kind:"MdxPage",name:"persistence-context",route:"/blog/study/cs-study/23/persistence-context"},{kind:"MdxPage",name:"procedure-trigger",route:"/blog/study/cs-study/23/procedure-trigger"},{kind:"MdxPage",name:"table-scan-vs-index-scan",route:"/blog/study/cs-study/23/table-scan-vs-index-scan"}]},{kind:"Folder",name:"24",route:"/blog/study/cs-study/24",children:[{kind:"Meta",data:{rxjava:"RxJava","java-thread":"Java Thread","virtual-thread":"Virtual Thread",webflux:"WebFlux","jpa-association-mapping":"JPA 연관관계 맵핑","n-plus-one-problem":"N+1 Problem"}},{kind:"MdxPage",name:"java-thread",route:"/blog/study/cs-study/24/java-thread"},{kind:"MdxPage",name:"jpa-association-mapping",route:"/blog/study/cs-study/24/jpa-association-mapping"},{kind:"MdxPage",name:"n-plus-one-problem",route:"/blog/study/cs-study/24/n-plus-one-problem"},{kind:"MdxPage",name:"rxjava",route:"/blog/study/cs-study/24/rxjava"},{kind:"MdxPage",name:"virtual-thread",route:"/blog/study/cs-study/24/virtual-thread"},{kind:"MdxPage",name:"webflux",route:"/blog/study/cs-study/24/webflux"}]},{kind:"Folder",name:"3",route:"/blog/study/cs-study/3",children:[{kind:"Meta",data:{compile:"컴파일",socket:"Socket",key:"Key",final:"Final",tomcat:"Tomcat"}},{kind:"MdxPage",name:"compile",route:"/blog/study/cs-study/3/compile"},{kind:"MdxPage",name:"final",route:"/blog/study/cs-study/3/final"},{kind:"MdxPage",name:"key",route:"/blog/study/cs-study/3/key"},{kind:"MdxPage",name:"socket",route:"/blog/study/cs-study/3/socket"},{kind:"MdxPage",name:"tomcat",route:"/blog/study/cs-study/3/tomcat"}]},{kind:"Folder",name:"4",route:"/blog/study/cs-study/4",children:[{kind:"Meta",data:{process:"프로세스","db-index":"인덱스",static:"static 클래스와 static 메서드"}},{kind:"MdxPage",name:"db-index",route:"/blog/study/cs-study/4/db-index"},{kind:"MdxPage",name:"process",route:"/blog/study/cs-study/4/process"},{kind:"MdxPage",name:"static",route:"/blog/study/cs-study/4/static"}]},{kind:"Folder",name:"5",route:"/blog/study/cs-study/5",children:[{kind:"Meta",data:{"process-memory":"프로세스 주소공간","cookie-session":"쿠키와 세션","b-tree":"B-Tree","abstract-interface":"추상클래스와 인터페이스"}},{kind:"MdxPage",name:"abstract-interface",route:"/blog/study/cs-study/5/abstract-interface"},{kind:"MdxPage",name:"b-tree",route:"/blog/study/cs-study/5/b-tree"},{kind:"MdxPage",name:"cookie-session",route:"/blog/study/cs-study/5/cookie-session"},{kind:"MdxPage",name:"process-memory",route:"/blog/study/cs-study/5/process-memory"}]},{kind:"Folder",name:"6",route:"/blog/study/cs-study/6",children:[{kind:"Meta",data:{"context-switch":"컨텍스트 스위칭",http:"HTTP",view:"뷰","equals-hashcode":"equals와 hashcode","spring-mvc-spring-boot":"Spring MVC와 Spring Boot"}}
1,{kind:"MdxPage",name:"context-switch",route:"/blog/study/cs-study/6/context-switch"},{kind:"MdxPage",name:"equals-hashcode",route:"/blog/study/cs-study/6/equals-hashcode"},{kind:"MdxPage",name:"http",route:"/blog/study/cs-study/6/http"},{kind:"MdxPage",name:"spring-mvc-spring-boot",route:"/blog/study/cs-study/6/spring-mvc-spring-boot"},{kind:"MdxPage",name:"view",route:"/blog/study/cs-study/6/view"}]},{kind:"Folder",name:"7",route:"/blog/study/cs-study/7",children:[{kind:"Meta",data:{"process-scheduling-algorithm":"프로세스 스케줄링 알고리즘","http-version":"HTTP 버전",normalization:"정규화",collections:"Collections"}},{kind:"MdxPage",name:"collections",route:"/blog/study/cs-study/7/collections"},{kind:"MdxPage",name:"http-version",route:"/blog/study/cs-study/7/http-version"},{kind:"MdxPage",name:"normalization",route:"/blog/study/cs-study/7/normalization"},{kind:"MdxPage",name:"process-scheduling-algorithm",route:"/blog/study/cs-study/7/process-scheduling-algorithm"}]},{kind:"Folder",name:"8",route:"/blog/study/cs-study/8",children:[{kind:"Meta",data:{ipc:"IPC"}},{kind:"MdxPage",name:"ipc",route:"/blog/study/cs-study/8/ipc"}]},{kind:"Meta",data:{1:"1주차",2:"2주차",3:"3주차",4:"4주차",5:"5주차",6:"6주차",7:"7주차",8:"8주차",11:"11주차",12:"12주차",13:"13주차",14:"14주차",15:"15주차",16:"16주차",17:"17주차",18:"18주차",19:"19주차",20:"20주차",21:"21주차",22:"22주차",23:"23주차",24:"24주차",index:"Index"}},{kind:"MdxPage",name:"index",route:"/blog/study/cs-study"}]},{kind:"Folder",name:"dingcodingco",route:"/blog/study/dingcodingco",children:[{kind:"Meta",data:{"backend-interview-3days-challenge":"백엔드 인터뷰 3일 챌린지"}},{kind:"MdxPage",name:"backend-interview-3days-challenge",route:"/blog/study/dingcodingco/backend-interview-3days-challenge"}]},{kind:"Folder",name:"groom",route:"/blog/study/groom",children:[{kind:"Meta",data:{"groom-orientation":"오리엔테이션"}},{kind:"MdxPage",name:"groom-orientation",route:"/blog/study/groom/groom-orientation"}]},{kind:"Folder",name:"infiniteloop",route:"/blog/study/infiniteloop",children:[{kind:"Meta",data:{"linux-basic-for-server-management":"서버 운영에 필요한 리눅스 기본 지식","reentrant-lock-vs-synchronized":"ReentrantLock vs synchronized"}},{kind:"MdxPage",name:"linux-basic-for-server-management",route:"/blog/study/infiniteloop/linux-basic-for-server-management"},{kind:"MdxPage",name:"reentrant-lock-vs-synchronized",route:"/blog/study/infiniteloop/reentrant-lock-vs-synchronized"}]},{kind:"Folder",name:"someone-pooped-on-my-cs",route:"/blog/study/someone-pooped-on-my-cs",children:[{kind:"Meta",data:{"async-non-blocking":"Async vs Non blocking","easycode-transaction":"쉬운코드 트랜잭션"}},{kind:"MdxPage",name:"async-non-blocking",route:"/blog/study/someone-pooped-on-my-cs/async-non-blocking"},{kind:"MdxPage",name:"easycode-transaction",route:"/blog/study/someone-pooped-on-my-cs/easycode-transaction"}]},{kind:"Folder",name:"tech-dive",route:"/blog/study/tech-dive",children:[{kind:"Meta",data:{"tech-dive-5-recap":"Tech Dive 스터디 5회차(News Feed System)","sns-feed-research":"News Feed 전수 조사"}},{kind:"Folder",name:"sns-feed-research",route:"/blog/study/tech-dive/sns-feed-research",children:[{kind:"Meta",data:{"sns-feed-system-design":"SNS 피드 시스템 설계","sns-feed-system-infra-architecture":"SNS 피드 인프라 아í
1‚¤í…ì²˜","sns-feed-graph-database":"SNS 피드 Graph Database","facebook-tao-graph":"Facebook TAO Graph"}},{kind:"MdxPage",name:"facebook-tao-graph",route:"/blog/study/tech-dive/sns-feed-research/facebook-tao-graph"},{kind:"MdxPage",name:"sns-feed-graph-database",route:"/blog/study/tech-dive/sns-feed-research/sns-feed-graph-database"},{kind:"MdxPage",name:"sns-feed-system-design",route:"/blog/study/tech-dive/sns-feed-research/sns-feed-system-design"},{kind:"MdxPage",name:"sns-feed-system-infra-architecture",route:"/blog/study/tech-dive/sns-feed-research/sns-feed-system-infra-architecture"}]},{kind:"MdxPage",name:"tech-dive-5-recap",route:"/blog/study/tech-dive/tech-dive-5-recap"}]},{kind:"MdxPage",name:"woowa-course",route:"/blog/study/woowa-course"}]},{kind:"Folder",name:"tools",route:"/blog/tools",children:[{kind:"Meta",data:{docker:"Docker","docker-compose-up-build":"docker-compose up --build",intellij:"IntelliJ IDEA",git:"Git",chrome:"Chrome","nvim-lazyvim":"Nvim & LazyVim",vmware:"Vmware"}},{kind:"MdxPage",name:"chrome",route:"/blog/tools/chrome"},{kind:"MdxPage",name:"docker-compose-up-build",route:"/blog/tools/docker-compose-up-build"},{kind:"MdxPage",name:"docker",route:"/blog/tools/docker"},{kind:"MdxPage",name:"git",route:"/blog/tools/git"},{kind:"MdxPage",name:"intellij",route:"/blog/tools/intellij"},{kind:"Folder",name:"nvim-lazyvim",route:"/blog/tools/nvim-lazyvim",children:[{kind:"Meta",data:{keymaps:"keymaps",xclip:"xclip"}},{kind:"MdxPage",name:"keymaps",route:"/blog/tools/nvim-lazyvim/keymaps"},{kind:"MdxPage",name:"xclip",route:"/blog/tools/nvim-lazyvim/xclip"}]},{kind:"MdxPage",name:"vmware",route:"/blog/tools/vmware"}]}]},{kind:"Folder",name:"docs",route:"/docs",children:[{kind:"Meta",data:{paypal:"PayPal",redis:"Redis"}},{kind:"Folder",name:"paypal",route:"/docs/paypal",children:[{kind:"Meta",data:{"subscription-api":"구독 API","webhook-api":"웹훅 API"}},{kind:"MdxPage",name:"subscription-api",route:"/docs/paypal/subscription-api"},{kind:"MdxPage",name:"webhook-api",route:"/docs/paypal/webhook-api"}]},{kind:"Folder",name:"redis",route:"/docs/redis",children:[{kind:"Meta",data:{"redis-stream":"Redis Stream","redis-transaction":"Redis Transaction의 한계와 Pipeline 비교","redis-geospatial":"Redis Geospatial"}},{kind:"MdxPage",name:"redis-geospatial",route:"/docs/redis/redis-geospatial"},{kind:"MdxPage",name:"redis-stream",route:"/docs/redis/redis-stream"},{kind:"MdxPage",name:"redis-transaction",route:"/docs/redis/redis-transaction"}]}]},{kind:"Folder",name:"etc",route:"/etc",children:[{kind:"Meta",data:{ruby:"Ruby",flutter:"Flutter",fastapi:"FastAPI"}},{kind:"Folder",name:"fastapi",route:"/etc/fastapi",children:[{kind:"Meta",data:{"fastapi-background-task":"Background Task","celery-vs-fastapi-background-task":"Celery vs FastAPI Background Task","dishka-generic-di":"Dishka Generic DI",pytest:"Pytest"}},{kind:"MdxPage",name:"celery-vs-fastapi-background-task",route:"/etc/fastapi/celery-vs-fastapi-background-task"},{kind:"MdxPage",name:"dishka-generic-di",route:"/etc/fastapi/dishka-generic-di"},{kind:"MdxPage",name:"fastapi-background-task",route:"/etc/fastapi/fastapi-background-task"},{kind:"Folder",name:"pytest",route:"/etc/fastapi/pytest",children:[{kind:"Meta",data:{"get-started":"Get Started","python-test-rollback":"Python Test Rollback"}},{kind:"MdxPage",name:"get-started",route:"/etc/fastapi/pytest/get-started"},{kind:"MdxPage",name:"python-test-rollback",route:"/etc/fastapi/pytest/python-test-rollback"}]}]},{kind:"Folder",name:"flutter",route:"/etc/flutter",children:[{kind:"Meta",data:{"flutter-tips":"플러터 팁",theory:"이론",package:"패키지"}},{kind:"MdxPage",name:"flutter-tips",route:"/etc/flutter/flutter-tips"},{kind:"Folder",name:"package",route:"/etc/flutter/package",children:[{kind:"Meta",data:{firebase:"Firebase","flutter-http":"Flutter HTTP","go-router":"Go Router",riverpod:"Riverpod","modal-bottom-sheet":"Modal Bottom Sheet","local-noti":"Local Notification"}},{kind:"MdxPage",name:"firebase",route:"/etc/flutter/package/firebase"},{kind:"MdxPage",name:"flutter-http",route:"/etc/flutter/package/flutter-http"},{kind:"MdxPage",name:"go-router",route:"/etc/flutter/package/go-router"},{kind:"MdxPage",name:"local-noti",route:"/etc/flutter/package/local-noti"},{kind:"MdxPage",name:"modal-bottom-sheet",route:"/etc/flutter/package/modal-bottom-sheet",frontMatter:{
1sidebar_position:2,toc_max_heading_level:4}},{kind:"MdxPage",name:"riverpod",route:"/etc/flutter/package/riverpod"}]},{kind:"Folder",name:"theory",route:"/etc/flutter/theory",children:[{kind:"Meta",data:{"sqflite-vs-drift":"Sqflite vs Drift","async-technique":"Async Technique","session-and-token":"Session and Token"}},{kind:"MdxPage",name:"async-technique",route:"/etc/flutter/theory/async-technique"},{kind:"MdxPage",name:"session-and-token",route:"/etc/flutter/theory/session-and-token"},{kind:"MdxPage",name:"sqflite-vs-drift",route:"/etc/flutter/theory/sqflite-vs-drift"}]}]},{kind:"Folder",name:"ruby",route:"/etc/ruby",children:[{kind:"Meta",data:{index:"Ruby?"}},{kind:"MdxPage",name:"index",route:"/etc/ruby"}]}]},{kind:"MdxPage",name:"index",route:"/"},{kind:"Folder",name:"java-and-spring",route:"/java-and-spring",children:[{kind:"Meta",data:{"next-step":"Next Step",msa:"MSA",index:"Java란?",basic:"Basic",spring:"Spring","spring-boot":"Spring Boot",jpa:"JPA",webflux:"WebFlux","deep-dive":"Deep Dive",pattern:"Pattern",api:"API",project:"Project"}},{kind:"Folder",name:"api",route:"/java-and-spring/api",children:[{kind:"Meta",data:{redis:"Redis","kafka-with-spring":"Kafka",json:"직렬화 / 역직렬화","http-url-connection":"HTTP / WEB 통신","office-file-io":"MS Office 파일 입출력",thymeleaf:"Thymeleaf",concurrency:"동시성 관련"}},{kind:"MdxPage",name:"concurrency",route:"/java-and-spring/api/concurrency"},{kind:"MdxPage",name:"http-url-connection",route:"/java-and-spring/api/http-url-connection"},{kind:"MdxPage",name:"json",route:"/java-and-spring/api/json"},{kind:"MdxPage",name:"kafka-with-spring",route:"/java-and-spring/api/kafka-with-spring"},{kind:"MdxPage",name:"office-file-io",route:"/java-and-spring/api/office-file-io"},{kind:"MdxPage",name:"redis",route:"/java-and-spring/api/redis"},{kind:"MdxPage",name:"thymeleaf",route:"/java-and-spring/api/thymeleaf"}]},{kind:"Folder",name:"basic",route:"/java-and-spring/basic",children:[{kind:"Meta",data:{java:"Java 문법",kotlin:"Kotlin 문법","web-theory":"웹 개발 기초","multi-module":"멀티 모듈","useful-annotation":"Useful Annotation"}},{kind:"Folder",name:"java",route:"/java-and-spring/basic/java",children:[{kind:"Meta",data:{"for-programming-test":"코테용 자바","java-grammar":"자바 문법"}},{kind:"MdxPage",name:"for-programming-test",route:"/java-and-spring/basic/java/for-programming-test"},{kind:"MdxPage",name:"java-grammar",route:"/java-and-spring/basic/java/java-grammar"}]},{kind:"Folder",name:"kotlin",route:"/java-and-spring/basic/kotlin",children:[{kind:"Meta",data:{"kotlin-basic-type":"코틀린 기초 자료형","kotlin-control-flow":"코틀린 조건문","kotlin-loop":"코틀린 반복문","kotlin-function":"코틀린 함수","kotlin-class":"코틀린 클래스"}},{kind:"MdxPage",name:"kotlin-basic-type",route:"/java-and-spring/basic/kotlin/kotlin-basic-type"},{kind:"MdxPage",name:"kotlin-class",route:"/java-and-spring/basic/kotlin/kotlin-class"},{kind:"MdxPage",name:"kotlin-control-flow",route:"/java-and-spring/basic/kotlin/kotlin-control-flow"},{kind:"MdxPage",name:"kotlin-function",route:"/java-and-spring/basic/kotlin/kotlin-function"},{kind:"MdxPage",name:"kotlin-loop",route:"/java-and-spring/basic/kotlin/kotlin-loop"}]},{kind:"MdxPage",name:"multi-module",route:"/java-and-spring/basic/multi-module"},{kind:"MdxPage",name:"useful-annotation",route:"/java-and-spring/basic/useful-annotation"},{kind:"MdxPage",name:"web-theory",route:"/java-and-spring/basic/web-theory"}]},{kind:"Folder",name:"deep-dive",route:"/java-and-spring/deep-dive",children:[{kind:"Meta",data:{jvm:"JVM","jvm-gc":"JVM GC"}},{kind:"MdxPage",name:"jvm-gc",route:"/java-and-spring/deep-dive/jvm-gc"},{kind:"MdxPage",name:"jvm",route:"/java-and-spring/deep-dive/jvm"}]},{kind:"MdxPage",name:"index",route:"/java-and-spring"},{kind:"Folder",name:"jpa",route:"/java-and-spring/jpa",children:[{kind:"Meta",data:{"quick-start":"JPA Quick Start","association-mapping":"연관관계 매핑","query-dsl":"QueryDSL",theory:"JPA 이론",error:"JPA를 사용하며 겪은 에러 모음","spring-data-redis":"Redis"}},{kind:"MdxPage",name:"association-mapping",route:"/java-and-spring/jpa/association-mapping"},{kind:"MdxPage",name:"error",route:"/java-and-spring/jpa/error"},{kind:"MdxPage",name:"query-dsl",route:"/java-and-spring/jpa/query-dsl"},{kind:"MdxPage",name:"quick-start",route:"/java-and-spring/jpa/quick-start"},{kind:"MdxPage",name:"spring-data-redis",route:"/java-and-spring/jpa/spring-data-redis"},{kind:"MdxPage",name:"theory",route:"/java-and-spring/jpa/theory"}]},{kind:"Folder",name:"msa",route:"/java-and-spring/msa",children:[{kind:"Meta",data:{"microservice-theory":"마이크로 서비스 이론","microservice-pattern":"마이크로 서비스 패턴",ddd:"도메인 주도 설계"}},{kind:"MdxPage",name:"ddd",route:"/java-and-spring/msa/ddd"},{kind:"MdxPage",name:"microservice-pattern",route:"/java-and-spring/msa/microservice-pattern"},{kind:"MdxPage",name:"microservice-theory",route:"/java-and-spring/msa/microservice-theory"}]},{kind:"MdxPage",name:"next-step",route:"/java-and-spring/next-step"},{kind:"Folder",name:"pattern",route:"/java-and-spring/pattern",children:[{kind:"Meta",data:{envelop_pattern:"봉투패턴"}},{kind:"MdxPage",name:"envelop_pattern",route:"/java-and-spring/pattern/envelop_pattern"}]},{kind:"Folder",name:"project",route:"/java-and-spring/project",children:[{kind:"Meta",data:{lolmoonchul:"롤문철(진행 중)",shoppingmall:"Thymeleaf 쇼핑몰(중단)","delivery-app-mvp":"배달앱"}},{kind:"MdxPage",name:"delivery-app-mvp",route:"/java-and-spring/project/delivery-app-mvp"},{kind:"MdxPage",name:"lolmoonchul",route:"/java-and-spring/project/lolmoonchul"},{kind:"MdxPage",name:"shoppingmall",route:"/java-and-spring/project/shoppingmall"}]},{kind:"Folder",name:"spring-boot",route:"/java-and-spring/spring-boot",children:[{kind:"Meta",data:{"spring-boot":"Spring 설정","rest-api":"Rest API","response-code":"Request & Response",exception:"Exception & Validation","container-and-context":"Container & Context","interceptor-and-filter":"Interceptor & Filter",pagination:"Pagination","spring-auth":"Auth","spring-security":"Spring Security","spring-cloud":"Spring Cloud","junit-test":"Junit과 Test",monitoring:"Monitoring","spring-batch":"Spring Batch",aop:"Spring 관점 지향 프로그래밍","spring-tip":"Spring 팁","message-queue":"Message Queue"}},{kind:"MdxPage",name:"aop",route:"/java-and-spring/spring-boot/aop"},{kind:"MdxPage",name:"container-and-context",route:"/java-and-spring/spring-boot/container-and-context"},{kind:"MdxPage",name:"exception",route:"/java-and-spring/spring-boot/exception"},{kind:"MdxPage",name:"interceptor-and-filter",route:"/java-and-spring/spring-boot/interceptor-and-filter"},{kind:"MdxPage",name:"junit-test",route:"/java-and-spring/spring-boot/junit-test"},{kind:"MdxPage",name:"message-queue",route:"/java-and-spring/spring-boot/message-queue"},{kind:"MdxPage",name:"monitoring",route:"/java-and-spring/spring-boot/monitoring"},{kind:"MdxPage",name:"pagination",route:"/java-and-spring/spring-boot/pagination"},{kind:"MdxPage",name:"response-code",route:"/java-and-spring/spring-boot/response-code"},{kind:"MdxPage",name:"rest-api",route:"/java-and-spring/spring-boot/rest-api"},{kind:"MdxPage",name:"spring-auth",route:"/java-and-spring/spring-boot/spring-auth"},{kind:"MdxPage",name:"spring-batch",route:"/java-and-spring/spring-boot/spring-batch"},{kind:"MdxPage",name:"spring-boot",route:"/java-and-spring/spring-boot/spring-boot"},{kind:"MdxPage",name:"spring-cloud",route:"/java-and-spring/spring-boot/spring-cloud"},{kind:"MdxPage",name:"spring-security",route:"/java-and-spring/spring-boot/spring-security"},{kind:"MdxPage",name:"spring-tip",route:"/java-and-spring/spring-boot/spring-tip"}]},{kind:"Folder",name:"webflux",route:"/java-and-spring/webflux",children:[{kind:"Meta",data:{"webflux-info":"WebFlux란?"}},{kind:"MdxPage",name:"webflux-info",route:"/java-and-spring/webflux/webflux-info"}]}]},{kind:"Folder",name:"js-framework",route:"/js-framework",children:[{kind:"Meta",data:{"node-next-step":"Node Next Step","js-grammar":"JavaScript 문법",nest:"Nest.js",nodejs:"Node.js 란?",expressjs:"Express",next:"Next.js"}},{kind:"MdxPage",name:"expressjs",route:"/js-framework/expressjs"},{kind:"MdxPage",name:"js-grammar",route:"/js-framework/js-grammar"},{kind:"Folder",name:"nest",route:"/js-framework/nest",children:[{kind:"Meta",data:{index:"Index","
1nest-scheduling":"Nest Scheduling 비교","nest-command":"Nest Command","nest-proxy":"Nest Proxy","nest-aop":"Nest AOP","nest-swagger":"Swagger","nest-data-loader":"Data Loader","guard-strategy":"Guard & Strategy",prisma:"Prisma","module-system":"Module system",controller:"Controller",exception:"Exception",typeorm:"Typeorm",drizzle:"Drizzle",validation:"Validation"}},{kind:"MdxPage",name:"controller",route:"/js-framework/nest/controller"},{kind:"MdxPage",name:"drizzle",route:"/js-framework/nest/drizzle"},{kind:"MdxPage",name:"exception",route:"/js-framework/nest/exception"},{kind:"MdxPage",name:"guard-strategy",route:"/js-framework/nest/guard-strategy"},{kind:"MdxPage",name:"index",route:"/js-framework/nest"},{kind:"MdxPage",name:"module-system",route:"/js-framework/nest/module-system"},{kind:"MdxPage",name:"nest-aop",route:"/js-framework/nest/nest-aop"},{kind:"MdxPage",name:"nest-command",route:"/js-framework/nest/nest-command"},{kind:"MdxPage",name:"nest-data-loader",route:"/js-framework/nest/nest-data-loader"},{kind:"MdxPage",name:"nest-proxy",route:"/js-framework/nest/nest-proxy"},{kind:"MdxPage",name:"nest-scheduling",route:"/js-framework/nest/nest-scheduling"},{kind:"MdxPage",name:"nest-swagger",route:"/js-framework/nest/nest-swagger"},{kind:"Folder",name:"prisma",route:"/js-framework/nest/prisma",children:[{kind:"Meta",data:{prisma:"Index","prisma-query-patterns-comparison":"Prisma 동적 Query 비교"}},{kind:"MdxPage",name:"prisma-query-patterns-comparison",route:"/js-framework/nest/prisma/prisma-query-patterns-comparison"},{kind:"MdxPage",name:"prisma",route:"/js-framework/nest/prisma/prisma"}]},{kind:"MdxPage",name:"typeorm",route:"/js-framework/nest/typeorm"},{kind:"MdxPage",name:"validation",route:"/js-framework/nest/validation"}]},{kind:"Folder",name:"next",route:"/js-framework/next",children:[{kind:"Meta",data:{"react-short":"리액트 요약","next-basic":"넥스트 시작하기"}},{kind:"MdxPage",name:"next-basic",route:"/js-framework/next/next-basic"},{kind:"MdxPage",name:"react-short",route:"/js-framework/next/react-short"}]},{kind:"MdxPage",name:"node-next-step",route:"/js-framework/node-next-step"},{kind:"MdxPage",name:"nodejs",route:"/js-framework/nodejs"}]},{kind:"Folder",name:"theory",route:"/theory",children:[{kind:"Meta",data:{"operating-system":"운영체제",infra:"인프라",java:"JAVA/Kotlin",spring:"Spring",python:"Python","data-structure":"자료구조",database:"Database",network:"네트워크",security:"Security",mongodb:"MongoDB"}},{kind:"Folder",name:"data-structure",route:"/theory/data-structure",children:[{kind:"Meta",data:{hash:"Hash","b-tree":"B Tree","sql-index":"SQL Index"}},{kind:"MdxPage",name:"b-tree",route:"/theory/data-structure/b-tree"},{kind:"MdxPage",name:"hash",route:"/theory/data-structure/hash"},{kind:"MdxPage",name:"sql-index",route:"/theory/data-structure/sql-index"}]},{kind:"Folder",name:"database",route:"/theory/database",children:[{kind:"Meta",data:{"ap-database-system":"AP 데이터베이스 시스템","sql-grammar":"SQL 문법","n-plus-one":"N+1",schema:"스키마","database-normalization":"데이터베이스 정규화",view:"ë·°",transaction:"트랜잭션",replication:"복제","join-type":"조인 종류","database-zero-downtime-migration":"데이터베이스 무중단 마이그레이션"}},{kind:"MdxPage",name:"ap-database-system",route:"/theory/database/ap-database-system"},{kind:"MdxPage",name:"database-normalization",route:"/theory/database/database-normalization"},{kind:"MdxPage",name:"database-zero-downtime-migration",route:"/theory/database/database-zero-downtime-migration"},{kind:"MdxPage",name:"join-type",route:"/theory/database/join-type"},{kind:"MdxPage",name:"n-plus-one",route:"/theory/database/n-plus-one"},{kind:"MdxPage",name:"replication",route:"/theory/database/replication"},{kind:"MdxPage",name:"schema",route:"/theory/database/schema"},{kind:"MdxPage",name:"sql-grammar",route:"/theory/database/sql-grammar"},{kind:"MdxPage",name:"transaction",route:"/theory/database/transaction"},{kind:"MdxPage",name:"view",route:"/theory/database/view"}]},{kind:"Folder",name:"infra",route:"/theory/infra",children:[{kind:"Meta",data:{messaging:"메시징(이론)","rabbitmq-official":"RabbitMQ 공식문서 번역",redis:"Redis",aws:"AWS",azure:"Azure","loki-document":"Loki 공식 문서 번역"}},{kind:"Folder",name:"aws",route:"/theory/infra/aws",children:[{kind:"Meta",data:{"amazon-sqs-queue-comparison":"Amazon SQS 큐 비교","aws-sqs":"AWS SQS"}},{kind:"MdxPage",name:"amazon-sqs-queue-comparison",route:"/theory/infra/aws/amazon-sqs-queue-comparison"},{kind:"MdxPage",name:"aws-sqs",route:"/theory/infra/aws/aws-sqs"}]},{kind:"Folder",name:"azure",route:"/theory/infra/azure",children:[{kind:"Meta",data:{"functions-python-guide":"Functions Python Guide","azure-functions-deploy":"Azure Functions Deploy","durable-functions-perf-and-scale":"Durable Functions Perf and Scale","azure-durable-functions-billing":"Azure Durable Functions Billing","azure-container-apps-billing":"Azure Container Apps Billing","azure-function-container-ssh":"Azure Functions 컨테이너 배포 및 SSH 접속 가이드"}},{kind:"MdxPage",name:"azure-durable-functions-billing",route:"/theory/infra/azure/azure-durable-functions-billing",frontMatter:{title:"Azure Durable Functions & Container Apps 과금 구조"}},{kind:"MdxPage",name:"azure-function-container-ssh",route:"/theory/infra/azure/azure-function-container-ssh",frontMatter:{title:"Azure Functions 컨테이너 배포 및 SSH 접속 가이드"}},{kind:"MdxPage",name:"azure-functions-deploy",route:"/theory/infra/azure/azure-functions-deploy"},{kind:"MdxPage",name:"durable-functions-perf-and-scale",route:"/theory/infra/azure/durable-functions-perf-and-scale"},{kind:"MdxPage",name:"functions-python-guide",route:"/theory/infra/azure/functions-python-guide"}]},{kind:"Folder",name:"loki-document",route:"/theory/infra/loki-document",children:[{kind:"Meta",data:{index:"소개","get-started":"시작하기","send-data":"Loki로 로그 데이터 보내기",query:"LogQL 쿼리",operations:"Loki 관리"}},{kind:"Folder",name:"get-started",route:"/theory/infra/loki-document/get-started",children:[{kind:"Meta",data:{overview:"Loki 개요","quick-start":"빠른 시작",architecture:"아í
1‚¤í…ì²˜",components:"컴포넌트","deployment-modes":"배포 모드",labels:"레이블","hash-rings":"해시 링"}},{kind:"MdxPage",name:"architecture",route:"/theory/infra/loki-document/get-started/architecture"},{kind:"MdxPage",name:"components",route:"/theory/infra/loki-document/get-started/components"},{kind:"MdxPage",name:"deployment-modes",route:"/theory/infra/loki-document/get-started/deployment-modes"},{kind:"MdxPage",name:"hash-rings",route:"/theory/infra/loki-document/get-started/hash-rings",frontMatter:{title:"일관된 해시 링",description:"Loki의 일관된 해시 링에 대해 알아봅니다."}},{kind:"Folder",name:"labels",route:"/theory/infra/loki-document/get-started/labels",children:[{kind:"Meta",data:{"bp-labels":"레이블 모범 사례",cardinality:"카디널리티","structured-metadata":"구조화된 메타데이터","remove-default-labels":"기본 레이블 제거"}},{kind:"MdxPage",name:"bp-labels",route:"/theory/infra/loki-document/get-started/labels/bp-labels",frontMatter:{title:"레이블 모범 사례",description:"Loki 레이블 사용에 대한 모범 사례를 알아봅니다."}},{kind:"MdxPage",name:"cardinality",route:"/theory/infra/loki-document/get-started/labels/cardinality",frontMatter:{title:"카디널리티",description:"Loki에서 카디널리티가 무엇인지 알아봅니다."}},{kind:"MdxPage",name:"remove-default-labels",route:"/theory/infra/loki-document/get-started/labels/remove-default-labels",frontMatter:{title:"기본 OpenTelemetry 레이블 제거",description:"기본 OpenTelemetry 레이블을 제거하는 방법을 알아봅니다."}},{kind:"MdxPage",name:"structured-metadata",route:"/theory/infra/loki-document/get-started/labels/structured-metadata",frontMatter:{title:"구조화된 메타데이터란 무엇인가",description:"Loki에서 구조화된 메타데이터에 대해 알아봅니다."}}]},{kind:"MdxPage",name:"labels",route:"/theory/infra/loki-document/get-started/labels",frontMatter:{title:"레이블 이해하기",description:"Loki의 레이블에 대해 알아봅니다."}},{kind:"MdxPage",name:"overview",route:"/theory/infra/loki-document/get-started/overview"},{kind:"Folder",name:"quick-start",route:"/theory/infra/loki-document/get-started/quick-start",children:[{kind:"Meta",data:{"quick-start":"Loki 퀵스타트",tutorial:"Loki 튜토리얼"}},{kind:"MdxPage",name:"quick-start",route:"/theory/infra/loki-document/get-started/quick-start/quick-start"},{kind:"MdxPage",name:"tutorial",route:"/theory/infra/loki-document/get-started/quick-start/tutorial"}]},{kind:"MdxPage",name:"quick-start",route:"/theory/infra/loki-document/get-started/quick-start"}]},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document"},{kind:"Folder",name:"operations",route:"/theory/infra/loki-document/operations",children:[{kind:"Meta",data:{index:"소개"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/operations"}]},{kind:"Folder",name:"query",route:"/theory/infra/loki-document/query",children:[{kind:"Meta",data:{index:"소개"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/query"}]},{kind:"Folder",name:"send-data",route:"/theory/infra/loki-document/send-data",children:[{kind:"Meta",data:{index:"소개"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/send-data"}]},{kind:"Folder",name:"setup",route:"/theory/infra/loki-document/setup",children:[{kind:"Meta",data:{index:"소개",size:"클러스터 크기 조정",install:"설치",migrate:"마이그레이션",upgrade:"업그레이드"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/setup",frontMatter:{title:"Loki 설정",description:"Loki를 설정하는 방법을 알아봅니다."}},{kind:"Folder",name:"install",route:"/theory/infra/loki-document/setup/install",children:[{kind:"Meta",data:{helm:"Helm을 사용하여 설치",tanka:"Tanka를 사용하여 설치",docker:"Docker를 사용하여 설치",local:"로컬에 설치",istio:"Istio에 설치","install-from-source":"소스에서 설치"}},{kind:"MdxPage",name:"docker",route:"/theory/infra/loki-document/setup/install/docker"},{kind:"Folder",name:"helm",route:"/theory/infra/loki-document/setup/install/helm",children:[{kind:"Meta",data:{index:"소개",concepts:"Helm 차트 구성 요소","install-monolithic":"모놀리식 Loki 설치","install-microservices":"마이크로서비스 Loki 설치","install-scalable":"확장 가능한 Loki 설치","deployment-guides":"클라우드 배포 가이드","configure-storage":"스토리지 구성",values:"Helm 차트 값","monitor-and-alert":"모니터링"}},{kind:"MdxPage",name:"concepts",route:"/theory/infra/loki-document/setup/install/helm/concepts",frontMatter:{title:"Helm 차트 구성 요소",description:"Loki Helm 차트에서 설치하는 구성 요소를 알아봅니다."}},{kind:"MdxPage",name:"configure-storage",route:"/theory/infra/loki-document/setup/install/helm/configure-storage"},{kind:"Folder",name:"deployment-guides",route:"/theory/infra/loki-document/setup/install/helm/deployment-guides",children:[{kind:"Meta",data:{index:"소개",aws:"AWS에 배포",azure:"Azure에 배포",gcp:"GCP에 배포"}},{kind:"MdxPage",name:"aws",route:"/theory/infra/loki-document/setup/install/helm/deployment-guides/aws",frontMatter:{title:"AW
1S에서 Loki Helm 차트 배포",description:"AWS에서 Loki Helm 차트를 배포하는 방법을 알아봅니다."}},{kind:"MdxPage",name:"azure",route:"/theory/infra/loki-document/setup/install/helm/deployment-guides/azure"},{kind:"MdxPage",name:"gcp",route:"/theory/infra/loki-document/setup/install/helm/deployment-guides/gcp"},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/setup/install/helm/deployment-guides",frontMatter:{title:"클라우드 배포 가이드",description:"클라우드 제공업체에 Loki를 배포하는 방법을 알아봅니다."}}]},{kind:"MdxPage",name:"install-microservices",route:"/theory/infra/loki-document/setup/install/helm/install-microservices",frontMatter:{title:"마이크로서비스 Helm 차트 설치",description:"마이크로서비스 모드에서 Loki Helm 차트를 설치하는 방법을 알아봅니다."}},{kind:"MdxPage",name:"install-monolithic",route:"/theory/infra/loki-document/setup/install/helm/install-monolithic",frontMatter:{title:"모놀리식 Helm 차트 설치",description:"모놀리식 모드에서 Loki Helm 차트를 설치하는 방법을 알아봅니다."}},{kind:"MdxPage",name:"install-scalable",route:"/theory/infra/loki-document/setup/install/helm/install-scalable",frontMatter:{title:"단순 확장 가능 Helm 차트 설치",description:"단순 확장 가능 모드에서 Loki Helm 차트를 설치하는 방법을 알아봅니다."}},{kind:"Folder",name:"monitor-and-alert",route:"/theory/infra/loki-document/setup/install/helm/monitor-and-alert",children:[{kind:"Meta",data:{index:"개요","with-grafana-cloud":"Grafana Cloud로 모니터링","with-local-monitoring":"로컬 모니터링"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/setup/install/helm/monitor-and-alert"},{kind:"MdxPage",name:"with-grafana-cloud",route:"/theory/infra/loki-document/setup/install/helm/monitor-and-alert/with-grafana-cloud"},{kind:"MdxPage",name:"with-local-monitoring",route:"/theory/infra/loki-document/setup/install/helm/monitor-and-alert/with-local-monitoring"}]},{kind:"MdxPage",name:"values",route:"/theory/infra/loki-document/setup/install/helm/values"}]},{kind:"MdxPage",name:"helm",route:"/theory/infra/loki-document/setup/install/helm",frontMatter:{title:"Helm으로 Grafana Loki 설치",description:"Helm을 사용하여 Grafana Loki를 설치하는 방법을 알아봅니다."}},{kind:"MdxPage",name:"install-from-source",route:"/theory/infra/loki-document/setup/install/install-from-source"},{kind:"MdxPage",name:"istio",route:"/theory/infra/loki-document/setup/install/istio"},{kind:"MdxPage",name:"local",route:"/theory/infra/loki-document/setup/install/local"},{kind:"MdxPage",name:"tanka",route:"/theory/infra/loki-document/setup/install/tanka"}]},{kind:"MdxPage",name:"install",route:"/theory/infra/loki-document/setup/install",frontMatter:{title:"Loki 설치",description:"Loki를 설치하는 다양한 방법을 알아봅니다."}},{kind:"Folder",name:"migrate",route:"/theory/infra/loki-document/setup/migrate",children:[{kind:"Meta",data:{index:"개요","migrate-to-alloy":"Alloy로 마이그레이션","ssd-to-distributed":"SSD에서 분산으로 마이그레이션","migrate-to-tsdb":"TSDB로 마이그레이션","migrate-from-distributed":"`loki-distributed`에서 마이그레이션","migrate-to-three-scalable-targets":"세 개의 대상으로 마이그레이션","migrate-storage-clients":"Thanos 스토리지 클라이언트로 마이그레이션"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/setup/migrate"},{kind:"MdxPage",name:"migrate-from-distributed",route:"/theory/infra/loki-document/setup/migrate/migrate-from-distributed"},{kind:"MdxPage",name:"migrate-storage-clients",route:"/theory/infra/loki-document/setup/migrate/migrate-storage-clients"},{kind:"MdxPage",name:"migrate-to-alloy",route:"/theory/infra/loki-document/setup/migrate/migrate-to-alloy"},{kind:"MdxPage",name:"migrate-to-three-scalable-targets",route:"/theory/infra/loki-document/setup/migrate/migrate-to-three-scalable-targets"},{kind:"MdxPage",name:"migrate-to-tsdb",route:"/theory/infra/loki-document/setup/migrate/migrate-to-tsdb"},{kind:"MdxPage",name:"ssd-to-distributed",route:"/theory/infra/loki-document/setup/migrate/ssd-to-distributed"}]},{kind:"MdxPage",name:"size",route:"/theory/infra/loki-document/setup/size",frontMatter:{title:"클러스터 크기 조정",description:"Loki 클러스터의 크기를 조정하는 방법을 알아봅니다."}},{kind:"Folder",name:"upgrade",route:"/theory/infra/loki-document/setup/upgrade",children:[{kind:"Meta",data:{index:"Overview"}},{kind:"MdxPage",name:"index",route:"/theory/infra/loki-document/setup/upgrade",frontMatter:{title:"Loki 업그레이드",description:"Loki를 업그레이드하는 방법을 알아봅니다."}}]}]}]},{kind:"MdxPage",name:"messaging",route:"/theory/infra/messaging"},{kind:"MdxPage",name:"rabbitmq-official",route:"/theory/infra/rabbitmq-official"},{kind:"Folder",name:"redis",route:"/theory/infra/redis",children:[{kind:"Meta",data:{"index-and-persistence":"Index And persistence",replication:"Replication(공식문서 번역)",sentinel:"Sentinel(공식문서 번역)"}},{kind:"MdxPage",name:"index-and-persistence",route:"/theory/infra/redis/index-and-persistence"},{kind:"MdxPage",name:"replication",route:"/theory/infra/redis/replication"},{kind:"MdxPage",name:"sentinel",route:"/theory/infra/redis/sentinel"}]}]},{kind:"Folder",name:"java",route:"/theory/java",children:[{kind:"Meta",data:{jvm:"JVM",gc:"GC",synchronized:"Synchronized"}},{kind:"MdxPage",name:"gc",route:"/theory/java/gc"},{kind:"MdxPage",name:"jvm",route:"/theory/java/jvm"},{kind:"MdxPage",name:"synchronized",route:"/theory/java/synchronized"}]},{kind:"Folder",name:"mongodb",route:"/theory/mongodb",children:[{kind:"Meta",data:{"transaction-vs-rdbms":"Transaction vs RDBMS","index-vs-rdbms":"Index vs RDBMS","mongodb-oom-killer":"MongoDB와 OOM Killer: 메모리 부족 문제 해결 가이드",report:"Report"}},{kind:"MdxPage",name:"index-vs-rdbms",route:"/theory/mongodb/index-vs-rdbms"},{kind:"MdxPage",name:"mongodb-oom-killer",route:"/theory/mongodb/mongodb-oom-killer",frontMatter:{title:"MongoDB와 OOM Killer: 메모리 부족 문제 해결 가이드",description:"Linux에서 MongoDB를 운영할 때 발생할 수 있는 OOM(Out of Memory) Killer 문제의 원인을 파악하고, 이를 방지하기 위한 시스템 및 데이터베이스 최적화 전략을 알아봅니다."}},{kind:"MdxPage",name:"report",route:"/theory/mongodb/report"},{kind:"MdxPage",name:"transaction-vs-rdbms",route:"/theory/mongodb/transaction-vs-rdbms"}]},{kind:"Folder",name:"network",route:"/theory/network",children:[{kind:"Meta",data:{"rate-limiter"
1:"Rate Limiter",multiplexing:"Multiplexing & Demultiplexing","stateless-and-connectionless":"Stateless & Connectionless",websocket:"WebSocket","http-versions-comparison":"HTTP 버전 비교 (1.1, 2, 3)"}},{kind:"MdxPage",name:"http-versions-comparison",route:"/theory/network/http-versions-comparison"},{kind:"MdxPage",name:"multiplexing",route:"/theory/network/multiplexing"},{kind:"MdxPage",name:"rate-limiter",route:"/theory/network/rate-limiter"},{kind:"MdxPage",name:"stateless-and-connectionless",route:"/theory/network/stateless-and-connectionless"},{kind:"MdxPage",name:"websocket",route:"/theory/network/websocket"}]},{kind:"Folder",name:"operating-system",route:"/theory/operating-system",children:[{kind:"Meta",data:{"process-thread":"프로세스와 스레드",ipc:"IPC","process-schedule":"프로세스 스케줄",thread:"스레드","process-sync":"프로세스 동기화","select-vs-epoll":"select vs epoll","memory-management":"Memory Management"}},{kind:"MdxPage",name:"ipc",route:"/theory/operating-system/ipc"},{kind:"MdxPage",name:"memory-management",route:"/theory/operating-system/memory-management"},{kind:"MdxPage",name:"process-schedule",route:"/theory/operating-system/process-schedule"},{kind:"MdxPage",name:"process-sync",route:"/theory/operating-system/process-sync"},{kind:"MdxPage",name:"process-thread",route:"/theory/operating-system/process-thread"},{kind:"MdxPage",name:"select-vs-epoll",route:"/theory/operating-system/select-vs-epoll"},{kind:"MdxPage",name:"thread",route:"/theory/operating-system/thread"}]},{kind:"Folder",name:"python",route:"/theory/python",children:[{kind:"Meta",data:{"python-interpreter":"Python Interpreter","libuv-vs-asyncio":"Libuv VS AsyncIO"}},{kind:"MdxPage",name:"libuv-vs-asyncio",route:"/theory/python/libuv-vs-asyncio"},{kind:"MdxPage",name:"python-interpreter",route:"/theory/python/python-interpreter"}]},{kind:"Folder",name:"security",route:"/theory/security",children:[{kind:"Meta",data:{"apple-vs-google-oauth-diff":"Apple & Goole OAuth 차이점","oauth-grant-type":"Oauth Grant Type"}},{kind:"MdxPage",name:"apple-vs-google-oauth-diff",route:"/theory/security/apple-vs-google-oauth-diff"},{kind:"MdxPage",name:"oauth-grant-type",route:"/theory/security/oauth-grant-type"}]},{kind:"Folder",name:"spring",route:"/theory/spring",children:[{kind:"Meta",data:{servlet:"서블릿"}},{kind:"MdxPage",name:"servlet",route:"/theory/spring/servlet"}]}]}],flexsearch:{codeblocks:!0},title:"Next Step",headings:o},pageNextRoute:"/blog/anki/next-step",nextraLayout:t.ZP,themeConfig:d.Z};n.default=(0,a.j)(l)},39812:function(e,n,i){"use strict";var r=i(85893);i(67294);let a={logo:(0,r.jsx)("span",{style:{fontWeight:"bold"},children:"Rookedsysc"}),project:{link:"https://github.com/rookedsysc"},sidebar:{defaultMenuCollapseLevel:1,autoCollapse:!0,toggleButton:!0},chat:{link:"https://open.kakao.com/me/rookedsysc"},docsRepositoryBase:"https://github.com/rookedsysc/nextra-blog/tree/main",footer:{text:"Rookedsysc"}};n.Z=a},15789:function(){}},function(e){e.O(0,[49774,86976,92888,40179],function(){return e(e.s=91595)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.