작은 일에서 큰 시스템 보기

2023-02-05
Cover Image for 작은 일에서 큰 시스템 보기

아마존 웹 서비스에서 Glue라는 서비스를 개발하고 있는 개발자 김다정입니다.

어떻게 처음 개발을 접하게 됐나요?

대학교를 컴퓨터 공학과로 가게 되면서 처음 개발을 접하게 되었어요. 처음 컴퓨터 공학과에 가고 싶다고 생각했을 때 이 과에서는 뭘 하는지 찾아보고, C 프로그래밍으로 "Hello World"까지만 해보고 할 만하겠다 싶어서 가게 됐어요.

컴퓨터 공학과에 가고 싶다는 생각은 어떻게 하게 됐나요?

고등학교가 이과여서 이공 계열에 있는 직업 위주로 생각하고 있었고, 컴퓨터 공학과는 자연스럽게 가고 싶다고 생각하게 된 것 같아요. 제가 무언가 만들고 문제 해결하는 걸 좋아하는 성격이에요. 여러 가지 직업군 중에서 후보를 몇 개 골라봤을 때 컴퓨터 공학과가 저와 잘 맞는 것 같았고, 저는 처음부터 한국 기업에 들어갈 생각은 별로 없었기 때문에 미국에서의 전망을 알아본 후에 괜찮겠다고 생각하게 됐어요.

개발자로 계속 일해도 되겠다고 생각한 이유

여기에는 현실적인 이유가 많이 있었어요. 미국이라는 환경에서 제가 이민자로서, 여성으로서, 마이너리티로서 선택할 수 있는 옵션이 많지 않아요. 그래서 일을 했을 때 성과 위주로 가치 판단이 되는 직업, 그중의 하나가 개발자라는 생각을 많이 했어요. 또 이 직업이 가지고 있는 문제 해결에 대한 부분이 저랑 잘 맞는 것 같아서 계속해도 괜찮겠다고 생각했고요. 4~5년 해봤는데 아직도 여기 있는 거 보면 계속해도 괜찮은 것 같아요. 그런데 아직도 계속하고 있는 생각은 있어요. 내가 계속 이 직업을 가지고 있어도 되는지, 아니면 다른 직업을 또 찾아봐야 하는지, 뭐가 더 나은 길인지 계속 생각하고 있어요.

고등학생 때 내렸던 판단이 지금까지 맞았군요

네 맞았든지 아니면 제가 그냥 맞도록 저 자신을 고쳐서 살았던지 그랬던 것 같아요.

컴퓨터 공학과에서 배운 것

솔직히 말씀드리면 그때 배운 걸로 먹고살고 있다고 생각하고 있어요. 많은 분이 컴퓨터 공학과에서 배우는 게 실무에 가면 소용이 없을 때가 많다고 말씀하실 때가 있어요. 그런데 다행히 저한테는 도움이 되게 많이 됐어요. 그때 배웠던 이론적인 지식을 기반으로 새로운 것들을 배울 때 남들보다 조금 더 빠르게 할 수 있는 장점이 있었던 것 같아요. 저는 성적이 엄청 좋은 건 아니지만 공부를 열심히 했었던 스타일이라서 수업을 굉장히 꽉꽉 채워서 들었어요. 한 학기에 전공만 다 채워서 21학점을 들은 적이 있을 정도로 어려운 과목들을 많이 들었어요. 그게 도움이 많이 됐던 것 같아요. 커리큘럼 맞춰서 그냥 다닌 친구들도 많은데, 이야기를 들어보면 그것도 굉장히 도움이 많이 됐다고 해요. 아무것도 안 하고 4년을 보낸 것 같은데 졸업하고 나서 전공을 하지 않은 다른 분들과 비교해 보면 차이가 크게 난다고 하더라고요.

컴퓨터 공학과에서 처음 개발하면서 더 노력해야 했던 부분이 있었나요?

