NodeJS로 REST API를 만드는건 좋은 선택이 아니였다. 왜냐하면 spring의 JPA 같은 ORM or MyBatis 같은 ORM이 없었기 때문에 객체를 쿼리문으로 변경하는게 쉽지 않았다.

지금은 Sequalize ORM 의 도움으로 Node도 쉽게 REST api를 만들수 있다. 또한, java의 swagger와 같은 swagger도 적용할 수 있다.

최근에는 NodeJS에 타입스크립트를 적용하는 추세라서 typescript ORM인 typeORM 도 좋은 선택이 될 수 있다.

+ 여기에 사용된 기술

NodeJS + Express + Typescript + TypeORM

+ 여기에 사용된 github

https://github.com/eastflag/node-rest-tutorial.git

1 NodeJS 프로젝트 설정

express 설정 디렉토리 적당한 곳에 node-rest-tutorial 이라는 이름의 폴더를 만든다. [crayon-60761e76ec5fe002534321/] 폴더를 만든후 IDEA 에서 File > Oen 메뉴에서 해당 폴더를 연다. IDEA 하단의 Terminal 메뉴를 열고 아래 명령어로 npm 저장소를 만든다. [crayon-60761e76ec608869455624/] package.json 화일이 생성되었음을 확인하자. 해당 화일을 열어서 확인하자. 이제 node 로 REST 서버를 구성하기 위해 필수 라이브러리인 express 모듈을 설치한다. 타입스크립트 버전인

Read more ...

2 GET과 POST의 이해

모든 http 메서드 허용 index.ts에 /hello url을 허용하는 api를 만들되 모든 http 메서드를 허용하도록 아래와 같이 만든다. [crayon-60761e76ed53d975185249/] express의 use 메서드는 모든 http 메서드를 허용해준다. postman으로 GET 방식으로 테스트하면 다음과 같다. POST 방식으로 테스트하면 다음과 같다. 둘다 모드 http 상태 코드 200을 리턴해준다. GET 만 허용 GET 방식만 허용하도록 하는 /hello2 API를 추가한다. express에서는 get

Read more ...

3 json 데이터 보내고 받기

Response - JSON 데이터 리턴 Node는자바스크립트 언어를 사용하고 자바스크립트에는 json 이라는 타입이 이미 존재하므로 별도의 라이브러리가 필요하지 않다. 단지, json 데이터를 만들어서 리턴만 하면된다. [crayon-60761e76edc5c331298929/] postman으로 테스트해보자 Request - JSON 데이터 보내기 이번에는 json으로 데이터를 보내는 경우이다. [crayon-60761e76ede44787271377/] 테스트를 해보면 req.body에 빈 객체 {} 가 오고 파싱이 안된다. 앞에서 express 버전 4에는 body-parser가 내장되어있다고 했지만

Read more ...

4 typeorm 설정

ORM 이란 ORM이란 Object Relation Mapping 의 약자로서 객체를 데이터베이스 로 매핑해주는 것을 말한다. 객체 지향 프로그래밍 언어에서의 클래스가 데이터베이스의 테이블에 매핑된다. 객체와 데이터베이스 매핑 예객체 클래스 : 데이터베이스 테이블객체 속성 : 데이터베이스 컬럼 MyBatis ORM 이란 MyBatis ORM은 자바에서 사용되는 ORM인데, 유독, 우리나라에서 JPA보다 MyBatis ORM 이나 iBatis ORM을 현업에서 많이 사용하고 있다. xBatis는

Read more ...

4.1 entity 설계

데이터베이스 datagrip으로 DB 구축 편에서 게시판 테이블과 댓글 테이블을 만들었다. 게시판 테이블과 댓글 테이블은 one-to-many 구조이고 아래와 같다. JPA 혹은 typeORM의 중요한 개념은 DB 를 직접 다루는게 아니라 객체를 다루는 것이라고 앞에서 얘기하였다. 이 테이블 두개를 entity 설계를 해서 만들어보자. 만일 앞에서 미리 만들어진 테이블이 있다면 먼저 table을 drop 하여 DB내에 어떤 테이블도 존재하지 않도록

Read more ...

4.1 board 생성 api

컨트롤 모듈화 입력과 출력을 담당할 controller 폴더를 만들고 BoardController를 생성한다. 그리고, addBoard 라는 메서드를 만들고 board 를 생성하는 api를 구현한다. typeORM은 DB를 객체처럼 다루기 때문에 굳이 controller에서 persistence 레이어로 나누지 않았다. Board 인스턴스를 생성하고 save를 하게 되면 ORM이 insert 구문을 만들어서 실행해준다. [crayon-60761e76eec91081985309/] 라우팅 모듈화와 컨트롤러 모듈화 POST 방식의 /api/board API를 만들기 전에 /api 를

Read more ...

4.2 board 목록보기, 상세보기

board 라는 게시판 데이터가 쌓이게 되면 두가지의 api가 필요하게 된다. 첫번재는 게시판 목록을 보는 API와 두번째는 하나의 board를 상세하게 보는 API이다. 그래서 여기서는 GET 방식의 두 개의 API를 구현한다. 목록보기: /api/boards상세보기: /api/board/:id controller 구현 목록보기와, 상세보기에 해당하는 두개의 API를 구현한다. [crayon-60761e76eef4b649174529/] 라우팅 모듈을 추가한다. [crayon-60761e76ef18e542101384/] Test 목록보기 api를 테스트한 결과이다. 목록은 여러개의 결과가 오므로 리턴타입이

Read more ...

4.3 board 수정 api

board 를 수정하는 api를 만든다. 관례적으로 수정하는 http 메서드는 put 메서드를 사용한다. 무조건 put 메서드를 사용해야 하는것은 아니다. post 메서드를 사용한다고 해서 잘못된건 아니다. 왜냐하면 REST는 표준이 아니기 때문에. 그래서 수정할 때는 put을 사용하고 생성할 때는 post를 관례적으로 사용한다. controller 구현 프로토콜 유알엘은 /api/board이고 메서드는 put, 입력은 json, 출력은 json이다. [crayon-60761e76ef39c837808349/] 라우팅 모듈에 매핑을 추가한다.

Read more ...

4.4 board 삭제

board 를 수정하는 api를 만든다. 관례적으로 수정하는 http 메서드는 put 메서드를 사용한다. 무조건 put 메서드를 사용해야 하는것은 아니다. post 메서드를 사용한다고 해서 잘못된건 아니다. 왜냐하면 REST는 표준이 아니기 때문에. 그래서 수정할 때는 put을 사용하고 생성할 때는 post를 관례적으로 사용한다. controller 구현 프로토콜 유알엘은 /api/board이고 메서드는 put, 입력은 json, 출력은 json이다. [crayon-60761e76ef54d716076536/] 라우팅 모듈에 매핑을 추가한다.

Read more ...

4.5 이미지 업로드 – DB 저장

이미지 업로드 프로토콜 이미지를 업로드하는 방법은 두가지이다. 첫번째는 file upload 버튼을 사용해서 올리게 되는 multi-part 프로토콜 방식이다. 이 때는 브라우저가 해당 프로토콜에 맞게 올려주게 된다. 파일을 업로드하는 메서드는 Post 이다. 그런데  Content-Type이 좀 독특하다. Request할때 헤더를 fiddler를 사용해서 살펴보면, 아래와 같다. Content-Type: multipart/form-data; boundary=xxxxxxxxxxxxxxxxxxx body에 보내는 데이터의 content type이 form-data이긴 한데 여러부분으로 나누어 보낸다는 multipart

Read more ...

Comments are closed.