코드 한 줄 뒤에 숨겨진 CS
우리가 당연하게 사용하는 서비스 뒤에는 어떤 컴퓨터 과학의 원리가 숨어 있을까?
개발을 공부하다 보면 운영체제, 네트워크, 데이터베이스, 자료구조 등 수많은 CS(Computer Science) 개념을 접하게 된다.
Race Condition, B+Tree, 가상 메모리, 트랜잭션, 멱등성….
개념을 공부할 때는 이해했다고 생각하지만, 막상 실제 개발 상황에서 언제, 왜 필요한지 설명하려면 쉽지 않다.
예를 들어 마지막 남은 콘서트 좌석을 두 사람이 동시에 예약하면 어떻게 될까? 데이터베이스 인덱스가 그렇게 좋다면 모든 컬럼에 인덱스를 생성하면 되지 않을까? 결제 요청이 타임아웃되었다면 결제는 실패한 걸까?
이러한 질문들은 단순한 호기심에서 출발하지만, 그 답을 찾아가는 과정에서 CS의 핵심 원리를 만나게 된다.
이 시리즈는 익숙한 서비스에서 발생할 법한 문제를 출발점으로 삼아, 그 안에 숨어 있는 CS 개념과 기술적 해결 방법을 탐구한 기록이다.
단순히 개념을 정의하고 암기하는 데 그치지 않고, 실제 코드에서는 어떤 문제가 발생하는지, 기존 해결책에는 어떤 한계가 있는지, 그리고 어떤 기준으로 기술을 선택해야 하는지까지 살펴보고자 한다.
