본문 바로가기

전체 글

(79)
[개발] 비동기 연동, 언제 어떻게 써야 할까? 동기 연동이냐 비동기 연동이냐는 단순한 기술 선택을 넘어, 시스템 전체의 확장성·복원력·데이터 일관성에 영향을 준다.이 글에서는 실무에서 자주 고민하게 되는 비동기 연동의 방식과 적용 시 고려사항을 정리한다. 동기 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..
2024년 회고록 및 근황 안녕하세요 오랜만에 사적인 이야기로 글을 써보네요물론 제 블로그 글을 기다리는 분이 있진 않겠지만..! 한참 바쁘던 일상이 자나가고 좀 잠잠해져서 요즘 근황이랑 여러 이야기를 이것저것 하려고 합니다. 아시다시피 방통대 컴퓨터과학과를 무사히 졸업을 했습니다. 껄껄4년? 5년 정도 꾸역꾸역 했는데 나름 좋기도 하고 나쁘지는 않은 생활이었던 것 같아요방통대 컴퓨터과학과 졸업하고 난 후기는 ..사실 걍 그래요.. ㅋㅋ 실감은 안나지만어엄 물론 전공자이기도 하고 학사가 있으니 취업의 범위나 연봉 협상 시에 테이블이 달라진 걸 많이 느낍니다.사람들의 시선도 많이 달라지기도 하고 생각보다 전공 내용의 바탕으로 현업에서 많이 쓰이기도 합니담 근데 문제는 제가 공부를 열심히 안했다는거죠.방통대는 졸업이 힘들다고는 하나 ..
[ERROR] Socket TIME_WAIT : 요청된 주소로 배정할 수 없습니다. 이슈 사항 실제 상용환경에서 발생한 상황이었는데 클라이언트 쪽 서버 주소로 소켓을 연결해서 정보를 보내주는 로직이 존재했었다.근데 어느날 클라이언트 쪽에서 정보를 못받고 있다고 연락을 받아 급하게 찾아보니 로그에 Exception 요청된 주소로 배정할 수 없다.로그가 주르륵 쏟아지는 상태였다. 태어나서 처음 보는 에러라 당황했던 기억을 되짚어보며 정리해보고자 한다. 소켓(Socket) 이란?소켓(socket)은 컴퓨터 네트워크에서 프로세스 간 통신(IPC, Inter-Process Communication)을 수행하기 위한 endpoint데이터를 작은 단위(패킷)로 나누어 전달하고, 수신된 패킷을 조립하여 원본 데이터를 복원하는 방식주로, 채팅, 파일 전송, 게임 등과 같은 환경에서 활용된다. endpo..
[Linux] systemd 은 뭐하는 아이 일까? systemd 은 뭐하는 아이 일까?평소에 리눅스를 사용하면서 systemctl 나 reboot 를 사용하게 되는데이걸 명령어로만 생각했지 어떻게 동작하는 지 어떤 원리로 존재하는 생각해본 적이 없다..컴퓨터 처럼 버튼이 있는 것도 아니고.. 그렇다고 윈도우처럼 작업관리자가 있는 것도 아니고..   리눅스 전반의 서비스나 부팅을 관리하는 프로그램이 존재하는데 그게 systemd 이다.  윈도우의 작업관리자랑 유사하다고 보면 괜찮을 것 같다!    systemd 이란 ?systemd는 System and Service Maager, 시스템의 부팅 및 서비스 관리하는 프로그램 systemd 관련 디렉터리systemd 는 여러 디렉터리에 나뉘어 설치 되는데, 주요 디렉터리는 아래와 같다.경로설명/etc/sys..