본문 바로가기

전체 글638

[독서 기록] 함수형 사고 함수형 사고[함수형 사고]는 객체지향 언어에 길든 개발자들에게 예제를 통해 함수형으로 ‘생각’하는 법을 깨닫게 해주는 책이다. 스칼라 같은 함수형 언어의 수요가 늘고 있지만 자바 같은 객체지향에 익숙한 개발자들은 함수형 패러다임으로 넘어가는 데 어려움을 겪고 있다. 단순히 새 언어 문법을 익히는 것이 아니라 사고방식 자체를 바꿔야 하기 때문이다. 이 책은 자바 8, 스칼라, 클로저, 그루비 예제를 통해 객체지향 개발자가 함수형으로 사고를 전환하고 시야를 넓히는 일저자닐 포드출판한빛미디어출판일2016.07.01 전혀 새로운 프로그래밍 패러다임의 문제점은 새로운 언어를 배우는 것이 아니다. 이 글을 읽고 있는 모두가 이제껏 수도 없는 컴퓨터 언어를 배워오지 않았는가? 문법은 한낱 세부사항일 뿐이다... 2025. 5. 1.
[시스템 디자인 챌린지 - 문제 요구 사항] MAU 2천만 대형 블로그 플랫폼에서 1백만 명 유저가 어느 날 자정, 동시 예약을 걸었다면? (16,667 TPS 쓰기 요청을 감당해보자) 0. 이 글 혹은 문제 혹은 프로젝트의 탄생 배경얼마 전, 티스토리에서 예약 발행 기능을 사용하던 중 흥미로운 현상을 보았다.예를 들어 자정(00시 00분)에 맞춰 예약 발행을 걸어뒀는데, 실제로는 00시 01분쯤에 게시물이 올라오는 것이다. 생각컨대, 아마도 분 단위 스케줄러가 일정 간격으로 scheduled_time 조건을 체크하는데, 이게 분 단위로 작동하는 것 같았다. 그러다 “그렇다면 대규모 예약 발행이 몰릴 때는 어떻게 될까?” 하는 궁금증이 생겼다. 백엔드 관점에서, 만약 같은 시각(예: 자정)에 수십만~수백만 건의 예약이 한꺼번에 쏟아진다면 DB나 서버가 버틸 수 있을까?어떤 구조로 설계해야 성능 저하나 발행 지연 없이 안전하게 처리할 수 있을까? 이런 의문에서 출발해, 대규모 예약 .. 2025. 5. 1.
[프로그래머스] 네트워크 (자바 풀이) https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 📌 문제네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 .. 2025. 4. 29.
이진 탐색 트리로 왜 충분하지 않을까? M원 트리 그리고 B-트리의 등장 이유 (B트리, B+트리, B* 트리 연산까지) M원 트리데이터 구조에서 트리(Tree)는 계층적 데이터 관리와 검색을 위한 필수 구조이다.특히, 대규모 데이터를 효율적으로 관리하기 위해 M원 트리(M-ary Tree) 가 중요한 역할을 한다. 그런데 왜 이진 탐색 트리(Binary Search Tree, BST) 만으로는 충분하지 않은 것일까?BS 트리의 한계이진 탐색 트리는 각 노드가 최대 두 개의 자식 노드를 가지며, 왼쪽 자식 규칙을 따르는 트리를 의미한다. 그러나 다음과 같은 한계가 존재한다.1. 불균형 문제 (Skewed Tree Problem)정렬된 데이터를 순차적으로 삽입하면 한쪽으로 치우친 트리가 생성된다. 삽입 순서에 따라 불균형이 발생한다.BST (불균형 트리) 10 \ 20 .. 2025. 4. 27.
다익스트라 알고리즘 완벽 가이드: 2차원 행렬부터 우선순위 큐까지, 자바 구현으로 배우는 최단 경로 찾기 1.다익스트라?가중치(weight)가 부여된 방향 없는 혹은 방향 있는 그래프에서, 특정 시작 정점(start)으로부터 다른 모든 정점까지의 최단 경로를 찾는 알고리즘에츠허르 다익스트라가 고안하였다.특징간선의 가중치가 음수가 아닐 때만 사용 가능우선순위 큐(Priority Queue)를 활용해 효율적으로 구현2. 그래프 기본 개념정점(Vertex): 그래프를 구성하는 노드간선(Edge): 정점과 정점을 연결하는 선, 가중치(weight)를 가짐경로(Path): 한 정점에서 다른 정점으로 이동하는 과정최단 경로(Shortest Path): 여러 경로 중 가중치 합이 가장 작은 경로graph LR A((A)) --2--> B((B)) A((A)) --5--> C((C)) A((A)) --7-.. 2025. 4. 26.