서버 아키텍처
클라이언트-서버(2-Tier) 아키텍처
1. 클라이언트
- 사용자가 애플리케이션을 실행하고 서버로부터 정보를 요청하는 디바이스 또는 소프트웨어.
2. 서버
- 클라이언트의 요청을 처리하고 해당 요청에 대한 응답을 클라이언트에게 제공한다.
3-Tier 아키텍처
- 3가지 구성 : 클라이언트, 서버, 데이터베이스
- 2-Tier아키텍처와 달리 데이터베이스라는 리소스를 저장하는 공간이 따로 존재한다.
- 서버는 데이터베이스에서 리소스를 꺼내 클라이언트에 전달하는 역할만 담당한다.
HTTP를 이용한 클라이언트-서버 통신
- HTTP는 웹에서 클라이언트와 서버 간의 데이터 통신을 위해 사용되는 프로토콜이다.
- 클라이언트가 서버로 요청을 보내고 서버가 해당 요청에 대한 응답을 반환할때 사용된다.
HTTP 메서드
- 클라이언트는 HTTP 요청 메시지를 생성하여 서버에 보낼때 사용되는 메서드
- 요청 대상 URL, 헤더 등과 함께 사용된다.
요청 | 메소드 |
---|
조회(READ) | GET |
추가(CREATE) | POST |
갱신(UPDATE) | PUT(전체 교체) PATCH(일부 수정) |
삭제(DELETE) | DELETE |
PUT VS PATCH 멱등성 차이
- PUT은 반복 실행하면 초기화하고 새로운 걸로 채운다.(멱등성이 있다.)
- PATCH는 반복 실행하면 기존데이터가 계속해서 바뀐다.(멱등성이 없다.)
👉 회원가입은 PUT, 회원정보수정은 PATCH
API(Application Programming Interface)
- 소프트웨어 애플리케이션 간 상호 작용을 위한 인터페이스를 제공하는 도구나 규칙
- 서로 다른 애플리케이션(컴퓨터)을 통합하기 위한 사용설명서(메뉴얼)라고 생각하면 된다.
URL & URI
URL(Uniform Resource Locator)
- 리소스가 위치한 특정한 위치를 가리킨다다.
- URL은 해당 페이지에 접근하기 위해 필요한 프로토콜(scheme)과 도메인 이름 또는 IP 주소(hosts), 경로(url-path) 등의 정보를 포함한다.
ex) http://www.google.com:80/search
URI(Uniform Resource Identifier)
- URI는 프로토콜(scheme)과 도메인 이름 또는 IP 주소(hosts), 경로(url-path) 등의 정보에 더해 query, fragment를 포함한다.
- URI은 URL을 포함하는 상위 집합이며, URI는 URL을 비롯하여 URN(Uniform Resource Name) 등 다른 식별 방식을 포함한다.
ex) http://www.google.com:80/search?q=JavaScript
💡 모든 URL은 URI이지만, 모든 URI가 URL은 아니다.
scheme - 통신 프로토콜
http://, https:// 등
hosts - 파일이 위치한 웹 서버, 도메인 또는 IP
127.0.0.1, www.google.com 등
port - 웹 서버에 접속하기 위한 통로
:80, :443, :3000 등
url-path - 웹 서버의 루트 디렉토리로부터 파일이 위치까지의 경로
/search, /Users/username/Desktop 등
query - 웹 서버에 전달하는 추가 질문
?q=JavaScript 등
IP 주소와 PORT
IP 주소(Internet Protocol Address)
- 네트워크에서 각 장치를 식별하기 위해 사용되는 고유한 숫자
- IPv4와 IPv6 두가지의 종류가 있다.
- IPv4는 '127.0.0.1'과 같은 형태를 가지며 각 숫자는 0부터 255까지 나타낼 수 있다.
- IPv6는 2^(128)개의 주소를 나타낼 수 있으며 IPv4가 나타낼 수 있는 최대 주소가 넘어간 문제를 해결한다.
PORT
- 컴퓨터 내에서 프로세스가 통신을 수신하는데 사용되는 번호
- PC에 접속할 수 있는 채널을 의미한다.
- 포트 번호는 0부터 65535까지의 범위에서 할당될 수 있다.
- 만약 3000번이 사용중이라면 3000번은 사용하지 못한다.
- 주요 포트 번호
22 : SSH
80 : HTTP
443: HTTPS
포트번호
DNS(Domain Name System)
- 도메인 이름을 해당하는 IP 주소로 변환하는 역할을 한다.(반대의 경우도 가능)
- 사용자가 도메인 이름을 입력하면 해당 도메인 이름에 대한 IP 주소를 찾아주는 역할을 한다.
- 예를 들어 www.google.co.kr을 입력하면 DNS는 해당 주소의 IP를 찾아 웹 서버로 요청 전달한다.
HTTP의 작동방식
-
클라이언트가 서버에 요청을 보낸다.(웹 브라우저에서 URL을 입력)
-
클라이언트의 요청 메시지(HTTP Messages)가 서버에 전송된다.
-
서버는 클라이언트의 요청을 받고 처리한다.
-
서버는 요청에 대한 응답을 생성. (상태 코드, 응답 헤더, 응답 본문 등)
-
서버의 응답 메시지가 클라이언트로 전송되고 클라이언트는 응답을 처리한다.
HTTP Messages
- 클라이언트와 서버 간의 통신에서 사용되는 데이터 구조
- HTTP Messages는 요청(Request) 메시지와 응답(Response) 메시지로 나눌 수 있다.
요청(Requests)
![](https://velog.velcdn.com/images/dice0314/post/ef7def43-cb48-45cf-aa1e-9e79801a6dc4/image.png)
Start line(Request Line)
- 첫번째 줄에 작성되며, 차례대로 수행할 작업, 요청 대상 URL, 사용된 HTTP 버전을 나타낸다.
1. 수행할 작업
- GET, PUT, POST 등이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method를 나타낸다.
2. 요청 대상
- URL이나 URI, 프로토콜, 포트, 도메인의 절대 경로 등을 나타낸다.
- 요청 형식은 HTTP method 마다 다르며, origin 형식, absolute 형식, authority 형식, asterisk 형식 등이 있다.
3. HTTP 버전
- HTTP 버전에 따라 HTTP message의 구조가 달라지므로 HTTP 버전을 입력한다.
- 헤더 필드들의 집합으로, 요청에 대한 메타 정보를 포함하며, 크게 3가지로 나눌 수 있다.
1. General headers
2. Request headers
- fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더
3. Representation headers(Entity headers)
- body에 담긴 리소스의 정보를 포함하는 헤더
Body
요청과 함께 전송되는 데이터를 포함하며, 선택적으로 사용된다.
응답(Responses)
![](https://velog.velcdn.com/images/dice0314/post/da94ad63-cf1e-4271-98b0-bbc761c4b6e2/image.png)
Status Line
- 첫번째 줄에 작성되며, 현재 프로토콜의 버전, 상태 코드(요청 결과), 상태 메시지를 나타낸다.
상태 코드
- 1xx: 정보성 응답 (Informational responses)
- 2xx: 성공적인 응답 (Successful responses)
- 3xx: 리다이렉션 (Redirection messages)
- 4xx: 클라이언트 오류 (Client error responses)
- 5xx: 서버 오류 (Server error responses)
헤더 필드들의 집합으로, 응답에 대한 메타 정보를 포함하며, 크게 3가지로 나눌 수 있다.
General headers
Response headers
- 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더
Representation headers(Entity headers)
- body에 담긴 리소스의 정보를 포함하는 헤더
Body
- 응답으로 전송되는 데이터
- 선택적으로 사용한다.
AJAX( Asynchronous JavaScript And XMLHttpRequest)
- 웹 애플리케이션에서 비동기적으로 서버와 데이터를 교환하기 위한 개발 기법
- 페이지 전체를 다시 로드하지 않고도 서버와 데이터를 주고받을 수 있다.
- 검색창에 문자를 입력하면 연관검색어가 나오는 경우를 예시로 볼 수 있다.
- Fetch를 이용하여 페이지를 이동하지 않아도 서버로부터 필요한 데이터를 받아올 수 있다.
- JavaScript에서 DOM을 사용해 조작할 수 있기 때문에, Fetch를 통해 새로운 페이지로 이동하지 않고 기존 페이지에서 필요한 부분만 변경이 가능하다.
- 사용자가 웹 애플리케이션을 사용하는 동안 백엔드 서버 또는 다른 외부 서비스와의 데이터 교환이 가능하다.(보이지 않는 통신)
AJAX 장점
- 서버에 HTML을 완성하여 보내주지 않아도 웹페이지를 만들 수 있다.
- 표준화된 방법
- 유저 중심 애플리케이션 개발
- 더 작은 대역폭
AJAX 단점
- Search Engine Optimization(SEO)에 불리
- 뒤로가기 버튼 문제
SSR & CSR
SSR(Server-Side Rendering)
-
서버에서 초기 HTML을 생성하여 클라이언트에게 전달하는 방식
-
서버에서 페이지를 렌더링하고 데이터를 채워서 전송한다.
-
검색 엔진 최적화(SEO)에 유리하며, 초기 로딩 속도가 빠르다.
-
하지만, 서버 자원이 많이 소모될 수 있고, 사용자 경험이 초기 로딩 시간에 제한될 수 있다.
CSR(Client-Side Rendering)
- 초기에 비어있는 HTML 페이지를 전송한 후, 클라이언트에서 페이지를 렌더링하는 방식
- 클라이언트는 초기 HTML을 받은 후, JavaScript를 사용하여 서버에서 데이터를 요청하고 페이지를 렌더링한다.
SSR은 초기 로딩 속도와 SEO를 중요시하는 경우에 유용
CSR은 빠른 동적 렌더링과 더 좋은 사용자 경험을 중요시하는 경우에 유용.