[JSCODE] 컴퓨터 네트워크 - 3주차

서정범·2024년 1월 24일
0

면접 예상 질문

  • 쿠키와 세션에 대해서 설명해주세요.
  • JWT 토큰에 대해서 설명해주세요.
  • SOP와 CORS에 대해서 설명해주세요.
  • REST에 대해서 설명해주세요. Restful API는 뭘까요?
  • REST 제약 조건에 대해 설명해주세요.
  • URL, URI, URN 차이가 뭘까요?
  • XSS 공격이 무엇이고, 방어하는 방법을 설명해주세요.
  • CSRF 공격이 무엇이고, 방어하는 방법을 설명해주세요.
  • SQL Injection 공격이 무엇이고, 방어하는 방법을 설명해주세요.
  • 웹 캐시에 대해 설명해주세요.
  • 프록시 서버에 대해서 설명해주세요.
  • 포워드 프록시에 대해서 설명해주세요.
  • 리버스 프록시에 대해서 설명해주세요.
  • L7 로드 밸런서에 대해서 설명해주세요.
  • 커넥션 타임아웃과 리드 타임아웃에 대해 설명해주세요.

초기 답변

  • 쿠키와 세션에 대해서 설명해주세요.
    쿠키는 클라이언트 측에 저장되는 데이터 조각입니다.

웹 통신으로 사용하는 HTTP 프로토콜은 stateless한 특성을 가지고 있기 때문에 상태를 유지할 필요가 있는 정보를 쿠키에 저장하는 것으로 사용자의 편의성을 보장합니다.

세션은 쿠키가 보안상 취약하다는 단점을 해결하기 위해서 사용하는 것으로 쿠키에 별도의 세션 ID를 저장하고 세션 ID와 매핑되는 정보를 서버에 저장함으로써 외부에 노출되면 안되는 정보를 관리합니다. 세션에 해당하는 정보는 서버측에 저장됩니다.

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

JWT 토큰은 Json Web Token으로 토큰을 JWT 방식을 사용해서 생성한 것을 의미합니다.

구조적으로 헤더, 페이로드, 서명으로 구분되어 있으며 서명은 암호화 프로토콜을 사용하여 출처 인증을 위해서 사용됩니다.

JWT 토큰은 BASE64 방식의 인코딩을 사용하기 때문에 중요한 데이터를 담으면 안되며, 사용 목적은 정보 보호가 아닌 출처 증명에 있습니다.

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

SOP는 Same Origin Policy로 웹 페이지 즉, 리소스에서 다른 데이터를 요청하기 위해서 통신 요청을 보내서 데이터를 받아오는 경우 리소스를 받아온 출처와 같은 경우에만 데이터를 허용하는 정책입니다.

SOP를 사용함으로써 무분별하게 데이터를 받아오는 것을 방지하여 보안성을 높여줍니다.

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

REST는 일종의 규약으로 약속해놓은 형식을 의미합니다. 통신을 할 때 정해놓은 약속대로 통신을 수행하면서 서로의 통신의 유연성을 제공합니다.

Restful API는 REST에서 정해놓은 형식을 잘 지킨 Ajax 통신을 Restful API라고 합니다.

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

REST의 제약 조건에는 다음과 같은 것들이 있습니다.

우선, 가장 많이 언급되는 것으로 자기 설명 가능과 HATEOAS입니다. 나머지는 서버-클라이언트 통신, Stateless, 웹 캐시와 같은 것들이 존재합니다.

자기 설명 가능은 메시지를 보는것만으로 해당 메시지가 무슨 행동을 하는 것인지 알 수 있어야 한다는 것으로 요청의 경우 HTTP 메소드, URL, Content-Type과 데이터의 형식으로 설명됩니다.
응답의 경우 상태 코드, Location, 본문 데이터 등을 보고 설명될 수 있어야 합니다.

HATEOAS는 해당 위치(url)에서 이동 가능한 위치를 알려주는 것, 즉 이전 상태 표시로 확장하는 데에 있어서 유연성을 보장해주기 위해서 사용됩니다.

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

URI는 데이터의 저장 위치를 말하는 가장 큰 개념으로 URL과 URN은 URI의 하위 개념들입니다.

URL은 데이터의 저장 위치를 말하는 것 중에서 데이터의 저장 경로위치에 따른 위치를 의미하는 것으로 해당 리소스의 저장 위치가 바뀔 경우 URL 또한 변경됩니다.

URN은 데이터의 저장 위치를 말하는 것 중에서 리소스의 고유한 이름을 가지고 리소스의 위치를 설명하는 방식입니다. 이것은 리소스의 저장 위치와 상관 없이 이름을 통해 리소스를 식별하기 때문에 유연성이 좋지만 표현 방식에 있어서 URL이 더 간편하기 때문에 보통은 URL을 사용합니다.

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

