테슬라 인턴 11주차

소프트웨어 개발 원칙: 관심사 분리

by 지오

소프트웨어 개발을 배우고 난 뒤로, 온라인 세상이 다르게 보이기 시작했다. 그냥 지나치던 웹사이트들도 다시 보면 감탄이 나온다. “이 복잡한 페이지를 누군가 진짜 만들었구나” 싶으니까. 브런치의 에디터만 해도 그렇다. 이 한 화면을 만들기 위해 디자이너는 픽셀 단위로 아이콘과 버튼을 다듬고, 개발자는 눈에 보이지 않는 복잡한 기능을 구현하며 수많은 예외 상황까지 상상했을 것이다. 이렇게 편하게 글을 쓰고 편집할 수 있다니, 카카오 본사 방향으로 절을 올려도 모자랄 판이다.


Separation of Concerns

관심사 분리는 소프트웨어 설계의 기본 원칙 중 하나다. 복잡한 일을 쉽게 하려면, 한꺼번에 모든 걸 하려 하지 말고 각자의 역할을 명확히 나눠 처리하는 게 좋다. 어떤 일을 할 때 ‘이건 누가 할 일이고, 저건 누가 할 일인지’가 분명하면 혼란도 줄고 실수도 적어진다. ‘내가 이것까지 해야 하나?’라는 불필요한 고민과 의사소통이 줄어든다.


한 파일에 500줄이 넘어가는 코드를 보면 그 자리에서 모니터를 덮어버리는 편이다. 꼴도 보기 싫다.

코드는 순차적으로 읽히지 않는다. 만약 그렇게 읽히는 코드를 봤다면, 그건 실무에서 보기 드문, 오히려 잘못된 코드일 확률이 높다. 수많은 논리들이 순서를 무시한 채 난잡하게 엉켜있다. 한 페이지에만 시선을 고정할 수도 없다. 다른 파일이나 심지어 전혀 다른 프로젝트의 코드까지 뒤져야 할 때가 흔하다. 억지로 복잡한 실타래를 풀다 보면 실수를 저지르기 쉽다.


관심사 분리 원칙에 충실해, 길고 복잡한 코드를 역할에 따라 여러 그룹으로 나눈다. 분류된 군집들은 서로 다른 파일들로 (모듈, 클래스, 메소드, 컴포넌트 등 다양한 이름이 붙는) 분리된다. 도서관 섹션마다의 '과학·종교' 팻말 따위처럼, 적당한 이름의 폴더들로 코드들이 재배치된다. 새로운 기능을 추가하거나, 버그를 고치거나, 오래된 코드를 찾을 때도, 잘 정돈된 논리 덩어리를 찾아내는 일은 생각보다 쉽다.


세 가지 레이어

웹사이트나 앱 인터페이스를 구현하는 프론트엔드 개발에서 널리 사용되는 '패턴'이 있다.

Layer 1: 서버 혹은 데이터베이스로부터 데이터를 가져온다

Layer 2: 받아온 데이터를 보기 좋고 쓰기 편하게 다듬는다

Layer 3: 다듬어진 데이터를 화면에 글씨나 이미지, 버튼 같은 시각적 요소로 보여준다


파인 다이닝에 빗대자면, 신선한 재료를 시장이나 산지에서 직접 엄선해 들여오는 조달 담당자가 있고, 그 재료를 깨끗이 손질하고 정성껏 조리하는 주방장이 있다. 마지막으로, 모든 재료를 한데 모아 섬세하게 플레이팅 하며 최종 완성도를 책임지는 헤드셰프가 있다. 각자의 역할이 분명할 때 비로소 완벽한 한 접시가 탄생하듯, 프론트엔드 개발에서도 역할을 명확히 나누는 것이 좋은 결과를 만든다.



대치동, 영재고, 그리고 유학

