2022 AI SW 온라인 교육/SW 코딩 훈련트랙

[SW 코딩] Express.js와 MongoDB - 02. REST API

parkes811 2022. 12. 7. 00:31

01 REST API

 

  • REST API란?

- REST + API

- REST 아키텍처를 준수하는 웹 API고, RESTful API라고 부르기도 한다.

 

  • API란? : Application Programming Interface

 

  • REST란? : REpresentational State Transfer

-  API 형태만 봐도 어떤 동작을 하는 API인지 알아보기 쉽게 하도록 하는 표현 방법에 대한 규칙

- 별도의 규칙이 존재하지 않아 가이드라고 표현하며, 가이드를 따르면 좋은 구조의 API를 구성할 수 있다.

 

  • REST API 기본 가이드 - HTTP Method의 사용

- HTTP Method : HTTP의 요청과 응답, 웹 상에서의 프로토콜을 Method로 표현한 것

- GET, POST, PUT, DELTE 등이 있다.

 

  • REST API 기본 가이드 - URL 표현법

 

- REST API는 URL을 통해 자원을 계층적으로 표현한다. 

- users/1/posts/라는 URL은 '1번 유저의 게시글 전체'라는 자원을 나타낸다.

 


 

02 JSON

 

  • JSON이란? : 자바스크립트에서 객체를 표현하는 표현식

- JSON을 사용하는 이유는 웹 API는 기본적으로 데이터를 문자열로 전송한다.

- 어떤 객체를 웹 API를 통해서 문자열로 전달하기 위해 JSON을 사용한다.

 

  • JSON vs XML

- JSON이 더 적은 표현식을 사용하여 데이터를 효과적으로 표현한다.

 

  • JSON 가이드 - Object : JSON은 기본적으로 Object 단위로 저장한다.

 

  • JSON 가이드 - Array

 


 

03 Express.js로 REST API 구현하기

 

  • Express.js를 이용한 미니 프로젝트
데이터베이스 없이 Node.js 모듈 활용
간단한 메모의 작성, 수정, 삭제, 확인 기능이 있는 API 구현
Express-generator를 사용하지 않고 MVC 패턴 구현

 

  • MVC 패턴이란?

- MVC 패턴은 웹 서비스의 가장 대표적인 프로젝트 구성 패턴으로 프로젝트의 기능들을 어떻게 분리할지에 대한 구성 방법 중 하나이다. 

- 각각의 요소는 Model - View - Controller를 구분하여 프로젝트 구조를 구성한다.

  1. Model : 데이터에 접근하능 기능 또는 데이터 그 자체를 의미한다. 데이터의 읽기, 쓰기는 Model을 통해서만 이루어지두록 구성해야한다.
  2. View : 데이터를 표현하는 기능을 의미한다. 주로 Controller에 의해 데이터를 전달받고 전달받은 데이터를 화면에 표시해주는 기능을 담당한다.
  3. Controller : Model을 통해 데이터에 접근하여, 처리 결과를 View로 전달하는 기능을 의미한다. 웹 서비스에선 주로 라우팅 함수가 해당 기능을 수행한다.
  • Express.js로 MVC 패턴 구현하기

 

  • 프로젝트 구현 사항

 

  • 메모 목록 구현하기 

- models 내 notes 배열은 id, 제목, 내용을 담고 있고, notes 모듈이 호출될 때 id와 title을 반환한다.

- MVC 패턴에서 M(정보)를 담당하는 부분이 models 이고, routes는 C 부분을 담당한다. 

- routes 내 notes.js는 두 개의 모듈을 불러오고, Router() 객체를 만들고, 아무런 자원을 명시하지 않은 요청이 들어오게 되면 Note.list()를 json으로 반환하게 된다.

 

  • 메모 상세 구현하기

- routes/ 부분에서 '/ :id 는 URL에 하나의 변수처럼 취급되는 파라미터이다.

- req.params.id를 통해 id를 통해 정보를 요청하게 되면

- models에는 id를 인자로 받는 하나의 함수 내 note를 반환하게 된다.

- 이 때 찾고자 하는 note가 없다면 요청하는 정보를 찾을 수 없다는 Error를 반환해준다.

- 다시 routes 부분에서 정상적으로 note를 받아오게 되었다면 json(note)를 반환한다.

- 오류가 발생하게 된다면 catch(e) 부분에 걸려, next(e) 부분인 오류 처리 핸들러가 실행된다.

 

  • 메모 작성 구현하기

 

  • 메모 수정 구현하기

 

  • 메모 삭제 구현하기

 

  • 오류 처리 미들웨어 구현하기

- status 500은 서버의 문제 발생이라는 의미이다.

 

  • 정의되지 않은 라우팅에 404 오류 처리하기