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 (지..
vscode에서 파이썬 파일을 실행하려 했더니, 다음과 같은 오류가 발생했다. can't open file '' : [Errno 2] No such file or directory 해결방법을 찾아봤으나, 해당 에러넘버는 코드에서 경로를 올바르게 지정해주지 않았거나 기존 상대경로에서 경로 변경이 일어나 발생할 수 있는 에러 메세지였다. 하지만 내 코드에서 경로설정은 자동경로 설정 라이브러리를 활용하였기 때문에 경로설정에는 문제가 없었다. 원인을 계속해서 찾아보았지만, 찾지 못했다. 그러다가 터무니없는 실수를 발견했다. 파일명 변경 시 실수로 맨 앞에 공백을 넣은 것이다. 공백이 들어가면서 경로에도 공백이 들어가 해당 파일을 찾을 수 없었던 것이다. 공백을 제거하면 파일이 정상적으로 실행됨을 확인할 수 있다..
1. 답안 2. 풀이 1. 생성자가 존재하는 숫자와 존재하지 않는 숫자(셀프 넘버)를 각각 리스트에 넣는다. 2. 전자(생성자가 존재하는 숫자들의 리스트)에서 후자(셀프 넘버)를 뺀다. → 차집합 개념 total_number_set = set(range(1,10001)) # 전체 숫자 집합 정의 not_self_number_set = set() # 생성자가 있는 숫자들의 집합 정의 우선적으로 다음과 같이 1부터 10,000까지의 숫자를 모두 리스트에 넣은 집합과 생성자가 있는 숫자들의 집합(공집합)을 정의한다. for number in total_number_set: for num in str(number): number += int(num) not_self_number_set.add(number) 그리..
프로젝트를 진행하던 중, 배포 단계에서 특정 브랜치를 먼저 배포할 일이 생겨서 특정 브랜치만 클론하는 방법에 대해 찾아보았다. 방법은 다음과 같다. git clone -b --single-branch (ex) git clone -b 0801branch --single-branch https://github.com/BEpaul/project.git 위의 명령어를 입력하면 특정 브랜치에 해당하는 내용들만 정상적으로 클론되는 것을 확인할 수 있다.
리액트 사용 도중 다음과 같은 경고 문구가 콘솔창에 출력되었다. Warning: validateDOMNesting(...): cannot appear as a descendant of . 원인: 리액트는 태그에 대해서 상당히 엄격하다. 기본적으로 태그 안에는 인라인 요소만 포함할 수 있는데, 태그는 블럭 요소이므로 경고문구가 발생한 것이다. 해결: 태그를 태그로 바꾸는 것이 일반적인 해결방법이나, 나 같은 경우는 조금 달랐다. 다음과 같이 문제가 발생한 컴포넌트를 찾아 내부의 , 를 지워줬더니 해결되었다.