XSS는 Cross Site Scriping로 리소스에 악의적인 스크립트를 심어두어서 다른 사용자가 해당 리소스를 자신의 브라우저로 가져와서 렌더링할 경우에 스크립트가 실행되게 하여 의도하지 않은 동작을 수행하도록 하는 공격 방식입니다.

해당 방식을 이용해서 정보 탈취나 DDOS 혹은 사용자가 의도하지 않은 동작을 수행하도록 할 수 있습니다.

XSS를 방어하는 방법은 CSP를 사용하여 허용하지 않는 출처로 보내는 요청은 실행하지 않도록 하여 방어할 수 있습니다.

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

CSRF는 Cross Site Request Forgery로 사용자가 가지고 있는 쿠키나 세션등을 이용해서 의도하지 않은 동작을 수행하도록 하는 공격 방식입니다.

공격자는 공격 대상 서버의 특정 URL을 알아내어 그것을 다른 리소스에 걸어두고, 희생자가 해당 리소스를 자신의 브라우저로 가져와서 실행하게 될 경우 해당 서버의 도메인에 해당하는 쿠키가 같이 담겨서 보내게 되어 문제가 발생할 수 있습니다.

CSRF 공격을 방어하는 방법은 CSRF Token을 사용함으로써 사용자가 걸어둔 link 공격이 수행되더라도 CSRF Token까지는 담기지 않도록 하여 동작 수행을 막아주는 방법이 있습니다.

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

이것은 잘 모르겠습니다.

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

웹 캐시는 웹 통신에서 자주 사용되는 정보 혹은 리소스를 미리 캐시 저장소에 저장해두고 사용하는 것을 의미합니다.

이전에 받아왔던 리소스를 저장해둘 수 있고, 이후 해당 리소스를 재요청 하는 경우 해당 리소스를 캐시에서 가져옴으로써 빠른 동작 수행을 보장할 수 있습니다.

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

프락시 서버는 특정 서버의 동작을 대신 수행해주는 서버를 의미합니다. 프록시 서버에는 포워드 프록시와 리버스 프록시가 존재합니다.

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

포워드 프록시는 여러 서버로부터 들어오는 요청을 받아서 뒤의 서버에게 건네주는 작업을 수행하는 프록시 서버를 의미합니다.

여러 서버로부터 들어오는 요청을 받아서 뒤의 서버에게 건내줄 수 있기 때문에 필요한 경우 데이터의 형식을 맞춰줄 수 있고 보안적으로도 사용할 수 있습니다.

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

리버스 프록시는 요청을 받아서 뒷단에 존재하는 여러 서버들 중 요청을 어디 서버로 보낼지 결정하는 작업을 수행하는 프록시 서버입니다.

리버스 프록시 서버는 여러 뒷단의 서버의 가장 앞에서 게이트웨이 역할을 하기 때문에 보안적으로 사용될 수 있고, 네트워크 트래픽을 고려하여 로드 밸런싱 역할도 수행할 수 있습니다.

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

L7 로드 밸런서는 네트워크 트래픽을 고려하여 요청을 분산 처리하여 트래픽을 분산해주는 작업을 수행하는 장치를 의미합니다.

하나의 로드 밸런서가 같은 동작을 수행하는 요청을 여러 개 받았을 때 동작을 수행할 수 있는 인스턴스들에게 적절한 방식을 통해 분산하여 요청을 분배해줍니다. 이렇게 함으로써 하나의 서버에 요청이 몰리는 현상을 막아줍니다.

다만, 하나의 로드 밸런서에서 모든 요청의 분배 작업을 수행할 경우 역으로 병목 현상이 발생할 수 있으며 단일 장애 지점이 될 수 있습니다.

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

이것은 잘 모르겠습니다.

부족한 개념 정리

SOP와 CORS

먼저, SOP에 대해서 정리를 해보자면, SOP는 웹 보안에서 중요한 개념중 하나로, 동일한 출처에 한해서만 리소스를 허용하는 정책을 의미합니다.

좀 더 자세하게 말하자면 브라우저가 특정 출처로부터 받아온 리소스에서 별도의 요청을 보내서 리소스를 받아올 때 SOP 정책에 의해서 동일한 출처만 허용하고 나머지 출처에 대한 응답은 받지 않는다는 것을 의미합니다.

SOP를 사용하면 다소 악의적인 공격으로부터 보호를 할 수 있고, 대표적으로 언급되는 공격인 XSS를 어느정도 예방해줍니다.

CORS는 SOP를 완화하기 위해서 사용되는 정책으로, 다른 출처에 대한 리소스를 허용해주는 정책입니다. 웹 사이트는 보통 다른 출처에 대한 정보가 필요한 경우가 많기 때문에 SOP만 사용하기 쉽지 않습니다.

따라서, CORS를 이용하여 서버에서 허용해주는 출처에 한해서는 데이터를 받아올 수 있도록 해줍니다.

이것은 preflight와 같이 사용할 경우, 효과적인 동작을 보여줍니다.

