Q. NoSQL DB와 SQL DB의 차이점은? 각각 어느 상황에서 사용할 수 있을까? 그래프 종류별(그래프, key-value, 관계형 등)로 예시를 들어 설명해보아라.
A. SQL DB는 스키마 기반의 테이블 구조를 가지고 있으며 ACID 특성을 보장하며, 금융 시스템과 같이 데이터 무결성과 트랜잭션 관리가 중요한 경우 사용됩니다. 예로는 MySQL, PostgreSQL, Oracle이 있습니다. NoSQL DB는 스키마가 유연하고 대규모 데이터 분산 저장 및 처리에 최적화되어 있으며, BASE 특성을 가집니다. 키-값 저장소는 Redis, DynamoDB가 있으며, 캐싱과 세션 관리에 사용됩니다. 도큐먼트 저장소는 MongoDB, CouchDB가 있으며, 유연한 스키마가 필요한 애플리케이션에 적합합니다. 컬럼 패밀리 저장소는 Cassandra, HBase가 있으며, 대규모 데이터 분석에 사용됩니다. 그래프 저장소는 Neo4j, Amazon Neptune이 있으며, 소셜 네트워크와 추천 시스템에 적합합니다.
Q. N+1 문제란 무엇이고, JPA에서 이를 예방할 수 있는 방법은?
A. N+1 문제는 주 쿼리 1개에 대해 N개의 추가 쿼리가 발생하는 문제입니다. JPA에서 이를 예방하기 위해서는 페치 조인(Fetch Join), 엔터티 그래프(Entity Graph), 서브 셀렉트(Subselect)와 같은 방법을 사용할 수 있습니다.
Q. Docker와 VM의 차이점은? Docker가 항상 VM보다 우세하다고 할 수 있을까?
A. Docker는 컨테이너를 사용하여 애플리케이션과 그 종속성을 격리하며, 호스트 운영체제의 커널을 공유합니다. 반면 VM은 하이퍼바이저 위에서 독립된 운영체제를 실행합니다. Docker는 경량화되어 빠르고 효율적이지만, VM은 더 높은 격리와 보안을 제공합니다. 따라서 Docker가 항상 VM보다 우세하다고 할 수는 없습니다.
Q. Docker에서 이미지 레이어를 효율적으로 관리하는 방법은 무엇인가? Docker 이미지 레이어의 개념을 설명하고, Dockerfile 작성 시 이미지 레이어 최적화를 위한 베스트 프랙티스를 설명하시오.
A. Docker 이미지 레이어는 이미지를 구성하는 파일 시스템의 각 계층을 의미합니다. 레이어를 효율적으로 관리하려면 레이어 수를 최소화하고, 변경이 적은 부분을 위로, 자주 변경되는 부분을 아래로 배치합니다. Dockerfile 작성 시 명령어들을 하나의 RUN 명령어로 결합하고, 불필요한 파일을 정리하며, 캐시 사용을 고려하는 것이 좋습니다.
Q. Docker가 namespace과 cgroup을 사용하는 목적은 무엇인가?
A. Docker는 namespace를 사용하여 프로세스 격리, 네트워크 격리, 사용자 격리 등을 제공하며, cgroup을 사용하여 자원(CPU, 메모리 등) 사용을 제어하고 제한합니다. 이를 통해 각 컨테이너가 독립적으로 실행되도록 보장합니다.
'CS > 기술 면접 대비' 카테고리의 다른 글
[백엔드 기술 면접] #4 Server (2) (3) | 2024.11.14 |
---|---|
[백엔드 기술 면접] #3 Server (1) (0) | 2024.11.11 |
[백엔드 기술 면접] #2 Reactive Programming (0) | 2024.11.06 |