본문 바로가기

Server

(11)
[개발] 비동기 연동, 언제 어떻게 써야 할까? 동기 연동이냐 비동기 연동이냐는 단순한 기술 선택을 넘어, 시스템 전체의 확장성·복원력·데이터 일관성에 영향을 준다.이 글에서는 실무에서 자주 고민하게 되는 비동기 연동의 방식과 적용 시 고려사항을 정리한다. 동기 vs 비동기 연동항목동기 연동비동기 연동요청-응답요청자가 응답을 기다림응답을 기다리지 않음트랜잭션하나의 트랜잭션에 묶을 수 있음트랜잭션 분리됨복잡도단순복잡 (리트라이, 순서, 보장 등)장애 영향의존성 높음의존성 낮음 요약: 동기는 간단하지만 장애에 취약하고, 비동기는 복잡하지만 유연하다.스레드 기반 비동기 연동Spring에서 @Async나 별도 ThreadPool을 사용하는 방식은 다음과 같은 특징이 있다:요청 처리 중 별도 스레드로 작업 위임문제: 트랜잭션 롤백과 무관한 별도 흐름❗ 왜 롤백..
[개발] 외부 연동이 문제일 때 살펴봐야 할 것들 서비스를 운영하다 보면 "우리는 문제가 없는데 외부 연동 때문에 시스템이 터졌다"고 말하게 되는 순간이 꼭 온다.(사실 나는 외부 API 서비스를 제공하는 입장에서 우리 장애로 인하여 위와 같은 클레임을 진짜 많이 받았다.ㅎ)외부 API, 인증 서버, 결제 연동 등 수많은 외부 시스템과 통신해야 하는 현대 백엔드 시스템에서, 외부 연동은 필연적인 리스크다.이 글에서는 외부 연동 시 발생할 수 있는 문제들과 그에 대한 실무적인 점검 포인트를 정리해본다.1. 타임아웃은 두 가지다연결 타임아웃 (Connection Timeout)서버에 연결을 시도할 때까지 대기하는 시간이다. 보통 수 ms ~ 수 초 이내로 설정하며, 너무 길면 아예 연결이 되지 않는 서버에 발이 묶이는 문제가 생긴다.읽기 타임아웃 (Read..
[개발] 성능을 좌우하는 DB 설계와 쿼리 대부분 시스템은 사용자의 요청을 받고 데이터를 응답하게 되는데 데이터베이스가 끝 지점이라 생각한다.그만큼 데이터베이스가 중요한 역할을 하게되는데 대규모 트래픽을 처리하는 서비스에서 성능 병목은대부분 데이터베이스에서 시작된다. 서버나 네트워크 튜닝도 중요하지만,결국 DB 쿼리가 느리면 전체 시스템이 병목을 겪게 되는데 이걸 해결할 수 있는 방법이 뭐가 있을까?📌 조회 트래픽을 고려한 인덱스 설계DB 테이블을 설계할 때는 조회 기능과 트래픽 규모를 고려해야되며풀스캔이 발생하지 않도록 하려면 조회 패턴을 기준으로 인덱스를 설계해야된다.풀스캔(full scan) : 테이블의 모든 데이터를 순차적으로 읽는 것을 말한다.인덱스(index) : 이터베이스에서 검색 성능을 높이기 위한 자료구조이다. 우리는 생각보..
[개발] 느려진 서비스, 어디서부터 봐야될까? #2. 서버 성능 개선 기초 느려진 서비스를 튜닝하는 방법: 서버 성능 튜닝의 기초 서비스가 느려졌다면 어디서부터 점검해야 할까? 사실 처음에는 당황하기 마련이다. 어디가 느려진거지?!시스템을 구성하는 여러 요소 중 어디가 병목인지 파악하고, 적절한 개선책을 적용하는 것이 핵심이다.병목지점부터 찾아라어떤 개선도 "어디가 느린지"를 모르면 의미가 없다!APM (Application Performance Monitoring): New Relic, Datadog, Pinpoint 등시스템 모니터링: top, htop, iostat, vmstat로그 기반 분석: ELK, Grafana Loki수직 확장 vs 수평 확장성능 개선의 큰 방향은 두 가지가 존재한다. 수직 확장 (Scale-Up)CPU, 메모리, 디스크 등 자원 증설장점:..
[개발] 느려진 서비스, 어디서부터 봐야될까? #1. 처리량과 응답시간 느려진 서비스를 진단하는 관점: 처리량과 응답시간 중심으로 파악 느려진 서비스의 징후 내 경험 상으로 서비스가 느려지게 되면 개발자들은 모니터링 서비스가 없으면 바로 파악하기 힘들다.보통 서비스 느려진 징후는 고객의 컴플레인이 들어오게 되면서 시작되고 보통은 시간이 해결해주거나 서버 재기동 밖에 없었던 것 같다. 내가 느끼기에는 아래와 같은 느려진 서비스 징후가 나타나게 된다. [사용자]- 사용자의 응답 대기 시간 증가- 타임아웃 또는 HTTP 5xx 오류율 증가 [개발자]- TPS, QPS, RPS 등 성능 지표 급감- 내부 모니터링 지표에서 CPU 사용률, GC 시간, 스레드 대기 시간 증가 주요 개념 정리 📌 처리량(Throughput)- 단위 시간당 처리 가능한 요청 수 (예: QPS, RPS..
[Linux] systemd 은 뭐하는 아이 일까? systemd 은 뭐하는 아이 일까?평소에 리눅스를 사용하면서 systemctl 나 reboot 를 사용하게 되는데이걸 명령어로만 생각했지 어떻게 동작하는 지 어떤 원리로 존재하는 생각해본 적이 없다..컴퓨터 처럼 버튼이 있는 것도 아니고.. 그렇다고 윈도우처럼 작업관리자가 있는 것도 아니고..   리눅스 전반의 서비스나 부팅을 관리하는 프로그램이 존재하는데 그게 systemd 이다.  윈도우의 작업관리자랑 유사하다고 보면 괜찮을 것 같다!    systemd 이란 ?systemd는 System and Service Maager, 시스템의 부팅 및 서비스 관리하는 프로그램 systemd 관련 디렉터리systemd 는 여러 디렉터리에 나뉘어 설치 되는데, 주요 디렉터리는 아래와 같다.경로설명/etc/sys..
[Linux] Docker 을 이용하여 CentOS 실습 환경 만들기 리눅스 마스터 공부를 하는데mac 에서 버추얼 박스를 받아서 실습하기 싫은 마음에..도커로 컨테이너에 접속해서 실습하는 방법으로 실행하려고 한다.   제대로 학습하시려고 하는 분들은 아래의 버추얼 박스로 하는 방법으로..(윈도우 버전) [LinuxMaster] CentOS 7 환경 구축하기 - (Oracle Virtual Box)CentOS 이란? CentOS는 CentOS 프로젝트를 Red Hat 에서 개발한 리눅스 기반 컴퓨터 운영체제 입니다. CentOS Stream, CentOS Linux 가 존재하며 오픈소스 프로젝트입니다. 🤔 여담으로.. CentOS 7 는 2024년 6월 30일coffeebaralog.tistory.com   MacOS Docker 다운로드 1. macOS 기준으로 hom..
[Linux] 리눅스 디렉토리 구조 및 역할 리눅스 디렉토리란?리눅스는 강력한 운영 체제로, 그 구조와 파일 시스템은 사용자에게 많은 유연성을 제공아래에서 리눅스의 디렉토리 구조를 살펴보고, 각 디렉토리의 역할과 중요성을 이해해보자! 리눅스 디렉토리 구조 개요디렉터리(Directory) 란 파일을 보관하는 곳,리눅스의 디렉터리는 최상위에 해당하는 루트를 중심으로 하위 디렉터리에 다수 디렉터리가 존재하는 형태의 트리 구조로 갖추고 있어 계층적으로 관리합니다.(※ 리눅스 벤더나 버전에 따라 약간의 차이가 있으나 대체적으로 유사) 디렉터리의 종류와 특징   종류특징/최상위에 있는 디렉터리, 루트(root) 디렉터리/binbinary, 실행 파일 디렉터리, 명령어들이 들어있는 디렉터리로 보통 PATH 가 설정 되어있다.ex) cp, mkdir, rmdir..