전공을 하면서 2학년 때까지는 그냥 버틴 것 같아요. 무언가를 이해하고 하는 게 아니라 고등학교 때 시험 보듯이 외워서 했거든요. 예를 들어서 알고리즘 문제가 있으면, 저는 해법까지 다 외웠어요. 이해는 안 되는데 시험은 봐야 하잖아요. 높은 점수를 바라지는 않지만, 재수강은 하면 안 되니까 그렇게 외우면서라도 버텼던 것 같아요. 그러고 나서 이제 취업하려고 할 때 다시 공부를 했어야 됐어요. 저한테는 이런 부분이 노력인 것 같고, 계속해서 제가 해야 하는 일인 것 같아요. 지금도 6개월에서 1년에 한 번씩 학교에서 배웠던 것들을 복습하고 있어요.

미국 기업으로의 취업 준비는 언제부터 시작했나요?

대학교 4학년 때 보통 취업 준비를 많이 시작하는데, 저는 아예 다른 트랙으로 갔어요. 주위 친구들이 인·적성을 준비하고, 취업 강좌 이런 과목을 수강할 때 저는 처음부터 코딩 인터뷰를 준비하고 이력서를 보내기 시작했던 것 같아요. "Cracking the coding interview"라는 알고리즘 책을 가지고 다니면서 공부했었고, 인터뷰 같은 경우에는 시차 때문에 새벽 3시에 학교에 남아서 했던 적도 있어요.

한국에서 개발자로 일하는 것은 생각해보지 않았나요?

그렇죠. 왜냐하면 저에게는 노동 환경이 큰 이유 중 하나거든요. 만약에 한국에 있었으면 다른 직업을 하지 않았을까 하는 생각이 들어요.

처음 일할 때 어떻게 직군을 정했나요?

처음 지원할 때 두 곳에 지원을 많이 했었는데, 첫 번째는 방산업체에 지원을 많이 했고 두 번째는 제가 배웠던 Spring Framework를 사용하는 곳에 지원을 많이 했어요. 그렇게 지원을 해서 제가 대학교에 있을 때 미국에 있는 스타트업에서 인턴처럼 무급으로 일하게 됐어요. 그 당시에는 당장 12개월 이내에 직업이 없으면 안되는 상황이라서 많이 생각할 여유가 없이 기회가 왔을 때 바로 일을 시작하게 된 것 같아요.

인턴 생활에서는 어떤 일을 했나요?

자바 개발자로 들어갔고 Spring Framework를 사용하는 곳이었는데, 처음부터 백엔드 쪽을 시켜주지는 않더라고요. 처음에는 JQuery랑 Groovy라는 자바 비슷한 언어 두 가지를 가지고 프론트엔드 쪽을 많이 했어요. 가릴 처지는 아니어서 그렇게 팀 내에서 좀 일을 좀 하다 보니까 백엔드 일을 한번 해보라고 하더라고요. 그래서 그때부터 이제 스프링을 하기 시작했어요. 그렇게 인턴 생활을 했죠.

인턴 이후 어떤 회사에서 처음 일을 하게 되었나요?

"carsdirect.com"이라는 차를 리스팅 해주고 딜러랑 연결해 주는 리테일 회사에서 일을 했어요. 차를 빠르게 검색할 수 있도록 해주는 분석 엔진인 엘라스틱 서치라는 걸 배웠어요. 또 카 프라이싱 엔진이라는 가격을 정해주는 엔진에 대해 담당했습니다.

첫 번째 회사에서 일을 하면서 기억에 남는 경험이 있다면

기억에 남는다기보다는 조금 당황했던 경험이 있는데, 디렉터가 입이 험했어요. 한번 제가 요구사항 하나를 놓쳐서 배포가 지연됐는데, 휴가 기간이 껴 있어서 제가 맞추지를 못했어요. 그때 저한테 뭐라고 하셨던 게 기억나요. 그전까지는 잘해주시다가 갑자기 너 때문에 릴리즈가 안 됐다고 하시더라고요.

그 당시의 생각

내가 여기서 살아남으려면 뭘 더 공부해야 하지? 어떻게 하면 여기서 계속 있을 수 있지? 뭘 더 배워야 하지? 이런 생각들을 많이 했던 것 같아요. 처음 회사에 들어갔을 때 제이쿼리로 뭘 하라고 하는데 제가 제이쿼리를 모르잖아요. 그래서 퇴근하고 따로 HTML이랑 제이쿼리를 공부한다든지 일과 관련된 공부를 했었어요. 회사에서 무언가를 만들 때는 제가 처음부터 다 만드는 게 아니에요. 제가 너무 주니어이기도 하고, 이미 시니어분들이 기반 작업을 다 해놓으면 저는 그냥 말하자면 몇 줄 짜는 코딩만 하는 거예요. 그러면 제가 몇 줄만 이해하고 있는 상태니까 집에 가서 처음부터 다시 해보는 거죠. 버추얼 머신에서 직접 설치해보고 회사에서 돌아가는 건 이렇게 돌아가겠구나 하면서 공부를 했어요.

