본문 바로가기
반응형

개발공부102

[공유] 이벤트 루프를 차단하지 않기 위한 실용적인 가이드 메인 스레드를 차단하지 않고 동기식 작업을 처리하는 방법 동기식 작업이 실행되는 동안 이벤트 루프는 어떤 작업도 수행할 수 없습니다. 방법1. 더 많은 노드(리소스) 투입하기 Node.js 의 기능 중 하나는 클러스터를 통한 손쉬운 수평 확장을 지원한다. 여러 서버를 병렬로 실행하여서 한 서버가 사용중일 경우 다른 서버가 들어오는 요청을 처리할 수 있도록 한다. 구현은 간단하지만, 이벤트 루프를 차단하지 않고 단순히 더 추가할 뿐이다. 방법2. 비동기적으로 수행하도록 리팩터링 하기 비동기 작업은 일반적으로 CPU에 종속되지 않는다. ex) 파일을 읽는데 10ms 가 걸리는 경우 - 1ms 미만은 CPU 대기 시간이고 나머지는 디스크 대기 시간일 경우가 많다. 동기 실행 블록 사이에 간격을 추가하여 알고리.. 2023. 6. 24.
Nodejs 싱글스레드 스레드 한 프로세스에서 다양한 작업을 담당하는 최소 실행 단위ex) 크롬 브라우저(프로세스)에서 블로그 작성하기(스레드) , 유튜브 보기(스레드2)  멀티스레드 프로그래밍CPU는 한번에 하나의 명령만 실행할 수 있지만, 운영체제의 스케줄러가 매우 짧은 주기로 각기 다른 명령을 우선순위에 따라 실행시키면 동시에 여러 로직도 수행 가능하다.Context Switching이 발생하면서 부분적으로 각각의 스레드 작업을 끝낸다.대용량 처리에서 필수적단점: 오류를 찾아내기 어렵고 고려사항이 많다. Nodejs 싱글스레드 프로그래밍Nodejs는 하나의 메인스레드와 하나의 콜스택을 가지고 있다.싱글스레드라고 모두 같은 스레드 위에서 동작하지 않는다.단일 스레드이지만 백그라운드에서는 스레드 풀을 구성해 작업을 처리한다... 2023. 6. 7.
PHP 단점 - connection pool connection pool 이란? 미리 일정 수의 connection을 만들어 pool에 담아뒀다가 사용자 요청이 발생하면 연결해주고 연결 종료 시 다시 pool에 보관한다. DB 접속 요청이 늘어나도 DB 프로세스 개수는 일정하다. Connection pool을 이용하여 자원관리를 한다. PHP는 Connection pool 을 지원하지 않는다. DB 접속 시 사용자가 몰리면 DB가 죽을 수 있다. 대안 다른 프록시 미들웨어를 사용하는 것이 좋다. ex) SQL Relay, Rudiments 참고 Connection Pool이 없는 언어(PHP, Ruby)의 DB Connection 관리 PHP와 Ruby는 Connection Pool 기능이 없다! 위와 같이 Connection Pool 기능이 없는.. 2023. 6. 7.
마이크로서비스와 Nodejs 마이크로서비스 모놀리식 아키텍처를 단독으로 실행 가능한 다수의 모듈로 분해한 아키텍처 특징 개발과 배포에 상호 독립적이다. 독립적인 데이터 저장소를 가진다. 단점 공유 자원 접근이 어렵다. 배포와 실행이 복잡해진다. 분산 시스템 구현이 어렵다. 마이크로서비스가 유기적으로 동작해야 하므로 작고 가벼워야 한다. I/O가 동기 방식이라면 응답이 올 때까지 다음 요청을 처리하지 못하기 때문에 성능이 좋지 않다. --> 메시지-큐를 이용해 해결한다. I/O를 실제로 처리하는 서버를 별도로 두고, 요청받은 서버는 큐로 데이터를 전송한 후 이 요청을 처리한다. 처리가 되면 클라이언트에 보낸다. 하지만 위의 서버들을 구현하기에는 쉽지 않다. Node.js 내부적으로 이러한 메커니즘을 처리해주기 때문에 고민하지 않아도 .. 2023. 6. 6.
Nodejs 환경에서 Artillery로 부하테스트 하기 설치 프로덕션 레벨에서는 쓰이지 않기때문에 npm i -D artillery 맛보기 실행 --count : 가상의 사용자 수 -n : 요청 횟수 --rate : 초당 요청 ex) 100명의 사용자가 50번의 요청을 각각 보내는 것 = 5000번 요청 npm start npx artillery quick --count 100 -n 50 http://localhost:8001 ex) 60초 동안 5명이 초당 10번 요청을 보낸다. = 3000번 요청 artillery quick --duration 60 --rate 10 -n 5 http://localhost:5000 시나리오 설정 파일 (yaml 또는 json) config target : 테스트할 URL phases ex) 60초 동안 매초 1개의 요청을.. 2023. 5. 29.
성능 테스트 관련 용어 정리 기능 배포 전 성능 테스트 단계도 필요하다.성능 테스트에는 부하 테스트와 스트레스 테스트가 있다.성능 테스트를 통해 최악의 상황을 대비할 수 있다.  OOM (Out of Memory) 문제코드에 문법 문제가 없더라도, 서버에서 사용자마다 일정한 메모리를 할당할 때 서버의 메모리 용량을 넘으면 문제가 발생할 수 있다.  부하 테스트예상 부하에서 사용할 때 소프트웨어가 어떻게 수행되는지 테스트하는 것의도적으로 부하를 증가시켜 좋은 성능을 위한 임계값을 찾고, 정상적인 트래픽에서 시스템이 어떻게 작동하는지 테스트할 수 있다. 스트레스 테스트예상치 못한 극도의 압력 부하를 받을 때 소프트웨어가 어떻게 수행되는지 테스트하는 것복구하는 방법을 찾기 위해 부하를 상한까지 높여 테스트한다. 부하 테스트 시 주의할점실.. 2023. 5. 29.
Express 웹서버 구축 - route, body-parser, compression, cookie-session, express-session, session-file-store, cors, morgan, multer, response-time, connect-timeout Express.js Nodejs 에서 API 서버를 구축하는 데 가장 많이 사용되는 대표적인 프레임워크 미들웨어 모듈: 요청과 응답의 중간에서 목적에 맞는 특정 기능을 하는 함수 같이 사용하는 모듈 route body-parser compression cookie-session / express-session session-file-store cors morgan multer response-time connect-timeout package.json 생성 npm init Express 설치 node_modules라는 폴더가 자동으로 생성된다. npm i express nodejs 실행 node app.js 라우팅 특정 엔드 포인트에 대한 클라이언트 요청에 응답하는 방법을 결정하는 것 const expr.. 2023. 5. 28.
[NodeJS] json-server 이용하기 json-server json 기반으로 가상의 REST API 서버를 구축할 수 있는 npm 모듈 프론트엔드 개발자가 아직 웹서버가 구축 되지 않았을 때 프런트엔드 개발을 진행할 수 있도록 도와준다. 설치 npm i -g json-server json server 실행 json-server --watch db.json Fetch API로 GET/POST/PUT/DELETE 조회 POST 조회 예시 fetch("http://localhost:3000/posts", { method: "POST", body: JSON.stringify({ title: "The Great", author: "Jermy" }) headers: { "content-type": "application/json; charset=UTF.. 2023. 5. 27.
Nodejs 내장 모듈과 객체 Console console.log() console.error() console.table() console.time() / console.timeEnd() console.dir() Timers setTimeout(콜백함수, 밀리초) : 설정한 밀리초 이후에 지정된 콜백함수 수행 반드시 설정한 밀리초 후에 실행된다는 보장은 없다 --> 이벤트 루프를 블로킹하거나 이벤트 큐에 보유하고 있는 다른 실행 코드가 타임아웃의 실행을 뒤로 밀 수 있기 때문에 setInterval(콜백함수, 밀리초) : 설정한 밀리초마다 지정된 콜백 함수 수행 setImmediate(콜백함수) : 현재 이벤트 루프 주기 끝에 코드를 실행 Process 현재 실행되고 있는 Node.js 프로세스에 대한 정보와 제어를 제공 Proce.. 2023. 5. 27.
728x90
반응형