우리 동네 고양이 - part 1

November 02, 2021

오늘은 볕이 좋다. 사실은 좋은 정도를 넘어서 너무 쨍하다. 뜨거운 계절 한가운데를 지나고 있는 중이니까. 그나마 한낮의 열기가 살짝 가시고 나니 좀 낫다. 놀이터에는 그네 타는 어린이들, 같이 온 어른들, 산책 나온 노인들, 시끄러운 중고딩들이 늘 자리를 채운다. 어떤 이들은 잠시 지나쳐 가고, 다른 이들은 한참 동안 죽치고 앉아있기도 한다. 아는 얼굴도 있고 모르는 얼굴도 있다. 방금 들른 어떤 아저씨처럼 괜히 친한 척을 하는 사람도 있다.

“안녕?”

반바지에 파란색 미키마우스 티셔츠를 걸친, 좀 철없어보이는 사내가 말을 건다. 하지만 낯선 이에게 함부로 대답할 일은 아니다. 미키는 부시럭거리며 휴대폰을 꺼내더니 찰칵, 찰칵 소리를 낸다. 그러더니 씨익 한번 웃고는 바이바이 손 한 번 흔들고 겅중겅중 가버린다. 끌끌끌… 휴먼, 너도 참 싱거운 족속이구나. 볕 좋은 바위 위에 한참 앉아있었더니 배가 따땃해졌다. 이제 입에 뭘 좀 넣어볼까? 저만치 떨어진 벤치에는 학교 끝난 아이들이 재잘대며 아이스크림을 먹는 중이다.

“야옹아~!”

아, 저기 온다. 빨강바지 아주머니가 오늘도 어김없이 먹을 걸 들고 오시는 중이군. ㅎㅎㅎ 이제 슬슬 움직여볼까. 하품 한번 하고, 기지개도 쭉 펴고.

*

미키는 약간 초조하다. 지금쯤이면 어느 정도 와꾸(?)가 잡혀야 하는데, 여전히 초기 단계에서 헤매고 있다. 어쨌든 뭔가 빈 껍데기라도 눈에 보이는 게 있어야 그 다음 진도를 나갈 수 있을 것 같은데, 썰렁한 지도 한 장 띄우는 것도 그냥 한번에 되는 건 아니었다. 끌끌.

그래도 같이 하겠다고 손들어준 W와 K가 있어 다행이었다. 사실 이 주제를 AWS 프로젝트(AWSome Builder Program, ABP라고 불리고 있었다) 그룹 채팅방에 소개했을 때, 약간 걱정이 되기도 했었다. 동네 길고양이 지도 서비스를 만든다고? 거 참 실속없다 얘, 하고 누군가 코웃음칠 것 같았다. 하지만 의외로 반응이 괜찮았다. W는 즉각 합류 의사를 밝혀왔고, K는 별도의 주제를 고민하다가 이쪽에 힘을 보태주기로 했다. 주제 및 설계 초안 발표 모임 전날, K의 설계 스케치 덕분에 미키는 그걸 바탕으로 문서를 완성하고 잘 발표할 수 있었다.

initial-architecture
'우리 동네 고양이' 프로젝트 구조 - 초기 설계

발표 모임에서는 여러 가지 제안들도 나왔다. 기본 설계에서 더 보완할 점들(S3 bucket에 이미지 파일을 업로드할 때 API Gateway 거치지 않고 직접 올리는 게 낫다는 것 등)과 함께, 이 서비스가 제대로 만들어진다면 추가될 수 있을 각종 고급 기능들에 대한 아이디어들도 쏟아져 나왔다. 오, 이런 호의적인 반응이라니. 일단 아이디어로는 어그로를 끄는 데 성공한 것 같군. 미키는 안심이 되었다. AWS 솔루션 아키텍트(SA) 분들도 많은 조언을 해주었는데, 특히 S님이 ‘우리 동네 고양이’ 라는 이름이 좋다고 해줘서 고마운 마음이 들었다. 미키가 은근히 신경쓰는 것 중 하나가 이름 짓는 것이었거든. 알아본 사람이 있는지 모르겠지만 프로젝트의 영어 이름 ‘My Neighbor Cats’ 도 미키가 좋아하는 ‘이웃집 토토로’의 영어 제목, ‘My Neighbor Totoro’ 에서 따온 것이었다.

그렇게 나름 관심을 받으며 시작한 프로젝트였다. 이제 그 기대에 부응하여 멋진 결과를 보여줘야 할 텐데, 날짜는 하루하루 가고 있고, 아직 제대로 시작은 못하고 있었다. 핑계가 있기는 했다. 이 프로젝트를 비롯하여 여러 참여 팀들의 AWS 계정을 인프라 팀에서 통합 관리해주기로 하였는데 아직 계정이 안 나오고 있었으니. 그래도 그와 상관없이 작업할 수 있는 것들은 미리 해놓아야 하는데…

