네트워크
여러대의 컴퓨터 또는 장비가 서로 연결되어서 정보를 주고 받을 수 있게 도와주는 기술
- 컴퓨터, 라우터, 스위치, 허브 등의 장비들이 각각의 역할을 수행하여 정보를 주고 받음
- 서로 정보를 주고 받기 위해서는 IP 주소, 서브넷 마스크, 게이트웨이등의 정보를 설정하고 네트워크 프로토콜을 이용하여 통신한다
IP 주소
거대한 네트워크망에서 데이터 송/수신을 할 때 컴퓨터를 식별하기 위한 위치 주소
ex. 192.168.0.0 같은 IP 주소
용도가 정해져있는 IP 주소
localhost
, 127.0.0.1
: 현재 사용 중인 로컬 PC
0.0.0.0
, 255.255.255.255
: broadcast address, 로컬 네트워크에 접속된 모든 장치와 소통하는 주소
- 서버에서 접근 가능 IP 주소를 broadcast address 로 지정하면, 모든 기기에서 서버에 접근 가능
PORT 주소
Port(포트)란 IP 내에서 애플리케이션 상호 구분(프로세스 구분)을 위해 사용하는 번호
- 포트 숫자는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미
- 로컬 PC의 IP 주소인 127.0.0.1 뒤에 :3000과 같은 숫자가 표현
- 이미 사용중인 포트는 중복해서 사용 불가
- 0 ~ 65535까지 사용 가능
잘 알려진 포트 번호
22
: SSH
80
: HTTP
443
: HTTPS
https://example.kr:443/
와 https://example.kr/
은 동일
서버
사용자가 요청을 했을 때 해당 요청에 대한 응답을 수행하는 프로그램
- 사용자의 요청에서 시작하여 우리가 만든 서버에 도착하고 다시 사용자에게 까지 되돌아가는 흐름을 잘 파악해야 서버 개발을 잘 할 수 있다.
브라우저에서 서버에 정보를 요청하는 과정
네트워크에서 정보를 요청 받고 전달하기 위해 주소에 해당하는 IP와 받는 사람에 해당하는 포트번호를 서버에 알려줘야 한다.
- 사용자는 브라우저를 이용하여 서버에 정보를 요청하고 응답을 받음
- 사용자의 요청이 서버에 도달하기 위해서 해당 서버의 정보가 필요
→ 이때 사용자의 요청이 해당 서버에 정확하게 도달할 수 있게 제공되는 정보가 IP 주소
웹 서버
인터넷을 통해 HTTP를 이용하여 웹상의 클라이언트의 요청을 응답해주는 통신을 하는 일종의 컴퓨터
- 웹 서버를 통해 오늘날 우리가 자주 사용하는 이메일이나 SNS 등 대부분의 서비스를 사용할 수 있게 됨
클라이언트 → Web Server → WAS → DB 구조의 동작 과정
웹 서버의 기본 동작 원리
- 브라우저를 통해 HTTP Request로 웹사이트를 웹서버에 요청
→ 기본적으로 브라우저가 웹서버에 요청을 할때는 항상 GET method로 요청
- 이후 웹서버는 요청을 승인하고 HTTP Response를 통해 웹사이트 데이터를 브라우저에 전송
- 마지막으로 브라우저는 서버에서 받아온 데이터를 이용해 웹사이트를 브라우저에 그려내는 일을 수행
API(Application Programming Interface)
다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한 것
- 개발자는 다른 애플리케이션이 프로그래밍 방식으로 애플리케이션과 통신할 수 있도록 API를 표시하거나 생성한다.
- 즉, API는 하나의 '약속'을 의미. 서로 다른 애플리케이션이 약속한 방식의 API 요청을 수행하면 정해진 결과물을 반환
- ex. 은행 창구를 예시로 들면 예금을 들기 위해 번호표를 뽑아 대기하다가 대출 창구가 아닌 예금 창구로 가서 신분증을 제시하고 예금 종류를 선택해서 돈을 맡기는 것을 서버와 통신하는 과정이라 할 수 있고, 이 과정에서 은행창구가 API라 볼 수 있다.
인터페이스(Interface)
서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면을 의미
- 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미
API 테이블
API 테이블은 API들을 한눈에 확인하고 협업하는 개발자들과 소통하기 위해 작성하는 일종의 표
- 이름
- Method (GET, PUT등)
- URL (ex. /api/hello)
- 해당 API에 대한 설명
REST(Representational State Transfer)
API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처
- REST는 처음에 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어짐
REST API
REST 아키텍처 스타일을 따르는 API
RESTful 웹 서비스
Rest 아키텍처를 구현하는 웹 서비스
- 서버의 API가 적절하게 HTTP 메서드를 사용해서 잘 설계를 했다면 RESTful하게 설계했다고 볼 수 있다.
- 요청하는 방식을 메서드라고 부름
→ 해당 규칙에 맞게 작성하였으면 RESTful하게 설계했다고 볼 수 있다.
- GET
: DB에 데이터 요청
- POST
: DB에 데이터 저장
- PUT
: DB에 데이터 수정
- DELETE
: DB의 데이터 삭제
등등..
Apache Tomcat
Apache와 Tomcat이 합쳐진 형태로 정적인 데이터 처리와 동적인 데이터 처리를 효율적으로 수행하는 기능 제공
- 클라이언트가 서버에 요청을 하게 되면 웹 서버에서 수행가능한 정적인 일은 웹서버에서 수행하고, 동적인 일은 WAS에 요청해서 수행을해서 클라이언트에게 보냄
Web Server
브라우저에서 URL을 입력하여 어떠한 페이지를 요청했을 때 HTTP의 요청을 받아들여 HTML 문서와 같은 정적인 콘텐츠를 사용자에게 정달해주는 역할을 하는 것
Web Server 의 역할
- 정적인 콘텐츠(이미 완성되어 있는 HTML과 같은 문서)를 브라우저로 전달
- 브라우저로부터 '로그인하여 MyPage를 요청' 과 같은 동적인 요청이 들어왔을 때 웹 서버 자체적으로 처리하기 어렵기 때문에 해당 요청을 WAS(Web Application Server)에 전달
- 웹서버의 종류로 Apache, Nginx 등이 존재
WAS(Web Application Server)
웹 서버와 웹 컨테이너가 합쳐진 형태로서, 웹 서버 단독으로는 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공
- WAS는 웹 서버와 똑같이 HTTP 기반으로 동작
- 웹 서버에서 할 수 있는 기능 대부분을 WAS에서도 처리할 수 있다.
- Web Container(Servlet) : 웹 서버가 보낸 JSP, PHP 등의 파일을 수행한 결과를 다시 웹 서버로 보내주는 역할
- WAS의 종류로 Tomcat이 존재
Spring
Spring 프레임워크는 AOP, IoC/DI 등과 같은 아주 강력한 핵심 기능들을 가지고 있다.
하지만 이러한 핵심 기능들을 사용하기 위해서는 너무나도 많은 xml 설정들이 필요했다.
이러한 불편한 점들을 개선하기 위해 2014년 SpringBoot가 등장했다.
SpringBoot
SpringBoot는 기존의 xml 설정 대신 Java의 애너테이션 기반의 설정을 적극적으로 사용하고 있기 때문에 무겁고 작성하기 힘들던 xml 대신에 애너테이션을 사용하여 아주 간편하게 설정할 수 있다.
-
기본적으로 개발에 필요한 설정 정보들을 일반적으로 많이 사용하는 설정 값을 default로 하여 자동으로 설정해주고 있다.
-
외부 라이브러리나 하위 프레임워크들의 의존성 관리가 매우 쉬워졌다.
- 기존에는 외부 라이브러리와 프레임워크를 사용하기 위해서 각각의 버전들의 호환성을 직접 확인해가면서 의존성들을 설정해야 했지만,
SpringBoot에서는 spring-boot-starter-web 처럼 필요한 외부 라이브러리들과 프레임워크들을 의존성에 맞게 starter로 묶어서 제공해 준다.
→ boot기반으로 묶여있는 dependencies를 추가하면 jpa 혹은 web 기술을 사용하기 위한 라이브러리들을 SpringBoot가 호환에 맞춰서 자동으로 가져온다.
→ 따라서 이전처럼 각각의 버전 호환성을 직접 확인할 필요가 없어졌다.
-
SpringBoot에는 내장 Apache Tomcat이 존재하기 때문에 따로 다운로드 받고 설정하고 삽입할 필요 없이 바로 사용할 수 있다.
- Spring 프레임워크에서는 서버를 실행시키기 위해 Apache Tomcat을 직접 다운로드 받고 설정하고 프로젝트에 삽입 했어야 했다.
- 이러한 불편함을 해결하기 위해 SpringBoot에서는 기본적으로 starter-web dependency를 설정하면 자동으로 내장형 Apache Tomcat을 제공한다.
서버가 제대로 동작하는지 확인해보기 위해 API에 맞춰서 HTTP요청을 서버에 보내고 응답을 확인하는 작업을 간편하게 할 수 잇도록 도와주는 플랫폼
Postman 사용 방법
- Workspaces에서 워크 스페이스를 만들고 'New'를 클릭
- HTTP Request를 클릭
- GET 방식을 선택하고 http://localhost:8080/api/hello URL을 입력하고 ‘Send’를 클릭
- API 요청이 우리가 만든 서버에서 처리되어 “Hello World!” 문자열이 출력된 것을 아래 Body 탭에서 확인 가능