Backend-RoadMap_APIs

2023. 3. 27. 20:38CS/Backend-RoadMap

728x90

API

  • Application Programmin Interface
  • 두개의 응용 프로그램이 서로 통신할 수 있도록 하는 매커니즘

 

Authentication

OAuth

  • 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹 사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준 프로토콜
  • 타사의 플랫폼 정보에 접근하기 위해서 권한을 타사 플랫폼으로부터 위임 받는 것

 

OAuth 참여자

  • Resource Owner
    • 자원의 소유주
    • 사용자
  • Resource Server
    • client가 제어하고자 하는 자원을 보유하고 있는 서버
    • google, facebook 등
  • Client
    • Resource Server에 접속해서 정보를 가져오고자하는 클라이언트
    • 개발하려는 서비스

 

동작 흐름

 

Basic Auth

  • 장점
    • 인터넷 표준
    • 모든 주요 브라우저에서 지원
    • 비교적 간단한 프로토콜
  • 단점
    • 사용자 자격 증명이 요청으로 전송
    • 자격 증명이 일반 텍스트로 전송
    • 자격 증명은 모든 요청과 함께 전송
    • 브라우저 세션을 종료하는 것 외에 로그아웃 방법이 없음
    • CSRF 조치 필요
      • CSRF : Cross-Site Request Forgery
  • 기본 인증 예
    1. 서버가 사용자에게 인증요구를 보낼 때 서버는 401 Unauthorized 응답과 함께 WWW-Authenticate헤더를 기술해서 어디서 어떻게 인증할지 설명
    2. 다음으로 클라이언트가 서버로 인증 인코딩된 비밀번호와 그 외 인증 파라미터들을 Authorization 헤더에 담아서 요청
    3. 성공적으로 완료되면 정상적인 상태 코드를 반환한다. 추가적인 인증 알고리즘에 대한 정보를 Authentication-Info 헤더에 기술

 

Token Auth

  • 클라이언트와 소통을 위해 토큰을 발행하여 response의 cookie에 값을 담아 전달
  • 민감한 정보를 암호화한 상태로 토큰 발행
  • 세션 기반 인증은 요청마다 데이터베이스를 확인해야함
    • 토큰 기반을 사용하여 서버의 부하를 줄임

 

JWT

  • 토큰 기반 인증 방법
  • JSON 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰
  • 종류
    • Access Token
      • 정보들에 접근할 수 있는 권한 부여에 사용
    • Refresh Token
      • Access Token이 만료되면 Refresh Token으로 재발급

  • 구성

  • 장점
    • Header와 Payload를 가지고 Signature를 생성하여 데이터 위변조를 막을 수 있다.
    • 인증 정보에 대한 별도의 저장소가 필요하지 않으며 무상태가 됨
    • Base64 URL Safe하여 범용성이 높음
    • 토큰에 대한 검증 및 전달할 정보를 자체적으로 지니고 있으며, 토큰 기반으로 OAuth등의 다른 시스템에 접근 및 공유가 가능
  • 단점
    • JWT 토근의 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해질 수 있음
    • payload 자체는 암호화되지 않아 중요 정보를 담을 수 없다
    • 토큰을 탈취당하면 대처하기 어렵고, 특정 토큰을 강제 만료하기 어렵다
      • 대응
        • 짧은 만료 기간 설정 및 Refresh Token 사용
        • Sliding Session
          • 서비스를 지속적으로 이용하는 클라이언트에게 자동으로 토큰 만료 기한을 늘려주는 방법

 

REST

  • Representational State Transfer
  • 자원을 이름으로 구분하여 해당 자원의 상태, 정보를 주고 받는 것을 의미
  • HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD 연산을 적용
    • Create - POST
    • Read - GET
    • Update - PUT
    • Delete - DELETE
  • 장점
    • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없음
    • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능
    • REST API 메시가가 의도하는 바를 명확하게 표현
  • 단점
    • 표준이 없다
    • 사용할 수 있는 메소드가 4가지 뿐이다.
    • 구형 브라우저가 제대로 지원하지 못하는 부분 존재
      • PUT, DELETE
  • 필요성
    • 멀티 플랫폼에 대한 지원

 

