프로그래밍 언어 50

Python 코딩테스트 준비하기

파이썬 코딩테스트도 준비해야 해서 vscode로 코딩테스트에 최적화된 환경을 만들어 볼려고 한다. 앞에서 작성한 JS 코딩테스트 준비 과정이랑 많이 유사하다. https://tre2man.tistory.com/314 JS 코딩테스트 준비하기 최근에 코딩테스트를 보면서 알고리즘이 말도 안되게 부족하다는 것을 많이 느꼈다. 그래서 외부 에디터를 사용할 수 있는 환경이라는 상황에서 코딩 결과물을 빠르게 확인할 수 있는 환경을 tre2man.tistory.com Python 코딩테스트 환경 꾸미기 코딩테스트는 역시 빠르게 결과물을 내는 것이다. 여기서도 nodemon을 사용할 것이다. 아니 잠깐, nodemon은 nodejs에서 사용하는 프로그램 아닌가요? 할 수가 있는데, npm으로 관리되는 프로그램이라 파이..

JSON 데이터 엑셀로 저장하기

최근 Node환경에서 데이터를 받아와 excel로 저장하는 로직을 구현해야 해서 라이브러리를 찾아보니, 압도적으로 많이 사용하는 SheetJS (xlsx) 라이브러리가 있었다. 하지만 해당 라이브러리는 xlsx를 stream을 사용해서 저장할 수 없었기에, stream을 지원하는 exceljs를 사용하기로 했다. 내가 뽑으려는 데이터의 row가 100만개 이상이고, nodejs의 메모리를 초과하기에 충분히 큰 데이터였기에 stream을 지원하는 라이브러리를 사용하게 되었다. Stream을 사용하는 이유 파일을 로컬에 쓰거나 로컬에 있는 파일을 가져올 때, 이는 메모리에 적재가 된다. 만약 메모리 한계보다 더 큰 파일을 처리해야 될 때는 당연히 프로그램이 터진다. NodeJS의 메모리 한계는 1.9GB이고..

JS 코딩테스트 준비하기

최근에 코딩테스트를 보면서 알고리즘이 말도 안되게 부족하다는 것을 많이 느꼈다. 그래서 외부 에디터를 사용할 수 있는 환경이라는 상황에서 코딩 결과물을 빠르게 확인할 수 있는 환경을 꾸며볼려고 한다. JS 코딩테스트 환경 꾸미기 목표는 지속적인 테스트와 신속히 결과물을 내는 것이다. 여기서 사용할 것은 nodemon이다. nodemon은 파일이 저장될 때 마다 js파일을 다시 실행켜준다. 그래서 명령어를 따로 입력하여 결과물을 보는 과정이 생략이 된다. node 환경이 설치되어 있다는 기준으로 설명을 할 것이다. 임의 폴더를 하나 생성 후, 다음과 같은 명령어를 입력한다. npm init npm i nodemon 이후에 package.json 파일에 스크립트를 하나 추가한다. ... "scripts": ..

tmux 명령어 정리

최근에 맥에서 사용중인 iterm이 오류란 오류는 죄다 뿜어내서 작업에 차질이 생겼다... 그래서 쉘 단에서 터미널 화면을 분할해서 사용할 수 있는 tmux라는 프로그램을 알게 되었고 (ssh 연결 중에도 해당 프로그램 사용이 가능하다!) , 이를 사용하기 위해서 자주 사용하는 명령어에 대해서 정리해 보았다. 설치 맥 기준으로 brew를 이용해 설치한다. brew install tmux 기본 컨셉 tmux 서버 : tmux 내부에서 실행되는 모든 프로그램을 관리하고 추적함. tmux 클라이언트 : 사용자는 클라이언트를 시작하여 tmux 서버에 연결한다. 세션 : tmux를 실행하면 세션이 실행된다. 각 클라이언트는 하나의 세션에 연결이 된다. 윈도우: 세션은 여러개의 윈도우로 구성이 된다. 사용자가 보는..

Typescript 유틸리티 타입 탐방하기

타입스크립트에서는 타입을 정의하고, 이를 유연하게 다루고 재가공하기 위한 다양한 기법이 있다. 이 중 타입스크립트에서는 기본적으로 제공되는 몇 가지의 유틸리티 타입이 있다. 공부 목적으로 간단히 정리해 보려고 한다. 입문 타입과 관련된 내용을 유연하게 다루기 위한 기초 문법(키워드)을 간단히 정리해 보려고 한다. 유니온 타입 (Union Type) 가능한 타입들의 종류를 나열한 타입이다. OR연산자로 묶여 있다. // a는 number 또는 string 만 될 수 있다. typeof a 로 타입 판별 가능 let a: number | string keyof 타입에 존재하는 모든 key 값들을 union 형태로 반환한다. type Point = { x: number; y: number }; // P는 'x..