나는 흔히 말하는 ‘대치동 키즈’다. 초등학교 4학년 무렵 처음 대치동에 발을 들였고, 그때부터 온갖 수학·과학 학원을 전전하며 선행 학습에 매달렸고, 그때부터 (당시에는 큰 주목을 받지 않던) 코딩 학원에서 C++를 배우기 시작했다. 학교는 대치동과 멀리 떨어진 분당의 꽤 좋은 학군의 학교를 다녔다. 그 시절, 중학교에서 공부를 잘한다는 평가는 곧 ‘수학 선행’을 얼마나 앞서갔느냐에 달려 있었다. 누가 벌써 중등 수학을 다 끝냈다더라, 수학의 정석으로 수 1, 수 2를 본다더라, 미적분을 한다더라 하는 이야기들이 교실 안에선 곧잘 유행처럼 돌았다.


그중에서 난 단연코 으뜸이었다. 뭣도 모른 채 대치동 수학학원의 무자비한 진도를 따라가다 보니, 어느새 영재고를 목표로 수학올림피아드(KMO)를 준비하고 있었다. 유명세에 민감한 중2 남학생은 은근슬쩍 자랑을 늘어놓고 다녔다. '난 영재고를 갈 거다.' '난 학교 공부 안 해도 수학은 무조건 100점 맞는다.' 수학의 신이라는 낯 뜨거운 별명과 함께, 내 이름 석자를 들으면 모르는 동급생도 '그 공부 잘하는 애'라고 떠들어댈 정도였으니.


대치동은 정반대였다. 나는 알고 있었다. 사실 나는 수학을 잘하지 못했다. 같은 레벨 반에는 나보다 두 살이나 어린 천재들이 있었고, 나는 진도를 간신히 따라가며 숙제를 얼렁뚱땅 해가는 게 전부였다. 정기 시험 날이면 선생님 눈을 피해 앞자리 친구의 OMR 카드를 베끼곤 했다. 지금 생각해 보면, 그랬던 이유는 단순했다. 하나는, 정말 그냥 귀찮고 게을렀다. 솔직히 말해, 중학생이 무슨 대단한 철학이 있었겠는가. 숙제는 대충 끝내고 집에 가서 롤이나 하고 싶었다. 그리고 또 하나는, 들키고 싶지 않았다. 매일같이 분당에서 대치동까지 라이딩을 해주던 워킹맘 엄마에게, 나는 수학을 잘하고 있다고, KMO에서 수상할 거라고, 영재고에 충분히 들어갈 수 있다고 믿게 해주고 싶었다. 그게 진짜 실력이 아니었고, 거짓으로 포장된 점수였을지라도.


거짓말은 날마다 늘어갔다. 내가 가장 좋아하는 과목은 물리였는데, 실제로 그건 열심히 했다. 중등부 물리 올림피아드를 준비했고, 수업 태도가 좋고, 학원 시험도 잘 봤으니, 자연스레 학원에서 제일 높은 반까지 올라갔다. 고백하자면 학원 시험은 모두 기출문제였고, 구석에서 몰래 인터넷에 기출 답지를 검색해 봤기 때문이다. 아무튼 그렇게 올림피아드 시험을 보게 됐다. 결과는 처참했다. 장려상이었나? 아니면 아무 상도 못 받았던가? 기억조차 희미할 만큼 별로였다. 하지만 마치 리플리 증후군에 걸린 듯, 무언가에 홀린 듯 내가 은상을 탔다고 스스로의 기억을 조작했다. 학원 원장님이 “몇 점이었어? 무슨 상 받았어?” 하고 기대 어린 눈빛으로 물었을 때, 난 “은상이요”라고 대답해 버렸다. 정말 중학교 내내, 나는 은상을 탄 줄로만 알고 있었다.


질소 포장으로 사기를 친 감자칩처럼, 실속 없이 부풀어 오른 나는 영재고를 피해, 하늘 높이 떠올라 그냥 사라져 버리고 싶었다. 영재고 조기 입학시험을 본 날, 그 상상은 거짓말처럼 현실이 되고 만다. 시험장에서 문제를 처음 봤을 때, “이거 진짜 어렵네”라는 말이 나도 모르게 튀어나왔다. 수학 문제든, 잘 알지도 못하는 생물 문제든, 어디서부터 손을 대야 할지조차 막막했다. 1년이 남았다고는 해도, 불확실한 스스로와의 도박을 계속 이어가고 싶지는 않았다. 시험장을 나왔을 때, 공교롭게도 엄마가 먼저 말을 꺼냈다. “미국으로 유학 갈 생각 있니?” 하염없이 시험장 앞에서 기다리던 엄마는, 같은 처지의 학부모들을 바라보며 무슨 생각을 했을까. 영재고에 입학한다 한들, 보게 될 건 결국 똑같은 여자들, 반복되는 구룡터널을 지나는 대치동 라이딩, 끝이 보이지 않는 성적 전쟁이니까. 그건 앞으로도 최소 3년은 계속될 풍경이었다. 그렇게, 그날 난 대치동에서 빠져나왔다.


