간단한 CRUD api 서버를 구현하는 과제가 생겼다
사용 기술이
- node.js
- graphql
- mongodb
과제 내용을 보자마자 든 생각은 "다들 초면이신데요?" 였다.
그도 그럴게 node.js는 군 복무 중 책보고 며칠 따라해본게 전부였고 (기억이 나지 않습니다..), mongodb는 물론이거와 다른 noSQL또한 사용한적이 전무했으며, graphql이란 녀석 또한 처음 접해봤기 때문이다.
갈 길이 먼 것 같지만 차례대로 공부해보자
node.js의 express를 통해 api 서버를 만드는 법을 찾아봤다.
이것저것 찾아봤는데, node.js로 서버 제작 시, 거의 대부분은 express를 사용했다.
찾아보니 express는 router라는걸 이용해 엔드포인트를 정의하는 것 같다. 즉, 라우터가 컨트롤러 역할을 한다고 생각된다.
근데 비즈니스 로직은 어디에 작성해야 하지?
이에 관해 찾아보니 3 Layer Architecture 라는게 있었다.
엔드포인트 역할을 하는 컨트롤러(router)와 비즈니스 로직을 담당하는 service, 그리고 데이터에 접근할 어떠한 것 (DAO / DTO 등)으로 분리한다고 한다.
mongoDB는 noSQL의 한 종류인데, 간단하게 말하면 관계형 데이터베이스가 아니라는 것이다.
mongoDB는 Table이 아닌 Collection이라는 용어를 사용하며, 고정된 스키마가 없이 "키:값" 쌍으로 저장한다. (JSON과 유사)
설치와 쿼리문을 몇개 따라하면서 어떤 구조인지 확인해보았다.
node.js와 mongoDB를 연결시켜야 하는데, 이때 mongoose라는 ODM을 사용한다고 한다.
Java Application에서 MyBatis나 JPA를 사용하는 것과 비슷한 것 같다.
mongoose api document 에서 간단한 예제와 사용법을 확인할 수 있었다.
어... 근데 뭔가 까먹은 것 같은데..?
GraphQL 은 API를 위한 쿼리 언어(Query Language)이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임입니다.
SQL과 같은 쿼리 언어이며, REST api와는 다르게 하나의 엔드포인트로 쿼리문을 날려 관리가 편하고 리소스를 절약할 수 있다고 한다.
graphql은 Schema와 Resolver로 구성되는데,
서비스 단에 비즈니스 로직을 작성했기 때문에 리졸버에는 서비스에 구현한 함수를 호출해주었다.
- graphql // 스키마 및 리졸버
- mongoose
- schema // 사용할 스키마 정의, 컬렉션
- model // mongodb와 연결, 정의한 스키마들을 모아서 관리
- service // 비즈니스 로직
서비스 단에선 mongoose의 api들을 사용해 CRUD를 구현했다.
update가 작동을 안하는데, 해결하기엔 너무 가볍게 공부했고, 시간 또한 부족해서 참 아쉽다.
이런저런 새로운 걸 경험해 참 흥미로웠다.
node.js도 나름 재밌는 것 같고, 특히 처음 사용해본 noSQL은 참 괜찮은 것 같다.
추후에 해당하는 기술을 이용해 프로젝트를 진행하게 된다면 기초부터 튼튼히 공부해 시작해야겠다.