For job interview, about Web 면접 공부하기-웹 4

3 minute read

1. REST API

  • Definition 정의 : REpresentational State Transfer의 약자로, 웹 어플리케이션이 제공하는 각각의 데이터를 리소스로 간주하고 각각의 리소스에 고유한 URI(Uniform Resource Identifier)를 할당함으로써 이를 표현하는 API를 정의하기 위한 소프트웨어 아키텍처 스타일
  • Featur 특징 : 해당 자원에 대한 기본적인 CRUD(Create, Read, Update, Delete) 작업을 HTTP 동사 (POST, GET, PUT, DELETE)를 이용해 처리한다.
    • example 예제
      예를 들어 은행 계좌를 관리하기 위한 웹 어플리케이션은 accounts라는 자원을 가질 것이고 이 account 자원을 표현하는 URI는 다음과 같다.
      rest_api_example
      위의 표에서 보이듯 특정한 한 계좌를 표현하는 URI는 모두 동일하지만 HTTP 동사에 따라 해당 자원에 대해 수행되는 작업이 달라지게 된다. 그러므로 클라이언트는 필요에 따라 적절한 HTTP 동사와 함께 해당 API를 호출함으로써 서버의 자원에 대해 필요한 작업을 수행할 수 있다.
  • API 구성
    • resource 자원 : URI
    • verb 행위 : HTTP method
    • representations 표현
  • Constraints 제한 조건
    • Client-server architecture 클라이언트/서버 구조 : 클라이언트는 사용자 인증이나 콘텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분하여 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 한다.
    • Stateless 무상태성 : 어떠한 클라이언트 콘텍스트도 서버에 저장되어서는 안 된다. 클라이언트로부터의 요청에는 요청을 처리하는데 필요한 정보만을 담으며, 세션 정보는 클라이언트가 가지고 있는다. 그러므로 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해 진다.
    • Cacheability 캐시 가능성 : www와 같이 HTTP라는 기존 웹표준을 그대로 사용하기 때문에 클라이언트는 응답을 캐싱할 수 있어야 한다.
    • Layered system 계층형 : 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 즉, REST 서버는 다중 계층으로 구성될 수 있으며 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용하다.
    • Code on demand (선택적) :
    • Uniform interface 인터페이스 일관성 : 아키텍처를 단순화시키고 작은 단위로 분리함으로써 client-server의 각 파트가 독립적으로 개선될 수 있도록 한다.

2. URL vs URI

  • URI (Uniform Resource Identifier) : 자원을 구분하는 식별자 역할을 한다.
  • URL (Uniform Resource Locator) : 자원의 ‘위치’가 어디에 있는지 나타낸다.



3. 웹 페이지 로딩 속도를 개선하는 방법

검색엔진 최적화(SEO) 관점에서 접속속도가 빠른 것일 수록 검색엔진에서 더 상위에 등록되어 노출된다.

  • 외부의 CSS, Javascript 파일을 불러온다.
  • 과도한 이미지, 플래시, 사운드 파일을 자제한다.
  • 이미지 파일 등 정적 리소스의 크기를 줄인다. (예. 포토샵을 이용한 .png 파일 사용)
  • CSS, Javascript 파일을 압축한다. (예. 공백, 주석 등 제거)
  • gzip 압축을 이용해 파일 크기를 최소화한다.



4. 사용자 인증(Auth) 방식

1. 세션 session 기반 인증 방식

  • Process 과정 : 클라이언트가 로그인을 하고, 성공하면 서버가 사용자 세션을 만들고 메모리나 DB에 저장한다. 그리고 서버가 클라이언트에게 세션 아이디를 보내고 클라이언트의 브라우저에 세션 아이디만 쿠키에 저장하게 한다.
  • Disadvantages 단점
    • 세션 데이터가 서버의 메모리에 저장되므로 확장 시 모든 서버가 접근할 수 있도록 별도의 중앙 세션 관리 시스템이 필요하다.
    • 중앙 세션 관리 시스템이 장애가 일어나면 전체 시스템에 문제가 생긴다.

2. 토큰 기반 인증 방식 : JWT(Json Web Token)

  • Process 과정 : 클라이언트가 로그인을 하고, 성공하면 서버로부터 접근 토큰을 부여받는다. 이후 클라이언트가 모든 API 요청을 할 때 접근 토큰을 포함시킨다. 서버는 접근 토큰을 해독해 확인하고 검증되면 해당 API 기능을 수행한다. 기한이 만료되었으면 접근 토큰을 지워주고 재로그인 하게 한다.
  • Advanatages 장점
    • 비밀키를 사용하므로 통신 중간에 도청을 당해도 내용에 대한 해킹이 불가능하다.
  • Disadvantages 단점
    • 수명이 짧다면, 사용자가 사용 중에 갑자기 토큰 기한이 만료되었다며 재로그인해야 되는 상황이 올 수 있다.
    • 수명이 길다면, 해커에게 해독되어 사용될 가능성이 높아진다.

5. 쿠키 기반 인증 방식

  • Process 과정 : 클라이언트가 로그인을하고, 성공하면 서버로부터 쿠키를 부여받는다. 쿠키는 브라우저의 메모리에 저장되며 이후 사용자가 접근할 때마다 HTTP 헤더로써 전송된다. 서버는 사용자가 인증되었으므로 요청된 정보를 제공하면 된다.
  • Advantages 장점
    • 서버는 쿠키를 발급해주기만 하면 나머지는 브라우저에서 처리하므로 세션의 단점이 쿠키의 장점이 된다.
  • Disadvantages
    • 보안에 취약하다.
    • 대체 방법
      • Secure 옵션 : HTTPS로 통신하는 경우에만 웹브라우저가 쿠키를 서버로 전송한다. XSS 문제를 완화시킬 수 있다.
      • HttpOnly 옵션 : document.cookie를 이용해서 쿠키에 접속하는 것을 막는다.
      • CSURF 라이브러리 : 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격인, CSRF(Cross Site Request Forgery 사이트 간 요청 위조)를 예방할 수 있다.



※ 참고 :

  • http://seosem.kr/%EA%B2%80%EC%83%89%EC%97%94%EC%A7%84%EC%B5%9C%EC%A0%81%ED%99%94-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A1%9C%EB%94%A9%EC%86%8D%EB%8F%84%EB%A5%BC-%EA%B0%9C%EC%84%A0-5%EA%B0%80%EC%A7%80/
  • https://chaewonkong.github.io/devlog/2018/12/11/auth-based-cookie/
  • https://yonghyunlee.gitlab.io/node/jwt/
  • https://opentutorials.org/course/3387/21744

Tags:

Updated: