REST 와 SOAP

hanjae_99·2024년 2월 23일
0

개발지식

목록 보기
2/2

과거

클라이언트와 서버는 컴퓨터가 이해할 수 있는 언어인 HTML 로 커뮤니케이션을 합니다.
과거에 서버는 클라이언트의 요청을 받아 HTML 폼으로 화면을 그려서 보냈고,
클라이언트는 해당 HTML 을 화면에 보여주는 정도에 그쳤죠.

클라이언트로부터 받은 요청마다 새로이 HTML 을 그려보내주는 방식은 그리 오래 가지 못했습니다.
그때그때마다 매핑될 HTML 파일을 지정하는건 굉장히 피곤한 작업이었으니..

게다가 웹 환경의 발전에 따라 사용자는 급증했고, 서버는 더 다양한 요구를 받아들여야 했습니다.

이에 자바 진영에서는 JSP 라는 새로운 뷰 렌더링 기술이 등장했고, 굉장히 좋은 대안인듯 싶었으나 몇가지 단점이 있었습니다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>

<%
        MemberRepository
                memberRepository = MemberRepository.getInstance();

        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);
%>
<html>
<head>
    <title>Title</title>
</head>
<body>

<ul>
    <li> id=<%=member.getId()%> </li>
    <li> username=<%=member.getUsername()%> </li>
    <li> age=<%=member.getAge()%> </li>
</ul>
<a href="/index.html">메인</a>
</body>
</html>

바로 HTML 태그와 자바 코드를 같이 사용하기 위해 <@= > 문법을 사용하는 등,
화면 UI 와 로직이 한 코드내에 작성된 것이죠.

이로인해 코드의 양은 페이지내 정보가 많아질수록 확연히 늘어나
가독성, 유지&보수 측면에서 좋지 않았습니다.

뿐만 아니라 화면 컴포넌트와 로직 프로세스는 같은 시기에 작동하지 않을 수 있어
동적인 화면을 구현하는데 아쉬움을 주었습니다.

이에 표시되는 화면 양식 그 자체를 주고받는게 아닌,
화면에 표시될 자원, 데이터에 집중하자는 의견이 나오게 되었습니다.

REST 의 등장

REpresentatioanl
State
Transfer

자원 (Resource) 을 표현하고, 상태를 정의하며, 전달 업무를 수행하는 아키텍처 스타일입니다.

URI 로 자원을 식별하고, 기존 HTTP 프로토콜의 메소드를 사용하며, JSON, XML 등 다양한 형식을 지원합니다.

REST 의 등장으로 인해 기존 MVC 구조에서 View 의 뼈대만 만들어놓고, 전달받은 자원을 통해
화면을 채워나가는 방식이 용이해졌습니다.

또한 사용자가 한 화면에서 특정 부분만 동적으로 조작하려 할 때,
해당 부분의 자원만 받아오면 되므로 서버의 과부하도 줄어들게 되었습니다.

이렇게 서버에 휴식(REST)을 주었죠.

그럼 SOAP 는?


비누입니다

Simple
Object
Access
Protocol

단순한 객체 접근 프로토콜로, REST 와는 다르게 XML 형식으로만 데이터를 교환하는 XML 기반 통신 프로토콜입니다.

여러 분산 서비스 환경에서 마찬가지로 자원, 즉 정보를 교환하기 위해 설계되었으며
HTTP, JMS, SMTP 등과 같은 기존 프로토콜과 연계해서 사용이 가능합니다.

하지만 현대에 이르러 REST 보다는 비선호되는 경향이 있는데..

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"
		soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding">
	<soap:Header>
		...
	</soap:Header>
	<soap:Body>
		...
		<soap:Fault>
			...
		</soap:Fault>
	</soap:Body>
</soap:Envelope>

바로 SOAP 는 XML 형식을 기반으로 하기 때문에 현재 JSON 을 주 형식으로 사용하는 REST 보다
문서를 한눈에 파악하기 어렵고, 작성하기 번거롭다는 단점이 존재하기 때문입니다.
또한 SOAP 메시지는 크기가 REST 보다 상대적으로 커 전송 및 처리속도가 느리다는 점도 있습니다.

따라서 일부 레거시 시스템이나, 보안이 중요한 애플리케이션에는 SOAP 를,
간단한 애플리케이션, 모바일-웹 하이브리드 플랫폼 같은 경우엔 REST 방식을 이용합니다.

참조

클라이언트-서버 이미지 : https://kimsfamily.kr/275
JSP 예제 코드 : https://vprog1215.tistory.com/242
REST 이미지 : https://velog.io/tags/restful-api
휴식 이미지 : https://news.miami.edu/stories/2023/06/rest-relax-refresh-refocus.html
비누 이미지 : https://www.littlesoapcompany.co.uk/p/unperfumed-pure-olive-soap-bar-for-sensitive-skin-100g/

profile
단 하나밖에 없는 톱니바퀴

0개의 댓글