웹 프로그래밍 지식

J. Hwang·2024년 12월 16일
0

Server architecture

Monolithic architecture

  • 모든 로직 (데이터 베이스, 모델 등)이 하나의 큰 서버로 개발된 형태를 의미한다.
  • 클라이언트는 하나의 서버에 요청을 하고, 서버는 내부적으로 요청을 처리하고 반환한다.
  • 개발 초기에는 단순하고 직관적이지만, 추후 서비스를 확장하면 복잡도가 증가하여 수정이나 추가 개발이 어려워질 수 있다.

Microservice architecture

  • 로직들이 기능 별로 여러 개의 작은 서버로 개발된 형태를 의미한다. (ex) DB 서버, 모델 서버, ...)
  • 클라이언트가 서버에 요청을 하면, 서버는 이 요청을 처리할 각각의 내부 서버에 다시 요청을 하고, 내부 서버들이 요청을 처리한 다음 서버가 응답을 받아 클라이언트에게 다시 반환한다.
  • 서버 단위로 의존성 및 환경을 다르게 조절할 수 있지만 전체적으로는 구조가 복잡해질 수 있다.

API

API는 Application Programming Interface의 약자로, 소프트웨어 응용 프로그램들이 서로 상호작용하기 위한 인터페이스를 총칭하는 말이다.

Web API는 API 중에서도 주로 HTTP (Hyper Text Transfer Protocol; 정보를 주고 받을 때 지켜야 하는 통신 규약) 를 통해 웹 기술을 기반으로 하는 인터페이스이다. Web API의 종류로는 REST, GraphQL, RPC 등이 있다.

REST API

REST (REpresentational State Transfer) API는 자원을 표현하고 상태를 전송하는 것에 중점을 둔 API인데, 요청의 모습을 보고 어떤 일을 하는지 알 수 있다. 정확히 말하면 REST라고 부르는 architecture로 HTTP 통신을 활용하는 것으로, 대부분의 서버들이 이 API 방법을 채택하고 있다. Resource, Method, Representation of Resource로 구성되어 있다.

  • Resource : 시스템에서 관리하는 모든 데이터나 개체
    ex) 전자 상거래 사이트에서 users, products, orders
    URL endpoint를 통해 접근할 수 있다.
    www.shopping.com/users, www.shopping.com/products, www.shopping.com/orders
  • Method : 리소스에 대해 수행할 작업을 정의하는 HTTP 메서드
    • GET : 리소스 조회
    • POST : 리소스 생성
    • PUT : 생성된 리소스를 전체 업데이트 할 때
    • PATCH : 생성된 리소스 하나를 부분 업데이트 할 때
    • DELETE : 생성된 리소스 하나를 삭제할 때
  • Representation of Resource : 클라이언트와 서버 간에 주고 받는 리소스의 표현. 리소스 자체를 전송하는 것이 아니라 "표현"을 주고 받는다. 보통 json이나 xml의 형식으로 전송된다.
    ex) GET /users/1가 요청되면, {"id" 1, "name" : "Alice", "email" : "alice@mail.com"}과 같이 json 데이터가 반환될 수 있다.

URL parameters

URL이 어떻게 구성되어 있는지 살펴보자.

http://localhost:8080/users?name=alice

  • Schema → 사용하는 protocol이 HTTP
  • Host → IP, domain name
  • Port → 포트 번호
  • Path 혹은 Endpoint → 어떤 리소스를 반환할 지 예측 가능. 위 URL의 경우 user 정보를 반환해 줄 것이다. ML 관련 API는 보통 /predict, /train과 같은 엔드 포인트를 사용한다.
  • Query parameter → 특정 리소스의 추가 정보 제공 혹은 데이터를 필터링 할 때 사용
  • Path parameter → 리소스의 정확한 위치를 찾을 때 사용. alice라는 특정 리소스의 위치를 찾는다.
    https://localhost:8080/users/alice

HTTP Header, Payload

CLI 환경에서 HTTP Header와 HTTP Payload를 이용해 HTTP 요청을 해보자.

curl -X POST -H "Content-Type: application/json" -d "{'name':'alice'}" http://localhost:8080/users

  • curl : CLI 환경에서 HTTP 요청을 할 때 사용하는 명령어
  • -X POST : HTTP 메서드 POST(리소스 생성)를 사용하겠다.
  • -H "Content-Type: application/json" : 지금 전송하는 데이터가 json 타입임을 알림. 이를 통해 HTTP header에 데이터를 key: value 형태로 저장한다.
  • -d "{'name':'alice'}" : HTTP Payload에 실제 전송하려는 데이터를 담는다.
  • http://localhost:8080/users : HTTP 요청을 보낼 목적지

Status code

status code는 클라이언트 요청에 따라 서버가 어떻게 반응하는지 알려주는 코드이다.

  • 1XX → 정보 : 요청을 받았고, 프로세스를 계속 진행
  • 2XX → 성공 : 요청을 성공적으로 받았고, 프로세스를 실행
  • 3XX → 리다이렉션 : 요청 완료를 위한 추가 작업이 필요
  • 4XX → 클라이언트 오류 : 요청 문법이 잘못되었거나 요청을 처리할 수 없음
  • 5XX → 서버 오류 : 서버가 요청 처리를 실패함

더 자세한 것은 이 페이지를 참조


References

https://daaa0555.tistory.com/457

profile
Let it code

0개의 댓글