외부활동/CS 면접 끝장내기 - 컴퓨터 네트워크 4기

컴퓨터 네트워크 3주차 스터디 정리

dohyeon2 2024. 1. 23. 15:00

2주차 면접 스터디에서 받았던 피드백은 다음과 같습니다.

 

좋았던 점

  • 답변할 때 발성이 안정적이어서 듣기 편했다.
    : 1주차 피드백과 동일한 피드백이라 스킵하겠습니다.

부족했던 점

  • HTTP를 범용적으로 사용하는 이유에 대해 답변하지 못했습니다.
    :http가 웹브라우저에 대해 제약사항 없이 모든 플랫폼에서 사용할 수 있기 때문에 오늘날 범용적으로 사용된다고 생각합니다. 

  • 세션과 토큰의 차이점에 대해서 답변하지 못했습니다.
    : http는 stateless한 특성때문에 클라이언트의 요청을 서버에 저장하지 않습니다. 하지만 로그인과 같이 어떤 유저를 특정해야 할 경우가 있는데, 이때 세션이나 토큰을 사용합니다. 세션과 토큰의 가장 큰 차이점은 세션은 데이터베이스 서버에 저장된다는 점이고 토큰은 클라이언트 측에서만 저장된다는 점입니다. 

  • 답변하는 도중에 "어..." 라는 말을 많이 하는 것 같다. 차라리 면접관에게 생각할 시간을 달라고 하는게 더 좋을 것 같다.
    : 다음 답변부터 피드백을 반영할 수 있도록 노력하겠습니다.

  • SSL 핸드쉐이크 과정에 대해 설명할 때 pre master secret와 같은 단어를 사용하기 보다는 아래 그림을 이해하고 좀더 간결하게 설명하는게 좋을 것 같다.

  1. 웹 서버(사이트)는 서버 정보와 서버의 공개키를 인증 기관에 주면서 인증 요청을 한다.
  2. 인증 기관은 서버로 부터 받은 서버 정보와 공개키를 인증기관의 개인키로 암호화하여 인증서를 만든다.
  3. 인증 기관은 인증서에 대한 공개키를 브라우저들에게 제공하고, 서버에 인증서를 발급한다.
  4. 클라이언트가 웹 서버에 접속하면, 먼저 서버로부터 인증서를 받는다.
  5. 클라이언트는 인증 기관으로부터 받은 공개키를 사용해 인증서를 검증한다.
  6. 신뢰 할만한 인증기관이라면, 대칭키를 만들고, 인증서에 들어있던 서버의 공개키를 사용해 대칭키를 암호화하여 서버에 전송한다.
  7. 서버는 안전하게 클라이언트가 만든 대칭키를 받는다.
  8. 이제 클라이언트와 서버는 안전하게 공유된 대칭키를 통해 암호화 통신이 가능해진다

쿠키와 세션에 대해서 설명해주세요.

더보기

쿠키와 세션은 HTTP 프로토콜의 가장 큰 특징인 무상태성을 보완하기 위해 사용되는 기술입니다. 예를들어, 로그인과 같이 웹서버가 클라이언트의 상태를 유지해야 할 경우 세션을 통해 로그인 상태를 유지할 수 있습니다.

 

쿠키의 사용 예

  • 방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
  • 쇼핑몰 장바구니 기능
  • 자동로그인 기능
  • "오늘 더 이상 이 창을 보지 않음" 체크

세션의 사용 예

  • 로그인과 같이 보안상 매우 중요한 작업

 

예상질문 1. 쿠키와 세션의 차이점은 무엇인가요?

: 쿠키는 클라이언트(로컬PC)측에 저장되지만 세션은 웹서버측(DB)에 저장됩니다.

 

예상질문 2. 쿠키와 세션을 같이 사용하는 이유는 무엇인가요?

: 쿠키와 세션을 같이 사용하는 이유는 보안 측면에서 세션이 쿠키에 비해 더 뛰어나기 때문에 보안이 중요한 기능에는 세션을 사용하고, 속도 측면에서 쿠키가 세션에 비해 더 빠르기 때문에 속도가 중요한 기능에는 쿠키를 사용합니다.

 

Reference

 

JWT ****토큰에 대해서 설명해주세요.

더보기