미국의 과학고등학교

환상을 품고 도착한 미국의 과학고는, 생각보다 영재고와 다르지 않았다. 공부의 밀도도, 양도, 경쟁의 분위기도 그대로였다. 단 하나 다른 게 있었다면, 비용이 급격히 늘었다. 비자 문서에 적힌 학비 뒤의 0의 개수가 눈에 들어올 즈음, 나는 미국 대학 입시에 본격적으로 돌입했다. 엄마는 이맘때부터 각양각색의 과외 선생님을 붙여주기 시작했다. 별의별 코딩 대회를 준비해 주는 튜터, AP 시험 기출문제를 해설해 주는 수업, 심지어는 몇 백, 아니 몇 천만 원을 들여 받는 에세이 컨설팅까지. 이 금액이 믿기지 않을지도 모른다. 하지만 계산기를 대충 두드려봐도, 그 한 해에 나에게만 들어간 비용은 1억이 넘었을 것이다.


어떻게 들릴지 모르겠지만, 내가 아는 한 우리 집은 이 정도 규모의 유학을 감당하기엔 형편이 넉넉지 않았다. 부모님의 연봉 대부분이 내 유학비로 나갔고, 그 돈은 대개 아빠 주머니에서 나왔다. 엄마는 내 학비를 대고 난 뒤, “돈 없다”는 말을 입에 달고 살던 아빠에게 더 많은 돈을 쪼아냈다. 그렇게 모인 돈은 알게 모르게 내 과외와 컨설팅비로 다시 돌아갔다. 방학 때 한국에 돌아갔을 때, 아빠가 몇 날 며칠 저녁을 맨밥에 젓갈과 깻잎만 얹어 먹는 모습을 본 적이 있다. 그런 와중에도 아빠는 티 한 번 내지 않은 채나에게 항상 “먹고 싶은 거 시켜 먹어라”라며 카드를 쥐어주곤 했다. 생활은 빠듯했고, 엄마와 아빠의 다툼도 잦아졌다. 모든 언쟁의 중심에는 돈이 있었고, 그 뒤에는 내 유학이 자리 잡고 있었다. 한국에 남아 있는 내 쌍둥이로부터 ‘이혼’이라는 단어가 나왔을 때, 난 정말 무서웠다.


그리고 이 감사해야 할 부담감은, 결국 내 주위를 둘러싸고 있던 거품들을 마주하게 만들었다. 허겁지겁할 수 있는 최대한 많은 대회에 나가고, 대외활동과 동아리 활동을 억지로 채워 넣었다. 그렇게 본격적으로 대학 지원서를 쓰기 시작했다. 부모님이 무리해서, 말도 안 되는 학비를 감당하면서까지 나를 사립 고등학교에 보낸 데에는 분명 MIT에 대한 기대가 있었다. 그 학교는 매해 MIT에 수 명을 보내는 소규모 명문이었고, 나 역시 그 흐름에 편승할 수 있으리라 생각했을 것이다.


하지만 나는 내가 부풀려 놓았던 ‘실력’을 끝내 진짜 실력으로 바꾸지 못했다. 미국의 고등부 수학 올림피아드(AMC)나 코딩 대회에서도, 실력보다 좋은 점수를 얻기 위해 부정적인 방법을 쓰곤 했다. 그렇게 간신히 MIT에 지원할 수 있는 수준의 성적을 맞췄고, 원서를 제출했다. 부모님은 기대에 부풀어 있었지만, 나는 알고 있었다. 떨어질 거라는 걸. 내 실력이 부족하다는 걸. 올림피아드 성적이 압도적인 것도 아니고, 대외활동이 경쟁자들에 비해 특별한 것도 아니었다. 그럼에도 난 끝내 진실을 말하지 못한 채, 계속해서 원서를 냈다.




