채팅 시스템 구축을 위한 Redis Pub/Sub / RabbitMQ 정리
·
🛠️ Infra
Redis Pub/SubRabbitMQ
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 5장. 비동기 연동, 언제 어떻게 써야 할까
·
💻 CS/Common | 일반
1. 동기 연동과 비동기 연동기능 개발 시 실행되는 순서를 먼저 떠올리곤 한다. 예를 들어 로그인 성공 시 포인트를 지급하는 기능을 개발한다고 하면,유저 정보를 찾고 -> 암호를 일치시키고 -> 로그인 포인트 지급 서비스를 호출 후 -> 로그인 내역 기록을 하는 코드를 떠올리게 되는데 이 코드는 전형적인 `동기 방식`을 따른다. 동기 방식 : 한 작업이 끝날 때까지 다음 작업이 진행되지 않고, 코드의 순서가 곧 실행 순서가 된다.따라서 프로그램의 흐름을 직관적으로 이해할 수 있고, 디버깅도 용이하다. 하지만, 동기 방식이 외부 연동을 만나면 고려할 점이 있다.외부 연동 실패가 전체 기능의 실패인가 를 확인해야 한다.앞선 예에서는 포인트 지급 서비스 연동에 실패하면, 로그인에도 실패한다고 가정했다.만약 ..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 4장. 외부 연동이 문제일 때 살펴봐야 할 것들
·
💻 CS/Common | 일반
1. 우리는 문제가 없는데이제 외부 연동은 서버 개발에서 없어서는 안 될 요소가 되었다.연동이 증가하는 추세에 따라 신경써야 할 품질 문제도 함께 늘고 있으며, 연동에 주의를 기울이지 않으면 서비스는 심각한 장애를 겪을 수 있다.// 외부 연동 품질에 신경 쓰지 않아 장애가 발생한 사례 - A 은행오픈과 동시에, 긴 시간 동안 회원 가입이 제대로 처리되지 않는 문제 발생.시스템 자체는 부하를 감당할 수 있었지만, 문제는 외부 연동.가입 과정에서 필요한 정보 인증을 위해 외부 서비스를 호출했는데, 이 외부 서비스가 몰려드는 트래픽을 감당하지 못하면서 장애가 발생한 것.연동하는 서비스에 장애가 발생하면, 연동된 서비스에도 영향을 준다. 서비스간 연동이 많아질수록 연동 시스템의 품질도 함께 신경써야 한다. ..
Prometheus/Grafana initial setting
·
카테고리 없음
Prometheus = 숫자 지표를 수집/저장하는 서버Grafana = 그 숫자 지표를 예쁘게 보여주는 화면Exporter = 서버/컨테이너/앱 상태를 /metrics로 노출해주는 애---node-exporter → CPU, 메모리, 디스크 지표를 /metrics로 노출Prometheus → node-exporter의 /metrics를 15초마다 긁어옴Grafana → Prometheus에 쿼리해서 그래프로 보여줌- Provisioning: ‘미리 준비해서 공급/세팅해두는 것’ - Grafana UI에서 손으로 설정하지 않고, 파일로 미리 설정을 써두면 Grafana가 실행될 때 자동으로 적용하게 하는 것. - grafana/provisioning/dashboards .. ..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 03-2. 성능을 좌우하는 DB 설계와 쿼리 - 알아두면 좋을 몇 가지 주의 사항, 실패와 트랜잭션 고려하기
·
💻 CS/Common | 일반
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 03-2. 성능을 좌우하는 DB 설계와 쿼리 - 몇[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 03-1. 성능을 좌우하는 DB 설계와 쿼리1. 성능에 핵심인 DB예시 상황 : H 서비스의 서비스 가입자가 증가하면서 서비스를 이용하기 어려울 정esthrelar.tistory.com에 이어지는 게시글입니다. 4. 알아두면 좋을 몇 가지 주의 사항4-1. 쿼리 타임아웃응답 시간은 처리량에 큰 영향을 준다. (2장에서 언급함!)동시 사용자가 증가할 때 응답 시간이 길어지면, 그에 반비례해 처리량은 감소한다.또한 응답 지연으로 인한 재시도는 서버 부하를 더욱 가중시킨다. 이렇게 재시도가 반복되면 동시에 처리해야 하는 요청 수가 기하급수적으로 늘어나..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 03-2. 성능을 좌우하는 DB 설계와 쿼리 - 몇 가지 조회 성능 개선 방법
·
💻 CS/Common | 일반
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 03-1. 성능을 좌우하는 DB 설계와 쿼리1. 성능에 핵심인 DB예시 상황 : H 서비스의 서비스 가입자가 증가하면서 서비스를 이용하기 어려울 정도로 느려졌다.사용자가 조금만 증가해도 DB 장비의 CPU 사용률이 90%를 넘겼고, DB 장비의 CPUesthrelar.tistory.com에 이어지는 게시글입니다. 3. 몇 가지 조회 성능 개선 방법인덱스가 아니어도 조회 성능을 개선할 방법이 존재한다!3-1. 미리 집계하기설문조사 목록을 표시할 때 설문에 답변 수와 '좋아요' 수를 표시한다는 요건이 있다.(방법 1) 이 경우 설문 목록 조회 쿼리의 select 절에 서브 쿼리를 사용할 수 있다.select s.id, s.subject, (sel..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 03-1. 성능을 좌우하는 DB 설계와 쿼리 - 조회 트래픽을 고려한 인덱스 설계
·
💻 CS/Common | 일반
1. 성능에 핵심인 DB예시 상황 : H 서비스의 서비스 가입자가 증가하면서 서비스를 이용하기 어려울 정도로 느려졌다.사용자가 조금만 증가해도 DB 장비의 CPU 사용률이 90%를 넘겼고, DB 장비의 CPU 사용률이 높아지면서 전체 쿼리 실행 시간이 느려져서버의 응답 시간도 함께 느려졌다.문제의 원인은 `풀 스캔` 때문!.호출 빈도가 높은 기능에 풀 스캔을 유발하는쿼리가 있었어서 데이터가 많아지면서 풀 스캔으로 인해 쿼리 실행 시간이 느려진 것. DB 성능은 위 사진처럼 모든 서버 성능에 영향을 준다.DB 자체가 문제인 상황은 많지 않았고, DB를 잘못 사용해서 발생한 문제가 더 많았음.서버 개발자 입장에서 DB를 전문가 수준으로 잘 알진 못하더라도, 조금만 신경 써도 DB 성능 문제를 충분히 줄이거나..
[빅데이터를 지탱하는 기술] 00. 들어가며
·
💻 CS/Common | 일반
프로젝트, 그리고 인턴을 하면서 대량 데이터 수집 및 가공, 스케줄링 및 배치 처리 등의 업무를 하게 되어원래도 관심있었던 데이터 엔지니어링 분야에 대해 좀 공부를 해보고자 위 책을 읽어보려 합니다.특히 프로젝트 선생님(?)과 대화하려면 무조건 읽어야 할 것 같아서 .. 책의 구성 (Broad ver.) 빅데이터의 기초 지식 [배경] 빅데이터의 정착 빅데이터 시대의 `데이터 분석` 기반 [속성 학습] 스크립트 언어에 의한 특별 분석과 데이터 프레임 BI 도구와 모니터링 요약 빅데이터의 탐색 크로스 집계의 기본 열 지향 스토리지에 의한 고속화 애드 혹 분석과 시각화 도구 데이터 마트의 기본 구조 요약 빅데이터의 분산 처리 ..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 02-2. 느려진 서비스, 어디부터 봐야 할까
·
💻 CS/Common | 일반
2. 서버 성능 개선 기초2-7. 서버 캐시2-7-1. 응답 시간/처리량 개선 방안으로 DB 서버 확장의 한계응답 시간을 줄이고 처리량을 높이기 위해 DB 서버 수평/수직 확장을 할 수는 있지만, 이는 비용💰이 많이 든다.또한, DB 서버를 수평 확장하더라도,처리량은 늘릴 수 있지만,실행 시간이 획기적으로 줄어들지는 않는다. 2-7-2. 캐시 사용따라서, DB 서버를 확장하지 않고도 응답 시간과 처리량을 개선하고 싶다면 `캐시` 사용을 고려할 수 있다. 캐시란?일종의 (키, 값) 쌍을 저장하는 Map과 같은 형태의 데이터 저장소.캐시에 데이터를 저장해두면, 동일한 데이터를 요청할 때 DB가 아닌 캐시에서 데이터를 읽어와 응답할 수 있다. 데이터 특성에 따라 차이는 있지만,일반적으로 캐시에서 데이터를 읽..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 02-1. 느려진 서비스, 어디부터 봐야 할까
·
💻 CS/Common | 일반
1. 처리량과 응답 시간실제로는 네트워크 속도, 디스크 속도, 메모리 크기, 디바이스(스마트폰 등)의 CPU 속도 등의 다양한 지표가 성능과 관련되어 있지만,이 중 서버 성능과 관련 있는 중요한 지표를 2가지 꼽자면 `응답 시간`과 `처리량`을 들 수 있다. 1-1. 응답 시간1-1-1. 응답 시간 응답 시간: 사용자의 요청을 처리하는 데 걸리는 시간-> API를 호출하고, 전체 JSON 응답을 받을 때까지 소요된 시간 1-1-2. 응답 시간의 구성API 요청 : 서버 연결 + 서버로 데이터 전송서버 연결 : TCP를 이용해 서버에 연결데이터 전송 : 프로토콜에 따라 데이터를 서버에 전송. 예: HTTP 프로토콜에 따라, POST 메서드로 JSON 데이터 전송.서버 실행 : SQL 실행, 응답 생성 등 ..
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 01. 들어가며
·
💻 CS/Common | 일반
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 책을 읽으며 장 별 내용을 정리해보려 합니다.일단 오늘은 들어가며! 책의 구성들어가며느려진 서비스, 어디부터 봐야 할까성능의 핵심 지표인 응답 시간과 처리량성능과 관련된 다양한 주제(커넥션 풀, 캐시 등)이를 통해 응답 시간을 낮추고 처리량을 높이는 방법성능을 좌우하는 DB 설계와 쿼리index에 대한 이해조회 성능을 높이기 위한 몇 가지 방법 소개쿼리 타임아웃을 포함한 몇 가지 주의 사항외부 연동이 문제일 때 살펴봐야 할 것들마이크로서비스(MSA)가 증가하는 환경에서 고려해야 할 내용타임아웃, 재시도, 동시 요청 제한, 서킷 브레이커외부 연동과 DB 연동을 함께 할 때 주의할 점비동기 연동, 언제 어떻게 써야 할까비동기 외부 연동을 위한 5가지 방..
[데이터베이스] DB 연결 정보 톺아보기!
·
💻 CS/Database | 데이터베이스
안녕하세요?오늘은 DB 연결 시 흔히 보는 화면에서 설정할 수 있는 옵션들을 톺아보고자 합니다. 여러 DB 클라이언트 중 PGAdmin4를 기준으로 탭 별로 나눠서 톺아볼텐데,탭 이름과 기능 분류는 조금 달라도 내용은 다 비슷하기 때문에 .. 모두 참고하기 좋을 것 같습니다! 1️⃣ General 탭name: 이 서버 연결을 pgAdmin(DB 클라이언트) 안에서 어떤 이름으로 표시할 지 정하는 값실제 DB 서버 이름 자체가 아닌, 보기 편하려고 붙이는 별칭예를 들어 `local-postgres`, `dev-db`, `prod-readonly` 같은 식server group: 이 연결을 어떤 폴더 그룹 아래 넣을 지 정하는 값예를 들어 `Local`, `Dev`, `Prod` 같은 그룹을 만들어 서버들을..