CORS의 설정 방식은 3가지의 요청에 따라 구분될 수 있으며, 일반 요청, preflight를 수행하는 요청, Credential 정보가 담기는 요청 이렇게 3가지의 요청에 따라서 요구되는 설정들이 다를 수 있습니다.

URI, URL, URN

URI는 리소스를 식별할 수 있는 고유한 식별자를 의미하고, 이것은 URL과 URN의 상위 개념입니다.

URL은 리소스가 저장되어 있는 위치로 위치 정보를 나타내는 표현 방식입니다. 해당 방식을 이용할 경우, 리소스의 위치가 바뀔 때 해당 정보 또한 변경됩니다.

URN은 리소스가 가지고 있는 고유한 이름을 사용하여 리소스의 위치를 표현하는 방식입니다. 해당 방식을 이용할 경우, 리소스의 위치가 바뀌어도 정보의 변경이 일어나지 않습니다.

SQL Injection

SQL Injection은 웹 애플리케이션의 취약점을 이용하여 SQL 연산자를 보내는 공격 방식입니다.

해당 방식은 주로 사용자의 입력 검증이 적절하게 수행되지 않았거나 이스케이프 처리를 하지 않았을 때 발생합니다.

해당 방식은 크게 4가지의 방식으로 구분될 수 있습니다.

  1. 인라인 SQL Injection
  2. Union 연산자를 이용한 SQL Injection
  3. 블라인드 SQL Injection
  4. Erorr Message를 활용한 SQL Injection

1번의 경우, 악의적인 SQL 연산자를 그대로 보내는 방법으로 SQL 연산자와 주석 등의 조합을 활용하여 의도치 않은 동작을 DB에서 수행하도록 합니다.

2번의 경우, Union SQL 연산자를 이용하는 방법인데 Union 연산자는 여러 SQL 명령문을 붙여서 결과를 합쳐서 가져오는 동작을 수행합니다. 이것을 활용하여 성공적인 명령문 뒤에 악의적인 명령문을 이어 붙여서 사용자의 정보를 탈취하든지, 악의적인 동작 등을 수행하도록 합니다.

3번의 경우, 데이터베이스에서 응답을 직접적으로 전달하지 않고, 데이터베이스의 구조를 모르는 상황에서 사용되는 방법으로 해당 방법을 통해서 정보를 추측할 수 있습니다. 두 가지 방식으로 나뉠 수 있습니다.

하나는 Boolean을 이용한 방법으로 데이터베이스에 특정 명령문을 수행하는 코드를 보내서 해당 동작의 성공과 실패에 따라 필요한 정보를 캐올 수 있습니다.

다른 하나는 Timed 기반으로 동작하는 방식으로 데이터베이스의 응답이 오는 시간을 이용하여 필요한 정보를 추측할 수 있습니다.

마지막으로 4번의 경우, 데이터베이스의 응답이 그대로 사용자에게 전달되는 상황에서 발생하고 이것은 개발 환경에서 디버깅을 목적으로 수행하다가 그대로 배포하는 상황같은 경우에 발생할 수 있습니다.

이러한 공격 방법들을 예방하기 위한 방법으로 몇 가지가 있는데,

  1. 사용자의 입력 검증
  2. 미리 준비된 SQL 명령문 사용
  3. ORM 사용
  4. 에러 메시지를 최대한 간단하게 전송

결국, 사용자가 입력해오는 값들을 적절하게 검증하고 데이터와 SQL 코드들을 추상화 시켜서 동작하도록 한다면 해당 공격 방식을 회피할 수 있습니다.

웹 캐시와 캐시 서버

먼저, 캐시는 많이 사용하는 데이터를 별도의 저장소에 저장해서 빠르게 응답해주기 위해서 사용하는 방법입니다.

웹 캐시는 웹에서 많이 사용되는 리소스를 별도로 캐시 서버 혹은 브라우저에 저장을 해두고 사용하는 캐시를 의미합니다.

브라우저에서 사용되는 대표적인 웹 캐시로 preflight의 요청 저장 혹은 웹 페이지 리소스등을 저장할 수 있습니다.

캐시 서버는 리소스를 별도로 저장하면서 관리할 수 있고, 이때 리소스의 관리를 위해서 캐시 서버와 웹 서버는 조건부 요청과 만료 기간 설정 등을 적절하게 사용하여 관리할 수 있습니다.

캐시 서버는 "신선도 검사"를 이용하여 리소스를 사용할 수 있는지 판별하고, 만료 기간이 지났다면 리소스를 새로 받아오는 작업을 수행합니다. 해당 과정에서 리소스의 변경이 일어나지 않았다면 필요한 메타 데이터만 받아오고, 변경이 되었을 경우에는 메타데이터 포함 데이터도 같이 받아옵니다.

이러한 웹 캐시 혹은 캐시 서버를 활용하여 사용자의 요청에 빠르게 응답할 수 있고, 서버의 부하를 줄일 수 있으며, 전체 네트워크 트래픽을 낮출 수 있습니다.

