Latest

Nest.js - Worker threads 잘 사용해보기

1. Worker thread 생성하기 main.ts import { Injectable } from '@nestjs/common'; import { ... worker.ts import { isMainThread, workerData, parentPort } from 'worker_threads'; if (!isMainThread) { async ... Nest.js는 ts-node를 사용하지 않기 때문에 번들링 툴 등을 사용하지 않는 이상 상대경로가 바뀔일은 없으므로 이에 대해서는 염려하지 않아도 된다. 그러나 상대경로가 하드코딩 된다는 것이 맘에 들지 않는다. 따라서 다음과 같이 바꿔본다. ...

2024. 5. 23.

Nest.js - Custom provider onApplicationShutdown 훅 사용하기

@Module({ providers: [ { provide: 'token', useFactory: ... 위와 같은 방법으로 간편하게 custom provider를 Nest.js의 IoC 컨테이너에 제공할 수 있다. 가령, redis 라이브러리에서 생성한 redis 클라이언트를 제공할 수 있다. import { createClient } from 'redis'; import { ConfigService } ... 그런데 이렇게만 제공하면 SIGTERM 등으로 종료 시그널을 받아 shutdown hook이 동작할 때에 커넥션이 정리되지 않으면서 어플리케이션이 알아서 종료되지 않는다. 이에 관하여 dispose 기능을 프레임워크 레벨에서 추가할 것을 요구하는 GitHub issue가 있다. - https://github.com/nestjs/nest/issues/9497 ...

2024. 5. 23.

Node.js graceful shutdown

구현 node.js를 이용해서 http 서버를 운영 중인 경우 안전하게 어플리케이션을 종료하기 위해서는 기본적으로 아래와 같은 과정을 거쳐야 한다. 1. 서버의 listening 소켓을 닫는다. 2. 새로운 요청을 모두 거절한다. 3. 기존 요청이 완료될 때 까지 기다린다. 4. 기타 나머지 작업을 처리한다. (DB 연결 종료 등) 일단, shutdown 신호를 받기 위해 SIGINT를 이용한다. PM2 등에서 rolling update를 위해 프로세스로 먼저 이 시그널을 보내기도 한다. 터미널에서는 보통 Ctrl+C로 이 SIGINT... let isTerminating = false; process.on('SIGINT', () => { isTerminating = ... ...

2023. 10. 10.

KafkaJS의 heartbeatInterval값은 heartbeat의 동작 주기를 보장하지 않는다

요약 KafkaJS의 heartbeatInterval은 consumer가 group coordinator에게 보내는 heartbeat의 주기가 설정된 값보다 빠르지 않도록 제한할 뿐이다. 발생하는 문제 해당 시험에 사용된 라이브러리와 Kafka의 버전은 다음과 같다. - KafkaJS: 2.2.4 - Kafka: confluentinc/cp-kafka:7.4.1.arm64 Docker Image ...

2023. 8. 24.

아주대학교 공지사항 봇 만들기

그리고 돈 한 푼도 들이지 않기

GitHub에 올라와 있는 기존에 다른 사람이 만들어 놓은 아주대 공지사항 봇들은 대부분 만든지 1 ~ 2년 정도 지났고 현재까지 생활 반응(?)을 보이는 것은 이것이 유일했다. 만드신 분이 따로 유지보수를 하고 있는 것 같지는 않지만 GitHub Action을 통해 지금까지도 잘 작동하고 있다. 처음에 해당 레포를 많이 참고하였다. 특이한 점은 Rust언어를 사용하셨다는 점이다. 전체 구조 GitHub Action에는 cron으로 작업을 스케줄링 할 수 있다. .github/workflows/export.yml on: push: branches: - main ... ...

Bottom-up으로 알아보는 SSL/TLS

SSL/TLS은 무엇인가요? SSL은 Secure Sockets Layer의 약자로, 컴퓨터 네트워크에 통신 보안을 위해 설계된 암호 규약입니다. https 프로토콜에 사용됩니다. 이 글에서는 실제 hand-shaking과정 또는 메세지 포맷 등 구체적인 작동 절차에 대한 내용은 포함하지 않습니다. 이러한 절차가 어떠한 필요로 인해 생겼는지, 어떻게 해서 실제로 네트워크 상에서 양단의 두 사용자가 안전하게 정보를 주고받을 수 있었는지 등의 내용을 공부하면서 정리해본 글입니다. 비밀 편지를 주고받고 싶어요 철수와 영희가 안전하게 비밀 편지를 주고받고자 합니다. 따라서 편지의 내용을 암호화 하고 복호화 할 수 있는 방법을 찾아야 합니다. 암호화 방식에는 크게 대칭키 방식과 비대칭키 방식이 있습니다. 대칭키 방식은 하나의 키로 암호화 및 복호화를 모두 할 수 있는 방식을 말하고, 비대칭키 방식은 하나의 키로는 암호화를 하고 다른 키로 복호화를 해야하는 방식을 말합니다. 이 때 두 키를 공개키, 비밀키(혹은 개인키)라고 합니다. 철수와 영희가 편지로 비밀을 주고받기 이전에 대면으로 먼저 만나서 서로 대칭키 혹은 비대칭키를 한 번만 교환하고 나면 그 후부터는 서로 안전하게 비밀 편지를 주고받을 수 있을 것입니다. 둘 중 어떤 방식을 선택하는 것이 좋을까요? ...

2023. 7. 8.

백준 9359 - 서로소

문제 자연수 NNN이 주어졌을 때, AAA보다 크거나 같고, BBB보다 작거나 같은 수 중에서 NNN과 서로소인 것의 개수를 구하는 프로그램을 작성하시오. 두 정수를 나눌 수 있는 양의 정수가 111밖에 없을 때, 두 정수를 서로소라고 한다. 즉, 두 수의 최대공약수가 111이면 서로소이다. 111은 모든 정수와 서로소이다. 풀이 [A,B][A, B][A,B]에서 NNN과 서로소인 것의 갯수는 전체 개수에서 서로소인 것의 개수를 빼주면 된다. NNN과 서로소인 것은 NNN의 소인수 중 하나의 배수이면 된다. ...

2022. 10. 22.

백준 5699 - 문자열 농장

5699번: 문자열 농장 문제에서 주어진 문자열을 트라이를 이용해서 저장해 두자. 그리고 아호 코라식을 이용해서 fail 노드까지 만들어 두자. 어떤 문자열 AAA가 다른 문자열 BBB의 이전 문자열 이기 위해서는 AAA가 BBB의 접미사 이거나 BBB... 예를 들어, an라는 문자열은 ant의 접미사를 이루고 있으므로 ant의 이전 문자열이다. ant라는 문자열은 cant라는 문자열의 이전 문자열이다. cant에서 t의 fail이 ant를 가리키고 있기 때문이다. ...

백준 5905 - 악당 로봇

문제 길이 151515 이하의 NNN개의 문자열들과, 100010001000 이하의 자연수 KKK가 주어진다. N개의 문자열이 길이가 KKK... 문제 예제를 살펴보면 “ABA”, “CB”, “ABACB”가 주어지고 K는 7이다. 주어진 문자열은 최대 4번 등장할 수 있고, 예로 “ABACBCB”가 있다. “ABA”가 한 번, “CB”가 두 번, “ABACB”가 한 번 등장한다. 5905번: 악당 로봇 USACO ...

2022. 8. 11.

백준 13438 - 계단 오르기 운동

문제 준규가 계단을 오르내리는 운동을 U 와 D로 이루어진 문자열로 표현할 때, U는 계단을 한 칸 오르고 D는 한 칸 내려감을 나타낸다. 처음 위치를 000이라고 할 때, 계단의 위치가 음수가 되는 일은 없다. 또한 처음 위치와 도착 위치는 000으로 같다. 문자열의 일부가 주어질 때, 만들 수 있는 가능한 문자열의 모든 경우의 수를 1,000,000,0091,000,000,0091,000,000,...으로 나눈 나머지를 구하시오. ...

Copyright (c) 2024, Jisu Sim. All rights reserved.