본문 바로가기

개발/프로그래머스 데브코스

프로그래머스 데브코스 11일차 with. TS 웹 풀스택

📚요약

지난 시간에는 Node.js와 Docker를 활용해 mariadb를 활용하는 것을 실습했습니다. 이번 시간에는 9일 차에 진행한 내용을 다시 보며 좀 더 깊게 들어가 보겠습니다. 백엔드 구조를 보고 요청을 하는 과정에서 API를 알아보고, HTTP에는 어떤 것을 넣어보내야 하는지, Rest API에 대해 알아보고 API 설계를 해보겠습니다.

 

📖백엔드 구조(다시보기)

크게 나누어보면 클라이언트와 서버가 있다고 했습니다. 백엔드 개발자 입장에서 클라이언트는 실제 사용자프론트엔드 개발자로 나눌 수 있습니다.

서버를 들여다보면 웹 서버, 웹 애플리케이션 서버(WAS), 데이터베이스(DB)로 나눌 수 있습니다. 백엔드 개발자의 경우 WAS와 DB가 개발하는 메인이라고 생각하시면 됩니다.

백엔드 구조

 

📖API

API란? Application Programming Interface의 약자로 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스

API-위키백과

하나의 단어 Interface에 집중해 보겠습니다. 상호 작용이라는 의미를 가지는 이 단어는 컴퓨팅 쪽으로 넘어오게 되면서 '서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면'이라는 의미를 가지게 되었습니다. 뭔가 이어주는 그런 다리의 역할을 한다고 이해하면 편합니다.

그렇다면 API는 어떤 부분을 이어주고 있을까요? 다양한 부분이 있지만 클라이언트와 서버의 관계를 보면 이미 개발되어 있는 다른 기능을 URL(주소)를 통해 이어주고 있다고 할 수 있습니다. 예를 들면 네이버가 개발한 앱이 아닌 경우에도 네이버 지도를 사용하는 경우가 API를 통해 이어졌다고 볼 수 있습니다.

 

📖REST(RESTful) API

REST API는 REST 기반으로 하는 서비스 API를 구현한 것입니다.

REST란? Representational State Transfer의 약자로 WWW와 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식. 6가지 제한 조건(기본 원칙)을 가지고 있다.

REST-위키백과

📄REST API를 작성하는 규칙

  • 소문자
  • _(언더바) 대신 -(하이픈) 사용
  • /(슬래쉬)는 계층 관계를 나타내는 데 사용되며, 주소 마지막에는 /(슬래쉬) 없음
  • 행위(목적, CRUD  함수명)를 포함하지 않는다. ex) 'get/products'(x) , '/products'(o)
  • 파일 확장자 사용하지 않기
  • 명사는 복수형

RESTful API는 REST의 규칙을 더 엄격하게 지키는 것을 의미합니다.

 

📄HTTP Method

HTTP에는 요청을 구분하기 위한 몇 가지 method가 있습니다.

  • GET : 리소스 표시(조회) 요청
  • POST : 새로운 리소스 생성 요청
  • PUT : 리소스 없는 경우 생성, 있는 경우 갱신 요청
  • DELETE : 리소스 삭제 요청
  • ...

 

📄URL 살펴보기

지난 시간에 URL은 위치를 알려주기 위한 것이었습니다. 오늘은 URL을 통해 해당 주소의 목적을 살펴볼 수 있습니다. 예를 들어 블로그의 URL을 살펴보면 'nulzi-dev.tistory.com/122'입니다. nulzi-dev.tistory.com은 해당 블로그의 위치를 알려줍니다. 그 이후에 나오는 122를 통해 글을 구분해서 요청을 하는 것입니다. 122가 지난 실습처럼 orderlist가 온다면 주문 목록을 보여주었던 것처럼 특정한 목적을 가진다는 의미입니다. 실습을 통해 더 확실히 알아보겠습니다.

 

📖API 설계(실습)

API 설계는 만들려고 하는 페이지를 보고 해당 페이지에 어떤 API가 필요할지 생각해 보고 그에 맞게 설계하는 것입니다.

 

쇼핑몰 페이지를 만드려고 합니다. 예시이므로 위치를 나타내는 주소(예를 들어 localhost:8888)는 생략하고 적겠습니다.

  • 쇼핑몰 목록 불러오기 API : /products
  • 물품 정보 불러오기 API: /products/{id} or /products/:id
    물품을 불러오는 경우 /product1, /product2로 불러올 수 있지만, 물품의 수가 많아지는 경우 곤란합니다. 그에 따라 물품에 id를 부여하고 해당 id를 통해 정보를 불러옵니다. 지난 시간에는 쿼리 스트링(?id=1)을 활용했습니다.
  • 물품 삭제하기 API: /products/{id} or /products/:id
    왜 위에 부분이랑 같은지 의문이 들 수 있습니다. 이는 HTTP method를 이용하여 구분하면 다른 요청이 될 수 있기 때문입니다.

 

다음 시간에 계속...

 

출처 & 참고

김송아 강사님의 강의

인터페이스(컴퓨팅), 위키백과, 2024.04.22

RESTful API를 위한 6가지 원칙과 네이밍, Hannah, 2024.04.22

HTTP request methods, MDN, 2024.04.22

Http Method란?, tilki, 2024.04.22