[RxJS] 핵심 개념 및 활용예시

RxJS 용어

자주 사용할 개념 몇 개만 정리. 자세한건 여기 참고.

Observable

primary type in RxJS.

Observer

consumer

consists of next error complete. if missing one of these elements, the observer is partial observer

Subscription

a contract where a consumer is observing values pushed by a producer

Subject

special type of observable that allows values to be multicasted to many observers

Read more

[NestJS] Google OAuth2 사용

목표

  • NestJS 에서 Google OAuth2 로 API Authentication 구현하기

GCP OAuth 설정

  1. 기존 프로젝트를 사용하거나 새 프로젝트를 하나 생성

  2. API 및 서비스 로 가서 OAuth 동의 화면을 구성

    1. OAuth 동의 화면: 앱 정보를 적당히 넣고, 배포를 위해 도메인 주소를 넣는다.
    2. 범위: 적당히 민감하지 않는 범위로 설정해 준다. 추후 이 부분 Authorization 도 학습 필요!
    3. 테스트 사용자: 본인 구글 이메일 주소를 넣는다.
  3. 사용자 인증 정보 로 가서 OAuth 2.0 클라이언트 ID 를 구성해 준다.

Read more

[FOSS] Caddy Web Server 소개

Caddy Server

Caddy 는 Golang 으로 작성된 웹 서버로, 자동으로 ssl 인증서를 발급 / 갱신하는 기능을 탑재하고 있다.

특징

  • Caddyfile 이라는 자체 파일 형식을 사용하여 웹 서버의 동작 정의 (nginx 의 nginx.conf 파일처럼 자체 형식 사용)
  • Let’s Encrypt 를 사용하여 자동으로 ssl 인증서를 발급 / 갱신

활용 예시들

준비

  • Caddy 설치: 설치 가이드
  • VSCode 의 Caddyfile 용 확장 설치 (추천): Caddyfile Syntax
  • 현재 접속중인 네트워크의 공인 IP 주소를 본인이 소유한 Domain 의 DNS Record (A/AAAA) 로 등록
  • 현재 접속중인 네트워크가 라우터 아래에 구성된 사설망인 경우 DMZ 혹은 포트포워딩 설정

public reverse proxy with ssl certificate

아래의 간단한 reverse proxy 인프라를 구성해 보자. 추가로 rotate 가 되는 access log 도 로그 디렉터리에 남겨보도록 한다.

Read more

M1 arm 환경에서 nodejs native module 빌드 문제 해결 (error: unsupported load command)

문제 상황

  • aws-crt 같은 native nodejs module 설치 시 nodejs native module 설치 시 /opt/homebrew/opt/llvm/bin/objcopy: error: unsupported load command (cmd=0x80000034) 에러 발생
    • yarn add aws-crt 실행 결과
    • error log

환경

  • m1 용 homebrew 사용
    $ brew --prefix
    /opt/homebrew
    
  • m1 용 llvm 설치됨
    $ which clang
    /opt/homebrew/opt/llvm/bin/clang
    
    $ file /opt/homebrew/opt/llvm/bin/clang
    /opt/homebrew/opt/llvm/bin/clang: Mach-O 64-bit executable arm64
    
  • arm64 용 nodejs v16.14.0 사용
    $ which node
    /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node
    $ file /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node
    /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node: Mach-O 64-bit executable arm64
    

해결 방법

  • 문제 원인이 되는 objcopy 를 없앤다
    $ mv "$(brew --prefix)/opt/llvm/bin/objcopy" "$(brew --prefix)/opt/llvm/bin/objcopy.backup"
    

해결 과정

  • 빌드시 node_modules/aws-crt/build/ 아래에 cmake 를 활용해 빌드 파일이 생성됨 -> 실패
  • $ cd node_modules/aws-crt/build/ && grep "objcopy" -ir . 로 objcopy 명령어 찾기
  • node_modules/aws-crt/build/CMakeFiles/aws-crt-nodejs.dir/build.make 파일에서 objcopy 명령어를 사용하는 부분이 두 군데 등장
    • objcopy 를 사용하는 빌드 명령어에 사용 불가능한 옵션(--add-gnu-debuglink)이 있는 것을 확인 (mac 용 objcopy 에는 없는 것으로 보임)
  • node_modules 디렉터리를 지운 후 x86 nodejs 로 다시 해당 모듈 설치 시 별 문제 없이 빌드되는것을 확인
  • x86 용 brew 로 설치한 llvm 의 bin 디렉터리("$(brew --prefix)/opt/llvm/bin/")엔 objcopy 가 없는 것 확인
    • arm brew 로 설치한 llvm 과 x86으로 설치한 llvm 의 bin 디렉터리 구성이 다르다!
  • cmake 로 빌드 파일 생성시 objcopy 명령어가 시스템에 존재하는지 여부에 상관 없이 빌드가 가능하도록 구현되어 있을 것으로 추정
  • objcopy 명령어의 이름을 바꾸고 native module 설치(빌드) 시도해보니 성공!

