본문 바로가기

개발일기28

[Node] native addon과 워커 스레드 요약: 네이티브 애드온은 여러 스레드에서 동시 사용이 불가능하다.  Error: Module did not self-register 스택 오버 플로우에서도 정답이 없고, 한글로 검색하면 비슷한 것도 안나왔다.깃헙 이슈에도 딱히 답이 없었다.단, 한가지 공통점은 대부분 워커 스레드와 연관해서 네이티브 애드온을 사용하려고 할 때 발생했다. 상황은 c++로 애드온 모듈을 만들고 컴파일 해서 .node 파일로 만든 뒤 이걸 워커 스레드에서 가져다 쓰는 식이었다.동시성 문제도 고려해야하고 단순히 노드의 내장 기능으로는 구현할 수 없는 기능이 있어서 .node로 함수를 하나 만들었는데, 두 워커 스레드에서 이 파일에 접근하려고 할 때 `Error: Module did not self-register`에러가 발생했다.. 2023. 7. 2.
개발의 세계관 옛날 세계관: 반복문, 조건문, 변수, 함수 요즘 세계관: 반복문, 조건문, 변수, 함수, class, interface 2023. 6. 21.
[Node] node로 크롤러 개발 이슈들 정리 개발할 것 특정 웹사이트 크롤링 개발 언어 python의 셀레니움도 생각헀지만, 너무 흔하고 이미 해본 것이라 신선함도 느껴볼 겸 puppeteer를 써보기로 했다. puppeteer는 구글이 개발했다고 한다. 바로 신뢰도 200%. 타입스크립트로 진행했다. 무한스크롤 관련 이슈를 제외하면 개발 자체 난이도는 높지 않았다. 프로세스가 멈추었는지 여부를 보여주기 위해 프로그레스바를 이용해 진행 상태의 시각적 효과를 추가했다. 빌드는 webpack을 이용했다. 전달 방식에 대한 고민 첫 번째 생각 분명 상대방 컴퓨터의 node 설치관련 문제가 있을 거라 생각했다. 그래서 pkg라는 라이브러리로 바이너리 실행파일을 만들어 전달하려고 했지만, puppeteer가 문제였다. 직접 브라우저를 조작하여 크롤링하기 때.. 2023. 5. 15.
마이크로서비스 핵심 개념 6가지 독립적 배포 하나의 마이크로 서비스만 단독으로 배포 가능해야함. 도메인을 중심의 모델링 한 마이크로서비스, 한 기능(즉, 결합도를 최대한 낮춰야함) 고유한 상태를 가짐 마이크로서비스 간 DB를 고유하지 않음. 데이터를 공유하지 않음 크기가 적당해야함 마이크로서비스는 조직이 다룰 수 있는 개수 이상을 넘어가지 말아야함(복잡도를 키우지 말아야한다는 뜻인듯) 마이크로서비스 간의 경계를 명확하게 정의 유연함 판을 키우지 말고 점진적으로 마이크로서비스로 넘어가는 것을 권장 마이크로서비스는 옵션이기 때문에 맹목적으로 매몰될 필요는 없다라고 해석됨 전 회사에서도 MSA로 가기로 결정 후 장바구니 관련 서비스를 따로 마이크로서비스로 뺐었음 아키텍쳐와 조직을 맞추기 조직 구조를 아키텍쳐에 맞게, 도메인에 맞게 편성 프론.. 2023. 5. 13.
암호학에서의 솔트(salt) 암호학에서 솔트(salt)는 데이터, 비밀번호, 통과암호를 해시 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터이다. 솔트는 스토리지에서 비밀번호를 보호하기 위해 사용된다. 사용자의 비밀번호를 암호화처리할 때, 단순히 암호화하는 것이 아니라 사용자의 비밀번호에 랜덤한 솔트값(소금같은 존재라 salt인듯...)을 더해서 해시 처리한다. 예를 들면, 비밀번호가 1234라고 하고 솔트값이 abcd라고 하면 1234abcd로 해시 처리하는 것. 그래서 솔트가 무슨 의미가 있는가? 솔트값 없이 비밀번호를 암호화한다면 같은 패턴으로 암호화되기 때문에 동일한 비밀번호는 동일한 해시값을 가지게 된다. 솔트값을 추가함으로써 동일한 비밀번호를 가진 두 사용자의 해시값이 다르게 저장되므로, 해커가 해시값을 추측하.. 2023. 4. 12.