개발지식 먹는 하마 님의 블로그
CS 스터디 - 커널, DNS, N+1 본문
✅ 커널
1) 커널에 대해 설명해주세요
더보기
커널은 운영체제의 핵심 부분으로, 하드웨어와 애플리케이션 소프트웨어 사이에서 자원 관리와 추상화를 담당합니다.
프로세스 관리(스케줄링, 문맥 교환), 메모리 관리(가상 메모리, 페이징), 파일 시스템 관리, 디바이스 제어(드라이버) 등을
수행합니다.
프로세스 관리(스케줄링, 문맥 교환), 메모리 관리(가상 메모리, 페이징), 파일 시스템 관리, 디바이스 제어(드라이버) 등을
수행합니다.
2) 커널이 왜 필요한가요?
더보기
커널은 다양한 자원을 관리하는데 이는 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 매개하기 위해서
즉, 인터페이스로써 사용자가 컴퓨터만의 언어와 규칙으로 하드웨어와 통신할 수 있도록 도와주기 때문입니다.
즉, 인터페이스로써 사용자가 컴퓨터만의 언어와 규칙으로 하드웨어와 통신할 수 있도록 도와주기 때문입니다.
3) 커널에는 어떤 종류가 있고 또 차이점은 무엇인지 말씀해주세요
더보기
대표적으로 모놀리식 커널(Monolithic Kernel) 과 마이크로커널(Microkernel) 구조가 있습니다.
모놀리식 커널은 모든 핵심 기능이 하나의 큰 커널에서 동작하는 것으로 성능은 빠르지만 한 부분에 문제가 생기면
전체 시스템이 불안정해질 수 있습니다.
마이크로 커널은 최소한의 기능만 커널모드에서 실행하고 나머지 기능은 유저 모드에서 서비스 형태로 동작합니다.
안정성과 보안성이 높지만 컨텍스트 스위칭이 잦아져 성능 오버헤드가 있을 수 있습니다.
모놀리식 커널은 모든 핵심 기능이 하나의 큰 커널에서 동작하는 것으로 성능은 빠르지만 한 부분에 문제가 생기면
전체 시스템이 불안정해질 수 있습니다.
마이크로 커널은 최소한의 기능만 커널모드에서 실행하고 나머지 기능은 유저 모드에서 서비스 형태로 동작합니다.
안정성과 보안성이 높지만 컨텍스트 스위칭이 잦아져 성능 오버헤드가 있을 수 있습니다.
4) 시스템 콜은 왜 필요한가요? 커널과 어떻게 연결되나요?
더보기
애플리케이션은 보안상 하드웨어 자원(CPU, 메모리, I/O 장치)에 직접 접근할 수 없습니다.
대신 커널이 제공하는 인터페이스인 시스템 콜을 호출해 간접적으로 자원을 사용합니다.
예를 들어 파일을 열 때 open() 시스템 콜을 사용하면, 커널이 파일 시스템과 디스크 드라이버를 통해 실제 하드웨어에 접근합니다.
즉, 시스템 콜은 유저 모드(User Mode)와 커널 모드(Kernel Mode)를 이어주는 인터페이스 역할을 합니다
대신 커널이 제공하는 인터페이스인 시스템 콜을 호출해 간접적으로 자원을 사용합니다.
예를 들어 파일을 열 때 open() 시스템 콜을 사용하면, 커널이 파일 시스템과 디스크 드라이버를 통해 실제 하드웨어에 접근합니다.
즉, 시스템 콜은 유저 모드(User Mode)와 커널 모드(Kernel Mode)를 이어주는 인터페이스 역할을 합니다
5) 시스템 콜과 일반 함수 호출의 본질적 차이는 무엇인가요? 시스템 콜은 항상 컨텍스트 스위칭을 유발하나요?
더보기
시스템 콜은 권한 레벨과 보호 검사가 수반되기 때문에 모드 스위치 오버헤드가 있고
일반 함수 호출은 동일 권한 주소 공간 내에서 끝난다는 차이가 있습니다.
컨텍스트 스위칭을 항상 유발하지는 않고 대부분 모드 스위치만 합니다.
다만 I/O 대기 등으로 블록되면 스케줄러가 컨텍스트 스위치를 수행합니다.
일반 함수 호출은 동일 권한 주소 공간 내에서 끝난다는 차이가 있습니다.
컨텍스트 스위칭을 항상 유발하지는 않고 대부분 모드 스위치만 합니다.
다만 I/O 대기 등으로 블록되면 스케줄러가 컨텍스트 스위치를 수행합니다.
✅ DNS
1) DNS 동작 방식에 대해 설명해주세요
더보기
사용자가 웹 브라우저에서 도메인을 입력하면 먼저 브라우저가 DNS 캐시를 확인합니다.
IP 주소가 없다면 ISP의 로컬 DNS 서버에 이를 요청하는 재귀적 쿼리를 보냅니다.
로컬 DNS 서버가 반복적 쿼리를 통해 루트 - TLD - 서브 도메인 네임 서버에서 IP 주소를 획득 및 반환합니다.
브라우저가 IP 주소를 얻으면 IP 패킷을 생성하고 라우터가 라우팅 테이블을 참조해 패킷을 전달합니다.
도메인에 해당하는 서버가 패킷을 수신하여 TCP 3-way handshake로 연결을 한 후,
HTTP 요청을 처리하고 결과를 응답 패킷으로 전송합니다.
최종적으로 브라우저가 해당 응답을 받아 렌더링 하면서 마무리 됩니다.
IP 주소가 없다면 ISP의 로컬 DNS 서버에 이를 요청하는 재귀적 쿼리를 보냅니다.
로컬 DNS 서버가 반복적 쿼리를 통해 루트 - TLD - 서브 도메인 네임 서버에서 IP 주소를 획득 및 반환합니다.
브라우저가 IP 주소를 얻으면 IP 패킷을 생성하고 라우터가 라우팅 테이블을 참조해 패킷을 전달합니다.
도메인에 해당하는 서버가 패킷을 수신하여 TCP 3-way handshake로 연결을 한 후,
HTTP 요청을 처리하고 결과를 응답 패킷으로 전송합니다.
최종적으로 브라우저가 해당 응답을 받아 렌더링 하면서 마무리 됩니다.
2) DNS의 재귀적 쿼리와 반복적 쿼리의 차이점에 대해 설명해주세요
더보기
재귀적 쿼리는 클라이언트가 DNS 서버에게 최종 답을 요구하는 방식으로 클라이언트는 단순하지만, 서버 부담이 커지고 처리 시간이 길어질 수 있다는 단점이 있습니다.
반면, 반복적 쿼리는 클라이언트가 직접 다음 서버로 질의를 이어가는 방식으로
루트 서버가 참조할 다음 서버 주소를 알려주고 클라이언트가 반복적으로 질의합니다.
서버 부담은 적지만 클라이언트 구현이 복잡해집니다.
반면, 반복적 쿼리는 클라이언트가 직접 다음 서버로 질의를 이어가는 방식으로
루트 서버가 참조할 다음 서버 주소를 알려주고 클라이언트가 반복적으로 질의합니다.
서버 부담은 적지만 클라이언트 구현이 복잡해집니다.
3) 도메인을 캐시에 저장하는데, 자주 찾는 도메인과 자주 찾지 않는 도메인은 각각 어디에 저장하는가?
더보기
자주 찾는 도메인은 Local DNS 서버의 캐시에 저장되고,
자주 찾지 않는 도메인은 클라이언트의 로컬 캐시에 저장되며 이는 TTL이 만료되면 삭제됩니다.
자주 찾지 않는 도메인은 클라이언트의 로컬 캐시에 저장되며 이는 TTL이 만료되면 삭제됩니다.
✅ N+1
1) ORM 사용 시 N+1 문제란 무엇이고 해결 방법은?
더보기
지연 로딩에서 연관된 데이터를 조회할 때, 1개의 쿼리로 조회한 엔티티와 연관된 데이터 N개 만큼 추가 쿼리가
발생하여 성능이 저하되는 문제입니다. Join Fetcch, EntityGraph와 같이 fetch 전략 최적화로 이를 방지할 수 있습니다.
발생하여 성능이 저하되는 문제입니다. Join Fetcch, EntityGraph와 같이 fetch 전략 최적화로 이를 방지할 수 있습니다.
2) 정규화를 해도 되는 상황 vs 반정규화를 고려해야 하는 상황은?
더보기
정규화는 데이터 중복 제거와 무결성 보장에 유리해서 설계 초기나 변경이 잦은 시스템에 적합합니다.
반면, 반정규화는 조인 비용을 줄이기 위해 중복을 허용하는 것으로,
조회 성능이 중요하거나 대용량 데이터를 다루는 경우 고려합니다.
그래서 읽기 위주 시스템에서는 반정규화를 적용하기도 합니다.
3) 대용량 테이블의 성능을 개선하는 방법은 무엇인가요?
더보기
대용량 테이블의 성능을 개선하려면 인덱스 최적화, 쿼리 튜닝, 파티셔닝,
아카이빙, 정규화/반정규화 판단 등을 고려해야 합니다.
또한 불필요한 Full Scan을 방지하고, 배치 처리 시에는 페이징 처리나 Cursor 기반 처리를 적용해야 합니다.
그래서 구조, 쿼리, 데이터 분산 측면에서 함께 최적화하는 것이 중요합니다.
아카이빙, 정규화/반정규화 판단 등을 고려해야 합니다.
또한 불필요한 Full Scan을 방지하고, 배치 처리 시에는 페이징 처리나 Cursor 기반 처리를 적용해야 합니다.
그래서 구조, 쿼리, 데이터 분산 측면에서 함께 최적화하는 것이 중요합니다.
다익스트라 알고리즘에 대한 이야기도 나누었지만 면접 질문으로는 약간? 정리하기 부족한 감이 있어서
패스하기로 하겠다.
(그치만 출제자의 설명을 통해 이해는 쏙쏙 되었다.)
'면접 준비' 카테고리의 다른 글
CS 스터디 - 그래프, NAT, 배열, 분산락 (2) | 2025.08.26 |
---|---|
CS 스터디 - MSA, JAVA, JVM & GC (0) | 2025.08.21 |
CS 스터디 - OOP, 프로세스와 스레드, 배열과 연결 리스트 (0) | 2025.08.20 |
CS 스터디 - 본격 CS 스터디 시작! (DI, 트랜잭션, Https, AOP, 로드밸런싱) (0) | 2025.08.19 |