작업 영역은 자연스럽게 나뉜 상황이었다. 프론트엔드 쪽은 미키가, 백엔드 쪽은 W와 K가 나눠서 맡게 되었고, 아무래도 아이디어 제안자인 미키가 주도적으로 전반적인 진행을 끌고 가게 될 것이었다. 약간 불안 요소가 있다면 미키가 AWS에 대해서 그렇게 썩 잘 알고 있지는 못하다는 것이었다. 물론 앞선 몇 개월간 매주 열심히 세미나에 참여하기는 했다. 가끔씩 졸다가도 곧잘 질문도 하고, 실습 시간에도 가이드 따라서 AWS 콘솔 들어가서 클릭, 클릭 열심히 인프라 구성도 해보고 코드 copy & paste 도 하고 그랬다. 하지만 실습 문서 따라해보는 거랑 직접 만들어보는 거랑은 많이 다를 거라는 건 미키도 이미 예상하고 있었다. 아마도, 거의 확실히, 수많은 삽질을 거쳐야 할 터였다. 그리고 그 삽질은 시작하자마자 시작된 셈이었다.

어쩌면 그 삽질은 미키가 자초한 면이 있었다. 백엔드 Lambda 함수에서 사용할 언어는 W, K와 논의해서 파이썬으로 일단 정하였는데, 프론트엔드 기술 세트는 미키 맘대로 정하면 될 상황이었다. 미키는 여기저기 대충 둘러보다가 Next.js와 TypeScript를 쓰기로 했는데, 둘 다 미키로서는 거의 처음 다뤄보는 기술들이었다.

“뭐, 어차피 배우자고 하는 실습 프로젝트이니까…”

주어진 시간이 많은 편은 아니라서 약간 모험이기는 했다. 익숙한 언어로 한다 해도 예상치 못한 문제들이 튀어나올 텐데, 낯선 기술을 써보겠다고? 하지만 이럴 때 아니면 언제 또 접해보겠나 싶은 생각이 들었다. 혹여 완성을 못한다거나 실패하더라도 큰 위험 부담은 없는 데모 프로젝트이니까. 물론 W와 K에게 미안하고, 다른 사람들 보기에 창피하겠지만. 한편, 그동안 세미나와 이 실습 프로젝트 전체를 관리하던 AWS의 I 님이 당부한 한 마디가 응원의 메시지가 되었다.

“개발자분들, 뭐 만들라고 하면 하나하나 다 이해한 다음에 하고 싶어하고 그러시는데요.
다 필요 없고요. 아무 거나 갖다 쓰고, 일단 돌아가도록 만들어놓고 생각하세요.”

미키는 고개를 끄덕였다. 그래, 일단 돌아가는 게 중요하지. 오늘도 지구는 돌고 있고, 세상은 넓고 카피할 코드도 많..을 것이다. 제발 그래야 할 텐데.

일차 목표는 Next.js의 기본 샘플 앱에 페이지 하나를 추가하고 그 페이지에 들어가면 지도가 나오게 하는 것. 지도 API는 카카오 것을 쓰기로 바꾸었다. 그냥 느낌으로는 네이버 지도가 더 일반적일 것 같아서 처음 설계에 포함시켰는데, 은근히 덜컹덜컹, 걸리는 것들이 있었다. 이것도 미키의 느낌일 뿐일 수도 있는데, 네이버 클라우드 플랫폼 가입 계정이 있어야만 지도 API를 쓸 수 있다든지 하는 것도 약간 불편했고, 예제 코드들도 뭔가 입맛에 딱 맞는 것이 쉽게 얻어걸리지 않는 느낌이었다. 카카오 지도 API는 기본 계정만 있으면 사용할 수 있고, 문서와 예제도 조금 더 깔끔하게 정리된 느낌이 들었다. 그래, 이걸로 하자. 동네 지도에 마커 표시만 할 수 있으면 아무 지도나 상관은 없었다.

코로나19 때문에 집에서 재택근무 중이던 미키는 오후 작업 시간이 거의 끝나서야 겨우겨우 API 대강 엮어서 지도 한 장을 띄울 수 있었다. Next.js 에 들어가 있는 server-side rendering 개념이 아직 좀 낯설기도 했고, TypeScript 코드에서 타입을 명시적으로 지정해주어야 하는 것을 빠뜨려서 자잘한 에러를 만나느라 삽질을 꽤 했다. JavaScript에서 타입 신경 안 쓰고 작업하는 것에 익숙해져서인지, 다시 타입을 꼭꼭 넣어주어야 하는 게 약간은 귀찮기도 했다. 얼핏 보니 ‘any’ 로 지정하면 대충 넘어가는 것 같기에, 미키는 일단 타입은 대강 생략하고 넘겼다. 약간 미안스런 마음이 들었지만 제대로 코드 정리하는 건 차차 해나가면 될 일이었다. I 님의 메시지를 다시 떠올리며 위안을 삼았다. “다 필요 없고요…”

API key 같은 것은 코드에 포함되면 안 되니까 .env.local 파일에 넣어놓고, 커밋을 만들어서 PR을 올렸다. 정리도 안 된 코드로 된, 사실상 남의 예제 베낀 수준의 썰렁한 페이지 한 장 넣어놓은 것이지만 작업의 시작을 알릴 필요가 있었다. 이제 여기서부터 덧붙이고 부수고 고치면서 만들어가면 될 것이었다. 뭐가 돼도 되겠지, 미키는 중얼거리며 맥북을 닫았다. 일단 오늘은 여기까지 하자.



(이어지는 글: 우리 동네 고양이 - part 2)

Links


Note

이 글은 아직 공사중인 다른 블로그 사이트에 먼저 쓴 글입니다. 그 사이트가 공개되면 출처를 남기겠습니다.


GitHub profile

Written by Jihoon LEE (aka Ernesto), a software engineer
GitHub: jihoon-ernesto

Loading script...