프록시 서버

프록시 서버는 클라이언트와 서버의 중간에 위치하는 중계자 역할을 수행하는 서버를 의미합니다.

프록시 서버는 보안 작업을 수행할 수 있고, 필터링 작업, 요청에 대한 처리 후 전송, 요청 로드 밸런싱 등과 같은 작업을 수행할 수 있습니다.

프록시 서버는 포워드 프록시와 리버스 프록시로 구분될 수 있는데,

프워드 프록시는 클라이언트 측에 위치한 프록시 서버로, 요청에 대한 처리를 수행하는 역할을 주 목적으로 사용됩다.

리버스 프록시는 서버 측에 위치한 프록시 서버로, 클라이언트들로부터 서버의 존재들을 숨겨주는 역할을 수행합니다.

커넥션 타임아웃과 리드 타임아웃

커넥션 타임아웃(Connection Timeout)리드 타임아웃(Read Timeout)은 네트워크 통신 과정에서 발생하는 두 가지 주요 타임아웃 유형입니다. 이들은 네트워크 연결과 데이터 전송 과정에서 시간이 초과될 때 발생합니다.

커넥션 타임아웃(Connection Timeout)

  • 정의: 커넥션 타임아웃은 클라이언트가 서버에 연결을 시도할 때 설정된 시간동안 연결이 성공적으로 이루어지지 않을 때 발생합니다.
  • 시나리오: 서버가 다운되었거나, 네트워크 문제, 서버가 요청을 받을 준비가 되지 않았을 때 발생합니다.
  • 중요성: 연결 설정 과정에서 발생하는 문제를 식별하는데 중요하며, 네트워크의 상태나 서버의 가용성 문제를 진단하는 데 사용됩니다.

리드 타임아웃(Read Timeout)

  • 정의: 리드 타임아웃은 클라이언트가 서버로부터 데이터를 읽는 과정에서 설정된 시간 동안 데이터를 수신하지 못할 때 발생합니다.
  • 시나리오: 데이터 처리 시간이 많이 걸리거나, 서버가 과부하 상태일 때, 네트워크 속도가 느릴 때 발생합니다.
  • 중요성: 데이터 전송 과정에서 발생하는 문제를 식별하는 데 중요하며, 서버의 처리 능력이나 네트워크의 전송 속도 문제를 진단하는 데 사용됩니다.

공통점과 차이점

  • 공통점: 두 타임아웃은 모두 네트워크 연결 및 통신 과정에서 발생하며, 시간 초과로 인해 발생합니다.
  • 차이점: 커넥션 타임아웃은 연결 설정 과정에서 발생하는 반면, 리드 타임아웃은 이미 설정된 연결에서 데이터 전송 중에 발생합니다.

답변 정리 및 개념 확장

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

해당 답변의 경우, 잘못된 내용은 없으나 깔끔하게 정리할 필요가 있습니다.

쿠키는 클라이언트 측에 저장되는 데이터 조각이라는 표현은 나쁘지 않습니다.

그 이후의 답변을 조금 수정할 필요가 있는데,

쿠키는 HTTP 프로토콜의 stateless한 특성을 보안하기 위해서 사용하는 것으로 다음과 같은 특징을 가지고 있습니다.

  • 클라이언트 측 저장
  • 4KB의 제한된 크기
  • 요청에 자동으로 탑재되어 전송되는 자동 전송 기능
  • 저장되어 있는 데이터가 자동적으로 삭제될 수 있는 만료 기간
  • 보안과 개인 정보

특히, 브라우저에서 제공하는 local storage와의 차이점이 드러나는 특징이 자동 전송 기능, 만료 기간, 보안과 개인 정보라고 볼 수 있습니다. 더 다양한 기능을 제공하는 것이죠.

세션은 클라이언트가 웹 사이트를 방문했을 때 일시적으로 서버에 저장되는 데이터입니다. 여기서 중요한 것은 세션이라는 개념은 결국 데이터를 의미하는 것입니다.

여기서 사용되는 세션 ID는 세션을 사용하기 위한 수단입니다. 더불어서 분산된 환경에서 세션은 사용하기 힘들기 때문에 스티키 세션, 세션 클러스터링과 세션 저장소를 활용할 수 있습니다.

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

해당 답변은 괜찮다고 판단됩니다.

토큰은 서버가 클라이언트를 인증했다는 증거로 발급하는 것입니다. 토큰의 인증을 위해서 디코딩 작업 즉, 파싱이 수행됩니다.

JWT는 JSON 객체 기반의 토큰이라고 생각될 수 있습니다.

구조는 헤더, 페이로드, 서명으로 구분되어 있는 것이 맞으며 서명을 위해서 공개키 방식과 대칭키 방식 둘 다 사용 가능합니다. 이것은 출처 인증을 위해서 사용되는 것이 보안적으로는 취약하다는 특징을 가지고 있습니다.