JWT(Json Web Token)란 인증에 필요한 정보들을 Json 객체에 담은 후 비밀키로 서명한 토큰을 말합니다.

JWT 프로세스는 다음과 같습니다.

출처: 알고쓰자, JWT(Json Web Token)
  1. 클라이언트가 서버에 로그인 요청
  2. 서버는 비밀키를 사용해 JWT 토큰 발급
  3. JWT 토큰을 헤더에 담아 클라이언트에 전달
  4. 클라이언트는 JWT 토큰을 로컬에 저장
  5. 클라이언트는 서버에 API 호출할 때마다 헤더에 JWT 토큰을 넣어서 전송
  6. 서버는 헤더를 확인하여 사용자를 인증하고 API에 대한 응답을 반환

 

Reference

 

SOP와 CORS에 대해서 설명해주세요.

더보기

출처

sop와 cors는 모두 출처(origin)와 관련된 개념입니다. 출처란 URL의 스킴(프로토콜), 호스트(도메인), 포트 3가지로 정의됩니다. 즉, 어떤 URL이 같은 출처인지 판단하려면 URL의 프로토콜, 도메인, 포트가 모두 같은지 확인하면 됩니다.

 

동일 출처 예시

  • http://dohyeon.com/hellohttp://dohyeon.com/bye 는 다른 URL이지만 프로토콜, 도메인, 포트가 모두 같으므로 동일 출처입니다.
  • http://dohyeon.comhttps://dohyeon.com 은 같은 리소스를 가리키고 있지만, 프로토콜이 다르므로 동일 출처가 아닙니다.
  • http://dohyeon.comhttp://dohyeon.com:80 은 다른 출처같지만, 전자의 경우 http의 기본 포트인 80이 생략된 형태이므로 이 둘은 같은 출처입니다.

동일 출처 정책(Same Origin Policy, SOP)

sop는 동일한 출처 사이에서만 리소스를 공유할 수 있도록하는 보안 정책을 말합니다.

 

교차 출처 리소스 공유(Cross Origin Resource Sharing, CORS)

CORS는 특정 출처를 서버가 명시해놓으면, 출처가 다르더라도 서버와 리소스를 주고 받을 수 있도록하는 보안 정책을 말합니다.

 

Reference

 

REST에 대해서 설명해주세요. Restful API는 뭘까요?

더보기

REST(Representational State Transfer)란 웹서비스에서 많이 사용되는 개념으로서, 애플리케이션 사이의 결합도를 낮추게끔 설계하는 아키텍처 스타일을 말합니다. 결합도를 낮춰 서버/클라이언트가 별도로 구축되고 결합될 수 있도록 합니다.

 

REST의 6가지 제약조건을 잘 따르는 API를 Restful API라 합니다.

 

Reference

 

REST 제약 조건에 대해 설명해주세요.

더보기

REST 제약 조건은 크게 6가지가 존재합니다.

 

균일한 인터페이스(Uniform Interface)

  • 전체 시스템 아키텍처를 간단하고 쉽게 파악하기 위해 약속된 Interface
  • JSON이 가장 유명한 방식
  • 개발 REST는 4가지 규약을 따라야함
    - 리소스 식별: 인터페이스는 클라이언트와 서버간의 상호 작용에 관련된 각 리소스를 고유하게 식별해야 함
    - 표현을 통한 리소스 조작: 리소스는 서버 응답에서 균일한 표현을 가져야 함. API 소비자는 이러한 표현을 사용하여 서버의 리소스 상태를 수정할 수 있음
    - 자체 설명 메세지: 각 리소스 표현에는 메세지 처리 방법을 설명하는데 충분한 정보가 포함되어야 함
    - 애플리케이션 상태 엔진으로서의 하이퍼미디어: 클라이언트는 애플리케이션의 초기 URI만 가지고 있어야 함  

클라이언트-서버(Client-Server)

  • UI(User Interface)와 데이터 스토리지, 알고리즘 등 서버 내부의 작업들을 분리함으로써 UI는 여러 플랫폼에서의 이식성을 향상시킬 수 있으며, 서버는 그 구성요소를 단순화하여 확장성을 높일 수 있음

무상태성(Stateless)

  • 클라이언트에서 서버로 보내는 각 요청에는 그 요청을 처리하는데 필요한 모든 정보를 담고 있어야 함