이직을 결심하게 된 계기

페이가 조금 낮았어요. 제가 당시에는 한국에서 왔다 보니 아는 분들도 없고, 어느 정도를 받아야 하는지도 모르겠더라고요. 그래서 조금 성급하게 결정을 한 게 있었던 것 같아요. 그렇게 첫 번째 회사에서는 1년 조금 넘게 있다가 이직을 하게 됐어요.

어떤 회사로 이직하게 되었나요?

"Amobee"라는 광고 회사로 이직하게 됐어요. Angular JS를 사용했고, 프론트엔드와 백엔드 둘 다 했어요. 제 업무의 80%가 스프링 관련된 백엔드 개발이었고, 나머지 20% 정도가 프론트엔드 개발이었어요. 처음부터 끝까지 제가 다 개발할 때도 있었고요. Amobee가 어떤 일을 하는 회사인지 설명하자면, 인스타그램이나 페이지 들어가면 광고가 많이 있잖아요. 한 회사가 여러 개의 sns 플랫폼에 광고를 넣어요. 예를 들어서 광고를 하고 싶어하는 회사가 있으면 페이스북, 인스타그램, 트위터 등 여러 플랫폼의 광고를 하고 싶어 하는데 그 광고를 매번 만드는 일이 귀찮잖아요. 그걸 통합해서 한 번만 만들면 알아서 다른 sns 광고 플랫폼에 연결해주는 역할을 하는 회사예요. 그중에서 저는 페이스북 api 팀에서 일을 했었어요.

Amobee에서 일하면서 기억에 남는 것이 있다면

매니저가 굉장히 좋았어요. 그래서 아직도 매니저랑 가끔 연락하면서 친구처럼 지내고 있어요. 그 당시에 저를 많이 배려해주셨어요. 회사가 산타모니카에 있었는데 저희 집에서 회사까지 교통체증 때문에 2시간 정도 걸렸거든요. 그래서 그때 당시에 새벽 다섯 시 정도에 출근하고 차에서 조금 자다가 회사에 들어갈 때가 많았어요. 그런데 매니저가 그걸 보고 일이 일찍 끝났으면 집에 가라고 하더라고요. 그래서 2~3시에 항상 집에 왔어요. 집에 돌아와서 일을 할 때도 있고 일이 없으면 그냥 놀 때도 있었죠. 또 보통 매니저라고 하면 우리 회사 내에서 뭘 하고 싶은지에 대해서 물어보거든요. 그런데 그분은 커리어 전반에 대해서 계속 물어보셨어요. 이걸 계속하고 싶은지, 다른 회사에 가고 싶은지에 대해서요. 그래서 제가 AWS 가기 전에 고민을 굉장히 많이 했어요. 왜냐면 매니저 님이 좋으니까 떠나기 싫더라고요. 그런데 매니저님이 저보고 가야 한다고, AWS에서 배울 수 있는 것만큼 여기서 못 가르친다고 말씀하시더라고요. 그렇게 마음을 정리했었어요.

AWS로 이직하게 된 계기

제가 Amobee에서 일 할 당시에 팀을 바꾼 적이 있는데, 바뀐 팀에 대해서 조금 실망을 하던 시기였어요. 제가 보통 회사에 실망을 하면 이력서를 다른 회사에 넣어보거든요. 그러다가 이제 AWS에서 인터뷰를 해보자고 해서 자연스럽게 그렇게 된 것 같아요. 큰 회사이기도 하고, 상식적으로 생각했을 때 좋은 기회이기도 하고요.

인터뷰 과정에서 어떤 준비를 했는지

