작은 도서관
[nestjs] 로그인과 권한 부여
개발/백엔드 2021. 12. 20. 22:59

사용 라이브러리 "@nestjs/common": "^8.0.0", "@nestjs/core": "^8.0.0", 개요 데코레이터 구현 유저에 rules 추가 로그인과 토큰 발급 처리 구현 데코레이터 구현 먼저, 컨트롤러에 사용할 데코레이터를 구현할 필요가 있다. 그 전에, 서버 내에서 사용할 역할을 나타내는 역할의 열거형을 만들어야한다. src/modules 아래에 /roles 폴더를 만들고 다음을 작성한다. // roles.enum.ts export enum Role { User = 'user', Admin = 'admin', } 필요한 대로 추가해도 되지만, 일단은 예시니까 user와 admin만 추가한다. // roles.decorator.ts import { SetMetadata } from '@..

article thumbnail
[nestjs] socket.io 사용과 테스트
개발/백엔드 2021. 11. 1. 08:43

사용 라이브러리 "@nestjs/websockets": "^8.1.2", "socket.io": "^4.3.1" 소켓 개념의 이해 우리가 통신할때는 http라는 통신 방법을 사용한다. 이 방법은 클라이언트가 서버에 요청을 보내면 서버가 클라이언트에 응답을 보내주는 방식으로, 일련의 요청과 응답이 끝나면 서버는 더 이상 클라이언트에 정보를 보내지 못한다. 이 방식으로 채팅을 구현하기엔 한 가지 문제가 있다. 클라이언트에서 채팅이 왔는지 확인하는 요청을 1초에 한 번씩 보낼 순 없는 노릇이다. 그래서 등장한 통신 방식이 WebSocket이다. 이 방식은 http와 다르게 request와 response로 통신하는것이 아닌, open과 close의 여부로 통신한다. 클라이언트에서 서버에 Socket을 열어달라..

article thumbnail
[koa] mongoose 연결 / CRUD
개발/백엔드 2021. 10. 7. 17:52

사용 라이브러리 "@koa/router": "^10.1.0", "@types/dotenv": "^8.2.0", "@types/mongoose": "^5.11.97", "koa": "^2.13.1", 개요 mongoose를 koa 프로젝트에서 사용하기 mongoose를 사용하여 User 모델 제작 restfulAPI로 라우터 구축 UserCRUD 제작 1. mongoose를 koa 프로젝트에서 사용하기 import mongoose from 'mongoose'; // 주로 사용하는 mongoose 연결 템플릿. mongoose.connect( process.env.DB_URI!, { user: process.env.DB_USER, pass: process.env.DB_PASSWORD, useNewUrlPar..

article thumbnail
[파이썬] 2606 - 바이러스
개발/백준 문제풀이 2021. 2. 10. 19:08

문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기 때문에 영향을 받지 않는다. 어느 날 1번 컴퓨터가 웜 바이러스에 걸렸다. 컴퓨터의 수와 네트워크 상에서 서로 연결되어 있는 정보가 주어질 때, 1번 컴퓨터를 통해 웜 바이러스에 걸리게 되는 컴퓨터의 수..

[파이썬] 2178 - 미로 탐색
개발/백준 문제풀이 2021. 2. 9. 21:45

문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 위의 예에서는 15칸을 지나야 (N, M)의 위치로 이동할 수 있다. 칸을 셀 때에는 시작 위치와 도착 위치도 포함한다. 풀이 먼저, 문제에 있는 표를 배열로 나타내어 그래프라고 생각하고, 시작 노드인 (0, 0)부터 상, 하, 좌, 우로 탐색을 시작한다. 알고리즘 포스팅에..

[파이썬] DFS와 BFS 3 - 코드 뜯어보기
개발/알고리즘 2021. 2. 9. 20:00

전 시간에는 트리와 그래프를 순회하여 알고리즘이 어떻게 작동하는지 알아보았습니다. 이번엔 직접 코드로 옮겨봅시다. BFS 소스코드 def BFS(start): visit = [] queue = [] queue.append(start) visit.append(start) while queue: now_node = queue.pop(0) print(now_node, end='') for i in range(7): if matrix[node][i] == 1 and not i in visit: queue.append(i) visit.append(i) BFS 방식으로 그래프를 순회하는 소스코드입니다. matrix는 1차시에서 만들어둔 그래프를 사용하시면 되겠습니다. 먼저, 매개변수로 시작 정점을 입력받습니다. 시..

article thumbnail
[파이썬] DFS와 BFS 2 - 알고리즘 구조 알아보기
개발/알고리즘 2021. 1. 28. 11:34

전 시간에 보았던 이 그래프를 탐색하는 방법에 들어가기 전에, DFS와 BFS를 좀 더 쉽게 이해시켜줄 '이진 트리'를 DFS와 BFS로 탐색해봅시다. 트리 순회 - BFS 더 간단한 BFS먼저 보도록 하겠습니다. 시작 노드는 늘 그렇듯 1번입니다. BFS의 경우는 너비 우선 탐색이라는 이름에 걸맞게 현재 노드의 자식노드를 전부 행선지에 넣고, 다음 노드에서도 반복하는 방식인데요, 그림으로 한번 보겠습니다. 1번 노드를 방문합니다. 다음 행선지는 2와 3이 되겠네요. 2번 노드를 방문합니다. 마찬가지로 2의 자식인 4와 5를 행선지에 추가합니다. 3번 노드를 방문합니다. 3의 자식은 6과 7을 행선지에 추가합니다. 이후 순차적으로 방문합니다. 한 그림으로 정리하면 다음과 같습니다. 다음과 같이, 1-2-..

article thumbnail
[파이썬] DFS와 BFS 1 - 그래프를 이중리스트로 나타내기
개발/알고리즘 2021. 1. 28. 02:52

우선, DFS와 BFS는 그래프를 순회하는 알고리즘이기 때문에 이 게시글에선 위 그래프를 예제로 사용하겠습니다. 간단하게 알아보자면 DFS는 Depth First Search, 깊이 우선 탐색이며 BFS는 Breadth First Search, 너비 우선 탐색이라고 알아두시면 되겠습니다. 탐색을 하려면 일단 그래프를 각 정점(vertex, v)들의 연결 상태를 나타내는 이중리스트(matrix)로 정의해야합니다. 매트릭스는 위와 같이 생겼습니다. 정점들의 연결상태를 우선 파란 칸(연결됨), 빨간 칸(연결되지 않음)으로 나누어 색칠하겠습니다. 먼저 자신이 자신과 연결되어있진 않으니 자신과 만나는 쌍을 전부 빨간색으로 색칠합니다. 다음은 이어진 점들의 쌍을 파란색으로 색칠합니다. 단, 간선의 방향이 없는 그래..