TAG

#Performance

22 posts

느릴 때 무엇부터 의심하나 - 길 고르기 한 장

CS · Algorithm

느릴 때 무엇부터 의심하나 - 길 고르기 한 장

이 시리즈에서 낸 길들을 한 장에 놓는다. 그리고 실제로 코드가 느릴 때 무엇부터 의심해야 하는지, 그 순서가 왜 알고리즘부터가 아닌지.

문제를 어떻게 푸나 9편

그리디 - 지금 제일 좋아 보이는 것

CS · Algorithm

그리디 - 지금 제일 좋아 보이는 것

앞뒤 안 재고 매 순간 최선을 고르는 방법. 빠르고 코드도 짧은데, 언제 맞는지는 짐작이 아니라 증명으로만 알 수 있다.

문제를 어떻게 푸나 8편

동적 계획법 - 한 번 푼 것은 다시 안 푼다

CS · Algorithm

동적 계획법 - 한 번 푼 것은 다시 안 푼다

이름이 어렵지 하는 일은 하나다. 계산한 값을 적어두고 다시 묻지 않는 것. 대신 적어둘 자리를 내줘야 하고, 진짜 어려운 건 무엇을 적을지 정하는 일이다.

문제를 어떻게 푸나 7편

분할 정복 - 쪼개서 풀고 합친다

CS · Algorithm

분할 정복 - 쪼개서 풀고 합친다

쪼개면 왜 빨라지는가. 이득의 출처는 나누기가 아니라 합치기이고, 그 사실을 알면 n log n이 어디서 나오는지도 같이 보인다.

문제를 어떻게 푸나 6편

이진탐색 - 반을 버릴 수 있을 때

CS · Algorithm

이진탐색 - 반을 버릴 수 있을 때

정렬해 두면 한 번 볼 때마다 절반을 통째로 버릴 수 있다. 그 조건이 무엇인지, 그리고 왜 이 짧은 코드가 그렇게 자주 틀리는지.

문제를 어떻게 푸나 4편

정렬 - 줄을 세우는 값과 그 대가

CS · Algorithm

정렬 - 줄을 세우는 값과 그 대가

정렬은 그 자체로 답인 경우보다 다른 일을 싸게 만들려고 하는 경우가 많다. 방식이 갈리는 지점과, 실무에서 진짜로 물어야 하는 안정성 이야기.

문제를 어떻게 푸나 3편

완전탐색 - 다 해보는 것이 기준선이다

CS · Algorithm

완전탐색 - 다 해보는 것이 기준선이다

가장 먼저 떠올려야 할 방법은 전부 해보는 것이다. 무식해서가 아니라, 후보가 몇 개인지를 세어봐야 더 나은 방법이 필요한지 알 수 있어서다.

문제를 어떻게 푸나 2편

알고리즘 - 답이 아니라 답에 이르는 길

CS · Algorithm

알고리즘 - 답이 아니라 답에 이르는 길

알고리즘은 어려운 수학 이름이 아니라 답에 이르는 절차다. 목적지가 같아도 길은 여럿이고, 무엇을 골랐느냐가 걸리는 시간을 정한다.

문제를 어떻게 푸나 1편

무엇을 언제 고르나 - 그릇 고르기 한 장

CS · Data Structure

무엇을 언제 고르나 - 그릇 고르기 한 장

이 시리즈에서 연 그릇들을 한 장에 놓는다. 고르는 순서는 셋이고, 대부분의 문제는 그중 첫 질문에서 끝난다.

자료를 어떻게 담나 9편

빅오 - 몇 배로 늘어나나

CS · Data Structure

빅오 - 몇 배로 늘어나나

빅오는 어려운 수학이 아니라 늘어나는 모양에 붙인 이름이다. 사람이 두 배로 오면 무엇이 두 배가 되고 무엇이 네 배가 되는지로 읽는다.

자료를 어떻게 담나 2편

자료구조 - 담는 그릇이 속도를 정한다

CS · Data Structure

자료구조 - 담는 그릇이 속도를 정한다

