📌 웹 통신의 큰 흐름: https://www.google.com/ 을 접속할 때 일어나는 일
📌 OSI 7계층에 대해 설명해주세요
1) 1계층 : 물리계층(Physical Layer)
- 데이터를 전기 신호로 바꿔서 와이어에 실어주는 계층
- 장비 : 리피터(전기신호를 증폭), 허브
2) 2계층 : 데이터링크 계층(Data Link Layer)
3) 3계층 : 네트워크 계층(Network Layer)
4) 4계층 : 전송 계층(Transport Layer)
5) 5계층 : 세션 계층(Session Layer)
6) 6계층 : 표현 계층(Presentation) 계층
7) 응용(Application) 계층
- 일반적인 응용 서비스를 수행한다.
- 사용자 인터페이스, 전자우편, 데이터베이스 관리 등의 서비스를 제공한다.
- HTTP, FTP, SMTP, IMAP, Telnet 등
📌 TCP와 UDP의 차이점에 대해서 설명해보세요.
- TCP는 Connection Oriented Protocol(연결 지향형 프로토콜)로, 신뢰성있는 데이터전송을 보장합니다.
- UDP는 Connectionless Protocol로 빠르지만 데이터의 유실 가능성이 존재하는 걸로 알고있습니다.
- 그래서 일반적인 경우, TCP를 사용하고 데이터가 유실되더라도 실시간성이 중요한 스트리밍방송, 통화 등에서는 UDP를 사용하는것으로 알고 있습니다.
1) TCP 특징
- 연결형 서비스로 가상 회선 방식을 제공한다.
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성을 보장한다.
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
2) TCP 서버 특징
- 서버소켓은 연결만을 담당한다.
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다형 서비스로 가상 회선 방식을 제공한다.
- 서버와 클라이언트는 1대1로 연결된다.
- 스트림 전송으로 전송 데이터의 크기가 무제한이다.
- 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
- Streaming 서비스에 불리하다.(손실된 경우 재전송 요청을 하므로)
3) UDP 특징
- 비연결형 서비스로 데이터그램 방식을 제공한다
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다
- TCP보다 속도가 빠르다
4) UDP 서버 특징
- UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓 대신 IP를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
- 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
- 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.
5) UDP는 항상 신뢰성을 보장하지 않나요?
- UDP도 신뢰성을 UDP자체에서 보장하지 않는 것 뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있습니다. HTTP/3의 경우, UDP 기반의 QUIC이라는 프로토콜을 사용합니다. UDP 자체는 신뢰성을 보장하지 않지만, 추가적인 정의를 통해 신뢰성을 보장받을 수 있습니다.
프로토콜 종류 | TCP | UDP |
연결 방식 | 연결형 서비스 | 비연결형 서비스 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수 있음 |
수신 여부 확인 | 수신 여부를 확인함 | 수신 여부를 확인하지 않음 |
통신 방식 | 1:1 통신 | 1:1 OR 1:N OR N:N 통신 |
신뢰성 | 높다. | 낮다. |
속도 | 느리다. | 빠르다. |
📌 TCP의 신뢰성을 보장하는 방법을 설명해보세요.
1) 패킷(Packet)이란?
- 데이터를 여러개의 조각으로 나누어 전송 할 때의 조각 단위
2) TCP는 패킷을 어떻게 추적 및 관리하는가?
- 각 패킷에 번호를 부여한다.
3) 흐름 제어란?
- 송신측의 전송량 > 수신측의 수신량 일 경우 발생할 문제를 예방하기 위한 제어
- 송신측의 패킷 전송량을 제어
▶ Stop and Wait (정지 - 대기)
- 매번 전송한 패킷에 대한 확인 응답을 받아야 그 다음 패킷을 전송할 수 있다.
- Give & Take
▶ Sliding Window(슬라이딩 윈도우)
- 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답 없이 세그먼트를 전송한다.
- 윈도우 : 송신, 수신 스테이션 양쪽에서 만들어진 버퍼의 크기
- 송신측에서는 Ack 프레임을 수신하지 않더라도 여러 개의 프레임을 연속적으로 전송할 수 있다
- 송신측에서 0,1,2,3,4,5,6을 보낼 수 있는 프레임을 가지고 있고 데이터 0,1을 전송했다고 가정하면 슬라이딩 윈도우 구조는 2,3,4,5,6처럼 변하게 된다.
- 이때, 만약 수신측으로부터 ACK라는 프레임을 받게 된다면 송신측은 이전에 보낸 데이터 0,1을 수신측에서 정상적으로 받았음을 알게 되고 송신측의 슬라이딩 윈도우는 ACK 프레임에 따른 프레임의 수만큼 오른쪽으로 경계가 확장된다.
4) 오류제어란?
- 오류 검출과 재전송
▶ ARQ (Automatic Repeat Request)
- TCP는 기본적으로 재전송 기반의 오류 제어를 사용(오류가 발생 시, 송신 -> 수신으로 데이터 재전송)
- 하지만 실제로 수 많은 데이터를 주고 받아야 하는 네트워크 상황에서 이러한 재전송 방식은 그 자체로 비효율적이기 때문에 이러한 재전송을 최대한 적게하는 여러 방식으로 TCP는 오류를 제어
▶ Stop and Wait ARQ (Automatic Repeat Request)
- 송신측에서 1개의 프레임을 송신하고, 수신측에서 수신된 프레임의 에러 유무 판단에 따라 ACK or NAK(Negative Acknowledgement)를 보내는 방식
- 식별을 위해 데이터 프레임과 ACK 프레임은 각각 0,1 번호를 번갈아가며 부여한다.
- 수신측이 데이터를 받지 못했을 경우, NAK를 보내고 NAK를 받은 송신측은 데이터를 재전송한다.
- 만약, 데이터나 ACK가 분실되었을 경우 일정 간격의 시간을 두고 타임아웃이 되면, 송신측은 데이터를 재전송한다.
▶ Go-Back-n ARQ(슬라이딩 윈도우)
- 전송된 프레임이 손상되거나 분실된 경우 , ACK 패킷의 손실로 인한 TIME_OUT이 발생된 경우, 확인된 마지막 프레임 이후로 모든 프레임을 재전송
- 슬라이딩 윈도우는 연속적인 프레임 전송 기법으로 전송측은 전송된 프레임의 복사본을 가지고 있어야 하며, ACK와 NAK 모두 각각 구별해야 한다.
- ACK : 다음 프레임을 전송
- NAK : 손상된 프레임 자체 번호를 반환
▶ SR(Selective-Reject) ARQ
- SR ARQ는 손상된, 손실된 프레임만 재전송한다
- 그렇기 때문에 별도의 데이터 재정렬을 수행하야 하며, 별도의 버퍼를 필요로 한다
- 수신측에 버퍼를 두어 받은 데이터의 정렬이 필요
5) 혼잡제어란?
- 송신측의 데이터 전달과 네트워크의 데이터 처리 속도를 해결하기 위한 기법
- 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 제어하는 것이 혼잡 제어의 개념이다.
▶ AIMD (Addtive Increase Multicative Decrease)
- 합 증가 / 곱 감소 알고리즘
- 처음에 패킷 하나를 보내는 것으로 시작하여 전송한 패킷이 문제 없이 도착한다면 Window Size를 1씩 증가시키며 전송하는 방법. 만약, 패킷 전송을 실패하거나 TIME_OUT이 발생하면 Window Size를 절반으로 감소시킨다.
- 문제점 : 초기 네트워크의 높은 대역폭을 사용하지 못하고 네트워크가 혼잡해지는 상황을 미리 감지하지 못하여 혼잡해지고 나서야 대역폭을 줄이는 방식이다.
▶ Slow Start
- Slow Start는 AIMD와 마찬가지로 패킷을 하나씩 보내는 것부터 시작한다. 이 방식은 패킷이 문제 없이 도착하면 ACK 패킷마다 Window Size를 1씩 늘린다. 즉, 한 주기가 지나면 Window Size는 2배가 된다
- 혼잡 현상이 발생하면 Window Size를 1로 떨어뜨린다
- 미리 정해진 임계값(threshold)에 도달할 때까지 윈도우의 크기를 2배씩 증가시킨다.
- 전송되는 데이터의 크기가 임계 값에 도달하면 혼잡 회피 단계로 넘어간다
[혼잡 회피(Congestion Avoidance)]
- 윈도우의 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 확률이 높다
- 따라서 이를 회피하기 위해 윈도우 크기를 선형적으로 1씩 증가시키는 방법
[빠른 회복(Fast Recovery)]
- 혼잡한 상태가 되면 Window Size를 1로 줄이지 않고 절반으로 줄이고 선형 증가시키는 방법
- 빠른 회복 정책까지 적용하면 혼잡 상황을 한번 겪고 나서부터는 순수한 AIMD 방식으로 동작
[빠른 재전송(Fast Retransmit)]
- 수신측에서 패킷을 받을 때 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK 패킷을 보낸다. 단, 순서대로 잘 도착한 마지막 패킷의 다음 패킷의 순번을 ACK 패킷에 실어서 보낸다. 따라서 중간에 패킷 하나가 손실되면 송신측에서는 순번이 중복된 ACK 패킷을 받게 된다. 이것을 감지하면 문제가 되는 순번의 패킷을 재전송할 수 있다.
- 빠른 재전송은 중복된 순번의 패킷을 3개(3 ACK) 받으면 재전송한다. 그리고 이러한 현상이 일어나는 것은 약간의 혼잡이 발생한 것으로 간주하여 Window Size를 절반으로 줄인다.
출처: https://rok93.tistory.com/entry/네트워크-TCP-흐름제어혼잡제어 [티끌모아 로키산맥 🏔]
📌 HTTP를 버전 별로 설명해주세요
1) HTTP 1.0
2) HTTP 1.1
3) HTTP 2.0
- 캐싱되지 않은 리소스를 받아올 때
- 페이지에서 필요한 리소스가 페이지를 내려주는 서버에 있을 때
📌 HTTP와 HTTPS의 차이점에 대해 설명해주세요.
- HTTPS(Hypertext Transfer Protocol Secure)
- 둘 다 웹 통신 프로토콜이지만, HTTPS는 HTTP의 기능에 TLS(Transport Layer Security) 혹은 SSL(Secure Sockets Layer)을 사용하여 암호화된 버전입니다. 일반적으로 보안이 중요한 통신에서는 HTTPS를 사용하는걸로 알고있고, HTTP는 80 port, HTTPS는 443 port를 사용하는 것으로 알고 있습니다.
1) SSL 인증서란?
- SSL 프로토콜에 사용되는 인증서
▶ 역할
- 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보증한다.
- 통신에 사용할 공개키를 클라이언트에 전달한다.
▶ 포함 내용
- 서비스 정보(CA 정보, 도메인 등)
- 서버 측 공개키
- 위 인증서를 발급해주는 제 3자이다.
- 브라우저는 신뢰할 수 있는 CA(공인 CA)들과 해당 CA의 공개키를 알고있다.
2) SSL 동작원리는?
▶ 대칭키 방식
- 암호화와 복호화를 동일한 하나의 키(대칭키)로 하는 방식이다.
- 암호 통신을 하기 위해선 대칭키를 주고 받아야 하기 때문에 키가 유출될 가능성이 있다.
▶ 공개키 방식( = 비대칭키 방식)
- 두개의 키(공개키, 비밀키)로 암호화 및 복호화하는 방식.
- 공개키로 암호화 -> 비밀키로 복호화 / 비밀키로 암호화 -> 공개키로 복호화
▶ SSL은 대칭키, 공개키를 함께 사용한다
- 공개키 방식은 보안이 뛰어나지만 암호화/복호화에 컴퓨팅파워가 많이 든다.
- 따라서 데이터 전달에는 대칭키를 쓰고, 그 대칭키를 교환할 때는 공개키 사용한다.
3) SSL HandShake 과정은?
1. Client -> Server(Client hello)
- 클라이언트가 생성한 랜덤 데이터
- 클라이언트가 지원하는 암호화 방식
- Session Id (이미 SSL handshake를 한번 완료했다면 기존 session 재활용)
2. Server -> Client(Server hello)
- 서버가 생성한 랜덤 데이터
- 서버가 선택한 암호화 방식
- CA의 비밀키로 암호화 된 SSL 인증서
3. Client -> Server
- 클라이언트는 먼저 인증서를 발행한 CA를 신뢰할 수 있는지 판단한다 (갖고 있는 CA 리스트와 비교).
- 진짜 그 CA가 발행한 인증서가 맞는지 확인한다.
- 기존에 갖고 있는 CA의 공개키를 사용해 인증서를 복호화 한다.
- 복호화에 성공한다면, 신뢰 할 수 있는 CA가 보증한 서버임을 확신할 수 있다.
- 공개키 방식을 거꾸로 사용해 Authentication에 활용했다고 할 수 있다.
- 이후 Client hello 의 랜덤 데이터와 Server hello 의 랜덤 데이터를 조합하여 pre master key 생성한다.
- pre master key를 암호화(인증서에 포함된 서버측 공개키 사용)하여 서버에 전송한다.
4. Pre master key를 session key로 변환
- 서버는 자신의 비밀키로 전달받은 pre master key를 복호화한다.
- 클라이언트와 서버 모두 일련의 과정을 거쳐 세션 키를 획득한다.
( pre master key -> master key -> session key ) - 이후 세션 키를 대칭키로 사용해 데이터를 암호화 하여 클라이언트-서버 통신이 이루어진다.
5. Handshake 종료
https://velog.io/@shkilo/HTTPS%EC%99%80-SSLTLS-%EC%A0%95%EB%A6%AC
종류 | 기능 |
GET | 데이터 조회 |
POST | 요청 데이터 처리(보통 데이터 등록 사용) |
PUT | 데이터 변경 (해당 데이터가 없으면 생성) |
PATCH | 일부 데이터만 변경 |
DELETE | 데이터 삭제 |
📌 GET과 POST의 차이점에 대해 설명해주세요.
- GET은 데이터를 조회하기 위해 사용되는 방식으로 데이터를 헤더에 추가하여 전송하는 방식입니다.
URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안됩니다.
- POST는 데이터를 추가, 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식입니다.
완전히 안전하다는 것은 아니지만 URL에 데이터가 노출되지 않아 GET 보다는 안전합니다.
📌 쿠키(Cookie)와 세션(Session)의 차이점에 대해 설명해주세요.
- 쿠키는 웹서버와 클라이언트가 통신할 때, 클라이언트쪽에서 가지고 있는 정보이고, 세션은 서버쪽에서 가지고 있는 정보입니다.
- 쿠키는 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일입니다. HTTP에서 클라이언트의 상태 정보를 PC에 저장했다가 필요시 정보를 참조하거나 재사용할 수 있습니다.
- 세션은 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술입니다. 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 합니다.
쿠키(Cookie) | 세션(Session) | |
저장 위치 | 클라이언트(=접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되도, 만료시점이 지나지 않으면 삭제되지 않음) |
브라우저 종료시 삭제 (기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개 하나의 도메인 당 20개 하나의 쿠키 당 4KB(=4096byte) |
서버가 허용하는 한 용량제한 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안좋음 | 쿠키보다 좋음 |
쿠키의 동작 순서
- 클라이언트가 페이지를 요청한다. (사용자가 웹사이트에 접근)
- 웹 서버는 쿠키를 생성한다.
- 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에게 돌려준다.
- 넘겨받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송한다.
- 동일 사이트 재방문 시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송한다.
- 세션의 동작 순서
- 클라이언트가 페이지에 요청한다. (사용자가 웹사이트에 접근)
- 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인한다.
- session-id가 존재하지 않는다면 서버는 session-id를 생성해 클라이언트에게 돌려준다.
- 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장한다.
- 클라이언트는 재접속 시, 이 쿠키를 이용해 session-id 값을 서버에 전달
- 사용 예시
- 화면을 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지
📌 세션 기반 인증과 토큰 기반 인증의 차이에 대해 얘기해주세요.
- 세션 기반 인증은 클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful한 구조를 가지고,
- 토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless한 구조를 가집니다.
- Stateful한 세션 기반의 인증 방식을 사용하게 된다면, 서버에 세션을 저장해야 하므로 서버에 부담이 상대적으로 더 가며 확장성이 낮습니다. 또한 해커가 훔친 쿠키를 이용해 요청을 보내면 서버는 올바른 사용자가 보낸 요청인지 알 수 없습니다. (세션 하이재킹 공격)
- 따라서 단일 도메인이라면 세션 기반 인증을 사용하고, 아니라면 토큰 기반 인증을 사용하는 것이 적합하다고 생각합니다. 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하는 것은 어렵습니다. (CORS 문제)
- CORS는 대개 로컬에서 API 서버에 요청을 보낼 때 흔하게 발생합니다. 서로 다른 도메인간에 자원을 공유하는 것을 뜻합니다. 대부분의 브라우저에서는 이를 기본적으로 차단하며, 서버측에서 헤더를 통해서 사용가능한 자원을 알려줍니다.
- preflight request는 실제 요청을 보내도 안전한지 판단하기 위해 사전에 보내는 요청입니다. OPTIONS 메서드로 요청하며 CORS를 허용하는지 확인합니다. CORS가 허용된 웹서버라면 사용 가능한 리소스를 헤더에 담아 응답합니다.
📌 TCP 3,4 way handshake에 대해 설명해주세요.
📌 Connection Timeout과 Read Timeout의 차이에 대해 설명해주세요
- Connection Timeout은 초기 연결을 할때에 대한 시간 초과가 난 상황을 말하고,
- Read timeout은 데이터를 읽는 동안 대기하는 시간 초과입니다. 서버에서 데이터를 받아오는데 시간 초과가 난 경우입니다.
📌 공인 IP와 사설 IP 차이에 대해 설명해주세요.
- 공인 IP는 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소이며, 외부에 공개되어 있는 IP주소 입니다.
- 사설 IP는 일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소이며, IPv4의 주소부족으로 인해 서브넷팅된 IP이기 때문에 라우터(공유기)에 의해 로컬 네트워크상의 PC나 장치에 할당됩니다.
- 사설 IP 주소만으로는 인터넷에 연결할 수 없기 때문에, 라우터가 NAT(Network Address Translation)을 이용해서 사설 IP를 공인IP로 바꿔서 내보내줍니다.
📌 RESTFul이란 무엇인가요?
📌 TCP / IP 4계층에 대해 설명해주세요
계층 | 역할 | 데이터 단위 | 전송 주소 | 예시 | 장비 |
응용 계층(Application) | 응용프로그램 간의 데이타 송수신 | Data/Message | - | 파일 전송, 이메일, FTP, HTTP, SSH, Telnet, DNS, SMTP 등 | - |
전송 계층(Transport) | 호스트 간의 자료 송수신 | Segment | Port | TCP, UDP, RTP, RTCP 등 | 게이트웨이 |
인터넷 계층(Internet) | 데이타 전송을 위한 논리적 주소 지정 및 경로 지정 | Packet | IP | IP, ARP, ICMP, RARP, OSPF | 라우터 |
네트워크 연결 계층(Network Access) | 실제 데이타인 프레임을 송수신 | Frame | MAC | Ethernet, PPP, Token Ring 등 | 브리지, 스위치 |
1) L1 네트워크 연결 계층(Network Access Layer/Network Interface Layer)
- 데이터 단위: 프레임
- 전송 주소: MAC
- 물리적으로 데이타가 네트워크를 통해 어떻게 전송되는지를 정의
- 논리주소(IP주소 등)가 아닌 물리주소(예. MAC주소(Media Access Control Address))을 참조해 장비간 전송
- 기본적으로 에러검출/패킷의 프레임화 담당
- 예시: MAC, LAN, 패킷망 등에 사용되는 것, Ethernet, PPP, Token Ring 등
2) L2 인터넷 계층(Internet Layer)
- 데이터 단위: 패킷
- 전송 주소: IP
- 네트워크상 최종 목적지까지 정확하게 연결되도록 연결성을 제공 및 IP 할당
- 라우팅(Routing)기능, 즉 경로 설정 기능을 처리
- 예시 : IP, ARP, ICMP, RARP, OSPF
3) L3 전송 계층(Transport Layer)
- 데이터 단위: Segment
- 전송 주소: Port
- 통신 노드 간의 연결 제어 및 자료 송수신을 담당
- 애플리케이션 계층의 세션과 데이터그램 통신서비스 제공
- 예시: TCP, UDP, RTP, RTCP 등
4) L4 응용 계층(Application Layer)
- 데이터 단위: Data/Message
- 사용자와 가장 가까운 계층으로 사용자가 소프트웨어 application과 소통할 수 있게 해준다
- 응용프로그램(application)들이 데이터를 교환하기 위해 사용되는 프로토콜
- 사용자 응용프로그램 인터페이스를 담당
예시: 파일 전송, 이메일, FTP, HTTP, SSH, Telnet, DNS, SMTP 등
📌 웹서버 소프트웨어(Apache, Nginx)는 OSI 7계층 중 어디서 작동하나요
📌 DNS 서버에 대해 설명해주세요
- DNS서버란 도메인 이름을 IP주소로 바꿔주는 역할을 하는 서버입니다. 이로 인해 클라이언트는 IP주소를 기억하지 않고 해당 주소의 웹사이트에 접근할 수 있습니다.
- 도메인(Domain) : 웹사이트의 위치 (ex, 도메인 이름 google.com은 IP주소 142.250.196.142를 의미)
- 도메인과 URL의 차이점 : 웹주소인 URL에는 도메인 이름과 전송 프로토콜 및 경로 등의 정보가 포함되어 있습니다.
Root 네임 서버 : DNS 레코드를 요청하는 첫 단계입니다. 비영리 단체인 ICANN(Internet Corporation for Assigned Names and Numbers)이 관리합니다.
TLD(최상위 도메인) 네임 서버 : TLD 네임서버는 .com, .co.kr 과 같은 점 뒤에오는 도메인 확장자를 사용하는 모든 도메인 정보를 유지합니다.
Authoritative 네임 서버 : 실제 도메인의 IP주소가 기록되는 서버입니다. 도메인/호스팅 업체의 '네임서버'를 말합니다.
Recursive(재귀) 네임 서버 : 인터넷 사용자가 가장 먼저 접근하는 DNS 서버로 특정 도메인에 대한 IP정보를 캐시 형태로 저장해놓습니다. 대표적으로 KT/LG/SK 와 같은 ISP(통신사) DNS 서버가 있습니다
📌 라우터는 무엇이고 무슨 기능을 하나요?
📌 라우팅 알고리즘에 대해 설명해주세요
📌DHCP란 무엇이고 어떻게 동작되나요?
📌 TDMA와 FDMA에 대해 설명해주세요.
📌 CSMA 방식에 대해 설명해주세요.
📌MAC에 대해 설명해주세요.
📌스위치의 역할에 대해 설명해주세요.
📌 URL과 URI의 차이점을 알려주세요
프레임워크와 라이브러리의 차이점
운영체제
프로세스와 스레드의 차이를 설명해보세요.컨텍스트 스위칭에 대해 설명해보세요.동기와 비동기의 차이(블로킹, 넌블로킹) / 장단점에 대해 설명해보세요.멀티스레드 프로그래밍에 대해 설명해보세요.Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.프로세스 동기화에 대해 설명해보세요.교착상태와 기아상태의 해결방법에 대해 설명해보세요.세마포어와 뮤텍스의 차이에 대해 설명해보세요.가상 메모리에 대해 설명해보세요.캐시의 지역성에 대해 설명해보세요.프로세스 관련 용어를 설명해보세요. (알아만 둡시다.)
자료구조/알고리즘
보통의 자료구조/알고리즘적 지식은 코딩테스트로 검증합니다.
하지만 아래의 개념을 적어도 이해는 한다고 생각하니, 혹시 모르는 부분이 있을 경우 학습을 권장합니다.
암호학/보안(간단한 정도)
비대칭키 암호화, 대칭키 암호화에 대해 간단히 설명해주세요.단방향 암호화에 대해서 간단히 설명해주세요.JWT에 대해서 간단히 설명해주세요.OAuth에 대해서 간단히 설명해주세요.JWT와 OAuth의 차이는 무엇이 있을까요?SQL Injection에 대해서 간단히 설명해주세요.XSS에 대해서 간단히 설명해주세요.CSRF에 대해서 간단히 설명해주세요.컴파일러
스크립트 언어와 컴파일 언어를 나열하고 차이점을 설명해주세요.언어 관련
Java
JVM의 구조와 Java의 실행방식을 설명해주세요.GC가 무엇인지, 필요한 이유는 무엇인지, 동작방식에 대해 설명해주세요.컬렉션 프레임워크에 대해서 설명해주세요.제네릭에 대해서 설명해주세요.애노테이션에 대해서 설명해주세요.오버라이딩과 오버로딩이 무엇이며 어떤 차이가 있을까요?인터페이스와 추상클래스의 차이점에 대해 설명해주세요.클래스는 무엇이고 객체는 무엇인가요?정적(static)이란 무엇인가요?자바의 원시타입들은 무엇이 있으며 각각 몇 바이트를 차지하나요?접근 제어자의 종류와 이에 대해 설명해주세요.객체지향에 대해서 설명해주세요.SOLID(객체지향 5대원칙)에 대해서 설명해주세요.동일성(identity)와 동등성(equality)에 대해 설명해주세요. (equals(), ==)원시타입과 참조타입의 차이에 대해 설명해주세요.String, StringBuilder, StringBuffer 각각의 차이에 대해 설명해주세요.Checked Exception과 Unchecked Exception에 대해 설명해주세요. 스프링 트랜잭션 추상화에서 rollback 대상은 무엇일까요?Java8에서 추가된 기능에 대해서 설명해주세요.try-with-resource에 대해서 설명해주세요.강한 결합과 느슨한 결합이 무엇인지 설명해주세요.직렬화와 역직렬화에 대해서 설명해주세요.자바의 동시성 이슈(공유자원 접근)에 대해 설명해주세요.Mutable 객체와 Immutable 객체의 차이점에 대해 설명해주세요.자바에서 null을 안전하게 다루는 방법에 대해 설명해주세요.Spring
Spring DI/IoC는 어떻게 동작하나요?Spring Bean이란 무엇인가요?스프링 Bean의 생성 과정을 설명해주세요.스프링 Bean의 Scope에 대해서 설명해주세요.IoC 컨테이너의 역할은 무엇이 있을까요?DI 종류는 어떤것이 있고, 이들의 차이는 무엇인가요?Autowiring 과정에 대해서 설명해주세요.Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요.프론트 컨트롤러 패턴이란 무엇인가요?Servlet Filter와 Spring Interceptor의 차이는 무엇인가요?Spring에서 CORS 에러를 해결하기 위한 방법을 설명해주세요.Bean/Component 어노테이션에 대해서 설명해주시고, 둘의 차이점에 대해 설명해주세요.POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요?Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요?Filter는 Servlet의 스펙이고, Interceptor는 Spring MVC의 스펙입니다. Spring Application에서 Filter와 Interceptor를 통해 예외를 처리할 경우 어떻게 해야 할까요?Spring Application을 구동할 때 메서드를 실행시키는 방법에 대해 설명해주세요.의존성과 설정값을 생성자 인자로 주입해야 하는 이유에 대해 설명해주세요.JPA
JPA 영속성 컨텍스트의 이점(5가지)을 설명해주세요.JPA Propagation 전파단계를 설명해주세요.JPA를 쓴다면 그 이유에 대해서 설명해주세요.N + 1 문제는 무엇이고 이것이 발생하는 이유와 이를 해결하는 방법을 설명해주세요.Python
List와 Tuple의 차이에 대해 설명해주세요.파이썬 코루틴에 대해 아는대로 설명해주세요.파이썬 데코레이터에 대해 아는대로 설명해주세요.GIL에 대해 설명해주세요.MRO에 대해 설명해주세요.Magic Method에 대해 설명해주세요.__new__와 __init__의 차이에 대해 설명해주세요.__repr__와 __str__의 차이에 대해 설명해주세요.r string과 u string에 대해 설명해주세요.Call by Assignment에 대해 설명해주세요.파이썬에서의 접근제어지시자에 대해 아는대로 설명해주세요.global과 nonlocal 키워드의 차이에 대해 설명해주세요.classmethod와 staticmethod의 차이에 대해 설명해주세요.기타
트러블 슈팅
대용량 트래픽에서 장애가 발생하면 어떻게 대응할 것인가요?디자인 패턴
싱글톤 패턴에 대해서 설명해주세요.(생각보다 어려움)가교 패턴(브릿지 패턴)에 대해서 설명해주세요.전략 패턴에 대해서 설명해주세요.빌더 패턴에 대해서 설명해주세요.팩토리 메서드 패턴에 대해서 설명해주세요.퍼사드 패턴에 대한 예를 들어주세요.테스트
테스트 코드에 대해서 어떻게 생각하고, 작성하나요?TDD를 알고 있나요? TDD에 대해서 어떻게 생각하나요?테스트 커버리지에 대해서 어떻게 생각하나요?인프라/클라우드
AWS 인프라를 구축해보았다면 설명해주세요.로드 밸런서에 대해서 설명해주세요.리버스 프록시에 대해서 설명해주세요.Fault-tolerant(무정지) 시스템으로 가기 위해 필요한 방법에 대한 생각을 말해주세요.컨테이너
제가 아직 도커, 쿠버네티스에 익숙하지 않아 공부가 좀 더 필요합니다.
관련해서 질문을 받아본적은 없으나, 일반적인 질문을 담아보았습니다.
DevOps
DevOps는 어쩌면 신입에겐 물어보지 않을 수도 있습니다. 하지만 DevOps가 무엇인지 정도는 알아두는게 좋을 것 같습니다.
CI/CD가 무엇인가요? 왜 CI/CD가 장점이 될까요?DevOps가 무엇인지 설명해주세요.커뮤니케이션
정답이 없는 질문입니다. 면접관마다 의도하는 답이 다 다를테니 자신만의 방법을 한 번 쯤 생각해보고 답변에 막힘이 없도록 준비합시다.
어떤 기술이나 방법론이 좋아보일 때, 이를 어떻게 설득할 것인가요?일정이 예상보다 지연될 것 같습니다. 어떻게 해결하실 것인가요?팀원과의 갈등이 있었나요? 있었다면 어떻게 대처했나요?개인의 역량
본인이 수행한 프로젝트 중 상용화 가능한 프로젝트가 있나요?기술을 습득할 때 어떤 식으로 습득하나요?최신기술에 관심이 있는지
최신기술에 관심이 있는지 정도를 확인하고자 함입니다. 너무 정확하게 말하지 않아도 관심이 있다는 인상정도를 줄 수 있다면 좋겠습니다.
그 회사의 기술 스택을 찾아보고 관심을 가져봤다 정도의 느낌을 줄 수 있어야합니다.
사용까지 해보면 더더욱 좋을 것 같습니다.
면접 꿀팁
회사의 기술스택에 관심을 가져보세요. 학습능력이 좋음을 어떤식으로 보여줄 수 있을까요?
본인이 수행한 프로젝트를 유의미한 트래픽이 나올정도로 해본 경험을 높게 평가하는 회사가 많습니다.
두괄식으로 답변하도록 합시다. (사실 힘듭니다. 그렇게 될 수 있게끔 연습 또 연습!)
프로젝트를 수행할 때, 내가 이 기술을 단순히 좋아보여서 사용한 것이 아니라, 많은 고민을 했음을 보여주도록 하세요. 가장 간단한 질문으로는 '왜 그 기술을 사용했나요?', '그 기술 말고 다른 기술은 왜 사용하지 않았나요?', '대체할만한 기술이 있나요?' 등이 있습니다.
https://velog.io/@kkj53051000/%EB%8F%84%EB%A9%94%EC%9D%B8Domain%EA%B3%BC-DNS-%EC%A0%95%EB%A6%AC
https://dev-coco.tistory.com/161
https://mangkyu.tistory.com/15