본문 바로가기

verdantjuly/Today I Learned

TIL 20240128

728x90

이번 주 목표

Nest.js 강의 찾기

오늘 목표

Nest.js 강의 찾기

오늘 한 것

 

프로그래머스 코딩테스트 기초 : 원소들의 곱과 합

문제 바로가기: https://school.programmers.co.kr/learn/courses/30/lessons/181929 나의 풀이 function solution(num_list) { const totalSum = num_list.reduce((a,b)=> a + b) return num_list.reduce((a,b)=> a * b) < totalSum * totalSum ? 1: 0 } 다른

verdantjuly.tistory.com

오늘 스케줄

06:00 기상, 샤워, 아침 식사

07:00 산책

08:00 알고리즘 1문제 이상 풀기

09:00 기업 지원 2곳 이상 하기 

10:00 CS 공부

11:00 GO

12:00 점심 식사

13:00 resmemory

17:00 저녁 식사

18:00 Nest.js 공부

22:00 취침

1. HTTP(Hyper Text Transfer Protocol)

서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜

HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약

80번 포트를 사용

 

HTTP 서버가 80번 포트에서 요청을 기다리고 있으며,

클라이언트는 80번 포트로 요청을 보내게 된다.

 

* 하이퍼 텍스트 : 참조(하이퍼링크)를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트

2. HTTPS (Hyper Text Transfer Protocol Secure)

데이터 암호화가 추가된 프로토콜,

443번 포트를 사용

 

\

  • HTTPS 연결 과정
    1. 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
    2. 서버는 공개키(엄밀히는 인증서)를 브라우저에게 넘겨줌
    3. 브라우저는 인증서의 유효성을 검사하고 세션키를 발급함
    4. 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
    5. 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
    6. 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함

3. CORS (Cross-Origin Resource Sharing)

자신의 출처와 다른 출처의 자원에 접근할 때 권한을 부여하는 것.

동일 출처의 리소스만 불러올 수 있으며,

다른 출처의 리소스를 불러오려면 올바른 CORS 헤더를 포함한 응답을 반환해야 함.

 

4. 키페어 

공개키, 개인키의 쌍

 

5. 보안 그룹

보안을 위해 IP나 포트를 이용해 정의하는 서버 접속 규칙

 

6. RDS

장점

서버와 DB가 분리되어 있기 때뭉네 영향을 받지 않는다. 

스토리지의 크기를 쉽게 확장할 수 있다. 

단점

스토리지 용량을 축소하려면 재구성해야 한다. 

로그 확인이 어렵다. Cloud Watch를 사용 가능하지만 비용이 발생한다.

 

TIL 20240128 1-6 참고 자료 : https://velog.io/@alli-eunbi/Node-js-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EC%A0%95%EB%A6%AC#http%EC%99%80-https%EC%9D%98-%EC%B0%A8%EC%9D%B4

 

7. Node.js란?

Chrome V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다.

브라우저가 아닌 환경에서 자바스크립트를 실행할 수 있게 합니다. 

이벤트 기반이며 Non-blocking I/O의 특징을 갖습니다. 

 

8. V8

오픈소스 자바스크립트 엔진 (Chrome의 기술)

C와 C++로 구현되어 있다. 

9. 런타임

특정 언어로 만든 프로그램들을  실행할 수 있는 환경

 

10. libuv

이벤트 기반, 논블로킹 I/O 모델을 구현합니다. 

 

11. 이벤트 기반

이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식

* 이벤트 : 네트워크 요청, 클릭 등

* 미리 지정 : 이벤트 리스너에 콜백 함수를 등록한다. 

 

12. 이벤트 루프

이벤트 처리를 위한 작업을 반복

이벤트 발생 시 호출할 콜백 함수들을 관리

호출된 콜백 함수의 실행 순서를 결정

 

13. 백그라운드

타이머 (setTimeout)나 이벤트 리스너들의 대기하는 곳.

여러 작업이 동시에 실행 될 수 있다. 

 

14. 태스크 큐 (콜백 큐)