구성요소

  • 자원 (Resource)
    • URI
    • 모든 자원에 고유한 ID가 존재하고 이 자원은 Server에 존재
    • 자원을 구별하는 ID는 HTTP URI
  • 행위 (Verb)
    • HTTP 프로토콜의 Method를 사용
    • GET, POST, PUT, DELETE
  • 표현 (Representation of Resource)
    • Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보냄
    • JSON, XML. TEXT, RSS등 여러 형태로 나타내어 질 수 있음

 

특징

  • Server - Client 구조
    • Server : API를 제공하고 비지니스 로직 처리 및 저장을 책임
    • Client : 사용자 인증이나 context 등을 직접 관리하고 책임
  • Stateless
    • HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 가짐
    • Client의 context를 server에 저장하지 않음
    • Server는 각각의 요청을 완전히 별개의 것으로 인식 및 러리
  • Casheable
    • 캐싱 기능 사용 가능
  • Layered System
    • Client는 REST API Server만 호출
    • Rest Server는 다중 계층으로 구성 가능
      • 비지니스 로직, 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상 유연성을 줄 수 있음
      • 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상 시킬수 있음
  • Code-On-Demand
    • Server로 부터 스크립트를 받아 Client에서 실행
    • 반드시 충족할 필요 없음
  • Uniform Interface
    • URI로 지정한 recource에 대한 조작을 통일되고 한정적인 인터페이스로 수행

 

REST ful

  • REST API를 제공하는 웹 서비스
  • 목적
    • 이해 및 사용이 쉬운 REST API를 만드는 것

 

SOAP

  • Simple Object Access Protocol
  • HTTP, HTTPS, SMTP 등을 사용하여 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 통신 프로토콜
  • 서로 다른 service들 간의 연동을 목적으로 상호 이해 가능한 포맷의 메시지를 송수신함으로 원격지에 있는 서비스 객체나 API를 자유롭게 사용하고자 하는 목적으로 탄생
  • 특징
    • XML 기반으로 플랫폼에 독립적
    • 프록시와 방화벽에 구애받지 않고 HTTP 등을 통해 메세지 교환
    • 확장에 용이
    • 에러처리에 대한 내용이 기본적으로 내장
    • 처리속도가 상대적으로 느림
  • 동작 
    • Web Service Broker
      • UDDI, 서비스 등록 및 검색, 저장, 관리하는 주체
    • Web Service Provider
      • 웹 서비스를 구현하여 운영하고 제공하는 주체
    • Web Service Consumer
      • 웹 서비스를 요청하는 주체

 

gRPC

  • google에서 개발한 RPC(Remote Procedure Call) 시스템
  • 전송을 위해 TCP/IP 프로토콜과 HTTP 2.0 프로토콜 사용
  • RPC
    • 원격 프로시저 호출
    • 한 프로그램이 네트워크의 세부 정보를 이해하지 않고도 네트워크 안의 다른 컴퓨터에 있는 프로그램에서 서비스를 요청하는 프로토콜
    • Clienmt - Server 모델 사용
  • 특징
    • SSL/TLS 를 사용하여 서버를 인증하고 클라이언트와 서버간에 교환되는 모든 데이터를 암호화
    • 성능이 뛰어나고 확장 가능한 API 지원
    • MSA를 쉽게 구현 가능

 

GraphQL

  • 페이스북에서 만든 쿼리 언어
  • 웹 클라이언트가 데이터를 서버로 부터 효율적으로 가져오는 것이 목적
  • 쿼리와 뮤테이션 그리고 응답 내용의 구조가 직관적


참고자료

https://tecoble.techcourse.co.kr/post/2021-07-10-understanding-oauth/

https://hudi.blog/oauth-2.0/

https://learn.microsoft.com/en-us/aspnet/web-api/overview/security/basic-authentication

https://velog.io/@devjade/Token-based-Authentication

https://goodteacher.tistory.com/m/499

https://sasca37.tistory.com/261

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

https://gruuuuu.github.io/programming/soap/

https://chacha95.github.io/2020-06-15-gRPC1/

https://tech.kakao.com/2019/08/01/graphql-basic/

'CS > Backend-RoadMap' 카테고리의 다른 글

Backend-RoadMap_Testing  (0) 2023.04.11
Backend-RoadMap_Web Security Knowlege  (0) 2023.04.11
Backend-RoadMap_Scaling Databases  (0) 2023.03.23
Backend-RoadMap_About Database  (0) 2023.03.23
Backend_Roadmap_OS(+파일시스템)  (0) 2023.03.22