네트워크 : 여러 대의 컴퓨터 또는 장비가 서로 연결되어 정보를 주고 받을 수 있게 도와주는 기술
Server(서버) : 사용자가 요청했을 때 해당 요청에 대한 응답을 수행하는 프로그램
Client(클라이언트) : 브라우저에서 서버에 정보를 요청
사용자 요청 ➡️ 서버에서 응답 ➡️ 사용자로 되돌아감
사용자는 브라우저를 이용하여 서버에 정보를 요청하고 응답을 받는다. 이 때, 사용자의 요청이 서버에 도달하기 위해서는 해당 서버의 정보가 필요하며 이 정보가 IP 주소이다. IP 주소는 네트워크망에서 컴퓨터를 식별하기 위한 위치 주소가 된다. IP가 주소라면 포트번호는 받는 사람에 해당한다.
EX) IP : 192.168.**.* / 포트 번호 : 8080
웹 서버 : 인터넷의 HTTP를 이용하여 클라이언트 요청에 응답해주는 통신을 하는 일종의 컴퓨터
웹 서버 기본 동작 원리
1. 브라우저를 통해 HTTP Request로 웹사이트를 웹 서버에 요청
2. 웹 서버가 요청을 승인하고 HTTP Response를 통해 웹사이트 데이터를 브라우저에 전송
3. 브라우저가 서버에서 받아온 데이터를 이용해 웹 사이트를 브라우저에 보여줌
⚠️ 기본적으로 브라우저가 웹 서버에 요청을 할 때는 항상Get method
로 요청
API(Application Programming Interface) : 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙 정의
인터페이스(Interface) : 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면. 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템
REST(Representational State Transfer)
API의 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍쳐로 REST 아키텍쳐 스타일을 따르는 API를 REST API라고 하며 REST 아키텍쳐를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다. 간단히 말해, 서버의 API가 HTTP를 준수하며 잘 설계되어 있으면 RESTful하게 설계되어있다고 할 수 있다.
HTTP 메서드는 수행해야 하는 작업을 서버에 알려준다. 다음은 4가지의 일반적인 HTTP 메서드이다.
GET (조회)
클라이언트는 GET을 사용하여 서버의 지정된 URL에 있는 리소스에 엑세스 한다. 서버로부터 데이터를 받아온다. 주로 데이터를 읽거나 검색할 때 사용된다. GET은 캐싱이 가능하여 같은 데이터를 한번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라진다. 또한 전송 전에 데이터를 필터링하도록 서버에 지시할 수 있다.
POST (등록)
클라이언트는 POST를 사용하여 서버에 데이터를 전송한다. 주로 새로운 리소스를 생성할 때 사용된다. 여기에는 요청과 데이터 표현이 포함된다. 동일한 POST 요청을 여러 번 전송하면 같은 리소스를 여러 번 생성하는 부작용이 있다. 다시 말해 같은 정보를 담고 있는 서로 다른 리소스가 생성되는 것이다.
PUT (수정)
클라이언트는 PUT을 사용하여 서버의 기존 리소스를 업데이트 한다. POST와 달리 RESTful 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 동일한 결과를 가져온다.
DELETE (삭제)
클라이언트는 DELETE를 사용하여 서버의 데이터를 삭제한다.
웹 서버(Web Server)는 브라우저에서 어떤 URL을 입력하여 어떠한 페이지를 요청했을 때 HTTP의 요청을 받아들여 HTML 문서와 같은 정적인 컨텐츠를 사용자에게 전달해주는 역할을 한다. 웹 서버는 동적인 요청(EX. my page)이 들어왔을 때 서버 자체적으로 처리하기 어렵기 때문에 해당 요청을 WAS에 전달한다.
WAS(Web Application Server)는 웹 서버와 똑같이 HTTP 기반으로 동작하며 동적인 컨텐츠를 처리할 수 있다. WAS를 사용하면 다양한 로직들을 수행하는 프로그램을 동작시킬 수 있다.
Apache Tomcat은 동적인 처를 할 수 있는 웹 서버를 만들기 위한 웹 컨테이너로 WAS의 한 종류이다. Apache와 Tomcat이 합쳐진 형태로 정적인 데이터 처리와 동적인 데이터 처리를 효율적으로 할 수 있게 해준다.
스프링 (Spring) : Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크
사용자의 요구사항을 해결하기 위한 실질적 코드인 비지니스 로직을 구현할 때, 구현이 어렵고 프로그래밍 모델이 복잡하다는 단점을 극복하기 위해 등장한 프레임워크이다. 순수한 자바 객체(POJO)만을 사용하여 복잡성을 제거하고 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적을 가지고 있다. 오픈소스로 누구나 이용할 수 있지만 안정적인 개발과 개선이 보장된다는 특징이 있다.
스프링은 기존 기술의 복잡성을 크게 줄인 프레임워크이지만, 그럼에도 복잡한 설정이 필요하다는 불편함을 비롯한 단점들이 존재했다. 이를 해결하기 위해 등장한 것이 스프링 부트이다.
스프링 부트 (Spring Boot) : 기본적인 설정과 재사용 코드의 작성을 최소화 하고 자동 설정과 컨벤션을 통해 빠르게 애플리케이션을 개발할 수 있도록 지원하는 스프링 프레임워크
즉, 스프링 부트는 스프링으로 애플리케이션을 만들 때의 필요한 설정을 간편하게 처리해주는 별도의 프레임워크이다. 또한 자체적으로 내장된 서버(Tomcat 등)를 제공하여 별도의 설정 없이 애플리케이션을 실행할 수 있어 배포와 관리를 간편하게 만들어주었다.
Postman : API 개발을 빠르고 쉽게 개발할 수 있도록 도와주는 소프트웨어 플랫폼
HTTP 요청을 서버에 보내고 응답을 확인해야 구현한 서버가 제대로 동작하는지 확인할 수 있는데 이러한 확인 작업을 간편하게 할 수 있도록 도와주는 플랫폼 중 하나가 포스트맨이다.
"Hello World!"를 출력하는 API
@RestController
public class HelloController {
@GetMapping("/api/hello")
public String hello(){
return "Hello World!";
}
}
/api/hello
URL에 GET 요청으로 보낸 "Hello World!"의 출력이 Body에서 잘 이루어짐을 확인할 수 있다.