전체 288

로컬 환경에서 외부 요청 받기

요즘 서버리스 프레임워크로 간단한 웹서버를 만들고 있다. 슬랙과 연동해야 하는 작업이 있는데, 슬랙에서 사용자의 요청을 웹 서버에서 인식하기 위해서는 외부로 노출된 주소와 포트가 필요하다. 그래야 연동을 할 수 있다. 서버는 있는데 외부로 노출을 시키지 못하면, 아무것도 할 수가 없기 때문이다. 로컬에서 외부로 주소를 내보낼 때는 포트포워딩을 통해서 보내야 하지만, 개인 공유기가 아닌 곳에서는 포트포워딩을 하기가 거의 불가능하다. 그래서 디버깅 하기 매우 힘든데, 로컬 환경을 외부로 노출 시켜주는 매우 좋은 툴이 있었다. 이걸 왜 지금 알았을까;; ngrok 사용하기 일단 이 프로그램을 사용하면 로컬의 특정 포트를 외부로 노출할 수 있다. https://ngrok.com/ ngrok - Online in..

IT 이야기 2022.10.20

Python 코딩테스트 준비하기

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

자동 배포 환경 Github Action으로 이전하기

현재 서버 배포 환경은 Jenkins를 사용해서 하고 있다. 처음에는 내가 직접 인스턴스를 만들어 상세히 커스텀을 할 수 있다는 점이 좋았는데, 이게 시간이 지날수록 서버를 직접 관리해야 한다는 점이 단점으로 크게 다가왔다. 그래서 자동 배포 관련한 기능을 찾아보니, 나의 목적에 잘 맞는 Github Action이라는 서비스가 있어서, Jenkins에 있는 배포 환경을 Github Action으로 이전하기로 했다. Github Action이란 간단히 말하면 테스트, 빌드, 배포 등의 활동들을 Github 내에서 자동으로 설정할 수 있는 도구이다. 그냥 CI/CD 도구 중 하나인데, Github와의 연동성이 매우 좋은 도구라 보면 된다. 거기에 다양한 플러그인 및 확장 프로그램까지 지원하여 꽤 괜찮은 도구..

심심해서 그냥 끄적이는 나의 개발환경

나는 주로 NodeJS 기반의 서버를 개발하는 사람이다. qt, flask, serverless 등의 프레임워크를 사용했지만, 지금 주로 사용하는 것은 NestJS다. 이에 맞게 나의 개발환경은 주로 Typescript를 사용하는 것에 초점이 맞춰져 있다. 여기에 하드웨어는 맥북을 사용하고 있다. 역시 개발은 맥북으로 해야 퍼포먼스가 나는 것 같다. 사실 스타벅스 출입증이 생겨서 카페갈 때 자신감이 생긴다. 여튼 영세한 일반 개발자인 나는, 개발환경 이라도 잘 구축해야 그나마 생산성이 난다고 생각해서 이것저것 주워들은걸로 개발환경을 좀 꾸며놨다. 그래서 그런지 나한테는 그럭저럭 개발할 만한 환경이 되어 있다. MAC 환경 맥북을 개발도구로 쓴다는 것은 좋은 선택임과 동시에, 한글 작업에 강제 억제기를 다..

IT 이야기 2022.10.06

RDS Postgresql 로컬에서 실행하기

RDS에 있는 데이터를 가져와야 하는데, 여러가지 제한 사항 때문에 시간이 많이 걸리는 쿼리를 10억회 이상 날릴 일이 생겼다. 그래서 쿼리 속도 향상을 위해 DB 전체를 로컬로 가져와서, localhost로 쿼리를 날리는 방법을 선택했다. 이를 위해 RDS에 있는 데이터를 로컬에서 처리하기 위한 방법을 기록해 볼려고 한다. 여기서는 pg_dump 명령어를 사용할 것이다. 덤프란? 덤프는 .sql 형식의 파일이며, 데이터베이스의 데이터를 sql 구문으로 출력된 파일을 덤프라고 한다. 이걸 이용해서 데이터를 백업하거나 파일로 저장, 복구할 수 있다. Mac 환경 기준, brew install postgresql 명령어를 통해 psql을 미리 설치해두자. 데이터 가져오기 pg_dump -h [주소] -p [..

서버 인프라/DB 2022.09.27

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": ..

카카오톡 학식봇 AWS Lambda로 전환하기

2년 6개월 전 쯤, 카카오톡 챗봇으로 학식 정보를 알고 싶어서 봇 서비스를 하나 만들고 운영했던 적이 있다. https://tre2man.tistory.com/158?category=795873 카카오톡 학식봇 만들기 - 2 카카오 오픈빌더 사용하기 학식을 알려주는 카카오톡 봇을 만들기 위해 필요한 것만 간단히 알아보자. 먼저 봇 제네릭 메뉴를 설정해 보자. 봇 제네릭 메뉴는 채팅창 하단에 고정되어 있는 버튼 tre2man.tistory.com 지금 생각하면 상당히 부끄러운 실력이지만, 그래도 어떻게든 프로덕트(?)를 만들었다는 것에만 심취해서 방치하고 있었다. 그렇게 몇 년이 지나 방치되었던 프로젝트에도 서서히 문제가 생기기 시작했다. 큰 문제는 아니지만, 내가 생각했던 문제는 다음과 같다. EC2에..

이벤트 데이터 파이프라인 제작하기

최근에 이벤트 관련 데이터 파이프라인을 분리하는 작업을 시작했다. 기존에는 서비스를 운영하면서 나오는 모든 이벤트들을 DB에 저장하는 것을 보고, 언젠가는 꼭 해결한다고 했는데 그걸 이제야 시작한다. 해당 로직을 구상하기 위해서 여러 방법들을 구상한 결과, 기존 AWS 도큐먼트에 있는 시스템을 이용해 보는 것이 좋겠다고 생각했다. 구상하기 현재 시스템은 특정 이벤트에 대한 내용을 클라이언트에서 4곳의 서버 (사용자 분석 툴)로 데이터를 보내주고 있다. 이 중 하나는 DB로 이벤트를 보내게 되는데, 이 시스템 자체가 상당히 비효율적이라는 생각이 들었다. DB는 주로 사용자의 데이터 및 프로덕트의 가변 정보들을 저장하는 곳인데, 이벤트에 대한 데이터를 DB에 저장하기에는 목적에도 맞지 않고 DB 및 WAS에..