이벤트 발생 후 백그라운드 > 태스크 큐로 콜백함수를 보낸다. 

콜백들의 줄을 서 있다. 

보통 완료된 순서대로 줄을 서 있지만, 특정한 경우 순서가 바뀐다. 

15. I/O

Input 입력 / Output 출력

 

16. 논블로킹

논 블로킹 (non-blocking) : 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것

블로킹 (blocking) : 이전 작업이 끝나야만 다음 작업을 수행.

 

TIL 20240128 7-16 참고자료 : Node.js 교과서, 1장 노드 시작하기 

 

17. Nest.js Fundamentals 

전역에 nest.js 설치

 npm i -g @nestjs/cli

 

네스트 버전 확인

nest --version

 

네스트 도움말

nest --help

 

새 nest.js 프로젝트 만들기

- 현재 디렉토리의 하위에 프로젝트 디렉토리가 생성된다. 

nest new

 

nest.js application은 main.ts 파일에서 시작한다. 

 

* Chapter2에서 브랜치 분기, mongoDB / PostgreSQL

npm run start:dev

watch mode가 되어 코드 변화를 감지한다.

코드변경 > 빌드 > 서버 재시작

 

nest generate controller
// 또는 nest g co

nest generate controller 파일 경로 
// 그 경로에 controller를 만들어 줌

 

파일 명령어 결과 미리보기 

--dry-run

nest g co modules/abc --dry-run

 

 

@Get 데코레이터 

import { Controller, Get } from '@nestjs/common';

@Controller('coffees')
export class CoffeesController {
  @Get('flavors')
  findAll() {
    return 'This action returns all coffees';
  }
}

 

param으로 id를 받아서 집어 넣기 

  @Get(':id')
  findOne(@Param('id') id: string) {
    return `This action returns #${id} coffee`;
  }
}

 

@Body 데코레이터

  @Post()
  create(@Body() body) {
    return body;
    // return `This action creates a coffee`
  }

 

@HTTPCode

  @Post()
  @HttpCode(HttpStatus.GONE)
  create(@Body() body) {
    return body;
    // return `This action creates a coffee`
  }

 

 

@Res

Nest.js는 내부적으로 express를 사용하고 있기 때문에 Res 데코레이터를 이용해서 express 와 같이 표현할 수 있다.

 @Get('flavors')
  findAll(@Res() response) {
    response.status(200).send('This action returns all coffees');
  }

 

@Put 

전체를 바꿀 때 사용

 

@Patch 

일부를 바꿀 때 사용

  @Patch(':id')
  update(@Param('id') id: string, @Body() body) {
    return `This action updates #${id} coffee`;
  }

@Delete

@Delete(':id')
  remove(@Param('id') id: string, @Body() body) {
    return `This action removes #${id} coffee`;
  }

 

pagination

  @Get('flavors')
  findAll(@Query() paginationQuery) {
    const { limit, offset } = paginationQuery;
    return `This action returns all coffees. Limit: ${limit}, Offset : ${offset}`;
  }

 

 


정리 

 

\

 

이벤트 기반

이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식

* 이벤트 : 네트워크 요청, 클릭 등

* 미리 지정 : 이벤트 리스너에 콜백 함수를 등록한다. 

 

논 블로킹 (non-blocking) : 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것

블로킹 (blocking) : 이전 작업이 끝나야만 다음 작업을 수행.

 

KPT

Keep

열심히 하려고 하는 것, 계획을 잘 세우고 지켜나가는 것

Problem

기초적인 것을 오래 하는 것

Try

학습 시간에 최대한 집중해서 시간을 단축하기

소감

오랜만에 공부를 하니

조금 더 이해가 잘 된다. 

전에는 외우기만 했던 문장들이 조금 와닿는다. 

기반 지식이 그래도 조금씩 쌓이고 있나 보다. 

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240131  (0) 2024.01.31
TIL 20240129  (0) 2024.01.29
TIL 20240127  (0) 2024.01.27
TIL 20240125  (0) 2024.01.25
TIL 20240122  (0) 2024.01.23