본문 바로가기

분류 전체보기70

[Rust] Rust, Go, Java, C#, Python, Node.js, Elixir 1백만 개의 동시 작업을 실행 테스트 (번역) Rust, Go, Java, C#, Python, Node.js, Elixir 같은 인기 언어를 사용한 비동기 및 멀티 스레드 프로그래밍 간의 메모리 소비를 비교해 보았습니다. 얼마 전, 대량의 네트워크 연결을 처리하도록 설계된 몇 가지 컴퓨터 프로그램의 성능을 비교할 필요가 있었습니다. 이러한 프로그램들의 메모리 소비에 있어서는 20배 이상의 큰 차이를 보았습니다. 일부 프로그램은 100MB 조금 넘게 사용했지만, 다른 프로그램들은 10k 연결에서 거의 3GB에 도달했습니다. 불행히도, 이 프로그램들은 상당히 복잡하고 기능에서도 차이가 있어 직접 비교하고 의미 있는 결론을 도출하기 어려웠습니다. 이는 저에게 대신 합성 벤치마크를 만들어보는 아이디어를 주었습니다. 벤치마크 다양한 프로그래밍 언어로 다음과.. 2024. 3. 28.
[Rust] Ubuntu20.04 Rust 최신 버전(Stable) 설치하기 Rust 설치 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 1번을 눌러 표준 설치를 진행합니다. (기본값 - Enter 키를 누르기만 하면 됩니다.) 필요에 따라서 설치 사용자 정의로 진행하셔도 됩니다. source $HOME/.cargo/env 환경 변수 추가 rustc --version 버전 확인 Rust 컴파일러 설치 sudo apt update sudo apt -y upgrade sudo apt -y install build-essential Rust 컴파일 및 실행 fn main() { println!("Hello, world!"); } "main.rs" 파일을 임시로 만듭니다. rustc ./main.rs 다음 "rustc ... 2024. 3. 28.
[MongoDB] Ubuntu MongoDB(몽고DB) Log(로그) logrotate 설정하기 logrotate 설정 파일 생성 sudo vi /etc/logrotate.d/mongodb 먼저, "/etc/logrotate.d/mongodb" 위치에 "mongodb"라는 파일을 만들어줍니다. /var/log/mongodb/*.log { # 로그 파일을 매일 회전시킵니다. daily # 로그 파일을 7개까지 보관합니다. rotate 7 # 압축을 사용하여 공간을 절약합니다. compress # 첫 번째 회전 후 로그 파일을 압축합니다. delaycompress # 로그 파일이 없어도 오류를 발생시키지 않습니다. missingok # 로그 파일이 비어 있지 않을 경우에만 로그 파일을 회전시킵니다. notifempty # 모든 파일이 처리된 후 단 한 번만 실행하도록 합니다. sharedscripts .. 2024. 2. 17.
[WSL] Ubuntu20.04 WSL 포트포워딩 설정하기 net-tools 설치 sudo apt install -y net-tools 먼저, `net-rools`를 설치해줘야 `ifconfig` 명령어를 사용할 수 있기 때문에 설치해줍니다. ports_wsl.ps1 파일 생성 # WSL 2에서 IP 주소 가져오기 $remote_ip = bash.exe -c "ifconfig eth0 | grep 'inet '" # WSL 2의 IP 주소 가져오기 $found = $remote_ip -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'; # IP 주소 매칭 확인 if ($found) { $remote_ip = $matches[0]; echo "Remote IP is $remote_ip"; # IP 주소 출력 } else { echo "T.. 2023. 12. 15.
[Redis] Ubuntu20.04 Redis 최신 버전(Stable) 설치하기 Redis의 GPG 키 다운로드 curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list Redis 설치 Download Redis You can download the last Redis source files here. For additional options, s.. 2023. 12. 12.
[Nginx] Ubuntu20.04 Nginx mainline or stable 설치하기 관련 패키지 설치 sudo apt install curl gnupg2 ca-certificates lsb-release dirmngr software-properties-common apt-transport-https -y 키 등록 curl -fSsL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg 레포지토리 등록 # Mainline e.. 2023. 12. 11.
[React] useContext 사용하기 React에서 useContext는 React 컴포넌트 트리 전반에 걸쳐 데이터를 공유하는 방법을 제공합니다. 이 훅을 사용하면 함수형 컴포넌트에서 Context의 값을 쉽게 읽을 수 있습니다. 또한, 하위 컴포넌트가 연속적으로 있는 경우에도 드릴링을 방지할 수 있습니다. useContext와 Context API를 활용한 전역 상태 관리 복잡한 컴포넌트 구조에서 props를 여러 계층에 걸쳐 전달하는 것은 비효율적일 수 있습니다. 이를 해결하기 위해 React의 Context API를 사용할 수 있습니다. useContext 훅을 사용하면 컴포넌트 트리 어디에서나 직접적으로 Context의 값을 읽고 업데이트할 수 있습니다. UserContext 생성 및 제공 export const UserContex.. 2023. 12. 10.
[TypeScript] keyof 인터페이스나 타입에서 키의 집합 추출 및 사용 keyof는 TypeScript에서 매우 유용한 연산자로, 주어진 타입의 모든 퍼블릭 키(속성 이름)들의 리터럴 유니온(합집합)을 생성합니다. 이를 통해 객체의 키에 접근하고 사용하는 방법을 타입 안전하게 만들 수 있습니다. keyof 사용하기 간단한 예를 들어보겠습니다. TypeScript에서 interface 또는 type을 정의할 때, 해당 타입의 모든 키를 추출하고 싶을 수 있습니다. 예를 들어, 다음과 같은 인터페이스가 있다고 가정해 봅시다. User Interface 정의 interface UserInterface { id: number; name: string; email: string; } 이 경우, keyof User는 'id' | 'name' | 'email'이 됩니다. 즉, keyof.. 2023. 12. 10.
[NodeJS] ubuntu 20.04 nvm 설치하기 nvm 설치 GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions - GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active nod... github.com curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/in.. 2023. 12. 8.
[Nginx] Ubuntu 20.04 Certbot Let's Encrypt 무료 인증서 발급받기 Certbot 설치하기 sudo apt install certbot python3-certbot-nginx Nginx 설정 변경하기 sudo vi /etc/nginx/sites-available/example.com or sudo vi /etc/nginx/conf.d/default.conf Nginx 버전에 따라서 폴더 및 파일 위치가 조금 다를 수 있습니다. server { listen 80; server_name example.com www.example.com; ... } `server_name`에 도메인 주소를 입력합니다. 앞에 `http`, `https`와 같은 부분은 입력하지 않습니다. 입력 후 `:wq`를 통해 저장하고 나옵니다. sudo service nginx restart `Nginx`.. 2023. 12. 7.