[스터디] REST API & 웹 서버와 WAS의 차이점

수댕이·2023년 12월 28일
0

스터디

목록 보기
11/11
post-thumbnail

📍REST API

🔎 REST 정의

HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.

➕ CRUD Operation

CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성, post), Read(읽기, get), Update(갱신, put/patch), Delete(삭제, delete)를 묶어서 일컫는 말이다.

🔎 REST 특징

  1. Server-Client(서버-클라이언트 구조)
  2. Stateless(무상태)
  3. Cacheable(캐시 처리 가능)
  4. Layered System(계층화)
  5. Uniform Interface(인터페이스 일관성)

🔎 REST 구성

  1. 자원(Resource) : HTTP URI
  2. 자원에 대한 행위(Verb) : HTTP Method
  3. 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load

🔎 REST 장단점

➕ REST 장점

  • HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
  • HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
  • HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
  • Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
  • 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
  • 서버와 클라이언트의 역할을 명확하게 분리한다.

➕ REST 단점

  • 표준이 자체가 존재하지 않아 정의가 필요하다.
  • HTTP Method 형태가 제한적이다.
  • 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
  • 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스폴로어)

🔎 API

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

🔎 REST API

RESPT API란 REST의 원리를 따르는 API

➕ REST API 설계 규칙

  1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
  2. 마지막에 슬래시 (/)를 포함하지 않는다.
  3. 슬래시 구분자(/ )는 계층 관계를 나타내는데 사용한다.
  4. 언더바 대신 하이폰을 사용한다. 밑줄(_)은 URI에 사용하지 않는다.(가독성)
  5. 파일확장자는 URI에 포함하지 않는다.
  6. 행위를 포함하지 않는다.

🔎 RESTful

➕ RESTful 정의

REST의 원리를 따르는 시스템을 의미합니다. 하지만 REST를 사용했다 하여 모두가 RESTful 한 것은 아니다. 모든 CRUD 기능을 POST로 처리 하는 API 혹은 URI 규칙을 올바르게 지키지 않은 API는 REST API의 설계 규칙을 올바르게 지키지 못한 시스템이므로, REST API를 사용하였지만 RESTful 하지 못한 시스템이다.

➕ RESTful 목적

  • 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이다.
  • RESTful한 API를 구현하는 근본적인 목적은 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이다. 따라서 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없다.

📍웹 서버

🔎 웹 서버의 개념

  • 하드웨어: Web 서버가 설치되어 있는 컴퓨터
  • 소프트웨어: 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 컨텐츠(.html .jpeg .css 등)를 제공하는 컴퓨터 프로그램

🔎 웹 서버의 기능

  • HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스 하는 기능을 담당한다.
    • 요청에 따라 아래의 두 가지 기능 중 적절하게 선택하여 수행한다.
    • 기능 1
      • 정적인 컨텐츠 제공
      • WAS를 거치지 않고 바로 자원을 제공한다.
    • 기능 2
      • 동적인 컨텐츠 제공을 위한 요청 전달
      • 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
      • 클라이언트는 일반적으로 웹 브라우저를 의미한다.

🔎 웹 서버의 예

Apache Server, Nginx, IIS(Windows 전용 Web 서버) 등


📍WAS

🔎 WAS의 개념

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

🔎 WAS의 특징

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

🔎 WAS의 기능

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

🔎 WAS의 예

Tomcat, JBoss, Jeus, Web Sphere 등


📍웹 서버와 WAS의 차이점

🔎 Web Server가 필요한 이유?

Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다. Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.

🔎 WAS가 필요한 이유?

웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다. 이때, Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야 한다. 하지만 이렇게 수행하기에는 자원이 절대적으로 부족하다. 따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.

🔎 결론

자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 을 위해 Web Server와 WAS를 분리하는 것이다. Web Server를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.


📍스터디 회고

🔎 스터디 공부 후기

🔎 추가로 알게 된 내용

🔎 추가로 공부할 내용


📍공부한 곳

REST API
메인: https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
자세히 공부: https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://m.boostcourse.org/web316/lecture/16740

웹 서버/WAS의 차이점
https://velog.io/@zzz0000227/%EC%9B%B9%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

profile
공부하자

0개의 댓글