
벡엔드 개발자 면접 질문(기술면접) 질문 정리 모음 - 기술스택
2021-04-09 01:00 시에 저장한 글입니다.
백엔드 면접 질문용 공부 후 정리 자료입니다. 정확하지 않을 수 있으니 꼭 다시 책이나 자료를 참고하여 공부하세요
1) gRPC
- 구글에서 개발한 어느 환경에서 실행할 수 있는 최신 오픈 소스 고성능 RPC 프레임워크
(1) RPC (Remote Procedure Call)
- 별도의 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게하는 프로세스 간 통신 기술
- MSA(Micro Service Architecture) 에서 다양한 언어와 프레임워크를 RPC를 이용하여 언어에 구애받지 않고 원격에 있는 프로시저를 호출하여 고유 프로그램의 개발에 집중할 수 있게 해주는 기술
- gRPC를 이용하면 원격에 있는 애플리케이션의 메서드를 로컬 메서드인 것처럼 직접 호출할 수 있기 때문에 분산 애플리케이션과 서비스를 보다 쉽게 만들 수 있음
- gRPC는 RPC 시스템에서와 마찬가지로 서비스를 정의하고, 서비스를 위한 매개변수와 반환 값을 가지는 메서드를 만든다는 아이디어를 가지고 있음
- 서버 측은 정의한 서비스 규격에 따라 인터페이스를 구현하고 gRPC 서버를 실행하여 클라이언트 호출을 처리한다. 클라이언트 측에서는 서버와 동일한 방법을 제공하는 stub이 있다.
(2) stub
- Parameter 객체를 Message로 Marshalling/Unmarshalling하는 레이어
- 서버와 클라이언트는 서로 다른 주소 공간을 사용하므로 메모리 매개 변수에 대한 포인터가 다른 데이터를 가리키게 되기 때문에 함수 호출에 사용된 매개 변수를 꼭 변환해줘야 함
client의 stub: 함수 호출에 사용된 파라미터의 변환(marshalling) 및 함수 실행 후 서버에서 전달된 결과의 변환 담당server의 stub: 클라이언트가 전달한 매개 변수의 역변환(unmarshalling) 및 함수 실행 결과 변환을 담당
(3) protocol buffer
- gRPC는 IDL(Interface Definition Language)로 protocol buffer를 사용
protocol buffer: 직렬화 데이터 구조. 어떤 언어나 플랫폼에서도 통신 프로토콜이나 데이터 저장을 사용할 때, 구조화된 데이터를 전환하게 해주는 방법proto file: 직렬화하려는 데이터 구조를 정의. 프로토콜 버퍼는 여러 프로그래밍 언어를 지원하기 때문에, 특정 언어에 종속성이 없는 형태로 데이터 타입을 정의- 프로토콜 버퍼 데이터는 일련의 ‘이름-값’의 쌍을 포함하는 작은 논리적 레코드인 메시지로 구성. 이렇게 작성된 proto file을 protoc 컴파일러로 컴파일 하면 데이터에 접근할 수 있는 각 언어에 맞는 형태의 데이터 클래스를 생성해줌. 만들어진 클래스는 각 필드를 위한 접근자 뿐 아니라 전체 구조를 바이트로 직렬화하거나 바이트로부터 전체 구조를 파싱하는 메서드들을 제공
(4) gRPC 특징
높은 생산성과 다양한 언어 및 플랫폼 지원: gRPC는 서비스와 메시지를 정의하기 위해 Protocol Buffers를 사용. 프로토콜 버퍼의 IDL만 정의하면 서비스와 메세지에 대한 소스코드가 자동으로 생성되고 데이터를 주고 받을 수 있음HTTP/2 기반의 양방향 스트리밍: gRPC는 HTTP/2 기반으로 통신한다. HTTP/2는 하나의 TCP 연결이 여러 개의 양방향 스트리밍을 지원성능 이점: HTTP/2 레이어 위에서 Protocol Buffers를 사용해 직렬화된 바이트 스트림으로 통신하여 JSON 기반의 통신보다 더 가볍고 통신 속도가 빠르다. 때문에 laytency 감소와 더 많은 트래픽을 처리할 수 있는 성능의 이점이 있다.
2 ) Redis와 Memcached
- key-value store NOSQL DB입니다.
- 싱글스레드로 동작하며 자료구조를 지원
- 데이터의 스냅샷 혹은 AOF 로그를 통해 복구가 가능해서 어느정도 영속성도 보장
- 스프링에서는 세션을 관리하거나, 캐싱을 할 때 사용
- Redis와 Memcached의 차이에 대해서 설명해주세요.
- Redis는 싱글 스레드 기반으로 동작하고, Memcached는 멀티스레드를 지원해서 멀티 프로세싱이 가능합니다.
- Redis는 다양한 자료구조를 지원하고, Memcached는 문자열 형태로만 저장합니다.
- Redis는 여러 용도로 사용할 수 있도록 다양한 기능을 지원합니다.
- Redis는 스냅샷, AOF 로그를 통해서 데이터 복구가 가능합니다.
3) Elastic Search
- Elastic Search는 자바로 개발된 오픈소스 검색엔진 입니다. 보통 단독으로 사용하기보다는 ELK 스택이라고 부르는 Logstash, Kibana, Beats를 추가적으로 사용합니다.
- Inverted Index 구조로 데이터를 저장해서, 전문(Full-text) 검색시에 RDBMS에 비해 뛰어난 성능을 보장합니다.
- 다양한 용도로 사용할 수 있습니다. (데이터 저장, 문서 검색, 위치 검색, 머신 러닝 기반 검색, 로그 분석, 보안 감사 분석 등)
- Elastic Search의 인덱스구조와 RDBMS의 인덱스 구조의 차이에 대해 설명해주세요.
- Elastic Search는 Inverted-Index 구조로 데이터를 저장합니다. 이는 책의 색인을 생각해보면 쉬운데, 특정 단어가 출현하는 doc을 저장하는 것입니다. 반면 RDBMS는 B-Tree와 그와 유사한 인덱스를 사용합니다. 데이터가 어디에 존재하는지 어떤 순서로 저장하는 지의 차이라고 생각합니다. RDBMS에도 다양한 인덱스 구조가 있으나 여기서 예로 든 것은 B-Tree 인덱스입니다.
- Elastic Search의 키워드 검색과 RDBMS의 LIKE 검색의 차이에 대해 설명해주세요.
- Elastic Search의 키워드 검색은 document를 저장할 때 수행하는 알고리즘과 동일한 알고리즘으로 키워드를 분리합니다. 그 중에서 랭킹알고리즘을 통해서 가장 유사한 순서대로 결과를 나타냅니다.
- RDBMS에서의 LIKE 검색은 와일드카드로 시작하지 않는 경우에만 인덱스를 사용하고 나머지 경우는 전체를 탐색하기 때문에 상대적으로 느립니다.
