본문 바로가기

분류 전체보기

(28)
서버 성능 향상 방법 서버 성능의 지표 응답 시간 TPS (처리량) 응답 시간 = 서버에서 처리 시간 + 클라이언트-서버 간의 데이터 전달 시간 TPS (= Transaction per Second: 초당 처리할 수 있는 요청 개수) a. 스케일 아웃 이중화 b. 스케일 업 CPU, 메모리 사양을 더 높임. c. 처리 시간을 줄이면 TPS가 늘어날 수 있음. 처리 시간 1초, 스레드 풀 10개 기준으로 TPS가 10이 나온다고 할 때 처리시간이 0.5초가 되면 TPS가 20이 된다. d. 따라서 처리 시간을 단축시키면 TPS를 향상시킬 뿐 아니라 응답시간까지 향상시킬 수 있다. 처리 시간 줄이는 방법 처리 시간에서 비중이 높은 대상을 찾아서 줄여야 한다. 비중이 높은 대상으로는 일반적으로 세 가지가 있다. DB 연동 a. 쿼..
클린 코드 기본 원칙 원문: https://github.com/woowacourse/woowacourse-docs/blob/main/cleancode/pr_checklist.md 자바 코드 컨벤션을 지키면서 프로그래밍했는가? https://google.github.io/styleguide/javaguide.html, https://myeonguni.tistory.com/1596 참고한다. IntelliJ 또는 Eclipse 통합 개발 도구에서 formatting을 한다. 한 메서드에 오직 한 단계의 들여쓰기(indent)만 허용했는가? if 문 안에 if문, for문 안에 if문을 사용하지 말라는 뜻이다. else 예약어를 쓰지 않았는가? if-else 대신에 모두 if문으로 처리한다. 그렇게 해야 디버깅하더라도 비교적 편하..
전략 패턴 (Strategy Pattern) 전략 패턴 (Strategy Pattern) 오리의 행동 들을 쉽게 확장하거나 변경할 수 있는 클래스들의 집합으로 캡슐화하는 방법. 이를 통해 실행 중에도 확장과 변경이 가능해진다. 키워드 - 변하는 코드와 변하지 않는 코드의 분리 - 상위 형식 사용 (클래스 상속/인터페이스 구현) 용어 부모 클래스 = super class 자식 클래스 = sub class 베이스 클래스 : 다른 클래스로부터 상속받지 않는 클래스 오버라이드 (Override) : 상속받은 메서드 덮어쓰기 부모 클래스와 자식 클래스 사이에서만 성립할 수 있다. 오버로딩 (Overload) : 함수명은 같게 하되, 파라미터 또는 리턴값을 다르게 함으로써, 같은 기능을 동일한 메서드 명으로 정의하는 방법 상속을 받은 자식 클래스는 오버라이드..
스레드 수와 서버 성능의 관계 CPU 코어가 많을수록 동시에 여러 작업을 수행할 수 있다. 또한 가용 스레드가 많을수록 한 프로세스에서 분산 작업 처리를 많이/더 성능이 좋게 할 수 있다. 요즘 노트북 CPU 1개에는 1개에서 8개 정도의 코어를 갖는다. 반면 GPU는 보통 수 백개에서 수 천개의 코어를 갖는다. 따라서 GPU를 사용하면 동시 작업을 더 많이 할 수 있다. GPU(그래픽 카드)가 코어를 많이 가지는 이유는, 화면에 표출되는 수많은 픽셀들의 값을 각각 동시에 계산에서 출력해주어야 하기 때문이다. 그렇다면 가용 스레드가 많을수록 무조건 성능이 좋을까?? 그렇지 않다. 실행하는 시스템이 CPU bound인지 I/O bound인지 먼저 따져야 한다. CPU bound 시스템 : 연속적인/논리적인 작업이 주된 시스템 I/O b..
Slack Webhook with Node.js winston과 morgan등을 통해 log를 저장할 수 있으나,해당 log들을 바로 확인하기 위해 Slack으로 오류 메시지를 받기로 했다. slack-node는 웹훅의 url만으로도 메시지를 가볍게 보낼 수 있다. 1. Slack APP 생성 https://api.slack.com/ create app 클릭 누르고 APP의 이름과 본인의 워크 스페이스를 선택한다. 왼쪽의 Features에서 Incoming WebHooks를 선택하고 Url을 받는다. WebhookURL까지 만들었다면 준비는 끝이다. 옆의 Channel은 보여주고 싶은 Channel에 보여주면 된다. 2. slack-node 설치 npm install slack-node --save 슬렉으로 메시지를 보낼 파일을 선택 const Sla..
Node.js의 동작 원리 with 비동기 Node.js는 다음과 같은 요소들로 구성되어 있다. : 콜 스택, webAPI, 콜백 큐(테스크 큐: 비동기 작업 완료 후에 실행 될 함수/순차 작업(=콜백 함수). 즉, 콜백 함수들이 비동기 작업 후에 실 행되기 위해 대기하는 큐), 이벤트 큐 1st. 일반 함수가 호출되면 콜 스택에 쌓인다. 2nd. 그 함수 내에 비동기 작업이 있다면 webAPI에게 비동기 작업을 위임한다. 3rd. webAPI는 해당 비동기 작업을 수행하고, 콜백 함수를 이벤트 루프를 통해 콜백 큐(테스크 큐)에 넘겨준다. 4th. 콜 스택에 쌓여있는 함수가 없다면(=비동기 작업이 아닌 작업/함수 실행이 다 수행됐다면), 이벤트 큐가 콜백 큐(테스크 큐)에서 대기 중이던 콜백 함수를 콜 스택으로 가져온다. 5th. 그렇게 콜 스..
콜백 함수 / Promise / async-await 정의: 함수에 파라미터로 들어가는 함수. 용도: 순차적으로 무언가를 실행하고 싶을 때 사용한다. 특징: 1) 콜백 함수를 넣으라고 정의된 함수에만 넣을 수 있다. 2) 다른 곳에서 정의한 함수가 있다면, 그 함수명을 파라미터로 넣어줌으로써 사용할 수 있다. 3) 익명 함수를 사용할 수도 있다. 콜백 함수와 비동기 처리의 관계? 순차적인 실행을 하기 위해 반드시 콜백 함수를 사용해야 하는 것은 아니다. 순차적으로 실행해야 하는 동작을 말 그대로, 아래와 같이 순차적으로 적으면 되기 때문이다. first() second() 하지만 콜백 함수를 쓴다면 보다 '확실하고 안정적으로' 순차적인 실행을 할 수가 있다. 하지만 아래와 같은 상황에서의 문제는? 가독성이 너무 떨어진다. 콜백 함수 안에 콜백 함수가 있는 ..
Too many connections Data source rejected establishment of connection, message from server: "Too Many Connection" > DB의 커넥션 풀이 부족해서 일시적으로 발생한 문제 현재 하고 있는 프로젝트에서 발생한 이슈였다. 현재까지 프로젝트를 진행하면서 이런 에러가 발생한 적은 없었다. 사용자들로부터 웹사이트 접속이 안된다고 연락을 받았고 확인을 해보니까 DB에 연결이 되질 않았다. DBeaver로도, 인텔리제이로도 접속이 전혀 되지 않았다. 위와 같은 에러 메시지만 발생시킨채. 이름도 SQLNonTransientConnectionException 이라고, 처음 봤다. 그리고 새로운 것을 경험하는 아주 좋은 기회라고 생각이 들었다. SQLNonTransient..