분류 전체보기 (181) 썸네일형 리스트형 MSA Node.JS 에서 중요한 패턴이라고 한다면 너무 많은 일을 하는 커다란 어플리케이션을 작성하지 말라는 것입니다. 사실 뭐 이건 이제 Node.JS 에만 국한된 이야기는 아닐거라고 생각하긴 합니다만.. 이전의 포스팅에서 사용했던 그림을 재탕했습니다. 대규모 어플리케이션을 작성하는 대신 위 그림에서 Y축인 서비스 및 기능으로 분해하여 별도의 작은 어플리케이션으로 나눠서 운영하는 것이 그 방식입니다. 모놀리틱 아키텍쳐에 정반대되는 개념이며, Micro Service Architecture(MSA) 패턴으로 볼 수 있습니다. 물론 무조건 모든 어플리케이션을 MSA 로 만드는 것은 그리 적절한 방법은 아닐 수 있습니다. MSA 설계시엔 우리가 소프트웨어 이론에서 늘상 얘기하는 높은 응집도, 낮은 결합도, 복잡성.. 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 는 소프트웨어 패키지를 비공개 또는 공개적으로 호스팅하고 프로젝트에서 디펜던시로서 사용할 수 있는 소프트웨어 .. 이전 1 2 3 4 5 6 7 ··· 23 다음