야심차게 일반물리학 책을 샀다. 목차를 쓱 보아하니 낯이 익은 이름이 있었는데* '뉴턴'선생님의 운동 법칙이었다. 흔히 '고전'역학이라고 하던데, 마치 고전 영화, 고전 소설이 아직까지 사랑받는 것처럼 고전 역학도 나에게 여운을 줄지 궁금해졌다. 그래서 다 뛰어넘고 73p(Giancoli 일반물리학 7판 개정판)로.
*물리학을 컴퓨터과학과 함께 공부해봐야겠다고 생각한 건 수강신청 무렵이었는데, 그래서 나는 이번 학기에 생활체육지도과 전공수업인 '운동역학' 수업도 듣고 있다. 운동역학 수업에서 뉴턴의 법칙을 배운 적이 있다.
물리학과 컴퓨터과학을 함께 연결하려고 하는 이유는, 물리학의 법칙들이라면 컴퓨터과학의 모든 부분을 꿰뚫는 무언가에 대한 힌트를 줄 수 있지 않을까 하는 막연한 기대 때문이다. 그래서 먼저 이런 방법을 써보려고 한다.
1. 낯이 익은 물리학 용어나 법칙을 아주 얇게 공부한다. - Giancoli 책
2. 그 내용이 컴퓨터과학의 특정 주제와 논리적으로 또는 은유적으로라도 연결될 수 있는지 찾아본다. - 제미나이*
3. 그 논리(또는 은유) 연결에서 디딤돌이 되는 컴퓨터과학 용어들을 익힌다. - 학교 수업
*제미나이를 이용할 것이기 때문에 세부적인 공부 내용이 틀릴 가능성이 있기는 하지만 나같은 컴퓨터과학 왕초보에게는 세부적인 내용이 틀리는 거는 크게 중요하지 않다고 판단하여 개의치 않기로 했다.
"물체에 알짜힘이 작용하지 않는 한, 정지한 물체는 계속 정지 상태로 있고, 움직이던 물체는 계속 직선 상에서 등속도 운동을 한다."
이 법칙을 컴퓨터과학에 접목하면, "캐싱(Caching)과 데이터 지역성"과 연결지을 수 있다.
데이터도 한 번 참조되면 계속 참조되려는 성향(시간 지역성)이 있고, CPU가 저 멀리 있는 RAM까지 가서 데이터를 가져오는 것은 무거운 수레를 끄는 것과 같다.
Redis는 데이터베이스까지 가지 않고 메모리에서 바로 데이터를 꺼내오는 '관성 유지'도구다.
Loop Tiling은 대용량 행렬 연산시, 메모리 계층구조의 관성을 이용해 캐시 효율을 극대화하는 최적화 기법이다.
"물체의 가속도는 물체에 작용하는 알짜힘에 정비례하고 물체의 질량에 반비례한다. 가속도의 방향은 물체에 작용하는 알짜힘의 방향과 같다."
이 법칙을 컴퓨터과학에 접목하면, "데이터 크기와 처리 속도"와 연결지을 수 있다.
처리해야 할 데이터의 양(질량)이 많을수록 응답속도(가속도)를 올리기 위해 더 많은 CPU/GPU 자원(힘)이 필요하다.
Big Data Frameworks(Spark, Flink)는 거대한 데이터(질량)을 처리하기 위해 여러 대의 컴퓨터(힘)를 병렬로 연결하여 가속도를 얻는다.
Lightweight Prototypes: 모바일 기기처럼 자원(힘)이 제한된 곳에서는 모델의 크기(질량)를 줄이는 '경량화(Quantization)'코딩이 필수적이다.
"첫 번째 물체가 두 번째 물체에 힘을 작용할 때마다 두 번째 물체는 첫 번째 물체에 크기는 같고 방향이 반대인 힘을 작용한다"
이 법칙을 컴퓨터과학에 접목하면, "부하(Load)와 시스템 반동"과 연결지을 수 있다.
서버에 과도한 요청(작용)을 보내면, 서버는 응답지연이나 에러(반작용)을 돌려주며 클라이언트에게 영향을 준다.
Backpressure(Reactive Streams)는 데이터 스트림에서 수신측에 감당 못할 속도로 데이터가 들어올 때, 송신측에 "천천히 보내!"라고 신호를 보내는 메커니즘이다.
Circuit Breaker는 시스템에 과부하가 걸리면 회로를 차단해 더 큰 피해를 막는 코딩 패턴이다.
내가 원하던 것은 물리학법칙들이 직접 컴퓨터과학에 어떻게 구현되는지를 보는 것이었는데, 위와 같은 은유들(예를 들어, 멀리 있는 데이터를 가져오는 것은 무거운 수레를 끄는 것과 같다. 데이터는 질량, CPU/GPU는 힘.)이 직접적으로 물리학의 사고방식을 나에게 심어줄지는 아직 잘 모르겠다. 다만, 제1, 2, 3법칙을 은유적으로나마 컴퓨터과학에 접목해 보면서, 컴퓨터과학에서의 '효율'이 단순히 편의를 위한 것이 아니라 그게 바로 본질일 수 있겠다는 어렴풋한 생각을 해본다. 다음에는 내가 배우고 있는 컴퓨터과학의 기초가 어떤 주소로 확장될 때 Redis, Loop Tiling, Big Data Frameworks, Lightweight Prototypes, Backpressure(Reactive Streams), Circuit Breaker에 닿을 수 있을지 디딤돌을 놓아봐야겠다.