본문 바로가기

전체 글

(180)
peer-to-peer load balancing Node.JS 카테고리에서 다루기에 적절한 내용은 아닌 듯 합니다만.. 피어 투 피어 로드 밸런싱이 어떤것인지에 대해서만 간단하게 남겨보려고 합니다. 일반적으로 어플리케이션 서버에서는 이런 로드밸런싱을 고려한적은 없었던 듯 합니다. 대체로 많이 사용하는건 역방향 프록시(reverse prorxy)를 통한 로드밸런싱이고, 쉽게 사용할 수 있는 nginx 또는 클라우드 서비스를 사용한다면 AWS 의 ALB 나 CLB 등이 있을 것 같습니다. 위와 같은 역방향 프록시의 사용은 외부로부터 네트워크 인프라의 복잡성을 숨길 수 있고, 외부에서 사용할 수 있는 유일한 엔트리 포인트를 제공합니다. 하지만 만약 내부에서만 사용해야 하는 경우엔 피어 투 피어 로드밸런싱이 강점을 가질 수 있습니다. 만약 A 에서 B 로 요..
Node.JS 어플리케이션 확장 현대의 개발 세계에선 다들 너무나도 잘 알고 있을 듯한 어플리케이션을 확장하는 방법에 대해 기록하는 차원에서 남겨둘까 합니다. Node.JS 는 I/O 작업에 특화되어 있는 만큼 수많은 짧은 요청을 처리하는데 장점이 있고 운영하는 서버의 스펙은 크게 신경쓰지 않을 정도로 좋아졌다고 하지만, 기본적으로 단일 스레드에서 처리하는 양에 한계는 분명히 있습니다. 이러한 환경에서 Node.JS 서버의 처리량을 향상시키려면 멀티 프로세스와 멀티 머신 확장입니다. 물론 이렇게 사용했을 때 따러오는 이점은 처리량 뿐만이 아니라, 장애가 발생했을 때에 대한 고가용성도 얻을 수 있습니다. 어플리케이션을 확장하는데에 있어 각 프로세스 또는 머신으로 부하가 분산되는데, 이 부분에 대해 스케일 큐브라는 모델에선 세 가지 측면에..
Service Locator (서비스 로케이터) 이번 포스팅에선 DI 와 비슷한 의도를 갖고 있는 다른 패턴인 Service Locator 에 대해 적어보고자 합니다. Service Locator 는 중앙에서 컴퍼넌트를 관리하고 모듈이 필요한 종속성을 로드할 수 있도록 레지스트리 역할을 하는 것입니다. Service Locator 에 종속성이 등록되어있고, 각 모듈에선 필요한 종속성을 Service Locator 에 요청하는 방식이라고 보시면 될 것 같습니다. export class ServiceLocator { private dependencies: Map; constructor() { this.dependencies = new Map(); } public register(name: string, instance: T) { this.dependenc..
의존성 주입 지난번에 적었던 의존성 하드코딩 부분부터 다시 보도록 하겠습니다. // config.js const config = require('./config.json'); module.exports = { config: { ...config, host: 'xxx...' }, }; // test1.js const { config } = require('./config'); const tmp = () => { console.info(config.host); }; tmp(); // "xxx..." 이런식의 코드 구성에선 test1.js 가 결국 config.json 에 종속되게 되죠. 이렇게 종속성을 하드코딩하면 재사용성이 낮아지며 단위 테스트가 어려워집니다. test1.js 를 단위 테스트하려면 결국 config.j..
Github actions - ssh trouble shooting github actions trouble shooting 이라고 뭔가 거창하게 쓰긴 했지만 github actions 를 사용하는 과정에서 회사 내부 github repository 를 모듈로써 설치해야 하는 경우 겪었던 문제와 그 해결에 대해 간단하게 적어보도록 하겠습니다. 문제는 github actions 으로 테스트를 하던 publish 를 하던 npm install 을 하는 과정에서 발생했습니다. 해당 repository 에선 내부 공통 모듈로 작성된 특정 repository 를 사내 github 으로부터 설치해서 사용중이었는데.. 문제는 github actions 이 돌아가는 장비에서 사내 github 으로 접근이 안되는 부분이었습니다. "dependencies": { "axios": "^1.3..
Use github actions 이번 포스팅에선 github actions 를 사용해보려 합니다. 카테고리 구분은 따로 하는게 좋겠지만 귀찮아서 그냥 git 으로.. - What? github actions 이란 github 에서 CI 와 CD 를 위해 추가된 서비스입니다. github 저장소에 어떠한 이벤트(ex. push, merge 등)가 발생했을 때 특정 작업이 일어나도록 하거나 반복적으로 도는 작업등을 workflow 의 yml 파일로 정의하여 자동화시켜놓고 linux, window 등의 컴퓨팅 리소스를 할당 받아 실행시킬 수 있습니다. 지금도 훌륭한 도구인 Jenkins 에서 트리거를 세팅하고 PR 이 올라왔을 때 혹은 master 에 머지되었을 때 잡이 돌도록 설정하던 것들을 생각하면 github actions 는 아주 ..
Use Github private packages 어느새 나온지 좀 되긴 했지만 그동안 팀에서 관리하던 공통 모듈을 github private packages 로 옮기게되어 겸사겸사 포스팅을 남겨볼까 합니다. - What? GitHub Packages is a software package hosting service that allows you to host your softwarepackages privately or publicly and use packages as dependencies in your projects. 공식 문서에선 github packages 에 대해 위와 같이 설명하고 있습니다. 직역하면 Github Pacakges 는 소프트웨어 패키지를 비공개 또는 공개적으로 호스팅하고 프로젝트에서 디펜던시로서 사용할 수 있는 소프트웨어 ..
모듈과 의존성 이번 포스팅부터 몇개의 글에서는 Node.JS 의 모듈과 의존성(=종속성)에 대해 남겨보고자 합니다. Node.JS 에서 가장 흔하게 사용하는 모듈 시스템은 CommonJS 모듈 시스템입니다. 모듈은 코드를 구성하고 구조화하는데 가장 기본적인 방식이며, Node.JS 개발을 하다보면 모듈화 하는것에 꽤나 많은 시간을 쏟게 되는 것 같습니다. 이는 결국 OOP 에서 객체를 나누는 일이나, layered architecture 에서 계층을 나누는 것과 비슷한 맥락이라고 생각합니다. - 응집력, 결합력 소프트웨어 개발에서 가장 흔하게 나오는 응집력, 결합력은 모듈을 만들 때도 동일합니다. 응집력은 높을수록 좋습니다. 응집도가 높다는 것은 어떠한 기능을 하기 위한 책임, 로직들이 얼마나 모여있는가를 말합니다. ..