작은 도서관
article thumbnail

클라이언트와 서버

클라이언트

서비스를 이용하는 쪽으로 일반적으로 서버에 어떤 서비스를 '요청'하여 '응답'을 받는다.

사용자가 직접 상호작용 할 수 있는 그래픽 사용자 인터페이스(GUI)가 존재하며, 기술적 관점에서 사용자가 보게되는 유저 인터페이스 혹은 페이지를 문서 객체 모델(Document Object Model), DOM이라고 한다.

DOM은 다음 3요소로 구성되는데,

  • 레이아웃: DOM의 요소와 요소간의 구조를 정의한다. 주로 HTML이 사용된다.
  • 디자인: 레이아웃, 글꼴, 색상, 크기등의 디자인을 정의한다. 주로 CSS가 사용된다.
  • (동적) 기능: DOM을 조작하여 동적 기능 계층을 정의한다. 주로 Javascript가 사용된다.

웹 개발에선 프론트엔드가 이에 해당한다.

서버

서비스를 제공하는 쪽으로 일반적으로 클라이언트의 '요청'을 받아 일정한 '응답'을 한다.

웹 개발에선 백엔드가 이에 해당한다.

API - application programming interface

서버에서 제공하는 서비스를 사용하기 위한 규칙으로, '어떤 통신 방식을 사용할 것인지', '어디에서 요청을 받을 것인지', '어떤 데이터를 응답할것인지'등을 정의한다.

이해가 어렵다면, 식당에 가서 주문을 하는 상황을 생각해보자. 어떤 식당은 키오스크를 통해, 어떤 식당은 벨을 통해, 어떤 식당은 카운터에서 주문을 받을 것이다.

이 때, 주문을 받는 식당의 주방은 서버, 주문을 하는 우리는 클라이언트, 주문 방식은 API에 비유된다.

통신 규약 - HTTP

통신 규약이란 '어떤 통신 방식을 사용할 것인가?'에 대한 정의다.

서비스 요청자가 어떤 서비스를 '요청'하고 서비스 제공자는 이에 '응답'하는 일련의 요청-응답 쌍으로 이루어진 통신 방식을 HTTP( HyperText Transfer Protocol)라고 부른다.

이에 보안 요소를 추가한 규약을 HTTPS라고 부른다. 이 페이지를 열람하는 브라우저 주소창 맨 앞의 https://가 '이 통신규약을 사용해 // 뒤의 서버에 요청을 보냄'이란 의미를 갖는다.

여담으로 https://에서 //은 쓰지 않아도 정상적으로 작동한다.

 

HTTP 프로토콜을 사용할 경우 클라이언트에선 서버에 '어떤 동작을 하라'는 기대를 보낼 수 있다.

이를 메서드라고 하며, 다음과 같은 메서드를 제공한다.

  • POST: 데이터의 생성을 요청
  • GET: 데이터의 조회를 요청
  • PATCH: 데이터의 수정을 요청
  • PUT: 데이터의 대체를 요청
  • DELETE: 데이터의 삭제를 요청
  • 등등

그러나 브라우저 상단의 URL을 보면 메서드에 대한 명세는 적혀있지 않은데, 이는 브라우저가 '페이지의 조회를 요청'하기 위한 목적으로 만들어져있기 때문이다. 따라서 브라우저는 특별한 설정이 없는 한 항상 정해진 주소에 GET 요청을 보낸다.

 

요청이 성공적으로 이루어졌다면 서버는 상태코드를 포함한 일정한 응답을 보낸다.

  • 200 OK: 요청이 성공적으로 이루어짐
  • 201 created: 데이터가 성공적으로 생성됨
  • 400 Bad Request: 잘못된 요청
  • 404 Not Found: 요청한 서비스를 찾을 수 없음
  • 500 Internal Server Error: 서버 에러

URL - Uniform Resourse Locator

웹이라는 인터넷 상에서 자원이 위치한 주소를 나타내며, 다음과 같은 정보를 포함한다.

  • 어떤 통신 방식을 사용할 것인가
  • 어디에 있는 서버에 요청할 것인가
  • 어떤 자원을 요청할 것인가
  • 어떤 정보를 보낼 것인가

예를들어, 이 게시물은 다음과 같은 URL을 갖고 있는데,

GET https://flreauniverse.tistory.com/42

이 URL을 살펴보자면 'tistory 서버에 https 통신규약을 사용하여 42번글을 조회해주세요'라는 의미를 갖는다.

reference.

프런트엔드와 백엔드 - 애플리케이션 개발 간의 차이점 - AWS

'개발 > 아롬 멘토링' 카테고리의 다른 글

[javascript] 비동기  (1) 2025.04.14
[javascript] 함수, 클래스, 메서드  (0) 2025.04.07
[javascript] 제어문  (0) 2025.04.07
[javascript] 연산자  (0) 2025.03.30
[javascript] 변수와 타입  (0) 2025.03.30
profile

작은 도서관

@Flrea

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!