어떤 포털 사이트를 개발한다고 가정해보자. 그 사이트 속에는 블로그, 카페, 메일 등 다양한 기능이 있는데, 이것들을 모두 하나의 애플리케이션에 통합하면 어떻게 될까? 서비스를 이렇게 구성한다면 서버를 업데이트하거나 한 기능을 유지보수 할 때마다 사이트를 중지시켜야 한다. 당연히 개발에 보수적인 입장을 취할 수 밖에 없고 서비스 자체의 규모도 커지기 때문에 서비스 구동 시간도 훨씬 길어진다.
이 같은 문제를 해결하기 위해 나온 것이 마이크로서비스 아키텍처(MSA)이다. 마이크로서비스 아키텍처는 단어 그대로 서비스 규모를 작게 나누어 구성한 아키텍처를 의미한다. 앞에서 예로 든 포털 사이트에 적용한다면 블로그 프로젝트, 카페 프로젝트, 메일 프로젝트 등 애플리케이션을 기능 별로 나누어 개발하게 된다.
단일 서비스로 구성된 사이트는 내부 메서드 호출 등을 통해 원하는 자원을 가져와 사용할 수 있지만 서비스 기능별로 구분한 B 포털 사이트의 경우 각 서비스간 통신해야 하는 경우가 발생한다. 이러한 상황에서의 통신을 '서버 간 통신'이라고 한다.
서버 간 통신은 분산 시스템에서 서버들이 서로 데이터를 주고받기 위해 사용되는 방법들을 의미한다. 좀 더 자세하게 설명하자면 한 서버가 다른 서버에 통신을 요청하는 것을 의미하며, 한 대는 서버, 다른 한 대는 클라이언트가 되는 구조이다. 몇 가지 프로토콜에 의해 다양한 통신 방식을 적용할 수 있지만 가장 많이 사용되는 방식은 HTTP/HTTPS 방식이다.
서버 간 통신에서 HTTP/HTTPS 방식은 널리 사용되는 프로토콜이다. 이 방식은 주로 웹 애플리케이션과 API 통신에서 많이 사용되며, REST API가 대표적이다. HTTP와 HTTPS는 같은 프로토콜을 사용하지만, HTTPS는 보안을 강화한 방식이다.
웹 브라우저와 웹 서버 간의 통신에 사용되는 기본 프로토콜. 클라이언트가 서버에 요청(request)을 보내면, 서버는 이에 대한 응답(response)을 반환한다. (Request - Response 구조)
HTTP에 보안 계층인 SSL/TLS를 추가한 프로토콜. 데이터가 전송되는 동안 암호화되어 도청, 변조, 위조를 방지한다.
GET /api/users HTTP/1.1 # HTTP 메서드(GET),요청 대상 리소스(/api/users)
Host: example.com # 요청을 보내는 서버의 호스트명(도메인)
Accept: application/json # 클라이언트가 서버로부터 받고자 하는 응답의 콘텐츠 타입
HTTP/1.1 200 OK # HTTP 버전(1.1), 응답 상태 코드(200 OK)
Content-Type: application/json
Content-Length: 85 # 응답 본문의 길이(바이트 단위)
{
"users": [
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
}
HTTP/HTTPS는 서버 간 통신에서 중요한 역할을 하며, REST API를 통해 이를 효과적으로 구현할 수 있다. 보안을 위해 HTTPS를 사용하고, 적절한 상태 관리와 에러 처리를 통해 신뢰성 높은 통신을 구현하는 것이 중요하다.
☝ (REST API 동작 방식)
REST API는 대중적으로 가장 많이 사용되는 애플리케이션 인터페이스이다. 이 인터페이스를 통해 클라이언트는 서버에 접근하고 자원을 조작할 수 있다. 이번엔 REST의 형식 및 규칙을 알아보자.
REST란 'Representational State Transfer'의 약자로, 웹 서비스 설계를 위한 아키텍처의 한 형식이다. 주고받는 자원(Resource)에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET,POST,PUT,DELETE)를 통해 해당 자원의 상태를 주고받는 것을 의미한다.
API는 'Application Programming Interface'의 약자로, 애플리케이션에서 제공하는 인터페이스를 의미한다. API를 통해 서버 또는 프로그램 사이를 연결할 수 있다. REST API는 REST 아키텍처를 따르는 시스템/애플리케이션 인터페이스라고 볼 수 있다. REST 아키텍처를 구현하는 웹 서비스를 'RESTful하다'라고 표현한다.
REST는 웹 서비스 설계를 위한 아키텍처 스타일로, HTTP 외에도 다양한 프로토콜에서 사용할 수 있는 일반적인 원칙이다. REST API는 REST 원칙을 구현한 특정한 웹 서비스이다. 따라서, REST는 개념적이고 철학적인 설계 원칙을 나타내고, REST API는 이 원칙을 실제로 구현한 웹 서비스라고 이해할 수 있다.
REST API를 설계하는 데엔 몇 가지 규칙이 있다.