JAVA(SPRINGBOOT)

API, WAS, HTTP, RESTful API, CORS

본듀 2022. 8. 10. 12:35

API (Application Programming Interface)

애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타내고,
인터페이스는 두 애플리케이션 간의 서비스 계약을 나타낸다.

API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘

API는 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의한다.

 

API의 종류

  • SOAP API : 단순 객체 접근 프로토콜을 사용, XML을 사용하여 메시지를 교환, 유연성이 떨어지는 API
  • RPC API : 원격 프로시저 호출, 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로                        다시 전송

  • Websocket API : JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API,  양방향 통신을 지원
                                서버가 연결된 클라이언트에 콜백 메시지를 전송할 수 있어 REST API보다 효율적

  • REST API : 가장 많이 사용되고 유연한 API, 클라이언트가 서버에 요청을 데이터로 전송
                      서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환

 

API의 역할

  • 서버와 데이터베이스에 대한 출입구 역할 : 허용된 사람에게만 접근성 부여
  • 애플리케이션과 기기가 원활하게 통신 
  • 모든 접속을 표준화 :기계/ 운영체제 등과 상관없이 누구나 동일한 액세스

 

클라이언트 / 서버

두 개의 컴퓨터 프로그램 사이에 이루어지는 역할 관계를 나타내는 것

 클라이언트는 다른 프로그램에게 서비스를 요청하는 프로그램 

서버는 그 요청에 대해 응답을 해주는 프로그램

 

장점

  • 매우 효율적인 네트워크 구조
  • 다수의 사용자들이 공동으로 열람·복사·수정·관리하는 데이터를 여러 곳에 분산시키지 않고 단일한 중앙 서버에 저장하여 관리함으로써 데이터의 유일성과 통일성을 보장
  • 탈중앙 분산 저장 방식에 필요한 합의 알고리즘이 필요 없음
  • 중앙 서버만 관리하면 되므로 분산 저장 방식에 비해 네트워크 구성 및 유지관리 비용이 적게 듬

단점

  • 서버-클라이언트 구조는 해킹 공격과 디도스 및 랜섬웨어 공격 등에 취약
  • 모든 중요 데이터가 중앙 서버에 집중되어 있기 때문에 해커가 중앙 서버에 침투하여 데이터를 위변조할 경우 모든 클라이언트들에게 잘못된 정보가 전달
  • 이를 방어하기 위해 방화벽, 웹 방화벽, 침입탐지시스템(IDS), 침입방지시스템(IPS) 등 다양한 보안 제품을 설치하고, 서버에 저장된 데이터를 복사하여 별도의 저장장치에 백업을 해야 하기 때문에 추가적인 비용

 

WAS(Web Application Server)

DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
HTTP를 통해 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어(소프트웨어 엔진)
“웹 컨테이너(Web Container)” 혹은 “서블릿 컨테이너(Servlet Container)”라고도 불림

WAS의 역할

WAS = Web Server + Web Container
Web Server 기능들을 구조적으로 분리하여 처리하고자하는 목적으로 제시
분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용
주로 DB 서버와 같이 수행
현재는 WAS가 가지고 있는 Web Server도 정적인 컨텐츠를 처리하는 데 있어서 비슷한 성능

WAS의 주요 기능

프로그램 실행 환경과 DB 접속 기능 제공
여러 개의 트랜잭션(논리적인 작업 단위) 관리 기능
업무를 처리하는 비즈니스 로직 수행

Web Server vs WAS

웹서버는 정적인 페이지를 처리하고, WAS는 동적인 페이지를 처리

웹서버는 정적 컨텐츠를 WAS를 거치지 않고, 바로 자원을 제공하며
동적 컨텐츠 제공을 위해 WAS로 요청을 보낸다.

WAS는 웹서버의 역할을 구조적으로 분리해 처리하는 역할

두 기능을 분리함으로써 서버 부하를 방지함.

 

HTTP 프로토콜

HTTP(Hypertext Transfer Protocol)는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜
어플리케이션 레벨의 프로토콜로 TCP/IP위에서 작동
HTTP는 어떤 종류의 데이터도 전송할 수 있도록 설계 

장점

불특정 다수를 대상으로 하는 서비스에 적합한 방식
수십만명이 웹 서비스를 사용하더라도 접속유지는 최소한으로 할 수 있기 때문에, 더 많은 유저의 요청을 처리

단점

연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수 없음

매서드(Method)

GET : 정보를 요청하기 위해서 사용

POST : 정보를 밀어넣기 위해서 사용

PUT : 정보를 업데이트하기 위해서 사용

DELETE : 정보를 삭제하기 위해서 사용

 

RESTful API

REST
  • HTTP URI + HTTP Method
  • HTTP URI를 통해 제어할 자원(Resource)을 명시하고 HTTP Method(GET, POST, PUT, DELETE)를 통해 해당 자원(Resource)를 제어하는 명령을 내리는 방식의 아키텍쳐
RESTful API

HTTP와 URI기반으로 자원에 접근할 수 있도록 제공하는 애플리케이션 개발 인터페이스
(REST의 원리를 따르는 시스템은 RESTful이라고 지칭된다.)

REST의 특징

1.Uniform (유니폼 인터페이스) : 통일되고 한정적인 인터페이스로 리소스 조작을 하는 아키텍처
2.Stateless (무상태성) : 작업을 위한 상태정보를 저장하지 않음
3.Cacheable (캐시 가능) 
4.Self-descriptiveness (자체 표현 구조) : API 메시지만 보고도 쉽게 이해 가능
5.Client - Server 구조
6.계층형 구조

 

CORS (Cross-Origin Resource Sharing)

CORS는 '교차 출처 리소스 공유'로 해석된다.

CORS는 SOP와 함께 다른 출처로의 리소스 요청을 제한하는 정책이다.
(같은 출처 : protocol, host, port 가 같은 출처)

웹 클라이언트 어플리케이션은 각종 정보들을 쉽게 열람할 수 있어 보안에 상당히 취약하다.
그래서 자바스크립트를 난독화 하긴 했지만 여전히 보안상 취약한 것은 여전하다.

이런 상황에서 CSRF나 XSS 같은 방법을 사용해 사용자의 정보를 탈취하기 쉽다.
따라서, 다른 출처로의 리소스 요청 제한은 어쩔 수 없는 방안이다.

 

 

CORS에 대해 이것저것 찾아보며 글을 읽어봤다.
필요성은 알겠는데, 동작 방식이나 이를 해결할 수 있는 방법에 대해서는 봐도 잘 모르겠다...
아직은 모르는 용어들이 너무 많아 열심히 공부해야겠다는 마음만 생긴다 ㅠ^ㅠ

그리고 이번주에 순환참조 에러가 발생했다.
순환참조가 어떤 에러인지는 알고 있었는데, 막상 에러가 발생하니 
왜 여기서 순환 참조 에러가 발생하지? 라는 의문이 들었다.
이번 주 남은 시간에는 순환 참조에 대해 학습해보는 시간을 가져보고 정리해보아야겠다.

'JAVA(SPRINGBOOT)' 카테고리의 다른 글

[JAVA] Hashmap  (0) 2022.11.01
[SPRING JPA] ORM, JPA, Hibernate  (0) 2022.09.13
ORM, SQL, MVC  (0) 2022.08.08
IoC, DI, Bean  (0) 2022.07.31
[JAVA] 타입  (0) 2022.07.20