Read more

M1 맥 터미널에서 명령어 하나로 arm / x86 환경 전환해가며 사용하기

목표

M1 맥북 터미널에서 간단한 명령어 intel, arm 으로 터미널 아키텍처와 환경 전환해가며 사용 가능하게 구성

작업 환경

  • 하드웨어
    • MBP M1 Max 14인치
  • 터미널 에뮬레이터
    • iterm2
  • 시스템 기본 쉘
    • bash
  • 기존에 사용하던 intel 맥에서 마이그레이션 지원 을 활용해 새 맥으로 데이터를 모두 옯긴 후 작업하였습니다.
    • 즉, 초기 환경이 마이그레이션 작업 완료 직후 /usr/local/bin/brew 경로에 intel 용 homebrew 가 설치되어 있는 환경입니다.

작업 전 준비사항

rosetta2 설치

터미널에서 아래 명령어를 입력하여 rosetta2 를 설치합니다.

Read more

[Typescript] 빌드 디렉터리의 구조 변경 없이 소스 디렉터리 밖의 모듈 가져오기

문제 상황

/
	tsconfig.json
	package.json
	data/
		myData.json
	src/
		index.ts
	...
  • 위와 같은 프로젝트 구조에서 index.ts 코드가 아래와 같을 경우 빌드 디렉터리의 구조가 이상하게 바뀐다.

    import myData from '../myData.json';
    
    console.log(JSON.stringify(myData));
    
    /
    	dist/
    		index.js
    		data/
    			myData.json
    		src/
    			index.js
    
  • 기대하는 빌드 디렉터리 구조는 아래와 같다.

Read more

Lerna 환경에서 typeorm 이 ormconfig 를 찾지 못하는 문제 해결법

문제 원인

  • lerna mono repo 를 사용하여 디렉터리 구조가 아래와 같을 때 typeorm 에서 ormconfig.js 를 특정하지 못하는 문제

    /
    	packages/
    		my-package-a/
    			tsconfig.json
    			package.json
    			ormconfig.js
    			src/
    			...
    		my-package-b/
    			tsconfig.json
    			package.json
    			ormconfig.js
    			src/
    			...
    		...
    	tsconfig.json
    	package.json
    	...
    
  • typeorm 은 npm 스크립트를 실행한 루트 디렉터리에서 ormconfig 를 찾는다.

Read more

JWT.00 - 소개

JWT ?

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. - Introduction to JSON Web Tokens (jwt.io) -

JWT (JSON Web Token) 은 토큰 자체에 json 객체 형태로 정보(클레임, claim)를 담고 있는 인증 표준. 데이터의 위/변조를 방지하기 위해 클레임을 HMAC, RSA Signature 등의 방식으로 서명 후 토큰에 포함시켜둔 것이 특징이다.

Read more

DIYA 3기 리크루팅 (~ 20.04.10)

2018년도부터 활동하고 있는 머신 러닝 연합동아리 DIYA 에서 3기 회원을 모집합니다. (~ 4월 10일)

DIYA 소개

diya logo
 

DIYA

DIYA (Do It Yourself AI) 는 인공지능(머신러닝/딥러닝)에 관심있는 사람들이 모여 자유롭게 프로젝트를 진행하는 연합동아리입니다.

Read more

gnome troubleshooting

gdm 사용시 발생하는 여러 문제들과 해결 방법 정리

activities hot corner 설정

배포판

  • fedora:31
  • ubuntu:18.04

문제 설명

  • gnome 데스크탑에서 마우스가 좌 상단 디스플레이에 닿으면 activities 개요 보기로 화면이 전환됨

발생 원인

  • gnome-session 처음 사용 시 기본적으로 hot corner를 사용하게 되어 있음

해결 방법

  1. 패키지 관리자로 gnome-tweaks 설치
  2. gnome-tweaks(기능 개선) 실행 후 최상위 표시줄 탭에서 활동 개요 핫 코너 비활성화

참고 자료

Read more

linux installation checklist

리눅스를 설치할 때 항상 반복하는 작업들

root user 비밀번호 설정

$ sudo passwd

패키지 관리자 저장소를 지역 미러로 설정

fedora

  • fastest mirror 플러그인 활성화
$ echo "fastestmirror=True" | sudo tee -a /etc/dnf/dnf.conf && sudo dnf makecache --refresh