특징에 대해서 좀 더 언급을 해보자면,

자가 포함이라는 특징을 가지고 있는데, 필요한 정보들을 해당 토큰이 전부 가지고 있는 것입니다. 또한, 서명을 탑재하고 있어서 보안성을 챙기고 있으며, 자가 포함의 특징으로 인해서 특정 서버에 종속되어 있지 않기 때문에 확장성이 높습니다. 마지막으로 만료 기간을 설정하여 취약점을 보안할 수 있습니다.

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

해당 답변에서는 CORS 설명이 빠졌네요. 다시 한번 정리를 하겠습니다.

SOP는 같은 출처에 한해서 리소스를 허용하는 정책입니다. 좀 더 풀어서 설명을 해보자면, 특정 출처에서 리소스를 가져와서 브라우저에서 스크립트를 실행하는 동안 다른 출처의 리소스와 상호 작용하는 것을 제한하는 보안 매커니즘입니다.

보통 웹 사이트의 경우, 다른 출처와 상호 작용해야 하는 상황이 많이 발생하고 이러한 문제점을 해결하기 위해서 사용하는 것이 CORS입니다.

CORS는 SOP를 완화해주는 기술로, 서버에서 특정 출처가 리소스를 받아올 수 있도록 허용해주는 매커니즘을 가지고 있습니다.

CORS는 세 가지 요청 방식에 따라 다르게 설정될 수 있고 이때 말하는 세 가지 요청 방식으로는 일반 요청, preflight 요청, credentials가 포함된 요청으로 구분할 수 있습니다.

마지막으로 SOP만을 사용할 경우 가져올 수 있던 보안의 이점을 CORS의 사용으로 인해서 보안적으로 다소 취약해졌기 때문에, 추가적인 보안을 고려할 필요가 있습니다.

이때 사용할 수 있는 것이 쿠키의 각종 설정(예를 들어, Secure, Same-Site, HTTP Only), CSP, CSRF Token과 같은 것들을 통해서 XSS와 CSRF 공격으로 부터 보호할 수 있습니다.

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

해당 설명도 간단하게 설명하는 것으로 생각하자면 나쁘지는 않다고 생각하다만, 너무 간략하게 정리한 느낌이 있습니다.

REST라는 것은 컴퓨터간의 상호운용성을 제공하는 것중 하나의 방법입니다. 즉, 여러 컴퓨터들이 통신을 할 때 원할하게 통신을 할 수 있도록 방법을 제공해주는 것입니다.

REST를 구성하는 스타일에는 몇가지가 있습니다.

  • client-server
  • stateless
  • cache
  • uniform interface
  • layered system
  • code-on-demand(optional)

이렇게 정리할 수 있는데, 사실 이러한 내용들을 답변을 다하는 것 보다는 개발자의 초점에서 언급해야 될 것은 uniform interface입니다.

이외의 것들은 HTTP 프로토콜에서 알아서 지원해주고 있는 특징들입니다.

uniform interface 즉, 약속된 형식으로 표현하는 것을 의미하는데

제약 조건으로 다음과 같은 것들이 존재합니다.

  1. identification of resources
  2. manipulation of resources through representations
  3. self-descriptive message
  4. HATEOAS

1번은 리소스가 URI로 식별될 수 있어야 된다는 것

2번은 representations를 통해서 리소스를 조작할 수 있어야 한다는 것을 의미합니다.

우리가 흔히 사용하는 REST라는 단어를 표현할 때 생각하는 것은 1번과 2번의 조합 그리고 개발 그룹내에서 약속하는 3번을 생각합니다.

즉, URI를 올바르게 설정하고, Method 그리고 데이터 표현 방식을 개발하고 있는 그룹 또는 회사 내에서 약속하고 있는 방식대로 사용하는 것입니다.

그리고 REST API는 이러한 약속들을 만족하는 형식의 API라고 생각하면 됩니다.

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

해당 설명은 조금 난잡해 보입니다.

좀 더 깔끔하게 정리를 해봅시다.

REST의 제약 조건에는 먼저 크게 보자면 몇 가지가 있습니다. 대부분은 HTTP 프로토콜을 사용하면서 지켜지지만 살펴봐야 되는 것은 uniform interface입니다.

uniform interface의 제약 조건으로는 리소스를 URI로 표현할 수 있어야 하는 것과 표현을 통해서 리소스를 조작할 수 있어야 한다는 것 그리고 데이터 표현 형식을 약속하여 데이터를 주고 받을 때 어떠한 내용의 메시지인지 해석이 가능해야 합니다.

여기까지 답변하면 될 것 같고, 더 깊은 내용인 self-descriptive meesage와 HATEOAS는 굳이 설명할 필요가 없어 보입니다.

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

해당 설명도 나쁘지 않아 보입니다.