주어진 시간 내에 알고리즘 문제를 푸는 것에 대한 준비를 많이 했어요. 화이트보드에 문제를 적고 30분 이내에 설명하면서 푸는 공부를 많이 했어요. 2주 동안 거의 하루 5시간씩은 알고리즘 문제를 푸는 것에 시간을 썼던 것 같아요.

AWS에서는 어떤 일을 했나요?

"AWS Glue"에서 서버리스 인프라를 구축하는 일을 5년 전 처음 들어갔을 때부터 같은 팀에서 지금까지 계속하고 있어요. 저희 팀은 가장 아래 단계에 있는 팀이라서 프론트엔드는 거의 할 일이 할 일이 없고 백엔드 개발만 계속하고 있어요. 분산 시스템 관련 일이라고 생각하면 될 것 같아요.

기존에 해보지 않은 인프라 작업이 어렵지 않았는지

팀원들이 많이 도와줘서 적응을 할 수 있었어요. 제가 들어갔을 때 AWS를 잘 몰라서 처음에는 AWS부터 공부를 했어요. 그러면서 학교에서 배우고 와서 다행이라는 생각을 많이 했는데, 공부를 하면서 필요한 네트워크나 분산 시스템에 대한 지식을 처음부터 배운다고 생각하면 적응을 못 했을 것 같아요. 어느 정도 알고 있지만 자세하게는 모르는 정도였으니까 잘 모르는 그 부분에 대해서 공부했죠.

일하면서 기억에 남는 경험

저희가 Glue 2.0 버전을 냈을 때예요. Glue는 데이터 프로세싱하는 서비스인데, 처음에는 이 프로세스를 시작하는 시간이 조금 오래 걸렸어요. 그런데 버전을 바꾸면서 그 시간이 굉장히 많이 내려갔어요. 처음에 이거를 해보자는 이야기를 들었을 때는 이게 정말 될까라는 생각을 많이 했어요. 그런데 정말 되는 과정을 봤던 게 기억에 많이 남아요. 안될 것 같다고 생각했던 일을 되게 만드는 과정이 저에게는 자세에 대해서 배우는데 공부가 많이 됐었던 것 같아요.

이전 회사들과 다른 점이 있다면

첫 번째로는 스케일이 가장 다른 것 같아요. 저는 스케일에 대한 훈련이 잘 안 돼 있으니까 처음에는 그냥 돌아가게만 만들었을 때가 많았거든요. 그렇게 되면 첫 번째로 받는 질문이 우리 트래픽 감당할 수 있는지예요. 스케일 때문에 생기는 제약이 굉장히 많거든요. 보통 스케일이 크지 않다고 했을 때, 트위터 API를 사용한다고 하면 호출하고 사용하면 될 것 같은데 이게 거의 불가능해요. 그러니까 일반적으로 생각했을 때 가능한 논리적인 사고가 규모가 커지면 불가능해지는 거죠. 두 번째로는 내결함성(Fault Tolerance)에 대해서 되게 많이 배웠어요. 그니까 한 줄 한 줄 내려가면서 만약 여기서 서버가 죽으면 어떻게 할지, 다음 줄 내려가서 여기서 서버가 죽으면 어떻게 할지 살펴보는 거죠. 그런 훈련이 거의 안 돼 있었던 상태여서 배울 수 있었어요.

요즘 하고 있는 고민이 있나요?

요즘에는 인프라를 계속해도 되는지에 대한 고민을 하고 있어요. 지금도 웹 api를 작성은 하고 있지만, 문제의 초점이 약간 다르다고 생각해요. 제가 생각하는 웹 개발은 제품에 초점이 많이 맞춰져 있고, 제품에 필요한 데이터를 어떻게 저장할지 api를 어떻게 설계할지에 대한 개발이거든요. 그런데 여기는 문제 자체가 스케일이 커지면 어떻게 할 건지에 대해서예요. 거의 모든 게 비동기로 돌아가거든요. 초점이 다르기 때문에 고민을 하고 있어요. 사실 이 고민은 들어왔을 때부터 계속해서 하고 있는 것 같아요. 서비스 특성상 계속하면서도 잘하고 있다는 느낌을 받기가 좀 힘들더라고요. 큰일이 터졌을 때도 저희는 가장 아래 단계이기 때문에 무조건 나가야 해요. 예를 들어서 데이터 센터가 파워가 나갔다고 하면 무조건 가야 해서 힘들 때도 있고요. 지금 5년 차인데도 계속하고 있는 걸 보면 하는 일은 만족하는데 스스로 계속 의구심이 생기는 것 같아요.

