비관적 락, 낙관적 락, 분산 락을 다 써보고 나서야 정리했다지난 글 마지막에 커넥션 풀 데드락 얘기를 했다. 한 스레드가 커넥션 두 개를 잡으려다 서로 물려서 멈추는 상황이었다. 그걸 정리하다 보니 다음 질문이 자연스럽게 따라왔다. 애초에 락은 왜 걸고, 어떤 락을 골라야 하는 걸까.마침 내가 한 프로젝트들에 서로 다른 락이 들어가 있었다. 짠팟에서는 중복 챌린지를 막으려고 DB 비관적 락을 걸었고, Keepit에서는 AI 요약이 중복 실행되는 걸 막으려고 Redis 분산 락을 썼다. 당시엔 "이게 맞는 것 같아서" 골랐는데, 왜 그게 맞았는지 설명해보라고 하면 말이 막혔다. 그래서 이번에 제대로 정리했다.락은 왜 필요한가동시성 문제의 본질은 대부분 갱신 손실(Lost Update) 이다.스레드 A: ..
이 글은 유튜브 개발자 유미 영상을 바탕으로 개인적인 정리를 위해 작성한 글입니다.https://www.youtube.com/watch?v=-g6goXtCilM&list=PLJkjrxxiBSFCgcsP_pzuntmqC3AlTMWFx 스프링 AI 란?스프링 AI는 LLM API를 활용한 여러 웹 시스템 (챗봇, 멀티모달, RAG)을 쉽게 구축하도록 도와주는 스프링 기반의 모듈 현재 AI 진영에서는 LangChain/LangGraph와 같은 파이썬 모듈의 편의성으로 자바/스프링 기반의 구현이 줄어들고 있다.이 문제를 해결하기 위해 2024년 스프링은 스프링 AI라는 모듈을 출시하게 된다. AI와 연관된 도구들을 쉽게 통합하도록 하는 프레임워크LLM API 호출챗모델 : 앤트로픽, 애저, OpenAI, ..
커넥션 풀이랑 스레드 풀, 면접 준비하다가 제대로 정리했다면접 스터디에서 이런 질문을 받았다."톰캣 스레드가 200개인데 커넥션 풀이 10개예요. 요청 200개가 동시에 들어오면 어떻게 되나요?" 커넥션 풀이 뭔지, 스레드 풀이 뭔지는 당연히 안다고 생각했는데 이 질문 앞에서 멈칫했다. 둘을 각각은 알고 있었지만 같이 놓고 생각해본 적이 없었다. 그래서 이참에 제대로 정리했다.풀이 왜 필요한가부터커넥션 풀과 스레드 풀은 이름만 비슷한 게 아니라 해결하려는 문제가 똑같았다.만드는 비용이 비싼 자원을 매번 새로 만들지 말고, 미리 만들어두고 빌려 쓰자는 것이다.DB 커넥션 하나를 새로 만들 때 실제로 뭐가 일어나는지 보면 왜 비싼지 감이 온다.TCP 3-way 핸드셰이크를 하고, DB 프로토콜 핸드셰이크를 ..
주니어 백엔드 개발자가 반드시 알아야할 실무지식 (최범균 저)📌 Chapter 04. 외부 연동 장애 대응외부 연동(결제, 알림, 검색, LLM API 등)은 내가 통제할 수 없는 영역이다. 이 장의 핵심은"외부 서비스가 느려지거나 죽어도, 내 서비스 전체가 같이 죽지 않게 만드는 것"이다.1. 타임아웃 (Timeout)가장 기본이면서 가장 자주 놓치는 설정. 타임아웃을 설정하지 않으면 스레드가 무한정 대기하게 되고,그 스레드들이 쌓이면 스레드 풀이 고갈되어 정작 멀쩡한 다른 요청까지 처리 못 하는 연쇄 장애로 번진다.구분설명권장 범위연결 타임아웃 (Connection Timeout)TCP 연결 자체를 맺는 데 걸리는 최대 대기 시간3초 ~ 5초읽기 타임아웃 (Read Timeout)연결 후 응답을 받..
주니어 백엔드 개발자가 반드시 알아야할 실무지식 (최범균 저)Chapter 01. 들어가며1장. 신입 개발자 A의 일화개발자 A는 내부 직원이 사용할 간단한 사이트를 만들었다.얼마안가 오류가 발생한다는 연락을 받았다.개발자 A가 개발 주소에 접근하니 DB에 연결할 수 없다는 오류가 발생한다.일부 코드에서 사용이 끝난 DB 커넥션을 닫지 않은 것이다.// 개발자 A가 작성한 문제의 코드Connection conn = ds.getConnection(); // 커넥션 풀에서 구함try {} catch (Exception e) { ... 에러 처리}// conn.close()가 누락 -> 커넥션 풀에 반환하지 않음DB 커넥션을 사용한 뒤 풀에 반환하지 않았고 그로 인해 커넥션이 누수되었다.결국 풀에 있던 ..