다만, URI를 설명할 때 데이터의 저장 위치를 말하는 가장 큰 개념이라는 표현 보다는 리소스의 고유한 식별 정보를 이용하여 리소스의 위치를 표현하는 방식이라고 말하는 것이 더 깔끔해 보입니다. Uniform Resource Identifier이니깐요.

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

해당 설명은 나쁘지 않아 보입니다.

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

해당 설명은 나쁘지 않아 보입니다.

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

SQL Injection은 웹 애플리케이션의 취약점을 이용하여 SQL 쿼리를 데이터베이스 주입하는 공격 방식입니다.

해당 공격 방식은 크게 4가지로 나뉘고, 인라인 SQL 주입, Union 기반의 SQL 주입, 블라인드 기반의 SQL 주입, 에러 메세지 SQL 주입으로 나뉩니다.

방어하는 방법으로는 가장 간단한 방법으로 사용자의 입력을 적절히 검증하고 이스케이프 처리를 수행하는 것입니다.

이 외에도 미리 준비된 SQL 쿼리를 사용하거나, ORM을 사용하여 SQL 쿼리와 입력 데이터를 추상화 시켜서 구분하고, 에러 메시지를 적절하게 처리하는 등과 같은 방식을 고려할 수 있습니다.

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

해당 설명은 나쁘지 않아 보입니다.

좀 더 깔끔하게 정리를 해볼 필요는 있어 보입니다.

웹 캐시는 웹에서 많이 사용되는 리소스들을 저장하는 임시 저장소로, 사용자에게 빠른 응답을 제공하기 위해서 사용됩니다.

웹 캐시는 브라우저단에서 활용될 수 있고, 좀 더 나아가서 캐시 서버에서도 활용될 수 있습니다.

캐시된 데이터의 유효성을 보장하기 위해서 조건부 요청 헤더 및 만료 기간 설정 헤더와 같은 것들을 활용할 수 있습니다.

웹 캐시를 사용하면 얻을 수 있는 이점으로는 사용자에게 빠른 응답을 제공할 수 있다는 점과 웹 서버의 부하를 줄일 수 있다는 점, 그리고 전체적인 네트워크 트래픽을 감소시킬 수 있다는 점을 이야기 할 수 있습니다.

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

해당 설명은 틀린 말은 아니지만 수정할 필요는 있어 보입니다.

프록시 서버는 클라이언트와 서버 사이에 위치하는 중계자 서버로 캐싱, 로드 밸런싱, 필터링, 보안 등과 같은 작업을 수행할 수 있습니다.

프록시 서버는 어느 목적으로 사용되냐에 따라서 포워드 프록시와 리버스 프록시로 구분할 수 있습니다.

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

해당 내용도 조금 수정을 하겠습니다.

포워드 프록시는 클라이언트 측에 위치하는 프록시 서버로 사용자들의 요청을 적절하게 처리하기 위한 목적으로 사용됩니다.

해당 프록시가 수행하는 주요 기능으로는 캐싱, 필터링 작업, 요청 처리 등과 같은 작업들을 수행할 수 있습니다.

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

해당 내용도 족므 수정하겠습니다.

리버스 프록시는 서버 측에 위치하는 리버스 프록시 서버로 뒷단에 존재하는 여러 서버들의 존재를 클라이언트로부터 숨겨주는 역할을 수행합니다.

리버스 프록시의 주요 역할은 로드 밸런싱, 보안 처리, 서버의 존재 숨기는 등의 동작을 수행합니다.

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

해당 내용은 적절해 보이지만 이것은 로드 밸런서에 대한 설명으로 적합하며 L7이란 단어가 붙은 시점에서는 좀 더 내용이 붙어야 합니다.

L7 로드 밸런서는 로드 밸런싱을 수행할 때 제 7계층에서 수행한다는 의미로 결국 애플리케이션 계층의 데이터를 분석하여 트래픽을 적절한 서버로 라우팅하는 작업을 수행합니다.

좀 더 설명을 적어보자면, 내용 기반의 라우팅을 수행하기 때문에 스티키 세션과 같은 기능을 수행할 때 사용되는 로드 밸런서로 사용되는 것입니다. HTTP 헤더, URL, 쿠키 등의 데이터를 확인할 필요로 하는 로드 밸런싱인 경우에 해당 로드 밸런서를 사용하면 됩니다.

장점으로는 지능적인 트래픽 분산과 애플리케이션 레벨에서의 부하 분산을 수행하여 애플리케이션 요구 사항에 맞게 동작할 수 있겠지만,

단점으로는 단일 장애 지점이 될 수 있다는 점과 L4 로드 밸런서보다는 성능이 느리다는 것이 존재합니다.

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

커넥션 타임아웃은 클라이언트가 서버와의 커넥션을 맺는 과정에서 시간 초과가 발생했을 때 일어나는 현상입니다.

커넥션 타임 아웃은 설정된 시간동안 연결이 성공적으로 이루어지지 않은 경우에 발생하며, 네트워크 문제나 서버의 다운 혹은 서버가 요청 받을 준비가 되어 있지 않은 경우에 발생할 수 있습니다.