캐시 가능(Cacheable)

  • 응답이 암시적 or 명시적으로 캐시 가능/불가능 여부를 레이블로 지정해야 함
  • 응답을 캐시할 수 있는 경우, 클라이언트는 향후 동일한 요청을 재사용할 수 있음

계층화된 시스템(Layered System)

  • 계층화된 시스템 아키텍처를 사용하면 문제를 명확하게 분리하여 애플리케이션을 더 쉽게 개발, 유지 관리할 수 있음

온디맨드 코드(Code on Demand(Optional))

  • 우리는 평소에 정적인 데이터를 json 객체에 담아서 클라이언트로 보내고 클라이언트가 이를 가공함
  • 그러나 Code on demand는 클라이언트에 보내는 데이터를 바로 실행 가능한 코드형태로 보내서 이것을 클라이언트 내에서 실행하는 것을 말함

Reference

 

URL, URI, URN 차이가 뭘까요?

더보기
URI/URL/URI 구분 모식도
  • URI(통합 자원 식별자)는 인터넷상의 리소스 "자원 자체"를 식별하는 고유한 문자열입니다. 이때, URI의 하위 개념으로 URL과 URN이 존재합니다.
  • URL(위치)은 웹 주소라고도 불리며, 네트워크상에서 리소스의 위치를 찾는데 사용됩니다.
  • URN(이름)은 네트워크상에서 리소스의 이름을 말합니다. 위치와 관계없이 리소스를 식별하는 데 사용됩니다.

예를들어, 

http://naver.com/index.html?page=1232950&id=776  이라는 링크가 있다고 가정한다면,

http://naver.com/index.html?page=1232950&id=776 는 리소스의 식별자이기 때문에 URI입니다. 반면에

http://naver.com/index.html  은 리소스의 위치를 가리키기 때문에 URL 입니다.

naver.com/index.html?page=1232950&id=776 은 리소스의 이름만을 나타내기 때문에 URN 입니다.

 

Reference

 

XSS 공격이 무엇이고, 방어하는 방법을 설명해주세요.

더보기

사이트 간 스크립팅(Cross Site Scripting,XSS)란 웹 애플리케이션에서 많이 나타나는 취약점 중 하나로, 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입하는 공격을 XSS 공격이라 합니다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력받은 값을 제대로 검사하지 않고 사용할 경우 나타납니다. 이에대한 방어 방법은 사용자의 입력값을 제한하여 스크립트를 삽입하지 못하게 하거나, 태그 문자 등 위험한 문자 입력시 문자 참조로 필터링하고 인코딩 하는 식으로 방어할 수 있습니다.

 

Reference

 

CSRF 공격이 무엇이고, 방어하는 방법을 설명해주세요.

더보기

사이트간 요청 위조(Cross Site Request Forgery)란 특정 웹사이트에 인증된 사용자가 자신의 의지와 상관없이 공격자가 의도한 행위(수정, 삭제, 등록 등)을 웹사이트에 요청하게 하는 공격을 말합니다. 이에대한 방어 방법은 특정 관리 조작 요청에 비밀 토큰이 포함되도록 하는 비밀 토큰 유효성 검증, 수신 HTTP 요청에서 referer 헤더의 유효성을 검증하도록 하는 리퍼러 유효성 검증, 요청하지 않은 로그인 요청을 거부하는 요청되지 않은 인증 요청 거부 등의 방법이 있습니다.

 

Reference

 

SQL Injection 공격이 무엇이고, 방어하는 방법을 설명해주세요.

더보기

SQL 삽입(SQL Injection) 공격이란, 공격자가 응용 프로그램 보안 상의 허점을 이용해 악의적인 SQL 문을 주입하고 실행하게하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 공격을 말합니다. 주로 사용자가 입력한 데이터를 제대로 필터링, 이스케이핑 하지 못할 경우 발생합니다. 이러한 공격을 방어하려면 사용자의 입력을 받을 때 검증 로직을 추가하여 값이 유효한지 검증하는 입력값 검증, 동적 SQL 쿼리를 생성하지 않도록 저장된 형식의 데이터가 아니면 쿼리가 실행되지 않도록하는 저장 프로시저 사용, 데이터 베이스 권한 제어 등이 있습니다.

 

