질문 목록
지금까지 올라온 질문 330개. 궁금한 쪽부터 파고들면 됩니다.
데이터베이스35개
- DB 커넥션을 매번 새로 맺는 비용이 큰 이유는?
- 인덱스를 만들었는데 실행 계획에서 타지 않는 이유는?
- 커넥션 풀 크기를 CPU 코어 수로 잡는 이유는?
- DB 락은 분산 환경에서 무엇이 한계인가?
- Redis 분산 락의 스핀과 Pub/Sub 방식 차이는?
- 낙관적 락 충돌은 어떻게 재시도하는가?
- 서브쿼리를 언제 조인으로 재작성해야 성능이 향상되는가?
- 격리 수준을 올리면 무엇을 잃는가?
- 서브쿼리 언네스팅은 언제 발생하는가?
- 서브쿼리 언네스팅과 뷰 병합의 차이는?
- EXISTS와 IN을 조인으로 바꾸면 무엇이 다른가?
- ANTI JOIN과 SEMI JOIN의 차이는?
- Hash Anti Join은 내부에서 어떻게 동작하는가?
- 데이터베이스 정규화를 수행하는 이유는 무엇인가?
- 트랜잭션 격리 수준을 결정하는 기준은 무엇인가?
- 데이터베이스 뷰는 언제 사용하는가?
- 데이터베이스 스키마를 설계할 때 고려할 점은 무엇인가?
- JOIN 연산의 성능을 결정하는 핵심 요소는 무엇인가?
- 인덱스 생성 시 읽기 성능과 쓰기 성능의 트레이드오프는 무엇인가?
- DBSCAN은 K-means보다 어떤 상황에서 더 유리한가?
- 테이블 설계 시 기본키를 설정하는 기준은 무엇인가?
- 조인으로 인해 성능 저하가 발생하는 원인은 무엇인가?
- 커넥션 풀을 사용하는 이유는 무엇인가?
- RDB와 NoSQL 중 무엇을 기준으로 선택하는가?
- 데이터베이스 복제와 클러스터링의 선택 기준은 무엇인가?
- 낙관적 락과 비관적 락은 무엇으로 고르는가?
- 인덱스 범위 스캔과 전체 스캔 중 무엇을 선택하는가?
- 뷰 쿼리의 성능 저하는 무엇을 확인해야 하는가?
- 고차원 데이터에서 거리 계산 시 발생하는 문제는 무엇인가?
- 갑자기 꺼져도 커밋한 것이 남는 이유는?
- 읽기만 하는데도 잠금이 걸리는 경우가 있는가?
- 인덱스를 어느 칸부터 놓아야 하는가?
- 데이터가 한 대에 안 들어가면 어떻게 나누는가?
- 목록을 나눌 때 번호와 커서는 무엇이 다른가?
- 낙관적 락과 비관적 락은 무엇으로 고르는가?
네트워크41개
- TCP 연결을 끊을 때 TIME_WAIT 상태가 필요한 이유는?
- HTTP/2는 HTTP/1.1의 무엇을 고쳤는가?
- TCP 연결 종료는 왜 대개 네 번 주고받는가?
- DNS 조회는 어떤 순서로 도는가?
- DNS 질의 시 재귀적 질의와 반복적 질의의 차이는 무엇인가?
- TIME_WAIT 포트 고갈은 어떻게 진단하는가?
- 수신자는 여유 있는데 전송이 느린 이유는?
- 연결 설정 왕복을 언제 줄일 수 있는가?
- 신뢰성보다 지연을 우선할 기준은?
- 재검증 없이 응답을 써도 되는 기준은?
- 실패 응답 코드는 무엇을 기준으로 고르는가?
- 자물쇠 표시는 무엇을 검증한 결과인가?
- 첫 보안 연결에는 왜 왕복이 필요한가?
- 중계 서버의 주체는 어떻게 구분하는가?
- 요청을 어떤 서버로 보낼지 어떻게 정하는가?
- 실시간 갱신에 연결을 계속 열어야 하는가?
- 내부 API에 바이너리 RPC가 유리한 때는?
- 리소스 API의 성숙도를 무엇으로 판단하는가?
- HTTP 메서드 선택의 기준은 무엇인가?
- 전송 계층에서 멀티플렉싱과 디멀티플렉싱은 무엇으로 구분하는가?
- HTTP 상태 코드는 어떤 기준으로 분류하는가?
- Git 협업 시 충돌 해결을 위해 무엇을 우선하는가?
- 웹소켓과 일반 소켓 통신은 무엇으로 구분하는가?
- IP 주소의 핵심 역할은 무엇인가?
- XSS 공격으로 훔칠 수 있는 데이터는 무엇인가?
- 쿠키와 세션은 데이터 저장 위치로 구분하는가?
- 브라우저에 URL을 입력하면 어떤 과정을 거치는가?
- HTTPS는 HTTP와 무엇이 다른가?
- 죽은 서버로 요청이 안 가는 이유는?
- 헬스 체크는 어떤 조건을 검사하는가?
- 먼 나라 사용자도 빠르게 받는 방법은?
- 서버 앞에 하나를 더 두는 이유는?
- TCP 연결에서 RST 패킷은 어떤 상황에 전송되는가?
- TCP 연결은 어떤 상태를 지나 닫히는가?
- TCP는 보낼 양을 어떻게 늘렸다 줄이는가?
- 보낼 데이터가 길에서 감당할 크기보다 크면 어떻게 되는가?
- 같은 망 안에서 상대를 어떻게 찾아가는가?
- 집 안의 여러 기기가 IP 하나로 어떻게 나가는가?
- 브라우저가 캐시를 쓸지 말지 어떻게 정하는가?
- 응답을 압축하면 무엇을 치르는가?
- TLS 핸드셰이크 비용은 어떻게 줄이는가?
언어 · 런타임43개
- equals 재정의 시 hashCode도 바꿔야 하는 이유는?
- setTimeout(0)이 즉시 실행되지 않는 이유는?
- 메모리 관점에서 값 타입과 참조 타입의 선택 기준은 무엇인가?
- 가비지 컬렉션이 멈춤을 만드는 이유는?
- 객체와 호출 프레임은 왜 따로 저장하는가?
- 순환 참조 객체도 회수할 수 있는 이유는?
- 수집기는 처리량과 지연 중 무엇으로 고르는가?
- 왜 모든 바이트코드를 바로 최적화하지 않는가?
- 이름이 같은 클래스가 다른 타입이 되는 조건은?
- 서로 다른 List 타입 인자는 런타임에 남는가?
- 상태 변경을 막으면 동시성에서 무엇을 얻는가?
- 체크 예외는 언제 API 계약에 넣는가?
- 중간 연산을 바로 실행하지 않는 이유는?
- 락보다 높은 수준의 도구를 먼저 고르는 이유는?
- volatile은 무엇을 보장하고 놓치는가?
- 스레드를 늘려도 CPU 병렬성이 없는 이유는?
- 참조 횟수가 0이 아닌 객체도 왜 수거되는가?
- Promise와 타이머 중 무엇이 먼저 실행되는가?
- 함수가 끝난 뒤 지역 변수가 남는 이유는?
- 속성이 없을 때 엔진은 어디까지 찾는가?
- let도 끌어올려지는데 왜 바로 읽지 못하는가?
- 같은 함수를 불렀는데 this가 달라지는 이유는?
- 이름이 다른 두 타입이 호환되는 기준은?
- 널 검사를 했는데도 안전 호출이 필요한 때는?
- 대입 뒤 한쪽을 바꿀 때 결과가 갈리는 이유는?
- 고정 소수점과 부동 소수점은 무엇으로 구분하는가?
- volatile 키워드는 가시성 문제를 어떻게 해결하는가?
- 클로저를 사용해 상태를 은닉하는 이유는 무엇인가?
- 타입스크립트의 구조적 타이핑은 무엇을 기준으로 판별하는가?
- JVM 메모리 영역은 어떻게 구분하는가?
- 파이썬의 가비지 컬렉션은 무엇으로 동작하는가?
- 호이스팅으로 인한 부작용을 어떻게 막는가?
- 값 타입과 참조 타입은 무엇으로 구분하는가?
- 함수형 프로그래밍을 적용하는 이유는 무엇인가?
- GC 알고리즘 선택 기준은 무엇인가?
- 자바의 원시 타입과 래퍼 클래스는 메모리 구조상 어떤 차이가 있는가?
- 같은 문자열 리터럴이 같은 객체인 이유는?
- 한 줄짜리 코드가 화면을 멈추게 하는 이유는?
- 한글이 깨져 보이는 이유는?
- 0.1을 더했는데 왜 딱 안 떨어지는가?
- 정규식 하나가 서버를 멈추게 하는가?
- 클래스 내 정적 변수와 정적 블록의 초기화 순서는 무엇으로 결정되는가?
- 싱글 스레드인 JS에서 비동기 작업이 멈추지 않고 도는 이유는 무엇인가?
운영체제35개
- 컨텍스트 스위칭 비용은 구체적으로 어디서 발생하는가?
- 데드락은 어떤 조건이 모두 모여야 생기는가?
- 데몬 프로세스는 왜 세션 리더로 지정되지 않는가?
- 사용자 모드에서 커널 모드로 진입하는 이유는 무엇인가?
- 프로세스 주소공간을 나누어 사용하는 이유는 무엇인가?
- 스레드 풀을 사용하는 주된 이유는 무엇인가?
- 데드락을 해결하기 위한 회피 전략은 무엇인가?
- 가상 메모리를 사용하는 이유는 무엇인가?
- CPU 스케줄러의 단계별 역할은 무엇인가?
- 소스 코드가 실행 파일로 변하는 과정은 무엇인가?
- 가상 메모리 관리 시 페이징과 세그멘테이션은 무엇으로 구분하는가?
- 동기/비동기 및 블로킹/논블로킹의 차이는 무엇인가?
- 데이터 오류로 인한 손실을 어떻게 방지하는가?
- 블로킹과 논블로킹 I/O의 결정적 차이는 무엇인가?
- 경쟁 상태를 막으려면 무엇을 고려해야 하는가?
- 인터럽트와 폴링의 결정적인 차이는 무엇인가?
- 컨텍스트 스위칭 시 CPU는 무엇을 저장하고 복원하는가?
- 메모리 연속할당 방식 중 무엇을 선택하는가?
- TLB 미스가 발생했을 때 처리 과정은 무엇인가?
- 뮤텍스와 세마포어는 무엇으로 구분하는가?
- 프로세스 스케줄링 방식은 무엇으로 결정하는가?
- 멀티스레드 환경에서 스레드 세이프한 코드를 작성하는 방법은 무엇인가?
- 쓰레싱이 발생하는 원인과 해결책은 무엇인가?
- 동기화 문제를 하드웨어적으로 어떻게 해결하는가?
- CPU와 메모리 중 무엇이 데이터 처리 속도를 결정하는가?
- 프로세스와 스레드의 핵심 차이는 무엇인가?
- 좀비 프로세스는 왜 남는가?
- 코어마다 캐시가 따로인데 값이 어긋나지 않는 이유는?
- 급한 일이 안 급한 일에 밀리는 경우가 있는가?
- 파일 디스크립터 3은 무엇을 가리키는가?
- 조건문 하나가 성능을 좌우하는 경우가 있는가?
- 읽은 파일이 두 번째부터 빨라지는 이유는?
- 큰 파일을 통째로 읽으면 무엇이 문제인가?
- 프로세스가 죽으면 무엇이 정리되고 무엇이 남는가?
- 멀티프로세스와 멀티스레드는 무엇으로 고르는가?
자료구조 · 알고리즘24개
- 해시 테이블의 평균 O(1)이 무너지는 경우는?
- 정렬의 안정성이 실무에서 문제가 되는 때는?
- 이진 탐색 트리가 한쪽으로 치우치면 무엇이 문제인가?
- 메모리보다 큰 데이터를 정렬할 때 무엇을 쓰는가?
- 연결 리스트가 배열보다 항상 삽입이 빠른가?
- 스택과 큐는 각각 어떤 상황에서 선택해야 하는가?
- 해시 충돌 발생 시 해결 방법은 무엇인가?
- 일반 이진트리 대신 이진탐색트리를 사용하는 이유는 무엇인가?
- 그래프를 인접 행렬과 인접 리스트 중 어떤 방식으로 구현해야 하는가?
- 다익스트라와 벨만-포드 알고리즘은 언제 구분하여 쓰는가?
- 재귀 호출 대신 반복문을 써야 하는 순간은 언제인가?
- 최소 신장 트리(MST)를 구성하는 알고리즘으로 무엇을 선택하는가?
- 문자열 검색 효율을 높이는 최적의 자료구조는 무엇인가?
- 그리디 알고리즘과 동적 계획법은 무엇으로 구분하는가?
- 배열보다 연결 리스트를 사용하는 기준은 무엇인가?
- 스택과 큐의 가장 큰 차이는 무엇인가?
- 해시 충돌을 해결하는 두 방식의 차이는 무엇인가?
- 최단 경로 알고리즘의 선택 기준은 무엇인가?
- 문자열 검색 최적화 시 어떤 기준으로 알고리즘을 고르는가?
- 트라이를 사용하는 이유는 무엇인가?
- 재귀 함수 사용 시 스택 오버플로가 발생하는 이유는 무엇인가?
- 우선순위 큐를 힙으로 구현하는 이유는 무엇인가?
- B-tree는 왜 디스크에 유리한가?
- 위상 정렬을 적용하려면 그래프가 어떤 조건을 만족해야 하는가?
프레임워크29개
- @Transactional이 걸리지 않는 경우는?
- JPA에서 N+1 쿼리는 왜 생기고 무엇으로 막는가?
- 스프링 빈이 싱글톤인 것이 언제 문제가 되는가?
- 스프링 AOP의 프록시 자기 호출 시 무엇이 문제인가?
- 생성자 주입이 기본 선택인 이유는?
- 빈 초기화 로직은 어느 시점에 실행해야 하는가?
- 내부 메서드 호출에 부가기능이 빠지는 이유는?
- 자동 구성은 어떤 조건에서 물러나는가?
- 요청 공통 처리는 어느 지점에 두는가?
- 예외를 어디서 HTTP 응답으로 바꾸는가?
- 인증 정보는 어떻게 보안 문맥에 들어가는가?
- 같은 엔티티를 두 번 조회하면 왜 같은 객체인가?
- 수정 메서드 없이 UPDATE가 나가는 이유는?
- 외래 키 변경은 어느 쪽에서 반영해야 하는가?
- 즉시 로딩을 기본값처럼 쓰면 왜 위험한가?
- 동적 조건이 많을 때 문자열 쿼리는 왜 약한가?
- 외부 롤백과 무관한 기록은 어떻게 남기는가?
- 엔티티를 API 응답에 바로 쓰면 무엇이 새는가?
- 서비스 계층이 모든 일을 맡으면 무엇이 무너지는가?
- 정적 클래스 내부에 정적 메서드를 정의하는 이유는 무엇인가?
- JVM GC의 효율을 높이는 튜닝 포인트는 무엇인가?
- JVM의 핵심 역할은 무엇인가?
- 체크 예외와 언체크 예외의 선택 기준은 무엇인가?
- 톰캣은 서블릿 컨테이너로서 어떤 일을 하는가?
- 인터페이스와 추상 클래스는 무엇으로 구분하는가?
- ORM을 사용하는 이유는 무엇인가?
- 단위 시험과 통합 시험은 무엇으로 가르는가?
- 목록 하나 읽었는데 쿼리가 백 번 나가는 이유는?
- 부모 트랜잭션과 무관하게 동작하려면 어떤 전파 속성을 쓰는가?
아키텍처 · 분산시스템29개
- 분산 트랜잭션에서 Saga 패턴이 필요한 이유는?
- 이벤트 소싱을 도입할 때의 트레이드오프는 무엇인가?
- 메시지 큐를 두면 무엇을 얻고 무엇을 잃는가?
- 캐시를 지우는 일이 어려운 이유는?
- 분산 시스템에서 CAP 중 무엇을 포기하게 되는가?
- 재시도가 있는 시스템에서 멱등성이 필요한 이유는?
- 서킷 브레이커는 무엇을 막아주는가?
- 노드를 늘릴 때 일관된 해싱이 필요한 이유는?
- 메시지 순서는 어디까지 보장되는가?
- 읽기와 쓰기 모델을 나누면 무엇을 얻고 잃는가?
- 여러 서비스를 거친 요청은 어떻게 따라가는가?
- 배포 방식은 무엇을 기준으로 고르는가?
- 호출 시간 제한은 무엇을 기준으로 정하는가?
- 게이트웨이를 두면 무엇을 얻고 무엇을 걱정해야 하는가?
- 리팩토링과 기능 추가를 나눠서 하는 이유는 무엇인가?
- 팩토리 메소드 패턴을 언제 사용하는가?
- 객체 지향의 5대 원칙을 지키는 이유는 무엇인가?
- 스트레티지 패턴을 사용하는 판단 기준은 무엇인가?
- 컴포지트 패턴을 어떤 상황에서 사용하는가?
- Raft는 왜 과반수를 요구하는가?
- 처리에 실패한 메시지는 어디로 가는가?
- 부하가 늘면 서버를 어떻게 늘리는가?
- 보내는 쪽이 받는 쪽보다 빠르면 무엇이 터지는가?
- 단계마다 타임아웃을 5초씩 주면 무엇이 잘못되는가?
- 남의 서버에 일이 생긴 것을 어떻게 아는가?
- 서버마다 시계가 다르면 무엇이 깨지는가?
- 메시지 형식을 바꾸면 옛 소비자는 어떻게 되는가?
- 포트와 어댑터 구조에서 경계를 나누는 기준은 무엇인가?
- 쓰기와 읽기 모델을 분리하는 기준은 무엇인가?
프론트엔드36개
- useEffect 의존성 배열을 잘못 넣으면 어떤 문제가 생기는가?
- 브라우저가 화면을 그리기까지 무슨 일이 일어나는가?
- 리렌더링이 필요 이상으로 도는 이유는?
- useEffect 의존성 배열을 비워두면 언제 실행되는가?
- 변경점을 비교하면 언제 비용이 줄어드는가?
- 계산 단계와 반영 단계를 왜 나누는가?
- 공유 상태는 어느 컴포넌트에 두는가?
- 목록 항목의 정체성을 어떻게 보존하는가?
- 계산 결과와 함수 참조는 언제 기억해야 하는가?
- 클라이언트 경계는 어디에 두는가?
- 첫 화면을 막는 리소스는 어떻게 줄이는가?
- 레이아웃 계산과 픽셀 갱신은 언제 생기는가?
- 선택자 최적화는 실제로 언제 필요한가?
- 선언한 너비와 실제 크기가 왜 달라지는가?
- 한 축 배치와 두 축 배치는 어떻게 구분하는가?
- 화면 밖 이미지는 언제 불러와야 하는가?
- 번들은 어떤 경계로 나눠 불러오는가?
- 번들 최적화는 어디서 시작하는가?
- 폰트 표시 지연과 깜빡임을 어떻게 줄이는가?
- 화면이 바뀐 뒤 포커스는 어디로 보내는가?
- div만 쓰면 어떤 비용이 드는가?
- 체감 성능은 어떤 세 지표로 판단하는가?
- 클라이언트 데이터는 어디에 보관해야 하는가?
- 응답 특성에 따라 캐시 방식을 어떻게 고르는가?
- 렌더링 방식은 어떤 요구로 결정하는가?
- 서버 HTML과 첫 렌더가 다르면 왜 문제인가?
- 로그 레벨을 구분하여 설정하는 이유는 무엇인가?
- CSRF와 XSS의 결정적인 차이는 무엇인가?
- 프론트엔드 성능 최적화 시 번들 크기를 무엇으로 판단하는가?
- 웹 서버와 WAS의 역할 분담은 왜 하는가?
- React Hook을 사용하는 이유는 무엇인가?
- 브라우저에서 FTP 지원을 중단하는 이유는 무엇인가?
- 브라우저가 요청을 미리 한 번 더 보내는 이유는?
- 스타일을 바꿨을 뿐인데 왜 느려지는가?
- 화면이 안 바뀌는데 값은 바뀌어 있는 경우가 있는가?
- SSR에서 하이드레이션이 필요한 이유는 무엇인가?
인프라 · 보안26개
- JWT를 세션 대신 쓸 때 무엇을 잃는가?
- HTTPS는 무엇을 보장하고 무엇을 못 하는가?
- CORS는 무엇을 막는가?
- 컨테이너 이미지를 최소화해야 하는 이유는 무엇인가?
- 공개키와 비밀키는 무엇으로 구분하는가?
- 대칭키와 공개키 중 무엇을 선택하는가?
- TLS 핸드셰이크의 핵심 목적은 무엇인가?
- 컨테이너는 가상 머신과 무엇이 다른가?
- SQL 인젝션은 무엇으로 막는가?
- 죽은 파드는 누가 다시 만드는가?
- 이미지를 고쳐도 조금만 받는 이유는?
- 빌드는 통과했는데 배포에서 깨지는 이유는?
- 비밀번호를 앱에 안 주고 로그인하는 방법은?
- 이미지와 컨테이너는 무엇이 다른가?
- 비밀번호를 그냥 해시하면 왜 안 되는가?
- 되돌리기와 지우기는 무엇이 다른가?
- 요청이 한꺼번에 몰릴 때 어떻게 막는가?
- 누가 무엇을 할 수 있는지 어떻게 정하는가?
- 비밀키를 코드에 넣으면 왜 안 되는가?
- HSTS는 무엇을 막는가?
- 세션 하이재킹은 왜 성립하는가?
- 권한은 왜 최소로 주는가?
- 인코딩과 암호화와 해싱은 무엇이 다른가?
- 무작위 값은 어디서 만들어야 안전한가?
- 사용자 입력을 왜 전부 의심해야 하는가?
- CSRF 토큰은 쿠키 세션 방식에서 왜 필수인가?
모바일32개
- 화면을 돌리면 데이터가 사라지는 이유는?
- 푸시 알림이 안 오는 이유는 대개 무엇인가?
- 앱이 백그라운드에서 죽는 이유는?
- 백그라운드 전환 때 어디서 자원을 해제하는가?
- 뷰 바인딩은 왜 onDestroyView에서 비우는가?
- 회전 뒤에도 남겨야 할 상태는 어디에 두는가?
- 화면 상태를 둘 때 두 수단을 어떻게 나누는가?
- 메모리 부족 시 어떤 프로세스부터 종료되는가?
- 실행 시점과 사용자 인지 여부로 어떤 수단을 고르는가?
- 예약한 작업은 정말 한 번만 실행되는가?
- 비동기로 옮겼는데도 왜 응답 없음이 생기는가?
- 화면이 닫혔는데 객체가 남는 이유는?
- 전송 성공은 단말 수신까지 뜻하는가?
- 재사용 셀에 이전 데이터가 비치는 이유는?
- 상태 변경은 어디까지 다시 실행되는가?
- 부모 작업이 취소되면 자식은 어떻게 되는가?
- 권한을 한 번 받으면 계속 쓸 수 있는가?
- 첫 화면을 빠르게 띄우려면 무엇을 미뤄야 하는가?
- 앱이 백그라운드로 가면 무엇을 중단해야 하는가?
- 자동 참조 계산인데 왜 메모리가 남는가?
- 상태 소유자를 잘못 두면 어떤 버그가 생기는가?
- 오프라인 수정이 서버 값과 충돌하면 누가 이기는가?
- 외부 링크를 곧바로 화면에 열어도 되는가?
- 설치 크기를 줄이면 실행 시 무엇을 치르는가?
- 모바일 요청은 실패할 때마다 다시 보내도 되는가?
- 백그라운드 제약을 피하는 방법은 무엇인가?
- 푸시 알림의 전달 보장을 위해 무엇을 설계하는가?
- 안드로이드 메인 스레드에서 무거운 작업을 하면 왜 ANR이 발생하는가?
- 안드로이드에서 메모리 누수가 발생하는 주원인은 무엇인가?
- 코루틴의 구조적 동시성은 무엇을 해결하는가?
- 오프라인 우선 앱에서 로컬과 서버의 데이터 일관성은 어떻게 유지하는가?
- WorkManager는 어떤 방식으로 작업 실행을 보장하는가?