자료구조는 빠른 것과 느린 것으로 나뉘지 않는다. 무엇을 싸게 하고 무엇을 비싸게 할지를 고르는 일이다. 그릇을 가르는 네 가지 질문부터 본다.

자료를 어떻게 담나 1편

CDN - 사용자 가까이 둔다

CDN · Cache

CDN - 사용자 가까이 둔다

서버를 아무리 늘려도 거리는 안 줄어든다. 사본을 사용자 근처에 두는 층이 무엇을 해결하고, 공유 캐시라서 무엇이 위험한지 본다.

부하를 견디는 법 6편

수직이냐 수평이냐

Scaling · Architecture

수직이냐 수평이냐

서버를 키우는 것과 늘리는 것은 난이도가 다르다. 늘리는 쪽이 어려운 이유는 서버가 아니라 서버가 들고 있는 상태에 있다.

부하를 견디는 법 4편

캐시가 프로세스 밖으로 나가면

Cache · Redis

캐시가 프로세스 밖으로 나가면

서버마다 캐시가 달라지는 문제를 공용 캐시로 푼다. 대신 네트워크·직렬화·단일 장애점·스탬피드라는 계산서가 새로 온다.

부하를 견디는 법 3편

캐시 - 같은 답을 두 번 만들지 않는다

Cache · Performance

캐시 - 같은 답을 두 번 만들지 않는다

한 번 만든 결과를 들고 있다가 다시 준다. 쉬운 이야기라서 위험한데, 진짜 알맹이는 무엇에는 캐시를 붙이면 안 되는가다.

부하를 견디는 법 2편

무엇이 먼저 무너지나

Performance · Scaling

무엇이 먼저 무너지나

부하가 늘면 전부가 고르게 느려지는 게 아니라 가장 좁은 한 곳이 먼저 막힌다. 도구를 고르기 전에 그 자리를 찾는 이야기.

부하를 견디는 법 1편

캐시 - 안 보내는 게 가장 빠르다

HTTP · Web

캐시 - 안 보내는 게 가장 빠르다

배포했는데 사용자 화면이 안 바뀐다. 그 사고에서 출발해 Cache-Control·ETag·조건부 요청이 무엇을 정하는지 본다.

HTTP는 어떻게 오가나 4편

연결을 매번 새로 맺지 않는다

HTTP · Web

연결을 매번 새로 맺지 않는다

요청을 보내려면 먼저 연결부터 맺어야 한다. 그 준비 비용을 줄이려는 시도가 HTTP 버전을 올려온 이유다.

HTTP는 어떻게 오가나 3편

B-tree와 LSM-tree - 읽기와 쓰기 중 무엇을 팔 것인가

Database · Storage

B-tree와 LSM-tree - 읽기와 쓰기 중 무엇을 팔 것인가

8바이트를 바꾸려고 8KB를 다시 쓴다. 그게 싫으면 뒤집으면 되는데, 그러면 읽기가 대가를 낸다.

데이터베이스 공통 개념 14편

실행 계획 - 세 가지만 보면 된다

Database · Performance

실행 계획 - 세 가지만 보면 된다

EXPLAIN 출력이 외계어처럼 보일 때. 트리를 어느 방향으로 읽고, 어디서 범인을 찾는가.

데이터베이스 공통 개념 8편

조인 알고리즘 - DB는 세 가지 방법 중 하나를 고른다

Database · Join

조인 알고리즘 - DB는 세 가지 방법 중 하나를 고른다

중첩 반복·해시·정렬 병합이 각각 언제 이기는지, 그리고 조인이 갑자기 느려지는 진짜 이유.

데이터베이스 공통 개념 7편

인덱스 - 왜 빠르고, 왜 만들어도 안 타는가

Database · Index

인덱스 - 왜 빠르고, 왜 만들어도 안 타는가

B-tree가 이진트리가 아닌 이유부터, 인덱스를 만들어놓고도 풀스캔이 도는 다섯 가지 경우까지.

데이터베이스 공통 개념 6편