백엔드 개발직 면접 예상 질문

2. 운영체제, 네트워크, 보안과 암호학

계란💕 2023. 1. 22. 20:13

  2.1 네트워크(Network)

  • 웹 통신의 큰 흐름에 대해 설명하라

 

  • TCP, UDP 차이점
    • TCP(transmission control protocol, 전송 제어 프로토콜)는 연결형 프로토콜로서 데이터 전송 순서, 신뢰성 보장, 속도는 느림
      • 에러 발생재전송을 요청하고 에러복구한다는 점에서 UDP와 다르다.
      • ex) web, e-mail, HTTP, SMTP, 파일 전송 등
    • UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜): 비연결형 프로토콜로서 데이터 그램 단위로 데이터를 전송하는 프로토콜이다.
      • 데이터를 보낼 때마다 어떤 응답이 발생하지 않는다.
      • 연결이 잠깐 끊기더라도 그 내용을 추측 가능한 데이터를 보낼 때 사용한다.
      • ex) 스트리밍, 전화, 브로드캐스팅
    • TCP는 가상 회선을 만들어 신뢰성을 보장하도록 하는 프로토콜로 따로 신뢰성을 보장하기 위한 절차가 없는 UDP에 비해 속도가 느리다.
    • 그래서 TCP는 신뢰성이 중요한 서비스 파일 전송 같은 서비스에 이용

 

 

  • HTTP, HTTPS 차이점
    • HTTP(HyperText Transfer Protocol): 에서 정보주고 받을 수 있는 프로토콜이다. HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. 
      • 주로 TCP를 사용한다.
      • 클라이언트, 서버 사이에 이뤄지는 요청, 응답 프로토콜이다.
    • HTTP는 따로 암호화 과정을 거치지 않기 때문에 중간에 패킷을 가로채거나 수정 가능하다 따라서 보안에 취약하다. 이를 보완하기 위한 것이 HTTPS이다. 중간에 암호화 계층을 거쳐 패킷을 암호화한다.

 

  • HTTPS에 대해 설명하고 SSL Handshake에 대해 설명

 

  • GET, POST 차이점
    • GET: 서버에 있는 정보를 요청하고 POST는 서버에 정보 생성을 요청한다.
    • 멱등성(Idempotent)
      • Def) 멱등성(Idempotent): 동일한 요청을 한 번 보낼 때여러 번 보낼 때 결과가 동일하면서 서버의 상태도 동일하게 남는 경우를 말한다. Ex) GET, PUT, DELETE 는 멱등성 보장
      • GET 멱등성 보장, POST(같은 데이터가 여러개 생성된다.): 서버의 상태를 변경시키므로 멱등성이 유지 X
    • Request body: get은 없는 게 일반적, post는 body에 데이터를 담아서 보낸다.

 

  • HTTP 메서드와 차이점
    • GET: 서버에 존재하는 데이터를 요청
    • POST: 서버에 데이터 생성을 요청한다.
    • PUT: 서버에 존재하는 데이터를 전체 수정하거나 존재하지 않으면 생성한다.
      • 멱등성 보장한다.
      • 서버에 존재하는 해당 리소스요청에 담긴 내용대로 완전히 교체하므로 여러 번 수행해도 결과값은 바뀌지 않는다.
    • PATCH: 서버에 존재하는 데이터를 일부 수정한다.
    • DELETE: 서버에 데이터를 제거 요청, 멱등성 보장한다.
    • 참고 블로그) 

 

 

  • CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)란?
    • 출처가 다른 자원들을 공유한다는 뜻이다.
    • 웹 개발을 하다가 흔히 만날 수 있는 이슈이다. 프론트엔드 개발 시에 로컬에서 API 서버에 요청을 보낼 때 흔하게 발생한다.
    • 서로 다른 도메인 간에 자원을 공유하는 것을 뜻한다. 대부분의 브라우저에서는 이를 기본적으로 차단하며 서버측에서 헤더를 통해서 사용 가능한 자원을 알려준다.
    • https://escapefromcoding.tistory.com/724

 

  • OSI 7 계층과 존재 이유, TCP/IP 4계층에 대해 설명
    • 네트워크 통신을 구성하는 요소를 7개의 계층으로 표준화한 것이다.
    • 통신이 일어나는 과정을 단계별로 파악할 수 있어서 문제가 발생하면 해당 문제를 해결하기에 용이해진다.
    • 실제로 우리가 대부분 사용하는 네트워크는 TCP/IP 4계층이다.
    • OSI 7계층 (Open Systems Interconnection Reference Model)
        1. 물리 계층(1계층): 데이터전기 신호로 바꿔 송수신한다.
        2. 데이터 링크 계층(2계층): 물리적 네트워크 사이의 데이터 송수신을 담당한다. ex) 이더넷 프로토콜, 스위치
          1. https://www.ibm.com/docs/ko/aix/7.1?topic=networks-physical
          2. 물리적 네트워크: 네트워크에 있는 다른 하드웨어를 연결하는 케이블(동축 케이블, 트위스트 쌍, 광섬유, 전화선), 네크워크에 연결된 컴퓨터에 사용되는 어댑터 카드, 네트웍에 사용되는 집선기, 증폭기, 라우터, 브릿지를 말한다.
        3. 네트워크 계층(3계층): 실제 네트워크 간에 데이터 라우팅을 담당한다. 라우팅(네트워크 안에서 데이터를 최대한 빠르게 보낼 수 있는 최적의 경로 선택 과정), 패킷 전달 Ex) IPv4, IPv6
        4. 전송 계층(4계층): 하위 계층에 신뢰할 수 있는 데이터 전송 서비스를 제공한다. Ex) TCP, UDP
        5. 세션 계층(5계층): 두 컴퓨터 간의 대화나 세션을 관리한다. 통신 방식 결정
        6. 표현 계층(6계층): 데이터의 암호화, 데이터 압축 (변환)
        7. 응용 계층(7계층): 사용자가 네트워크 자원에 접근하는 방법(서비스)을 제공한다. 사용자와 가장 가깝다. Ex) HTTP, SMTP, DNS

 

  •  TCP/IP 모델
    • 네트워크 연결 계층: 데이터를 전기 신호로 변환한 다음 물리적 주소인 MAX 주소를 이용해서 알맞은 기기로 데이터를 전달하는 계층이다. 이더넷, 와이파이
    • 인터넷 계층: 패킷을 최종 목적지까지 라우팅하는 계층이다.
    • 전송 계층: 노드 간 신뢰성 있는 데이터 전송을 보장한다. TCP, UDP
    • 응용 계층: 사용자 <=>소프트웨어가 소통 담당, HTTP, FTP, SMTP
    • https://wooono.tistory.com/507
    • https://oranthy.tistory.com/211

 

  • 웹 서버 소프트웨어(Apache, NGinX)는 OSI 7계층 중 어디서 작동하는가?
    • 7계층 응용 계층

 

  • 웹 서버 소프트웨어의 서버 간 라우팅 기능은 OSI 7 계층 중 어디서 작동하는가?
    • 네트워크 계층에서 담당한다.
    • 라우팅: 네트워크 안에서 데이터를 알고리즘에 의해 최대한 빠르게 보낼 최적의 경로를 선택하느 과정을 말한다.

 

  •  API란?
    • API(Application Programming Interface): 컴퓨터컴퓨터 프로그램 사이의 연결을 말한다.
    • 어떤 응용 프로그램에서 데이터를 주고 받기 위한 방법을 말한다.
    • UI(User Interface)는 사용자컴퓨터를 연결한다면 API는 컴퓨터소프트웨어를 연결한다.
    • API: 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호 작용을 촉진하며 서로 정보를 교환하도록 하는 것이다.

 

  • REST(Representational State Transfer)
    • DeF) REST: 자원이름으로 구분하여 해당 자원의 상태주고 받는 모든 것을 의미한다.
    • REST는 URI를 통해 자원을 나타내고 HTTP 메서드를 이용해서 해당 자원의 행위를 규정해서 결과를 받는다는 뜻이다.
    • REST의 구성 요소
        1. 1) 자원(URI): 클라이언트URI를 이용해서 자원을 지정하고 해당 자원의 상태에 대한 조작서버에 요청한다.
          1. https://mslilsunshine.tistory.com/167https://velog.io/@jch9537/URI-URL
          2. URI(Uniform Resource Identifier, 통합 자원 식별자):인터넷에서 자원을 나타내는 유일한 주소이다.
          3. URL(Uniform Resource Locator): URI의 하위 개념이다. 리소스가 있는 유일한 경로에 대한 식별자를 말한다. 웹 사이트의 주소 뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타낼 수 있다.
          4. 프로토콜
          5. Host name: 도메인 이름, IP 주소
          6. port
          7. path or queryhttps://kotlinworld.com/96
        2. 2) 행위: HTTP 메서드, HTTP 프로토콜은 GET, POST, PUT, DELETE 같은 메서드를 제공한다.
        3. 3)표현: 클라이언트가 자원의 상태에 대한 조작을 요청하면 서버는 이에 적절한 응답을 보낸다. REST에서 하나의 자원은 JSON, XML, TEXT 등등
          1. https://sujl95.tistory.com/59 XML 과 JSon 차이점
          2. XML(eXtensive markup language): HTML과 비슷한 문자 기반의 마크업 언어이다.
            • HTML과는 다르게 태그를 사용자가 직접 정의한다.
          3. JSon(JavaScript Object notation): 브라우저 통신을 위한 속성-값 또는 키 -값 쌍으로 이뤄진 포맷
          4. XML과 JSon의 공통점: 데이터를 저장하고 전달하기 위해 고안됐다. 다양한 언어에 의해 파싱 가능하다.
          5. XML과 JSon의 차이점은?
    • REST 특징
      • 서버-클라이언트 구조: 자원 요청 / 자원 있는 쪽(서버)
      • stateless (무상태 프로토콜)
        • stateless: 서버클라이언트의 상태를 보존하지 않는다.
        • 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.
        • HTTP 프로토콜은 Stateless이므로 rest 역시 무상태성을 갖는다.
        • stateless의 장점
        • stateless의 단점
        • ex) 온라인 검색 <=> 온라인 뱅킹은 stateful
          • stateful 트랜잭션은 컨텍스트와 내역이 저장되므로 중단된 곳부터 다시 시작 가능하다.
        • https://www.redhat.com/ko/topics/cloud-native-apps/stateful-vs-stateless
        • cacheable 캐시 처리 가능
        • layered system 계층화
  • REST API란?
    • REST API(Representational State Transfer API, 자원 표현에 의한 상태 전달)란?
      • Def) REST API: REST 기반으로 서비스 API를 구현한 것이다.
      • REST API 특징
        • REST 기반으로 시스템 분산해 확장성재사용성을 높여 유지 보수, 운영을 편리하게 한다.
        • REST는 HTTP 표준을 기반으로 구현하므로 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
        • https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
  • RESTful
    • REST API를 제공하는 웹 서비스를 RESTful 하다고 한다.
    • 일반적으로 REST 라는 아키텍처 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다.
    • REST API를 제공하는 웹 서비스를 RESTful 하다고 한다.
    • RESTful 하지 못한 경우의 예시) 모든 요청을 post 로 처리해버린다.

 

 

  2.2 운영체제(Operating System)

  • 프로세스와 스레드의 차이는?
    • 프로세스(Process)는 실행중인 프로그램을 의미한다. 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 운영체제로부터 주소 공간, 파일, 메모리 등을 할당 받으며 이것들을 총칭하여 프로세스라고 한다.
    • 또한 프로세스는 실행 중에 동적으로 할당되는 메모리Heap을 포함한다.
    • 프로세스의 구성 요소 4가지
      • code(text): 프로그램의 코드
      • data: 전역 변수/ static 변수 / 초기화된 데이터 저장
      • stack: 임시 데이터(함수 호출 시 지역 변수, 함수의 매개변수, 복귀 주소같은 임시 주소) 저장
      • heap: 코드에서 실행중에 동적으로 할당되는 메모리 
    • 스레드(Thread): 프로세스실행 단위를 말한다. 한 프로세스 내에서 여러 스레드끼리 공간이나 자원을 공유할 수 있다. code, data, 파일이나 신호 같은 운영체제 자원들을 공유한다.
    • 멀티 스레딩: 하나의 프로세스를 다수의 실행 단위로 구분해서 자원을 공유하고 자원 생성과 관리의 중복성을 최소화하여 수행 능력을 향상 시키는 걸 멀티스레딩이라고 한다.

 

  • 멀티스레드
    • 멀티스레드란 하나의 프로세스 내에서 여러 개의 스레드를 만들어서 자원 생성과 관리의 중복을 최소화하는 것을 말한다.
    • 멀티스레드의 장점: 프로세스를 사용해서 동시에 처리하던 일을 스레드로 구현할 경우, 메모리 공간과 시스템 자원 소모가 줄어든다.
    • 멀티스레드의 문제점
    • 멀티스레드 vs 멀티프로세스
      • 멀티 스레드
        • 장) 멀티 프로세스 보다 적은 메모리 공간을 차지하고 컨텍스트 스위칭이 빠르다는 장점이 있지만
        • 단) 오류가 생겨서 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제가 있다.
      • 멀티 프로세스
        • 장) 하나의 프로세스가 다운되더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만
        • 단) 멀티스레드보다 많은 메모리 공간과 cpu시간을 차지 한다는 단점이 존재한다.
      • 이 두 가지는 동시에 여러 작업을 수행한다는 점이 같다.

 

  • 컨텍스트 스위칭(context switching)
    • 하나의 작업이 끝날 때까지 기다리는 게 아니라 여러 작업번갈아가면서 실행하고 동시에 처리될 수 있도록 하는 방법이다.
    • 스레드는 캐시 메모리나 PCB에 저장해야하는 내용이 적고 비워야하는 내용도 적기 때문에 프로세스보다 컨텍스트 스위칭이 빠르다.

 

  • 동기(sync), 비동기(Async)의 차이(블로킹, 넌블로킹)/ 장단점에 대해 설명하라
    • 동기(sync): 메서드를 실행시키고 동시에 반환 값이 기대되는 경우를 동기라고 표현한다.
      • 요청과 결과가 동시에 일어난다.
    • 비동기(async): 요청과 결과가 동시에 일어나지 않는다.
      • Ex) 비동기 처리 예시
      • 프로젝트에서 회원 가입 제출 폼을 누르면 이메일 발송이 되는데
      • 오래 걸려서 “이메일 전송 완료” 팝업 창이 뜨기까지 시간이 걸렸다.
      • 그런데 ,이메일 발송은 양식에 맞춘 이메일을 제출하면 거의 성공하기 때문에
      • 비동기로 처리해도 된다는 멘토님 조언을 받았다.
      • 따라서, 비동기 처리했고 가입 완료 창이 금방 뜨도록 구현했다.
      • 이메일 발송에 대한 예외처리: 또한, 이메일 실패할 경우 처리도 필요하기 때문에 일단 데이터베이스에 정보를 넣고
      • 로그인/회원 가입을 시도하면 이메일을 다시 한번 전송한다.
      • 에러 메시지 ”이미 가입된 회원입니다. 이메일을 다시 한번 전송했으니 확인 바랍니다. ”
    • 메서드가 실행되고 값이 반환되기 전까지 blocking 되어 있다는 것을 의미한다. 비동기의 경우는 블로킹 되지 않고 이벤트 큐에 넣거나 백그라운드 스레드에세 해당 task를 위임하 바로 다음 코드를 실행하기 때문에 기대되는 값이 바로 반환되지 않는다.
    • https://koras02.tistory.com/87

 

  • 동기화 이슈에 대해 설명하라, (뮤텍스 <=> 세마포어)
    • 동기화 이슈: 여러 스레드동일한 데이터가 접근 시 생기는 문제를 말한다.
    • 임계 영역(Critical section): 동일한 자원을 동시에 접근하는 작업을 실행하는 코드 영역을 임계 영역이라고 한다.
    • 다중 프로세스 환경에서 자원에 한 프로세스만 접근 가능하도록 하는 것이다.
    • 동기화 이슈 해결 방안
        1. 상호 배제(mutual exclusion)
          1. Mutex: 임계 구역에 하나의 스레드 또는 프로세스만 접근 가능
          2. Semaphore: 임계 구역에 (정해진 개수)만큼 스레드 또는 프로세스만 접근 가능
        1. 진행(progress): 임계 구역에 실행중인 프로세스가 없고 별도의 동작이 없는 프로세스만 임계 구역의 진입 후보로 참여 가능하다.
        2. 한정된 대기(bounded waiting): 어떤 프로세스가 진입 요청 후 받아들여질 때까지 다른 프로세스가 임계 구역에 진입하는 횟수를 제한해야 한다.

 

  • Thread safe와 설계 방법
    • 두 개 이상의 스레드가 race condition에 들어가거나 같은 객체동시에 접근해도 연산 결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 의미한다.
    • race condition(경쟁 상태); 여러 프로세스나 스레드가 동기화 메커니즘 없이 자원에 접근하려는 상황을 가리킨다. 공유된 자원에 대한 접근 순서에 따라 실행 결과가 달라질 수 있는 상황을 말한다.
    • critical section(임계 구역): 여러 스레드가 동시에 접근해서는 안되는 공유 자원에 접근하는 코드 블럭을 말한다. 한 임계 구역에 하나의 스레드 혹은 프로세스만 접근 가능한다.
      • 임계 구역에 접근하는 걸 제어
      • 뮤텍스: 임계 구역에 하나의 프로세스( 또는 스레드)만 접근 가능
      • 세마포어: 임계 구역에 몇 개의 프 또는 스 접근 가능한지 정할 수 있다.

 

  • 교착상태(deadlock)와 기아 상태(starvation)
    • 교착 상태: 여러 개의 프로세스가 서로 점유하고 있는 자원의 반납을 대기하는 상태를 말한다. 동일한 자원 점유를 위해 경쟁할 때 발생한다.
      • 세마포어가 ready queue를 가지고 있고 둘 이상의 프로세스가 임계 구역 진입을 무한정 대기하고 임계 구역 내의 프로세스는 진입 대기 중인 프로세스가 실행되어야만 빠져나올 수 있는 상황을 말한다.
    • 기아 상태: 여러 개의 프로세스가 부족한 자원 점유를 위해 경쟁할 때 발생한다.

 

  • 세마포어 뮤텍스 차이점
    • 뮤텍스: 공유 자원에 하나의 프로세스만 허용
    • 세마포어: 공유 자원에 n개의 프로세스만 접근 가능하도록 한다.

 

  • 가상 메모리
    • 프로세스가 실제 메모리의 크기에 상관없이 메모리를 이용할 수 있도록 지원하는 기술이다.
    • 가상 메모리는 실제 메모리(RAM)보조 기억 장치swap 영역(메모리 부족할 경우, 하드 디스크의 일부 공간을 활용해서 계속 작업을 도와주는 영역)으로 구성된다.

 

  • 캐시의 지역성
    • https://parksb.github.io/article/29.html
    • 시간 지역성과 공간 지역성으로 나눌 수 있으며, 시간 지역성은 최근에 접근한 데이터에 다시 접근하는 경향을 의미하고, 공간 지역성은 최근 접근한 데이터의 주변 공간에 다시 접근하는 경향을 의미합니다.

 

  • 프로세스 관련 용어
    • PCB 프로그램 제어 블록: 프로세스에 대한 중요 정보를 저장한다.
    • PC 프로그램 카운터: 프로세스 실행을 위한 다음 명령 주소를 표시한다.
    • 캐시 메모리 : 자주 사용되는 데이터가 저장되는 공간으로 CPU의 레지스토와 메모리 사이에서 병목 현상을 완화하는 장치이다.

 

  •  스케줄러
    • 프로세스를 스케줄링하기 위한 queue에는 세 가지 종류가 존재한다.
      1. Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합
      2. Ready Queue: 현재 메모리 내에 있으면서 cpu를 잡아서 실행되기를 기다리는 프로세스의 집합
      3. Device Queue: device i/o 작업을 대기하고 있는 프로세스의 집합

 

  • CPU 스케줄러

 

  • 프로세스 동기화

 

 

  • 운영체제 스케줄링, 멀티 + “ ” 비교
    • https://oranthy.tistory.com/203
    • 멀티 태스킹: 단일 CPU 내에서 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템
      • 10~20ms 단위로도 실행하는 응용 프로그램이 바뀐다. (1000밀리초(ms) = 1초)
    • 멀티 프로그래밍: 일정 시간당 최대한 CPU를 많이 활용하는 스케줄링 시스템 (지금 실행하지 못하는 프로세스는 바로 실행 가능한 다른 프로세스로 교체
      • 응용 프로그램은 CPU 외 다양한 하드웨어를 사용한다.(파일 읽기)
    • 멀티 프로세싱: 여러 CPU에 하나의 프로그램병렬로 실행해서 실행 속도극대화하는 시스템
      • 멀티 프로세싱은 특정 응용 프로그램의 실행시간이 오래 걸릴 경우, 다른 응용 프로그램은 그만큼의 시간을 기다려야 하는 단점을 가지고 있다.
  • 스케줄러

 

 

 

  2.3 암호학, 보안

  • 비대칭키, 대칭키 암호화
    • 대칭키 암호화: 양측이 동일한 암호를 가지고 있으며 암호화와 해제에 동일한 키를 사용하는 방식이다. 비밀키가 노출되는 문제가 있을 수 있고 연산 성능이 덜 필요해서 빠르다.
    • 비대칭키 암호화(공개키 암호화): 공개키는 공개되어 있고 비밀키(개인키)는 내부적으로 가지고 있고 서로 각각의 키로 암호화하거나 해제할 수 있는 방식이다. 대칭키 암호화보다 안전하지만 연산 성능을 떨어짐
      • ex) RSA 암호
  • JWT vs 세션
    • JWT(Json Web Token)
      • 토큰 인증 방식으로 쓰인다. 데이터 공유 용도로도 사용 가능하기는 한다.
      • 헤더(토큰 타입, 암호화 알고리즘 ex. RSA, HS256), 페이로드(토큰 내용), 시그니처(토큰 정보가 신뢰할 수 있는지 판단할 수 있는 내용)로 구분된다.
        • RSA란?
      • JWT는 강제 로그아웃이 가능한가?
        • NO.. 이유는?
    • https://oranthy.tistory.com/432
    • 세션(Session)
    • 세션과 JWT 장단점 비교
      • 세션은 서버에서 정보를 관리, JWT는 그 자체로 정보를 가지고 있기 때문에 세션의 단점을 보완한다.
      • 서버에서 세션 정보를 관리하기 위해 비용이 든다(트래픽이 늘어날수룩 세션 DB을 증설해야한다). 분산 환경에서도 관리가 어렵다. JWT는 그 자체로 정보를 포함하기 때문에 세션의 단점을 보완한다.
      • JWT는 세션 DB가 필요 없이 유저한테 받은 Signature만 검증하면 된다.
      • 세션 장점
        • 보안성이 좋다.
        • 서버에 저장하기 때문에 관리 편하다.
      • 세션 단점
        • 접속자 수 많으면 서버에 성능 저하.
      • JWT 장점
        • 서버에 정보를 저장하지 않기 때문에 부담이 없다.
      • JWT 단점
        • 만료 기간이 없는 토큰이 유출되는 경우, 만료시킬 방법이 없다. (서버는 토큰을 저장하지 않는다.) ⇒ 만료 기간을 짧게 설정한다.
        • 토큰 자체에 정보를 담고 있기 때문에 위험 요소가 있고 내용이 많아서 토큰이 긴 경우 크기 때문에 네트워크에 부담을 줄 수 있다.
        • CSRF(사이트 간 요청 위조 공격)위험성이 있다.
        • https://backend-intro.vlpt.us/4/
  • OAuth 2.0 (Open Authorization)
    • Def) OAuth 2.0 : 제3자 인증방식이다. 일반적으로 사용자는 서버를 신뢰할 수 없다. 서버도 사용자의 민감 정보를 관리하려면 리소스가 필요한다. 따라서, OAuth를 통해 신뢰할 수 있는 서버에게 정보를 맡겨놓고 접근할 수 있는 권한을 주는 것이다. 사용자는 민감 정보를 입력하지 않아도 되고 서버는 민감 정보를 관리하지 않아도 되므로 좋다.
    • 인증 과정 : https://hudi.blog/oauth-2.0/
        1. 로그인 요청: resource owner(회원)가 구글 (resource server = authorization server)로 로그인 버튼을 누른다.
        2. 로그인 페이지 제공, id/password 제공: 구글 로그인 페이지에서 id, password을 입력해서 인증한다.
        3. 인증 성공하면
        4. authorization code 발급하고 코드를 리다이렉트 uri(프론트엔드 주소)에 포함하여 리디렉션시킨다.
        5. authorization code와 access token를 교환
        6. 클라이언트(나) ⇒ authorization server(구글): authorization code(토큰 사용 위한 임시 코드) 전달하고
        7. authorization server ⇒ 클라이언트: access token 전달
        8. 로그인 성공
        9. access token 으로 리소스 접근: resource owner(회원)는 클라이언트에 이용하고 싶은 서비스를 요청한다. 클라이언트는 회원의 토큰을 사용해서 리소스 서버의 회원 정보에 접근하고 자사의 서비스를 제공한다.
    • oauth 문제점
      1. CSRF(사이트간 요청 위조)를 통한 계정 탈취
        1. 인증 과정 마지막에 authorization code 값과 state 검증 후 클라이언트 서버에 로그인된 계정과 sns 계정이 연동된다.
        2. 이 때의 state 값은 CSRF token과 동일한 역할을 수행하므로 검증이 미흡할 경우, csrf를 통해 공격자의 계정으로 연동하는 행위 발생할 수 있다.
        3. 방안: 요청받은 state에 대한 검증 및 토큰 유효 기간을 짧게 설정한다.
    • https://grooveshark.tistory.com/209 , https://grooveshark.tistory.com/209

 

  • SQL 인젝션

 

  • XSS(Cross-site Scripting, 사이트 간 스크립팅):
    • 악의적인 사용자가 공격하려는 사이크에 스크립트를 넣는 기법을 말한다.
    • 참고) https://4rgos.tistory.com/1

 

  • CSRF(cross site request forgery, 사이트 간 요청 위조): 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하도록 하는 공격을 말한다.

 

  • 세션

 

  • 쿠키와 세션의 관계https://dev-coco.tistory.com/61
    • 세션을 동작하기 위해서 쿠키가 필요하다
    • 쿠키: 클라이언트 로컬에 저장되는 키, 값이 들어있는 작은 데이터 파일이다.
      • 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
      • 사용자가 따로 요청하지 않아도 브라우저가 request 시에 request header쿠키를 넣어서 자동으로 서버에 전송한다.
      • 브라우저를 종료해도 쿠키 정보는 남아 있을 수 있다.
      • 쿠키 ex) 쇼핑몰 장바구니, “아이디와 비번 저장하시겠습니까? “
    • 쿠키 동작 방식
      • 클라이언트가 페이지 요청
      • 서버에서 쿠키 생성하여 헤더에 쿠키를 포함시켜 응답한다.
      • 브라우저가 종료되더라도 쿠키 만료 기간까지 클라이언트가 보관한다.
    • 세션: 쿠키를 기반으로 하지만 서버 측에서 세션을 관리한다.
      • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하고 웹 브라우저가 서버에 접속해서 브라우저종료할 때 까지 인증 상태를 유지한다.
      • ex) 로그인 처럼 보안이 중요한 작업
    • 세션 동작 방식
      • 클라이언트가 서버 접속 시 세션 ID를 발급 받는다.
      • 클라이언트는 세션 ID쿠키에 저장해서 가지고 있는다.
      • 클라이언트는 다음 접속부터 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청한다.
      • https://interconnection.tistory.com/74

 

  • RSA 암호란?
    • RSA 암호는 체계화한 사람들(Ronald Shamir Adleman)의 이름을 따서 만들었다.
    • RSA 암호 체계의 안정성은 큰 숫자를 소인수 분해하는 것이 어렵다는 것에 기반을 두고 있다.
    • 비대칭키 암호화의 한 종류이다. JWT로 암호화할 때 쓰이는 알고리즘 중 하나이다. 
    • 그러므로 큰 수의 소인수 분해를 획기적으로 빠르게 할 수 있는 알고리즘이 발견된다면 가치가 떨어질 것이다.
    • RSA에 대한 공격
      • 수학적 공격(소인수분해 공격)
      • 타이밍 공격(시간 공격)
      • 선택 암호문 공격(CCA, Chosen Ciphertext Attack): 임의의 데이터를 송신하면 그것을 암호문으로 간주하고 회신해주는 서비스를 공격자가 이용할 수 있다는 것을 가정한 공격이다. ( = 복호 오라클 .. ??
      • https://yjshin.tistory.com/entry/암호학-비대칭키-암호-RSA-암호시스템

 

  • 쇼어 알고리즘(Shor's algorithm): 소인수 분해를 빠르게 처리할 수 있는 양자 알고리즘이다.
    • 크기가 N인 수를 소인수분해할 때, O(log3(N))의 시간과 O(log(N)) 의 저장 공간이 필요하다.
    • 공개키 암호 방식을 쉽게 깰 수 있다.
    • 피터 쇼어라는 사람이 만든 알고리즘

 

 

 

회고록

  • 깃허브 내용에다가 면접 보면서 들었던 질문 내용을 모두 추가했다.
  • 대학 때 암호수학 수업을 들었는데 「암호학과 네트워크 보안」 교재를 그대로 둬서 다행이다..! 책이  두꺼워서 공부하기 귀찮았는데 버리지 않아서 다행이다 ㅎㅎ 네트워크 깊게 공부하면서 봐야겠다. 
  • 면접에서 JWT 질문을 하셨는데 RSA 암호까지 물어보시는 경우도 있었다. 한 곳에서 그랬는데 다른 곳에서는 한 번도 들은 적 없는 부분이다. 다행히 학교에서 RSA 주제로 팀플 발표한 적이 있어서 답할 수 있었다. 감사합니다 교수님 뿌잉 😘
  • HTTP 메서드에 대해 설명하다보면 멱등성(Idempotent)이라는 개념이 있는데 멱등성에 대해 메서드 실행 전후가 같은지(메서드가 항등원의 성질을 갖는지) 여부라고 잘못 알고 있었다. 그래서 PUT, PATCH의 멱등성을 묻는 면접 질문에서 아마 없을 것 같다는 잘못된 답변을 해버렸다 ㅠ.ㅠ
    • 멱등성은 메서드 실행 전후 변화가 아닌  메서드를 한 번 실행한 결과와 메서드 여러 번 실행한 결과에 차이가 있는지의 여부를 의미한다. 
  • OAuth 로그인과 서울시 공공 Wifi 정보 가져오기 프로젝트를 할 때 API 써본 경험이 있는데 백엔드 개발 실무에서 자주 쓰인다고 한다. 입사하기 전에 어떤 식으로 끌어왔는지 복습하면 좋을 것 같다.
  • 티스토리에 망나니개발자라는 블로그가 있는데 도움이 정말 많이 됐다. 히힛
  • 빈출 질문: 프로세스 스레드 차이점, JWT vs 세션 차이점과 장단점, OAuth, 세션과 쿠키의 차이점, HTTP 메서드별 차이점과 멱등성 보장 여부, API 개념과 API 끌어와서 사용해본 경험, REST API, CORS 이슈와 발생 경험

 

 

 

참고) 아래 깃허브의 질문을 참고하여 내용을 보충해서 작성했습니다. 틀린 부분있다면 댓글 부탁드립니다 💖💛💚

백엔드 면접 질문 1

백엔드 면접 질문 2

'백엔드 개발직 면접 예상 질문' 카테고리의 다른 글

6. JPA(Java Persistence API)  (0) 2023.01.25
5. Spring  (2) 2023.01.24
4. Java  (0) 2023.01.24
3. 인프라 및 클라우드  (0) 2023.01.23
1. 데이터베이스(DataBase)  (0) 2023.01.21