Object 전체 순회하기

TS를 사용하면서 Object에 대해서 전체 순회를 해야 할 일이 생겼다. Object 안의 Object도 모두 순회할 일이 있다 보니, 한번 만들어 두면 나중에도 요긴하게 쓰일 것 같았다. 간단히 생각해보면, 모든 key값을 불러온 뒤에 모든 value에 대해서 순회하면 될 것 같다. 이 때 value가 object일 경우에는 한번 더 순회를 돌려주는 것이다. 이와 같은 생각으로 코드를 작성해 보았다. TS일 경우에는 data의 타입을 any로 두면 편하긴 하다. 단 특정한 타입을 두고 있는 Object일 경우에는 data extends T 로 두면은 타입에 대한 걱정을 조금은 줄일 수 있다.

리눅스 date 사용하기

서버 배포 시에 마지막으로 배포한 시간을 알기 위한 스크립트를 작성하던 중, date라는 단순하지만 강력한 시간 출력을 제공하는 도구를 알게 되었다. 이 명령어를 자유자재는 아니지만 부족하진 않을 정도로 다루고 싶다는 생각이 들어 블로그에 잠깐 정리하려 한다. 날짜 출력 형식 옵션 기본 명령어 date를 치면 된다. 하지만 이걸로는 많이 부족하다. 출력 형식을 지정해서 다양하게 꾸며보자. 출력 형식 지정법은 date +"포맷" 형식을 따른다. 아래는 예시이다. date +'%Y-%m-%d %H:%M' # 2022-04-25 22:59 대표적인 포맷은 다음과 같다. %a : 축약된 요일 %A : 요일 풀네임 %b, %h : 축약된 월 이름 %B : 월 풀네임 %c : 로케일의 날짜 및 시간 %C : 마지막..

sh: /usr/local/bin/nvim: No such file or directory 에러 해결하기

처음 이 오류를 발견한 것은 vscode를 사용할 때, github source control을 사용할 때 git push를 할려고 할 때 에러 메시지로 sh: /usr/local/bin/nvim: No such file or directory 라는 문구가 떴다. 그때는 대수롭지 않게 여기고 터미널 git push를 통해 에러를 해결했다. 하지만 나중에 psql을 사용하면서 똑같은 에러가 뜨기 시작했다. 여기서부터는 우회 방법이 없었기에, 이 문제를 해결해야 했다. 에러 메시지는 해당 위치에 vim프로그램이 존재하지 않다는 오류였다. 이를 확인하기 위해 해당 위치를 들어가니 실제로 nvim 파일이 없었다. (본인은 vi 대신 nvim을 사용중이다) 그래서 nvim을 brew를 통해서 재설치를 한 다음, ..

프로그램 백그라운드 실행 nohup

개인적으로 정리하면서 확인할려고 작성한 포스트입니다. 리눅스에서 터미널을 열고 프로그램을 실행하고 있는 상황이라고 가정하자. 이 때 터미널 창을 종료하면 해당 터미널에서 실행하고 있는 프로그램들도 모두 종료하게 된다. 이와 마찬가지로 ec2 인스턴스에 ssh로 접속한 상태에서 프로그램 실행 후 종료하게 되면 해당 프로그램은 종료되게 된다. 이를 해결하기 위해서는 프로그램을 서비스 단에서 실행하거나(예 : 도커 등) , 백그라운드에서 실행하게 만들어야 한다. nohup nohup 명령어를 통해서 백그라운드 실행이 가능하게 한다. 실행 방법은 실행하고자 하는 명령 앞에 nohup을 붙여준다. 예) nohup python3 app.py 로그를 기록하고 싶으면 리다이렉션을 실행한다. 예) nohup python..

urllib SSL: CERTIFICATE_VERIFY_FAILED 에러 해결하기

오랜만에 urllib를 이용해서 웹 크롤러를 돌려볼 일이 생겼는데, 갑자기 제목과 같은 에러메시지가 뜨면서 크롤링이 불가능해졌다. 원인을 찾아보니, SSL 인증서 관련한 오류였다. SSL 인증서를 적용하지 않은 사이트 (http:// 로 시작되는 사이트) 에 대해서 오류가 나는 듯 했다. 조금만 찾아보니 간단하게 해결할 수 있었다. 1 2 3 4 5 6 import urllib.request import ssl context = ssl._create_unverified_context() urllib.request.urlopen("크롤링 주소", context=context) Colored by Color Scripter cs SSL 인증서의 역할이 갈수록 중요해지는 것 같다. 참고링크 : https://..