리드 타임 아웃은 연결이 된 이후 데이터를 읽는 과정에서 데이터를 수신하지 못할 때 발생합니다. 서버의 부화, 네트워크의 지연 혹은 데이터 처리 시간이 많이 걸리는 상황에서 발생할 수 있습니다.

답변 추상화 시키기

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

쿠키는 클라이언트측에 저장되는 작은 데이터 조각입니다. HTTP 통신은 stateless하다는 특징을 가지고 있기 때문에 이것을 보완하기 위해서 사용합니다.

특징으로는 4KB의 작은 데이터 크기와 자동 전송 기능 및 만료 기간 등이 있습니다. 세션 정보 유지나 사용자 경험을 개선하고 편의성을 제공해주기 위해서 사용됩니다.

세션은 클라이언트가 웹 사이트를 방문했을 떄 서버측에 일시적으로 저장되는 데이터입니다. 세션은 클라이언트가 세션 ID를 가지고 세션에 저장되어 있는 데이터와 Mapping되기 때문에 보안적으로는 쿠키보다 안전하지만, 특정 서버에 종속된다는 단점을 가지고 있습니다.

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

JWT 토큰은 JSON 객체로 만들어진 토큰으로, 토큰은 서버측에서 클라이언트를 인증했다는 의미에서 발급해주는 것입니다.

JWT 토큰의 구조는 헤더, 페이로드, 서명으로 이루어져있고 서명은 공개키, 대칭키 방식 둘 다 사용 가능합니다.

JWT 토큰은 BASE 64 인코딩 방식으로 전송되기 때문에 다소 보안적으로 취약하고, 여러 데이터가 들어갈 수 있어서 오버헤드가 크게 늘어날 가능성이 있지만, 필요한 모든 데이터를 토큰이 가지고 있을 수 있는 자가 포함 특징으로 인해 확장성을 높여줍니다.

사용 목적은 데이터 보호보다는 출처 인증에 있습니다.

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

SOP는 같은 출처에 한해서 리소스를 허용한다는 정책으로, 특정 출처로부터 리소스를 받아오고 스크립트가 실행되어 다른 출처와 상호작용하려고 하는 것을 제한하는 매커니즘을 가지고 있습니다.

SOP는 여러 공격으로 부터 보안적인 예방이 가능하게 해줍니다. 하지만, 웹 사이트의 경우 다른 출처의 리소스를 써야되는 경우가 많기 때문에 이것을 해결하기 위해서 사용하는 것이 CORS 입니다.

CORS는 다른 출처의 리소스를 허용한다는 것으로, SOP 완화 정책으로 생각할 수 있습니다. CORS는 서버측에서 특정 출처에 한해서 리소스를 가져갈 수 있게 해주는 매커니즘을 가지고 있습니다.

CORS의 설정은 3가지 요청방식에 따라 달라질 수 있는데, 일반 요청, preflight 요청, credentials 포함 요청으로 구분될 수 있습니다.

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

REST는 일종의 약속을 의미하는 것을 컴퓨터간의 상호운용성을 보장하기 위해서 사용합니다.

REST API는 REST의 제약 조건들 충분히 만족하는 API를 의미합니다.

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

REST 제약 조건에는 여러 가지 있을 수 있지만, 기본적으로는 HTTP 프로토콜을 사용하면서 지켜지고 개발자 입장에서 봐야될 것은 uniform interface입니다.

uniform interface의 제약 조건으로는 URI를 통해서 리소스를 표현할 수 있어야 하며, 표현을 통해서 리소스를 조작할 수 있어야 하고, 자기 표현이 충분히 가능해야 하며, HATEOAS와 같이 상태 이전을 표시할 수 있어야 합니다.

보통 URI를 통한 리소스 표현, 표현을 통해서 리소스 조작, 자기 표현이 충분히 가능한 것 정도를 지키면 REST API라고 말합니다.

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

URI는 리소스에 대한 고유한 식별자를 사용해서 리소스의 위치를 표현하는 방식입니다. URI는 URL과 URN을 포함하고 있습니다.

URL은 리소스가 저장되어 있는 경로를 사용해서 리소스의 위치를 표현하는 방식입니다. 이것은 리소스가 저장되어 있는 경로에 따라서 값이 변경될 수 있습니다.

URN은 리소스의 고유한 이름을 사용해서 리소스의 위치를 표현하는 방식입니다. 이것은 리소스가 어디에 저장되어 있든지 상관없이 고유한 값을 가지게 됩니다.

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

XSS는 Cross Site Script으로 공격자가 악의적인 방식을 통해서 스크립트를 특정 리소스에 삽입하는 공격 방식을 의미합니다. 악의적인 스크립트가 삽입되어 있는 리소스를 사용자가 브라우저로 가져왔을 때 스크립트는 실행이 될 것이고, 의도치 않은 동작을 수행하게 됩니다.