협업하기 좋은 동료란

저는 직설적으로 말을 하시는 분들을 좋아해요. 그냥 뭐가 잘못됐다 그러면 이거 잘못됐다 이렇게 말씀해 주시는 분들을 좋아하고요. 그런데 그게 꼬투리를 잡는 게 아니라 정말 뭐가 잘못됐으니까 잘못됐다고 하는 거잖아요. 그래서 그런 분들이랑 같이 일하는 걸 좋아해요. 저는 친절한 것을 바라지 않아요. 일할 때는 할 일만 잘하고 빨리 하면 좋다고 생각해요.

회사에서 잘 성장하는 방법

첫 번째는 아무리 작은 일이라도 제대로 처리하기. 두 번째는 큰 시스템 아키텍처를 보는 연습하기.

제대로 처리하기 위해서는 지금 내가 하고 있는 일이 뭔지를 알고 자기 자신한테 납득이 돼야 해요. 예를 들어서 프린트할 문자를 a에서 f로 바꾸라고 한다면 왜 이렇게 바꾸는지를 알아야 하는거죠. 일을 받았을 때 a에서 f로 바꾸라니까 하는 것과 왜 바꿔야 되는지를 알고 하는 건 다르다고 생각해요. 그다음에는 개발 환경에서 제대로 테스트하는 게 필요해요. 유닛 테스트, QA 테스트, 프로덕션에 갔을 때 어떻게 롤백할건지에 대한 생각을 전체적으로 해보는 게 도움이 많이 될 것 같아요. 왜냐하면 그 생각을 잘 안 하거든요. 누가 먼저 가르쳐주지는 않으니까요.

큰 시스템 아키텍처를 보는 연습은 회사의 제품에 대한 아키텍처를 보고 알아두는 거죠. 우리 회사는 어떤 스택을 쓰고 있고, 프론트엔드는 뭐로 되어있고, 그 프론트엔드와 백엔드는 어떻게 연결되어있고, 보안은 어떻게 이루어지는지. 예를 들어서 로드밸런스가 앞에 있다고 한다면 로드 밸랜서가 어디 있는지, 자체 데이터 센터에 있는 건지 클라우드에 있는 건지 api 데이터인지 아니면 ec2라든지 다른 클라우드 환경인 건지 알아두는 거죠. 이런 것들을 조금씩 알아가는 게 도움이 많이 돼요. 왜냐하면 결국 성장하기 위해서는 도메인에 대한 이해가 있어야 하거든요.

업무를 처리하는 방식

제가 최근에 "가정의 늪"이라는 글을 하나 썼어요. 조금 무식하게 들릴 수도 있는데, 한 줄 한 줄 내가 쓰는 코드를 다 확인해봐야 된다라고 썼었거든요. 같은 맥락에서 내 생각에는 api가 이런 걸 리턴할 줄 알았어. 내 생각에는 클라이언트가 이렇게 사용할 줄 알았어. 이런 가정을 안 하면 안 할수록 좋은 것 같아요. 저도 연차가 낮았을 때 이런 식으로 가정을 해서 코드를 푸시했는데 갑자기 서버가 폭발했을 때가 있었거든요.

블로그를 시작하게 된 계기가 있나요?

