2021. 1. 8. 09:09ㆍ프로그래밍-Web/주저리주저리
1. 주 사용 언어는 자바스크립트
- 프레임워크와 라이브러리의 차이는 개발 흐름을 누가 가지고 있는가의 여부라고들 한다. 프레임워크는 툴 그 자체가, 라이브러리는 사용자가 그 흐름을 가지고 있다. 물론 유의미한 차이는 없어 보임.
2. 클라이언트
- 리액트 JS: Virtual DOM을 사용한 싱글 페이지 렌더링 프레임워크
- Next.JS: 서버 사이드 랜더링을 위해 부분적으로 사용한다. 첫페이지가 너무 큰 경우에 가끔 쓰는데 아직까지 편리함을 느껴보진 못했다
3. 클라이언트 + GraphQL
- 아폴로: GraphQL 클라이언트 및 서버로 활용할 수 있는 라이브러리.
- 아폴로 클라이언트: GraphQL의 클라이언트 라이브러리, 이와 유사한 툴로 Relay라는 애가 있는데 나는 써보진 못했다. AWS-Amplify도 GraphQL 클라이언트로 활용할 수 있다...고한다.
4. 백엔드
- 노드 JS: V8엔진을 사용하는 js기반 런타임 플랫폼. 주로 Express같은 프레임워크를 통해 웹서버화 시키는 방법으로 사용한다. 브라우저와 대치되는데, 브라우저는 웹페이지 렌더링이 노드js는 웹서버화를 통한 서버개발환경화가 주목적이다. 둘다 v8을 사용하지만 브라우저는 기본적으로 '샌드박스'환경이고 모듈시스템을 다룰 수 없으며, 노드js는 commonJS기반에 DOM요소를 다룰 수 없다. 그런 이유로 브라우저에서는 'Webpack'과 같은 번들러를 이용하여 모듈들을 하나의 js파일로 번들링한다.
- 노드JS의 모듈: '모듈'은 노드JS에서 재사용이 가능한 기능단위의 자바스크립트 파일이다. 현재 명세 표준은 commonJS를 따른다. require난 export default같은 문법들이 다 commonJS로 명세되어있는 문법들.
- NPM or YARN: 요새는 YARN을 쓰라고들 해서 쓰긴 하는데... 패키지매니저의 종류들이다. 패키지매니저는 모듈 사용 관리 매니저를 의미한다.
- Express: 스프링을 공부하다보면 웹서버는 정적인 콘텐츠를(예컨데 아파치), 웹 어플리케이션 서버는 쿼리응답과 같은 동적인 콘텐츠를 처리(예컨데 톰캣)한다고 정의한다. 근데 js에는 딱히 구분이 없는듯 하다. 노드js에서는 Express라는 라이브러리(프레임워크)로 만든 서버를 보통 웹서버로 사용한다. 기본적으로 얘도 MVC(보통 router를 컨트롤러로 사용) 구조를 가지고 있다. 물론 요샌 클라리언트(View)는 ReactJS등을 이용하여 따로 떼어내지만.
5. GraphQL
- GraphQL: API를 위한 쿼리언어. RestAPI를 사용하는 대신 써봤는데, 클라이언트를 유연하게 고칠 수 있어서 좋다. 물론 다른 장점들도 많지만. 일단 데이터를 효율적으로 가져올 수 있다는 장점이 크게 느껴진다.
- 데이터로더: GraphQL을 쓰면서 크게 장점이 와닿았던 모듈이었다. gql로 정의한 데이터의 type을 children으로 가져올때, 다수의 쿼리를 한방으로 처리할 수 있다. Mongoose를 쓰며 bulkwrite를 깨달았을때의 효용과 같다.
6. 백엔드+ GraphQL
- 아폴로 서버: GraphQL 서버로 사용중. Express-graphql이나 graphQL 요가도 사용해봤는데, 아폴로 서버가 가장 편하더라. 이를 통해 스키마와 리졸버를 정의하여 데이터 응답을 처리한다. GraphQL 클라이언트가 Call을 하면 validation을 통해 서버로 operation을 전달한다.
7. 몽고DB
- 몽고DB: Document기반의 NoSQL DB. 나는 ODM으론 Mongoose를 사용한다.