[대규모 시스템 설계 기초 2] 1장. 근접성 서비스근접성 서비스(Proximity Service)는 현재 위치를 기준으로 가까운 음식점, 호텔, 주유소 같은 시설을 찾아주는 서비스다. 지도 앱의 "내 주변 검색"이나 "가장 가까운 k개 주유소 찾기" 같은 기능이 여기에 해당한다.1단계. 문제 이해 및 설계 범위 확정최대 허용 반경은 20km 이다.사용자가 UI에서 검색 반경을 변경할 수 있다.사업장 소유주가 사업장 정보를 시스템에 추가/삭제/갱신할 수 있고, 다음날까지 변경된 정보가 반영된다.사용자의 이동속도는 빠르지 않아서, 상시적으로 페이지를 갱신할 필요는 없다.주어진 반경 내의 사업장만 대상으로 하고, 시간이 남으면 주어진 범위 안에 사업장이 많지 않은 경우를 어떻게 처리할지 고민해보자.요구사항요..
비관적 락, 낙관적 락, 분산 락을 다 써보고 나서야 정리했다지난 글 마지막에 커넥션 풀 데드락 얘기를 했다. 한 스레드가 커넥션 두 개를 잡으려다 서로 물려서 멈추는 상황이었다. 그걸 정리하다 보니 다음 질문이 자연스럽게 따라왔다. 애초에 락은 왜 걸고, 어떤 락을 골라야 하는 걸까.마침 내가 한 프로젝트들에 서로 다른 락이 들어가 있었다. 짠팟에서는 중복 챌린지를 막으려고 DB 비관적 락을 걸었고, Keepit에서는 AI 요약이 중복 실행되는 걸 막으려고 Redis 분산 락을 썼다. 당시엔 "이게 맞는 것 같아서" 골랐는데, 왜 그게 맞았는지 설명해보라고 하면 말이 막혔다. 그래서 이번에 제대로 정리했다.락은 왜 필요한가동시성 문제의 본질은 대부분 갱신 손실(Lost Update) 이다.스레드 A: ..
10장. 모르면 답답해지는 네트워크 기초네트워크 기초를 모르면서버 장애의 원인이 애플리케이션 코드가 아니라 네트워크 설정에 있을 수 있다.내부 통신에 사용하는 IP와 외부에서 접근할 때 사용하는 IP를 혼동하면 접속 허용 대상을 잘못 지정할 수 있다.서버 개발자가 네트워크를 깊게 알 필요는 없지만, 장애 원인을 찾고 설정 문제를 해결하려면 기본 개념은 알아야 한다.노드, 네트워크, 라우터데이터를 송수신하는 모든 장치를 노드(Node)라고 한다.휴대폰, 노트북, 서버, 네트워크 장비 등이 해당한다.노드가 서로 데이터를 주고받기 위해 연결된 시스템을 네트워크(Network)라고 한다.노드가 네트워크를 통해 전송하는 데이터의 단위를 패킷(Packet)이라고 한다.헤더에는 송수신 정보, 페이로드에는 실제 데이터..
https://www.acmicpc.net/problem/2606이번 문제는 위의 문제와 거의 같다. (풀이 참고 : https://kimjunhyun.tistory.com/134) ✅ 문제https://www.acmicpc.net/problem/11724 접근방법1. 연결된 요소의 개수 -> DFS / BFS2. 서로 연결되었다는 정보를 어떻게 하나의 자료구조로 통합할까?3. 이미 방문한 지점을 다시 방문하지 않으려면 어떤 자료구조를 사용해야할까?4. 어디에서 DFS를 시작할 것인가? 🔑 풀이import java.io.*;import java.util.*;// DFSpublic class Main { final static int MAX = 1000 + 10; // N이 가질 수 있는 최댓값 ..