제 생각에는 영어권에는 이런 자료가 굉장히 많아요. 어떻게 하면 엔지니어가 될 수 있고, 어떤 공부를 해야 하는지에 대해 알려주는 정보가 많은 거죠. 그런데 그런 게 한국 플랫폼에서는 부족하다고 느꼈어요. 그렇게 되면 사람들이 돈을 내고 세미나를 간다든지 아니면 학원에 간다든지 이런 식으로 되는 것 같거든요. 그런 부분에서 도움이 됐으면 좋겠어서 작성을 했었던 것 같아요. "React.js, 스프링부트, AWS로 배우는 웹개발101"책을 출간하게 된 과정도 이런 책이 한국에 없어서 작성하기 시작하면서 출간하게 됐어요. 책의 내용은 마이크로소프트서비스 아키텍처를 구축하는 과정의 처음부터 거의 끝까지 다 들어 있어요. https 설정하는 방법, 로드 밸런서가 뭔지, dns가 어떻게 작동하는지에 대한 내용이 들어있죠. 학교에서는 이론만 배우니까 학교에서 알려주지도 않고, 회사 가서도 알 수가 없어요. 왜냐하면 회사에서는 직접 구축하는 환경이 아니라 이미 다 구축된 상태에서 나는 코드만 약간 얹는 느낌이거든요. 그래서 큰 그림을 그리기가 굉장히 힘들었고, 2년 정도의 커리어에 걸쳐서 배운 거죠. 그런데 이거를 2년이 걸려서 배울 만한 것도 아닌 것 같고 누가 잘 정리를 해놨으면 좋겠다 싶었어요. 전체적인 그림을 알려주는 건 영어권에서는 많지만 한국에는 없다고 생각되어서 책을 쓰게 됐어요.

요즘 공부하고 있는 것

요즘에는 분산 시스템 공부를 계속하고 있어요. 기본적인 알고리즘 복습도 얼마 전에 했고, 최근에는 플러터 공부를 시작했어요.

다정님에게 개발이란

제 직업. 그런데 저에게 잘 맞는 직업이라고 생각해요. 또 감사한 직업이라고 생각해요. 약간의 수단인 것 같은데, 예를 들어서 만약에 제가 미술을 배웠다고 한다면 미술이라는 수단으로 작품을 만들 수 있는 거죠. 저는 뭔가 만드는 걸 좋아해서 페인팅이나 음악을 취미로 하거든요. 음악을 할 때도 멜로디를 만든다든가 이런 만드는 걸 좋아하기 때문에, 그냥 개발이라는 건 제가 뭘 만들 수단이라고 생각해요.

집중이 안 될 때 환기하는 방법

저는 생각이 많을 때 운동을 해요. 지금은 크라마가(krav maga)라는 이스라엘 무술을 하고 있어요. 그 전에는 카라데와 파쿠르를 했었고요. 체육관은 일정 시간이 되면 그냥 가고 있고, 그렇게 가서 운동하는 것 자체로 환기가 돼요. 만약 운동을 못 가게 된다고 하면 그냥 나가서 달리기를 하기도 해요.

앞으로 다정님은...

지금 하고 있는 것과 비슷한 걸 계속하면 좋을 것 같아요. 지금 제가 하기에 조금 벅찬 것 같은 프로젝트를 하고 있거든요. 프로젝트 매니징도 해야 되고 기술은 또 기술대로 복잡하고 해보지 않은 것도 많이 있고요. 이런 일을 익숙해질 때까지 두세 개 정도만 더 해봤으면 좋겠다는 생각을 하고 있어요. 지금은 이 프로젝트를 하면서 너무 힘드니까 안 힘들어질 때까지 반복을 하고 싶은 거죠. 개인적으로는 플러터로 앱을 만들고 플랫폼에 올려보고 싶어요. 또 기회가 되면 책은 아니고 다른 방식으로 블로그를 글을 쓴다든지 도움이 되는 걸 하고 싶어요.

작업하실 때 선호하시는 장소가 있나요?

회사요. 코로나 때문에 못 가는 상태라 재택을 하고 있는데, 회사에서 일이 잘 돼요.

취미

페인팅 가끔 하고, 피아노도 자주는 아니지만 가끔 쳐요. 계속 지속적으로 하는 건 운동인 것 같아요.

요즘 가장 중요하게 생각하는 것

건강.

시간과 돈을 구애받지 않고 직업 한 가지를 더 가질 수 있다면

저는 파쿠르 선수 했을 것 같아요. 그것만큼 계속 오랜 기간동안 했던 건 없었던 것 같아요.

개발자가 되고 싶은 사람들 또는 이제 막 개발을 시작하는 사람들을 위해 해주고 싶은 말이 있을까요?

쉽지는 않을 것이다. 쉽지는 않지만 불가능한 것도 아니다. 가볍게 들어오시는 분들도 좀 있다고 생각하거든요. 처음 시작할 때 할 수 있을 거야 하고 하는 것보다 힘들 수도 있다는 기대치를 설정해두고 시작하는 게 도움이 될 것 같아요.