centos

  • /etc/yum.repos.d/에 아래의 기존 repo들은 압축 후, 카카오 미러용 repo파일 추가
[base]
name=CentOS-$releasever - Base
baseurl=http://ftp.daumkakao.com/centos/$releasever/os/$basearch/
gpgcheck=0
[updates]
name=CentOS-$releasever - Updates
baseurl=http://ftp.daumkakao.com/centos/$releasever/updates/$basearch/
gpgcheck=0
[extras]
name=CentOS-$releasever - Extras
baseurl=http://ftp.daumkakao.com/centos/$releasever/extras/$basearch/
gpgcheck=0

ubuntu

  • 카카오 미러 사용
$ sudo sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list

소프트웨어 설치

공통

  • sshd
  • git
  • vim
  • wget
  • curl
  • htop
  • tmux

배포마다 다름

centos

  • epel-release
  • ‘Development Tools’ sudo yum -y groupinstall 'Development Tools'

fedora

  • ‘Development Tools’ sudo dnf -y groupinstall 'Development Tools'
  • gcc-c++ (for g++)

ubuntu

  • ‘build-essential’

gui 환경

자주 쓰는 소프트웨어

  • docker
  • docker-compose
  • chrome
    $ sudo dnf install -y fedora-workstation-repositories
    $ sudo dnf config-manager --set-enabled google-chrome
    $ sudo dnf install -y google-chrome-stable
    
  • miniconda3
  • xrdp
  • snapd
  • cmake
  • ctags (exuberant-ctags)
  • python3
  • python3-pip
  • nano

selinux 끄기

  • /etc/selinux/config 파일을 열고 SELINUX=disabled 로 수정
  • reboot

방화벽 zone 설정

  • (gui 툴 사용이 가능한 경우) firewall-config 설치하여 사용
  • 집에서 쓰는경우 home

ssh 설정

  • .ssh 디렉터리 만들기. 권한 700
  • 키 생성
    • 다른 기기에 접속하기 위한 기본 키, git ssh 용 키
$ ssh-keygen -t rsa -b 2048 -C "Default ${HOSTNAME}'s ${USER} key" -f "${HOME}/.ssh/id_rsa"
$ ssh-keygen -t rsa -b 2048 -C "${HOSTNAME} ${USER}'s git key" -f "${HOME}/.ssh/${HOSTNAME}_git_key"
  • config 파일 생성. 권한 400
Host yourhostname
    Hostname 192.168.0.1
    IdentityFile ~/.ssh/id_rsa
    User remote_user
    Port 22

Host github.com
    hostname github.com
    user git
    identityfile ~/.ssh/${HOSTNAME}_git_key

Host gitlab.com
    hostname gitlab.com
    user git
    identityfile ~/.ssh/${HOSTNAME}_git_key

Host bitbucket.org
    hostname bitbucket.org
    user git
    identityfile ~/.ssh/${HOSTNAME}_git_key

Host gitlab.diyaml.com
    hostname gitlab.diyaml.com
    user git
    identityfile ~/.ssh/${HOSTNAME}_git_key

Host yoursecondhostname
    Hostname 192.168.0.2
    IdentityFile ~/.ssh/id_rsa
    User remote_user
    Port 22
    IdentitiesOnly yes
    PreferredAuthentications publickey
    LocalForward 8080 127.0.0.1:8080
$ chmod u+w "${HOME}/.ssh/config" && vim "${HOME}/.ssh/config" && chmod u-w "${HOME}/.ssh/config"
  • 공개 키를 접속을 원하는 호스트에 등록

Read more

xrdp troubleshooting

xrdp 서버를 구성했을 때 발생하는 문제들과 해결 방법 정리

gnome-session으로 접속 시 번거로운 인증 창 띄우는 문제

배포판

  • fedora:31

문제 설명

  • xrdp에 gnome-session으로 접속 시 “시스템 저장소를 새로 고치려면 인증해야 합니다” 혹은 “색상 관리 장치를 만들려면 인증이 필요합니다” 등의 메시지를 띄움

발생 원인

  • polkit 정책

해결 방법

  1. /usr/share/polkit-1/actions 디렉터리에서 인증 메시지를 띄우는 정책을 찾는다
  • 아래 코드를 응용
  • 인증 메시지를 띄우는 action의 id를 기록
  1. /etc/polkit-1/localauthority/50-local.d 디렉터리에 적당한 이름의 pkla 파일을 만들어 위에서 기록한 action id들을 추가. 파일 형식은 아래 샘플 참고
  • sample
  1. polkit 서비스 재시작
sudo systemctl restart polkit

참고 자료

Read more