Reference

 

웹 캐시에 대해 설명해주세요.

더보기

웹 캐시란 클라이언트가 웹서버에 접속할 때, 정적 컨텐츠(이미지, JS 등)를 특정 위치(클라이언트 PC)에 저장하여, 웹 서버에 해당 컨텐츠를 매번 요청하여 다운받는 것이 아니라, 특정 위치에서 불러와서 서버 응답시간을 줄이고, 서버 트래픽 감소시키는 기능을 말합니다.

 

Reference

 

프록시 서버에 대해서 설명해주세요.

더보기

프록시 서버란 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 연결할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 말합니다. 프록시 서버는 네트워크에서 어디에 위치하느냐, 어느 방향으로 데이터를 제공하느냐에 따라 포워드 프록시와 리버스 프록시로 나뉩니다.

 

예상질문 1. 프록시 서버를 쓰는 이유는 뭔가요?

: 보안상의 이유로 직접 통신할 수 없는 두 엔드포인트를 간접적으로 연결해주기 위해 사용합니다.

 

Reference

 

포워드 프록시에 대해서 설명해주세요.

더보기
출처: Forward Proxy(포워드 프록시)와 Reverse proxy(리버스 프록시) 정리

 

포워드 프록시란 클라이언트가 웹서버에 직접 연결하는게 아니라 클라이언트의 요청을 받은 프록시 서버가 인터넷에 연결하여 웹서버의 응답을 클라이언트에 전달(forward) 해주는 방식을 말합니다.

 

Reference

 

리버스 프록시에 대해서 설명해주세요.

더보기
출처: Forward Proxy(포워드 프록시)와 Reverse proxy(리버스 프록시) 정리

 

리버스 프록시란 클라이언트가 인터넷(웹 서비스)에 데이터를 요청하면 리버스 프록시 서버가 해당 요청을 받아 내부(Reverse) 서버에서 데이터를 받은 후 클라이언트에게 응답하는 방식을 말합니다.

 

예를들어, A 라는 회사가 example.com 이라는 고객용 웹 서비스를 만들었을 경우 이를 서비스하기 위해서 리버스 프록시를 사용합니다. 리버스 프록시로 웹 서버를 설정할 경우 사용자가 example.com 웹 서비스에 데이터를 요청하면 리버스 프록시는 이 요청을 받아서 내부서버(보통 WAS)에서 데이터를 받은 후에 이 데이터를 사용자에게 다시 전달합니다.

 

Reference

 

L7 로드 밸런서에 대해서 설명해주세요.

더보기

L7 로드밸런서란 애플리케이션 계층(Layer 7)에서 작동하는 로드밸런서로, 주로 HTTP 및 HTTPS 기반으로 클라이언트와 서버 간의 트래픽을 분산시키는 기능을 합니다. L7 로드밸런서는 클라이언트의 요청 내용(URL, 헤더, 쿠키 등)을 기반으로 로드밸런싱을 수행합니다.

 

Reference

 

커넥션 타임아웃과 리드 타임아웃에 대해 설명해주세요.

더보기

커넥션 타임아웃이란 클라이언트가 서버에 어떠한 사유로 접근을 실패했을 시 적용되는 것을 말합니다. 이와 같은 문제가 가장 흔하게 발생하는 이유는 클라이언트의 Outbound, 서버측의 Inbound 방화벽 문제 등이 있습니다. 

 

리드 타임아웃이란 클라이언트가 서버에 접속은 성공했으나 서버가 로직을 수행하는 시간이 너무 길어서 응답을 못준상태에서 클라이언트가 연결을 해제하는 것을 말합니다.

 

Reference


인성면접 예상질문

팀 프로젝트에서 주로 어떤 역할을 담당하셨나요?

 

팀 프로젝트 하면서 의견 충돌이 발생했던 경험에 대해서 설명해주세요.

 

팀 원들에게 자신은 어떤 팀원으로 생각될 것 같으세요?

 

본인이랑 잘 안 맞는 팀원이 있다면 어떻게 업무하실건가요?

 

본인의 의견이 팀에서 잘 받아들여지지 않을 경우 어떻게 하실건가요?

 

기술적으로 실력이 낮은 동료와 같이 일하게 되었을 때 어떻게 일을 진행하나요?