전체 글
-
[NodeJS] C10K Problem 과 NodeJS✍️ 개인 스터디 기록 2022. 11. 27.
C10K Problem 란? 하드웨어가 충분한데도 불구하고 10K만큼의 소켓을 열게 된다면 OS에서 제공하는 I/O 처리방식의 문제 때문에 프로세스가 제대로 처리하지 못한다 (10K가 한계란 뜻은 아니고 많다는 뜻) ⇒ 🧐 I/O 처리방식에 어떤 문제가 있길래 저만큼 소켓을 열지 못했던 걸까? 리눅스 select, poll 20세기말 리눅스 네트워크 I/O모델은 select()과 poll()이 전부였다. select은 클라이언트 1024개만 처리 가능했고, poll의 경우 제한은 없었다. 두 모델 모두 이벤트가 발생시 어떤 소켓에서 처리해야 할지 알 수 없어 소켓들을 모두 풀스캔해야하는 이슈가 있었고, 또한 가장 큰 fd 번호에 따라 처리 속도 이슈가 있었다. int select(int nfds, fd_..
-
[Node.js] 비동기와 Promise 이해하기✍️ 개인 스터디 기록 2022. 11. 27.
Node.js 에서 promise all을 사용하면 드라마틱한 성능 향상이 있을 수있다. const userList = [ { name: 'ethan', id: 1 }, { name: "david", id: 2 }, { name: 'john', id: 3 } ]; // 1초가 걸리는 쿼리 const getUserById = (id) => { return new Promise((resolve, reject) => { setTimeout(() => { const [user] = userList.filter(user => user.id === id) resolve(user) }, 1000) }) } // 2초가 걸리는 쿼리 const getAllUsers = () => { return new Promise((..
-
[대규모 서비스 with Redis] - 1. 대규모 서비스의 특성✍️ 개인 스터디 기록 2022. 11. 27.
페이스북은 2012년기준 하루에 500TB 쌓이고 있음 bit.ly는 하루에 하루에 6천만 ~ 1억 500만의 클릭이 일어남. 🤔 우리가 만든 서비스도 이런 트래픽을 문제없이 견딜수가 있을까? 대규모 서비스의 특성 확장성 서버의 capacity, 갯수를 늘리고 줄이는게 쉬워야 한다. 네이버, 카카오의 경우 하루에 수백개의 서버를 띄우거나 교체한다. 장애회복성 서버에 장애가 났을때 사람이 신경써서 서버를 빼고, 교체하고 이러면 안됨. 자동으로 서버를 빼고 사람은 그걸 보고 이렇게 해야함 자동화 즉 배포부터 장애처리까지 자동화가 되어있어야 한다. 우리가 예상 가능한 부분 인프라를 배포한다던지, 이런것이 버튼클릭이나 스크립트 한번에 처리가 되어야 한다. 모니터링 가장중요함. 서비스 상태가 항상 모니터링 되어야..
-
LEFT (OUTER) JOIN 할때 결과 중복 이슈😱 삽질 이슈 기록 2022. 11. 11.
문제 상황 매출 대시보드 작업 중 매출액이 2배 이상 으로 높게 잡히는 문제가 발생했다! 처음에는 매출데이터를 여러번 집어넣게 된 것은 아닌지 의심을 했다. 팀원 분들 도 여러 의견을 주셨는데, 매출데이터를 넣기전에 해당 날짜의 매출데이터가 이미 저장되어있는지 한번 확인을 하는데 호출이 여러번 되면서 동시성 문제가 생기게 되어 중복 체크가 제대로 되지 않은 것은 아닌지 등 여러 의견을 주셨다. 하루에 한번 업로드 하기 때문에 매출 데이터 업로드 로그를 확인해보았는데, 절대로 여러번 업로드가 일어나지 않았고, 실제 업로드 된 데이터도 발생 데이터 갯수 만큼 잘 업로드가 되어있었다. 원본 데이터는 제대로인데 어째서 계산 결과가 엄청 뛰게 된걸까? 원인 분석 매출데이터를 한번 조인 해서 뷰테이블을 만든 후 그..
-
동기 VS 비동기, 블로킹 VS 논블로킹✍️ 개인 스터디 기록 2022. 11. 6.
동기 VS 비동기 이전 작업의 결과가 다음단계 에서 바로 보장되냐 아니냐의 차이이다. 즉 만약 어떤 작업이 동기 작업이라면, 그 작업의 결과값을 내가 바로 다음 단계에서 확인 할 수 있다는 것이다. 즉 만약 어떤 작업이 비동기 작업이라면, 그 작업의 결과값을 내가 바로 다음에서 확인하는것을 보장하지 않는다는 것이다. 즉 다음단계에서 결과값이 없을 수도 있다는 것이다. 그러므로 어떤 작업을 동기적으로 실행시킬지, 비동기적으로 실행시킬지 선택해야하는 상황이라면 만약 다음 작업에서 이전 작업의 결과값이 꼭 필요하다면 동기적인 방법으로, 이전 작업의 결과 값이 다음단계에서는 구지 필요 없는 상황 이라면 비동기적인 방법을 써도 괜찮다고 볼 수 있다. 블로킹 VS 논블로킹 제어권(다음 코드를 실행)을 막는지 아닌지..
-
클린코드 - 깨끗한 테스트 코드 짜기✏️ 스터디 모음집/디자인 패턴 스터디 2022. 11. 5.
테스트 코드를 작성함에 있어서 F.I.R.S.T 규칙 이란? F : 빠르게 동작하는 테스트 코드 I : 독립적인 기능을 테스트하는 테스트 코드 → 기능(단위테스트라면, 함수)당 assert 하나! R : 반복 가능한 테스트 코드 S : 여기저기 들어다 볼 필요 없이, 테스트 코드 만으로 자가 검증이 끝나는 테스트 코드 T : 실제 코드를 구현 하기 전에 적시에 테스트 코드를 작성하자 BUILD-OPERATE-CHECK 패턴 ? 깨끗한 테스트 코드는 가독성이 제일 중요하다! BUILD : 테스트 자료를 만든다. // 보통 이 단계에서 목업 데이터를 만들거나, 테스트용 데이터 베이스에 데이터를 넣는다. OPERATE : 테스트 자료를 조작한다. // 이 단계에서는 테스트 하고자 하는 시스템의 함수를 호출 C..
-
[JS] undefined 참조 에러 체크의 중요성😱 삽질 이슈 기록 2022. 11. 2.
문제 상황 코드의 undefined 참조 에러 체크가 안되어 있어서 예기치 못한 에러가 난 상황이 있었다. 비슷한 로직으로 코드를 다시 구성을 해보았다. import UAParser from 'ua-parser-js'; . . . const isUnsupportedBrowser = (ua) => { const { name, version } = new UAParser(ua).getBrowser(); const versionNum = parseInt(version.split('.')[0], 10); if (name === 'IE') { // IE 일경우 처리... } else if (name === 'Samsung Browser') { // Samsung Browser 일경우 처리... } else if ..
-
Elastic cloud : Kibana Reports CSV 파일 다운로드 용량 늘리기😱 삽질 이슈 기록 2022. 11. 2.
Elastic cloud 서비스를 운영할 때 키바나 Discover에서 조회한 결과 데이터를 다운받고 싶을 경우가 생길 수 있다. 그런데 다운로드 받을 수 있는 csv 파일에 용량 제한이 있었다. 아래 이미지에서 보듯이 report가 기본 설정 값인 10MB 가 넘어가면 Max size reached 라는 경고가 뜨면서 report를 정해진 용량 대로 맞추어 짤라 버린다. 해당 설정을 늘려 본 경험을 기록하면 Edit user settings을 클릭 하면 아래와 같이 kibana.yml을 덮어서 수정 할 수 있는 창이 열린다. 해당 설정 창에 xpack.reporting.csv.maxSizeBytes 설정 항목이 키바나에서 reporting 용량을 조절 할 수 있는 옵션인데 현재 사용중인 ES 버전인 7..