전체 글 491

[MongoDB] 인증 활성화: DB 사용자 추가 방법 (docker compose)

All your data is a backed up. You must pay 0.01 BTC to 48 hours for recover it. 개발중에 절대 데이터가 날라갈리가 없는데, 데이터가 날라가서 보니 mongodb에 READ_ME라는 DB가 떡하니 생겨있었다. 랜섬웨어인데 지금은 개발도중이라 망정이지 실제 프로덕션에서 데이터가 날라간 상황을 생각하다면 아주 아찔하다. 이런 일을 방지하기 위해서 docker compose 사용시 mongodb 유저를 생성하여 컨테이너를 운용하는 방법을 살펴보도록 하겠다. # MongoDB 사용자(User) 만들기 먼저, mongodb /data/db 볼륨이 마운트되어있다고 가정, mongodb가 돌아가고있는 컨테이너속으로 들어간다. docker exec -it s..

Bitrise에서 버전명(혹은 버전코드) 환경변수로 사용하기

Bitrise로 CI/CD를 구축하려하면 심심찮게 환경변수들을 만들고, 저장해야하는데, 사실상 변수만드는 법만 익히면 나머지는 알아서 줄줄 풀린다. Bitrise에서 정말 많은 환경변수들이 미리 정의되어있지만, 버전명이나 버전코드에 대한 환경변수는 설정되어있지 않다. 그래서 간단하게 버전명을 환경변수로 저장하는 방법에 대해서 적어보려한다. task("printVersionName") { println(android.defaultConfig.versionName) } build.gradle/app에 다음과 같이 사용자 정의 task를 추가한다. ./gradlew printVersionName -q 제대로 설정했자면 터미널에서 task를 실행하면 버전명이 그대로 찍힐 것이다. 여기서 -q는 quiet을 뜻하..

Artillery를 이용한 쉬운 부하 테스트(stress test)

Next.js로 앱을 처음 개발하고, 실제 서비스로 출시하기전 부하테스트를 해보려고 Artillery를 찾아보게되었는데, 너무 간단하고 쉬워서 공유를 해보려고 한다. # Install npm을 이용해 컴퓨터에 artillery를 설치해준다. 딴얘기긴한데, 공식 홈페이지 너무 잘만들어 놓은거같다. 디자인이 완전 취향.... npm install -g artillery artillery -v로 잘 깔렸는지 확인하면 된다. 공룡 보고싶으신 분들은 artillery dino라고 치시길 # Quick Start quick은 하나의 HTTP endpoint를 테스트 할때 사용한다. 예로들자면 다음과 같다. count는 50명의 가상유저들, num은 각각의 유저들이 100번의 GET 요청을 보낸다는 옵션이다. atr..

Kotlin Scope functions의 쓰임새 (let, run, with, apply, also, takeIf, takeUnless) with skydove's pokedex

코틀린에서는 특정한 객체에대해 이름없이 접근할 수 있는 스코프를 형성하는 함수가 존재하는데, 이것이 바로 스코프 함수(Scope function)이다. 5가지로 이루어져있고, 목록은 아래와 같다. let run with apply also 이들을 코틀린 공식 문서와함께, 이 안드로이드 바닥에서 유명한 오픈소스 프로젝트인 Skydove님의 Pokedex 코드와 함께 살펴보려고한다. 기본적으로는 이들 모두 하는일은 동일하다. 어떤 객체에 대한 코드블록을 실행시키는거다. 차이점은 리턴값, 그리고 블록안에서 해당 객체가 어떻게 참조되는지뿐이다. 함수명 객체참조 리턴값 Extension함수 인지? let it Lambda result O run this Lambda result O run - Lambda resu..

SCP로 두 컴퓨터간 파일 옮기기 (Windows open ssh 설정)

핵넷이라는 게임은 해커가되어 여러 컴퓨터를 넘나들며 scp 명령어를 통해 파일을 빼오는 게임인데, ㅋㅋㅋ그냥 생각나서 사진 첨부해봤다. 이번에 쓰던 맥북의 성능이 모자라다고 느껴서 게임용인 윈도우즈 노트북으로 개발 디바이스를 옮겼는데 맥북이 드디어 팔렸다! 그래서 몇몇 프로젝트들이나 원래 맥북에있었던 중요 파일들을 옮기는 작업을 진행중에 글을 쓰게되었다. scp scp는 secure copy의 약자로, 네트워크를 통해 두 호스트간의 파일을 복사한다. 데이터 전송에 SSH를 사용하기때문에 SSH와 동등한 보안수준을 제공한다. 아래는 간단한 명령어 예시이다. # file을 원격지의 ~/Documents에 복사 scp @:/Documents # file1, 2를 원격지의 ~/Documents에 복사 scp ..

Cloudflare를 이용한 무료 HTTPS 설정 (with NGINX)

메모용으로 간단히 작성되었습니다. 1. CloudFlare에 Add Site 2. SSL/TLS > Full(Strict)로 설정 3. Origin Server탭에 들어가서 Create Certificates 4. 만들어진 PEM키를 서버에 저장. (orifianl certificate와 private key 둘 다 있음) 5. nginx config 수정 server { listen 80; listen [::]:80; server_name your.domain; access_log /var/log/nginx/railotaku-access.log; error_log /var/log/nginx/railotaku-error.log; location / { return 301 https://$server_na..

[Python] zstandard로 dictionary list 압축하기

# ZstdHelper HTML 삽입 미리보기할 수 없는 소스 아래 내용을 토대로만든 Zstd 헬퍼 클래스입니다. # 압축 ZstdHelper().compress(dictlist) # 압축해제 dictlist = ZstdHelper().decompress(filename) # pickle? 파이썬에서 dictionary list를 파일로 저장하고, 다시 읽으려고 할때 일반적으로는 간편한 pickle을 이용한다. 10만개의 딕셔너리를 담고있는 파이썬 리스트를 파일로 저장하고, 읽는 예시 코드를 보자. if __name__ == '__main__': result = list() for i in range(1, 100000): result.append({"indexofitem": i}) pickle_test(..

[Next.js] MongoDB 연결하기 (next-connect, typescript)

next-connect는 Next.js에서 미들웨어를 사용할 수 있게 도와주는 라이브러리다. 여기서 말하는 미들웨어는 웹 서버에서의 미들웨어(Middleware)와 의미가 통하는데, 요청과 응답 사이 중간에서 한번 거치면서 수행되는 함수다. 보통 여기서 연결된 DB 객체를 넘겨준다던가 세션 관리를 하게된다. 시작하기 몽고 DB를 설치하자. 귀찮게 몽고DB설정까지는 다루지 않을 것이다. 사실...패키지 설치부터 말하는 것 조차 귀찮지만!ㅋㅋㅋ yarn add mongodb middleware라는 폴더를 생성하고, 그 아래에 database.ts를 추가시켜 주자. 이 파일에서는 연결된 mongodb가 없다면 새로 연결해서 req 객체에 담아 넘겨줄 것이다. src/ ├── pages/ │ └── api/ │..

[Next.js] 개발 모드에서 useEffect가 두 번 호출될때

yarn dev로 development 모드에서 개발 중일때 useEffect 내의 코드가 두 번 호출된다. hydration 이후에 업데이트를 하므로 2번 호출되는 것은 정상적인 동작이지만, 이러한 behavior를 원하지 않을 때가 있다. 그럴경우 next.config.js에서 reactStrictMode를 false로 바꾸어주면 된다. /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: false, } module.exports = nextConfig 관련해서 더 많은 정보를 얻고싶다면, github 이슈를 참고하면된다.