해당 공격 방식을 이용해서 DDOS 공격이나 정보 탈취 등을 수행할 수 있습니다.

해당 공격을 방어하는 방법으로는 SOP와 CORS의 조합과 CSP의 사용을 고려해볼 수 있습니다.

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

CSRF는 Cross Site Request Forgery로 공격자가 특정 리소스에 공격 대상의 서버의 링크를 삽입해 놓고 희생자가 리소스를 받아와서 해당 링크를 실행시켰을 때 희생자 브라우저에서 사용자 인증 정보까지 같이 보내게 되면서 의도치 않은 동작 수행을 하게 만드는 공격 방식입니다.

해당 공격 방식을 방어하는 방법으로는 적절한 기능 설정을 한 Cookie 사용과 CSRF Token의 사용을 고려해볼 수 있습니다.

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

SQL Injection은 웹 애플리케이션의 취약적을 이용하여 SQL 쿼리문을 데이터베이스에 삽입하는 공격 방식입니다.

해당 공격방식은 크게 4가지로 구분될 수 있습니다.

인라인 SQL Injection, Union 연산자 SQL Injection, 블라인드 SQL Injection, 에러 메시지 SQL Injection 으로 구분될 수 있습니다.

해당 공격을 방어하기 위해서 가장 기본적인 방법은 사용자이 입력을 적절하게 검증하거나 이스케이프 처리를 하는 것입니다.

다른 방법들로는 미리 준비된 명령문을 사용해서 데이터와 SQL 쿼리문을 추상화 시켜서 검사한다던가, ORM을 사용한다던가, 에러 메시지를 적절하게 보내는 등을 고려해볼 수 있습니다.

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

웹 캐시란 것은 웹에서 자주 사용하는 리소스를 저장해두는 임시 저장소를 의미합니다. 웹 캐시는 브라우저단에서 저장하는 캐시 저장소와 별도의 서버를 두어 캐시 서버 역할을 수행하는 웹 캐시 서버로 구분할 수 있습니다.

캐시된 리소스의 "신선도" 즉, 만료 기간을 확인하여 리소스의 유효성을 보장하기 위해서 조건부 요청을 통해서 리소스의 신선도 검사를 수행할 수 있고, 만료 기간을 체크하여 클라이언트에게 메타 데이터만 혹은 데이터까지 보내는 작업을 수행할 수 있습니다.

웹 캐시를 사용하게 되면서 사용자에게 빠른 응답을 제공할 수 있고, 웹 서버의 부하를 낮출 수 있으며, 전체적인 네트워크 트래픽을 낮출 수 있습니다.

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

프록시 서버는 클라이언트와 서버 사이에 두는 중계자 역할을 수행하는 서버로, 캐싱, 필터링 작업, 보안 처리, 로드 밸런싱 등 다양한 역할을 수행할 수 있습니다.

프록시 서버는 사용되는 목적에 따라서 포워드 프록시와 리버스 프록시로 구분할 수 있습니다.

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

포워드 프록시는 클라이언트 측에서 사용되는 프록시 서버이며, 사용자의 요청을 처리하는 것을 목표로 합니다.

이 외에도 캐싱 작업, 요청과 관련하여 필터링 작업, 요청에 필요한 작업 수행 등의 기능을 수행할 수 있습니다.

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

리버스 프록시는 서버 측에서 사용되는 프록시 서버이며, 사용자들로부터 서버의 존재를 숨기는데 사용됩니다.

이 외에도, 로드 밸런싱, 보안 처리 등과 같은 기능을 수행할 수 있습니다.

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

L7 로드 밸런서는 애플리케이션 계층의 데이터를 활용하여 요청을 로드 밸런싱해주는 역할을 수행합니다.

L4 로드 밸런서와 다르게 HTTP 헤더, 데이터의 정보 혹은 내용을 이용하여 로드 밸런싱을 수행할 수 있기 때문에 더 정교합니다.

하지만, L4 로드 밸런서보다 속도적인 측면에서는 느립니다.

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

커넥션 타임아웃은 클라이언트와 서버가 연결을 할 때 설정된 시간을 넘어서 연결에 실패했을 때 발생합니다.

해당 문제는 보통 네트워크 문제, 서버가 다운되어 있거나 혹은 서버가 요청을 받을 준비가 되어 있지 않은 경우에 발생합니다.

리드 타임아웃은 클라이언트와 서버가 연결이 된 후 데이터를 읽는 과정에서 수신을 실패했을 때 발생합니다.

해당 문제는 네트워크의 지연 문제, 데이터의 처리 시간 지연 혹은 서버의 과부화로 인해서 발생합니다.

둘 다 공통적으로 설정된 시간을 넘어서서 발생했다는 특징을 가지고 있고, 커넥션 타임 아웃은 연결을 하는 과정에서, 리드 타임아웃은 연결은 되었지만 데이터를 송수신하는 과정에서 발생합니다.

profile
개발정리블로그

0개의 댓글