graphQL은 데이터가 전송되어지는데 사용되는 데이터 질의어(쿼리 언어)다. 이전에는 커뮤니티가 크지 않고 지원도 빈약하여 적용하는데 쉽지 않았었던 반면, 최근에는 이용자 수가 큰만큼 커뮤니티도 크고 수많은 프레임워크의 공식문서에서 확인할 수 있을만큼 지원이 잘 되고 있다. REST API의 단점을 보완하여 현업에서도 자주 병용되어지는 graphQL, 전반적인 간단한 개념을 오늘 알아보았다. Why graphQL? graphQL의 장점 필요한 정보들만 선택하여 받아올 수 있음 Overfetching 문제 해결 데이터 전송량 감소 여러 계층의 정보들을 한 번에 받아올 수 있음 Underfetching 문제 해결 요청 횟수 감소 하나의 endpoint에서 모든 요청을 처리 하나의 URI에서 POST로 모든..
분류 전체보기
문제 NestJS 의 새로운 프로젝트를 생성하는 과정에서 에러가 발생했다. 이전에는 잘만 됐었는데, 환경을 바꾼 것도 아닌데 왜 이럴까 의아했다. $ npm i -g @nestjs/cli $ nest new project-name Installation in progress... 이라는 문구가 약 5분간 지속되더니 결국 설치하는데 실패했다는 에러메시지가 출력되었다. 갖가지 정보를 참고하여, 처음에는 Urix module에 문제가 있다고 하여 nest의 일부 패키지를 재설치하는 방법을 시도했다. $ npm cache clean --force $ npm i -g source-map-resolve $ npm i -g @nestjs/cli $ nest new project_name 하지만 동일한 현상이 발생하여..
API를 작성하는데 있어서 로그인은 보안과 직결되기 때문에 가장 중요한 부분 중 하나이다. 그렇다면 로그인을 어떻게 안전하게 처리할 수 있을까? 그 부분에 대해 정리하고자 한다. 로그인 API가 보다 복잡한 이유는 우선 HTTP의 특성과 관련이 있다. HTTP는 무상태성이라는 특성을 지니고 있는데, 클라이언트에 대한 이전 상태 정보 및 현재 통신 상태가 남아있지 않다. 따라서 이를 해결하고자 로그인 방식이 별도로 존재하는 것이다. 로그인 방식 3가지 쿠키 & 세션 JWT OAuth 쿠키 클라이언트가 어떠한 웹사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 파일 무상태 환경에서 기억하고자 하는 데이터를 쿠키에 담고, 다음 번 요청 시에 쿠키를 ..
C 프로그래밍 시 코드를 작성하고 실행하는 과정에서 컴파일(compile)을 하게 된다. 컴파일러가 컴파일을 하는 과정을 알아보았다. 컴파일 (Compile) 인간이 이해하고 사용하기 쉬운 코드를 기계가 이해하기 쉽도록 변환하는 작업을 뜻한다. 예) C, C++, Java (High level) → 기계어 (Low level) 컴파일 명령 gcc 컴파일러를 이용했을 때, c언어 파일을 다음과 같은 명령어를 통해 컴파일할 수 있다. gcc -o hello hello.c 명령어를 순서대로 살펴보면, -o: output을 의미 hello: 최종 실행파일 이름 hello.c: 실행하고자 하는 소스 파일 컴파일 과정 컴파일은 다음의 과정으로 이루어진다. 전처리(Pre-processing) → 컴파일(Compila..
NestJS 개발 환경 세팅새로운 프로젝트 만들기$ npm i -g @nestjs/cli$ nest new project-name위와 같이 package.json을 비롯하여 여러 파일이 생성된다.src 하위에는 여러 파일로 나뉘어져 있고 app.controller.ts의 경우 app.controller.ts를 테스트하는 파일이다.controller: express에서의 router와 유사한 개념 - 라우팅service: express에서의 service와 유사한 개념 - 비즈니스 로직// app.controller.tsimport { Controller, Get } from '@nestjs/common';import { AppService } from './app.service';@Controller()..
도커란? 컨테이너 기반의 오픈소스 가상화 플랫폼 다양한 운영체제와 시스템 환경 상에서, 서버 셋업을 위한 작업이 각각 다르고 복잡한데, 도커를 이용하여 해당 컨테이너를 실행하면 동일한 서버를 셋업할 수 있다. 가상머신(VM)과 도커의 차이 가장 큰 차이점은 게스트 OS의 유무이다. 가상머신에는 게스트 OS가 설치되어 있어 상당량의 자원을 필요로 하지만, 컨테이너에는 게스트 OS가 없기 때문에 자원 면에서 훨씬 효율적이다. 그렇다면 반드시 컨테이너가 좋을까? 그렇지는 않다. 가상머신은 다른 게스트 OS와 분리 독립된 공간과 자원을 할당받아 사용되기 때문에, 보안성 측면에서 효율적이라고 할 수 있다. 도커의 주요 구성 요소 도커 엔진(docker engine) 도커는 서버/클라이언트 구조로 이루어져 있다. ..
정적 웹페이지 vs 동적 웹페이지 웹페이지는 크게 정적 웹페이지와 동적 웹페이지로 나눌 수 있는데, 정적 웹페이지는 클라이언트가 서버에 요청을 할 때, 서버는 별도의 처리과정 없이 반환값을 제공한다. 따라서 모든 사용자가 동일한 화면을 보게 된다. 반면 동적 웹페이지에서는 서버가 클라이언트의 요청값에 대해 일련의 수행과정을 거친 후 반환값을 제공한다. 이 경우 사용자들마다 다른 페이지를 볼 수 있다. 동적 웹페이지도 페이지를 제공 - 레거시화 되어가고 있다. 동적 웹 페이지에서 정적 웹 페이지로 바뀌는 이유: 서버 부하 줄이기 MPA vs SPA 여기서 MPA(Multiple Page Application)과 SPA(Single Page Application)의 차이와도 연관이 있다. 단순하게 텍스트 그..
프로토콜: 컴퓨터들 간의 원활한 통신을 위해 지키기로 한 규약 프로토콜에는 HTTP, TCP, IP, SSH 등 여러 종류가 있다. HTTP(Hyper Text Transfer Protocol) : HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜 HTTP 역사 HTTP /0.9 (Online Protocol) GET 메소드만 존재, HTML 만 전달 가능한 매우 간단한 형태 HTTP /1.0 헤더 부분 추가, 응답에 상태코드 추가 응답 부분에 Content-Type가 생겨 HTML 외 다른 파일도 전송 가능 1 Request & 1 Response Per Connection 매번 새로운 연결로 성능 ⬇︎ 서버 부하 비용 ⬆︎ HTTP /1.1 Persistent Connection (지..