공부 정리/면접 준비

    [ 네트워크 ] 3-way handshake, 4-way handshake 과정을 설명해 보세요.

    참고 ) TCP와 UDP의 특징을 설명해 보세요. TCP/UDP 모두 OSI 7 Layer 중 Transport layer에서 사용하는 기술입니다. TCP는 3-way handshake 과정을 통해 연결을 설정하고 4-way handshaker과정을 통해 해제합니다. TCP는 흐름 제어를 위해 보편적으로 Sliding Window 방식을 사용합니다. 한 번에 처리할 수 있는 데이터를 정해 놓고, 보내고, 응답받고, 윈도우를 밀어내는 방식을 반복해서 전송합니다. 이 때, Receiver는 Sender로 ACK을 보냅니다. ACK을 보낼 때, Seq번호를 순차적으로 같이 전송하기 때문에 Sender는 같은 Seq번호의 ACK이 여러 번 도착할 경우 문제가 발생한 것을 알 수 있습니다. TCP는 세그먼트가 손..

    [ 네트워크 ] DNS서버에 요청하는 과정을 자세하게 설명해 보세요.

    www.google.com 에 요청한다고 가정하겠습니다. 브라우저는 DNS서버에 요청하기 전, 브라우저에 도메인이 캐싱되어 있는지 확인합니다. 없을 경우, OS의 hosts파일에 도메인이 있는지 확인합니다. 없을 경우, local dns서버에 물어봅니다. local dns서버는 root name서버의 ip주소를 기록한 hint파일이 있어, 이것을 참조하여 local dns 서버로 요청을 보냅니다. root name서버는 NS레코드와 A레코드가 있는 Glue레코드를 참조하여 top-level name server를 참조하라고 응답합니다. top-level name server - com 서버는 그 아래 서버에 대한 정보를 갖고 있어 google.com의 네임서버를 참조하라고 응답합니다. 최 요청을 받은 네..

    [ 네트워크 ] 웹사이트에 접속할 때 무슨 일이 일이 일어나는지 설명해 보세요.

    주소창에 URL을 입력하면 브라우저는 DNS서버에 요청을 해서 IP주소를 얻습니다. IP주소를 얻으면 HTTP를 이용해서 IP주소로 웹사이트에 대해 요청합니다. 서버는 요청을 받으면, 처리해서 다시 응답을 보냅니다. 브라우저는 응답을 받으면 HTML코드를 파싱해서 화면에 출력합니다.

    [ 데이터 베이스 ] Consistent Hashing에 대해서 설명해 보세요.

    Hash Ring을 사용해서 해싱을 하는 방법입니다. 메타정보 조회 없이 클러스터에서 키가 저장된 노드를 바로 찾아갈 수 있습니다. Rebalancing문제를 해결하기 위한 방법입니다. Virtual Node는, 실제 물리 노드보다 토큰을 더 많이 보유하는 방식입니다. 이를 통해, Object분포의 불균일성을 해결합니다. 일반 HashTable을 사용하면, 분산 DB에서 node를 추가하거나 삭제하는데 O(K)의 시간이 걸립니다. (K는 Key의 수) Coninstent Hashing을 사용하면 O(K/N)의 시간으로 가능합니다. 단, Key를 추가하거나 삭제할 때, 일반적인 HashTable은 O(1)이면 가능하지만, Consistent Hashing의 경우 O(logN)의 시간이 걸립니다. (N은 N..

    [ 데이터 베이스 ] Replication과 Clustering에 대해서 설명해 보세요.

    리플리케이션은, DB를 권한에 따라 Master-Slave로 구축하는 방식입니다. Master Node는 쓰기작업만을, Slave Node는 읽기작업만을 처리합니다. 비동기적으로 운영되어 지연시간이 적은 장점이 있지만, 데이터 동기화가 보장되지 않아 일관성에 문제가 있을 수 있고, Master Node에 문제가 생길 경우 복구가 어렵습니다. 클러스터링은, DB를 여러개의 서버에 수평적으로 구축하는 방식입니다. 클러스터링은 SPoF(Single point of Failure)와 같은 문제를 해결하기 위해서 사용합니다. 동기적으로 운영되어 Write에 지연 시간이 있습니다. 항상 일관성있는 데이터를 얻을 수 있고, 하나의 노드가 죽어도 끊김없이 계속 운용이 가능합니다. ### 손병구님 #### https:/..

    [ 데이터 베이스 ] Partitioning과 Sharding에 대해서 설명해 보세요.

    파티셔닝은, Perfomance, Manageability, Availability를 향상시키기 위해 테이블/인덱스를 분리하는 방법입니다. 파티셔닝 방법은 크게 두가지로 볼 수 있습니다. Horizontal Partitioning은, 동일한 스키마의 데이터를 여러개의 테이블에 나누어 저장하는 것을 뜻합니다. Row기반으로 데이터를 분리합니다. Vertical Partitioning은, 하나의 Entity에 저장된 데이터를 여러개의 엔티티로 분리하는것을 뜻합니다. Column기반으로 데이터를 분리합니다. Range Partitioning은, 연속적인 숫자 등을 기준으로 파티셔닝 하는 방식입니다. Hash Partitioning은, 각 파티션마다 해시값의 범위를 할당하는 방식입니다. 범위 Query를 효율적..

    [ 프로그래밍 언어 ] Java의 JVM에 대해서 설명해 보세요.

    자바 프로그램을 개발하기 위해서는 우선 파일 확장명이 .java인 텍스트 파일을 생성하고 자바 언어로 코드를 작성해야 합니다. 이렇게 만들어진자바 소스 파일을 컴파일러인 javac 명령어로 컴파일합니다. 컴파일이 성공하면 확장명이 .class인 바이트 코드 파일이 생성됩니다. 바이트 코드 파일은 완전한 기계어가 아니므로 바로 실행할 수 있는 파일이 아닙니다. 바이트 코드 파일을완전한 기계어로 번역해서 실행하려면 java 명령어를 사용해야 합니다. 바이트 코드 파일과 자바 가상 기계 자바 프로그램은 완전한 기계어가 아닌, 바이트 코드 파일(.class)로 구성됩니다. 바이트 코드 파일은 운영체제에서 바로 실행할 수 없고, 자바 가상 기계(JVM : Java Virtual Machine)라는 번역기가 필요합..

    [ 운영체제 ] Paging과 Segmentation에 대해서 설명해 보세요.

    Paging과 Segmentation은 운영체제가 메모리를 관리( Memory Management )하는 방법입니다. 어떠한 프로그램을 실행할 때, 컴퓨터에서는 프로그램들을 메모리 공간에 연속적으로 할당하게 됩니다. 만약 여러 프로그램들이 메모리에 할당되고 해제되는 것이 반복되다 보면 메모리 공간이 조각조각 나뉘게 되어 총메모리가 충분함에도 불구하고 프로그램에 메모리를 할당하는 것이 불가능한 상태가 발생하게 됩니다. 이러한 현상을 바로 메모리 단편화라고 하며, 페이징과 세그멘테이션은 이러한 메모리 단편화의 해결방법입니다. Memory Management - Focus : 메모리 관리에서 크게 다음과 같은 관점으로 효율성이 있는지 확인해야합니다. 1. Utilization: 물리 메모리를 얼마나 아껴쓰는가..