Backend-RoadMap_APIs
2023. 3. 27. 20:38ㆍCS/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
- 기본 인증 예
- 서버가 사용자에게 인증요구를 보낼 때 서버는 401 Unauthorized 응답과 함께 WWW-Authenticate헤더를 기술해서 어디서 어떻게 인증할지 설명
- 다음으로 클라이언트가 서버로 인증 인코딩된 비밀번호와 그 외 인증 파라미터들을 Authorization 헤더에 담아서 요청
- 성공적으로 완료되면 정상적인 상태 코드를 반환한다. 추가적인 인증 알고리즘에 대한 정보를 Authentication-Info 헤더에 기술

Token Auth
- 클라이언트와 소통을 위해 토큰을 발행하여 response의 cookie에 값을 담아 전달
- 민감한 정보를 암호화한 상태로 토큰 발행
- 세션 기반 인증은 요청마다 데이터베이스를 확인해야함
- 토큰 기반을 사용하여 서버의 부하를 줄임
JWT
- 토큰 기반 인증 방법
- JSON 포맷으로 사용자에 대한 속성을 저장하는 웹 토큰
- 종류
- Access Token
- 정보들에 접근할 수 있는 권한 부여에 사용
- Refresh Token
- Access Token이 만료되면 Refresh Token으로 재발급
- Access 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
- 웹 서비스를 요청하는 주체
- Web Service Broker

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://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/
'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 |