그렇게 탈락을 확인한 건 기숙사 침대 위였다. 휴대폰 화면엔 “We regret to inform you…”로 시작하는 문장이 떠 있었다. 아무도 없는 방에서, 조용히 화면을 꺼버렸다. 예상했던 일이었지만 막상 눈으로 확인하니 속이 뻐근했다. 설상가상으로 붙은 대학은 딱 한 곳, 그리고 학비가 말도 안 되게 비싼 학교였다. 그날 밤, 결국 부모님께 털어놨다. 붙은 학교는 학비가 너무 비싸고, MIT는 떨어졌다고. 조심스럽게 말을 꺼냈는데, 예상과 달리 두 분 모두 담담했다. 놀라울 정도로. 엄마는 “괜찮아, 네가 얼마나 애썼는지 아니까”라고 했고, 아빠는 “원래 그런 거야. 맛있는 거 시켜 먹고 기분 풀어.”라고 했다. 마음이 이상했다. 혼나거나 실망한 기색 대신, 그냥 그대로의 나를 받아들여주는 느낌이었다. 왜 그 말을 듣는데 오히려 더 미안하고, 더 울컥했는지 모르겠다.


그날 이후로 무언가 미세하게 바뀌었다. 세상이 드라마처럼 뒤집힌 건 아니었다. 여전히 입시는 끝났고, 여전히 학비는 부담이었고, 여전히 나는 내가 누구인지 몰랐다. 하지만 단 하나, 분명해진 게 있었다. 이제는 아무에게도, 그리고 나 자신에게조차 거짓말을 하지 않겠다는 결심이었다. 노력하는 척, 아는 척, 괜찮은 척—그 모든 척들이 내 삶을 지탱해 온 기둥처럼 서 있었지만, 나는 그날 처음으로 그것들을 내려놓기로 했다. 엄마의 조용한 위로와, 아빠의 무심한 다정함은 마치 오래전부터 준비된 신호 같았다. "이제 그만 괜찮아도 된다"라고.


그러자 거품이 서서히 빠지기 시작했다. 오랜 시간 억지로 부풀려놓은 말들과, 과장된 실적들과, 남의 시선을 위해 짜낸 서사가 하나둘 꺼져갔다. 대신 아주 작고, 아주 조용한 것들이 보이기 시작했다. 누가 시키지 않아도 혼자 궁금해서 파고들었던 코드 한 줄, 밤새워 붙잡았던 에러 하나, 아무도 몰랐지만 혼자 뿌듯했던 순간들. 그게 진짜 내 실력이었고, 그게 진짜 나였다.


나는 결국 한 대학에 진학했고, 여전히 부족하다. 여전히 실수하고, 여전히 때때로 허세를 부리고 싶은 충동이 찾아온다. 하지만 이제는 그 충동에 오래 머무르지 않는다.


나의 세 가지 레이어

지금 생각해 보면, 나는 처음부터 스스로 완성된 존재가 아니었다. 나는 단지 화면 위에 무언가를 띄우는, 표면의 존재였고, 엄마는 언제나 나보다 앞서 데이터를 불러오던 사람이었고, 아빠는 조용히 모든 걸 뒷단에서 지탱하던 서버 같은 존재였다. 나는 그 위에 얹힌 마지막 레이어였을 뿐이다. 그 레이어가 자꾸 고장 나고, 작동하지 않았던 이유는 나 혼자 굴러가는 줄 알았기 때문이다.


이제는 조금 안다. 한 시스템이 무언가를 제대로 보여주기 위해선, 언제나 세 개의 레이어가 필요하다는 걸. 그리고 나는 그중 가장 위에 떠 있는, 가장 덧없고 불완전한, 하지만 가장 많은 것을 드러내는 면이다.

엄마는 언제나 데이터를 끌어오고 있었고, 아빠는 묵묵히 그 데이터를 만들어내고 있었다. 나는 이제야, 그 위에서 나 자신을 조심스럽게 그려나가기 시작했다. 더는 거품처럼 부풀려진 허상이 아니라,


세 겹의 진실이 만들어낸, 하나의 조용한 화면으로.

작가의 이전글테슬라 인턴 10주차