티스토리 뷰
지극히 주관적인 글입니다.
2014년: 문과 출신이 이공계 학과에?!
저는 사실 문과 출신입니다. 요즘은 그게 대수인가 싶겠지만 제가 고등학교 다닐 때만 해도 문이과가 극명하게 나뉘어 있었고 이과 친구들의 은근한 무시도 종종 경험하곤 했습니다. 요즘에도 그럴까요? 아무튼 그때도 문과는 진로 결정이 가장 문제였습니다. 진학을 하려면 과를 골라야 하는데 마땅히 하고 싶은 건 없고 뭘 잘하는 지도 모르겠고... 그래서 처음에는 철학과를 골랐습니다. 뭔가 사는 것 자체가 문제 투성이라 해답을 알고 싶었던 것도 같습니다.
그러나 '철학과 졸업해서 밥 벌어먹고 살 수 있을까? 철학이 밥 먹여주냐?' 이런 생각이 계속 맴돌아서 쉬는 시간, 점심시간 그리고 야간 자율학습 시간에 틈틈이 '수박 먹고 대학 간다'를 뒤져가며 미래(전망)가 있어 보이는 대안을 찾아보았습니다.
그러다 문과에서 교차지원이 가능하며 전산, 경영 그리고 프로그래밍을 모두 배울 수 있는 학과를 발견했습니다. 프로그래밍을 배워서 유망한 개발자가 되거나 적성에 안 맞는 경우에는 전산, 경영으로 빠지면 되는 학과가 있다? 당시 모집인원 5x명 대에 경쟁률도 11:1 정도로 높지 않아서 어찌 보면 굉장히 전략적인 선택이라고 볼 수도 있을 것 같습니다.
얼마 지나지 않아 해당 학과의 최종 합격 타이틀을 거머쥐게 된 piatoss. 교차지원으로 공대에 간 문과 놈이 있다고 학교에 소문이 났는지 복도에서 마주치는 이과 친구들에게 '신분세탁'했다고 한 마디씩 주워듣는 게 그 당시에는 정말 언짢았었습니다. 그런데 막상 대학생이 되고 보니 그렇게 틀린 말도 아닌 것 같다고 생각하게 되는데...
2015, 2016년: 뉴비 절단기에 마음이 꺾이다
C는 1학년 1학기, C++은 1학년 2학기 그리고 운영체제는 2학년 1학기에 배운 과목들입니다. 학기별로 가장 공포스러웠던 과목들을 골라봤고, 결과적으로 제가 군대로 런해야만 했던 계기가 되지 않았나 싶습니다. 이때 수강했던 과목들은 거의 기억에 남아있지 않지만, 간략한 내막은 다음과 같습니다.
- C: '윤성우의 열혈 C 프로그래밍'을 교재로 사용함. 포인터가 굉장히 어려웠지만 어떻게든 넘어감. 손 코딩으로 시험 봄.
- C++: '윤성우의 열혈 C++ 프로그래밍'을 교재로 사용함. 객체지향으로 치명타 맞고 녹다운. 손 코딩으로 시험 봄.
- 운영체제: 아무것도 기억이 나지 않지만 공포가 유전자에 새겨짐. C로 시작하는 학점 처음 받아 봄.
그때 당시 저 과목들이 왜 그렇게 어렵고 힘들었는지 돌이켜보면, 그 자체로 어려웠던 것도 있지만 무엇보다 개발 자체에 '흥미'가 없었서 관련된 공부 자체가 '하기 싫은 공부'라고 느껴졌기 때문인 것 같습니다. 흥미가 없는 것을 하면 어렵고 힘들게 느껴지는 것은 당연한 일이죠. 실제로 개발 공부 자체를 진지하게 시작하게 된 것은 어떤 계기로 흥미를 가지게 되어서였습니다.
그렇게 마음이 꺾인 코린이는 2학년 1학기를 마치고 휴학기를 낸 뒤에 군대에 갔습니다. 군대를 전역한 뒤에도 한동안은 학교로 돌아가는 것을 주저했습니다. 다시 학교로 돌아가면 또 그 공포스러운 과목들을 마주해야 한다는 생각이 들었기 때문입니다. 그러다가 2020년 인생 업적이 군대 만기 전역 밖에 없다는 것을 깨닫고 대학 졸업장이라도 따기 위해 복학을 결심합니다.
2020년: 복학. 그리고 블록체인, 우리 구면이었네.
'2020년에 나는 뭘 하고 있었던 걸까'하고 자료를 찾아보다가 발견한 기말 리포트의 일부입니다. 수업을 들은 것은 기억이 나는데...
블록체인과 관련된 리포트를 작성했다는 진실에 도달할 수 없다... 이것이 골드 익스피리언스 레퀴엠...
저 리포트를 제외하고는 2020년에는 개발과 관련된 별다른 활동은 없었습니다.
2021년: Go 언어로 시작하는 개발자 생활
2020년 코로나19의 확산으로 인해 대학 수업이 전면 비대면으로 전환되면서 의도치 않게 수혜를 보지 않았나 싶습니다. 가장 컸던 부분은 통학을 위해 3시간을 왔다 갔다 하지 않아도 된다는 점이었습니다. 그렇게 남는 체력을 활용해서 1학기에 'Java'와 '알고리즘' 공부를 하다 보니 생각보다? 는 개뿔 어려운 것은 매한가지였습니다. 객체지향이 어려운데 왜 어려운지도 모르겠고 뭔가 간단명료하고 직관적이고 깔끔한 프로그래밍 언어는 없을까?
하다가 찾은 것이 바로 이 책. 'Tucker의 Go 언어 프로그래밍'입니다. 이 책을 통해서 처음으로 Go 언어를 접했습니다. 간결하고, import 구문이 지저분하지 않고, 강타입 언어로 직관적이고, 구조체 기반에 컴파일이 빠르고 단일 바이너리로 프로그램이 실행되는 언어. 성능도 성능 나름이지만, 그 이상으로 Go의 심미적 요소들에 순식간에 매료될 수밖에 없었습니다. 그리고 이 책을 통해서 Go 언어를 배우면서 개발에 대한 흥미를 느끼게 되었습니다. 시기적으로 2학기가 시작하기 전이었으니, 이때부터 개발에 대한 공부를 진지하게 시작하면서 깃허브를 관리하고 매일 알고리즘 문제를 풀기 시작했습니다.
2학기에는 대망의 첫 팀 프로젝트를 경험했습니다. 그러나 팀이 구성되었다 그뿐이지 개발을 할 줄 아는 사람이 있다고는 장담할 수 없지 않습니까? 운이 나쁘면 전생에 죄를 지은 누군가가 모든 짐을 져야만 하는 상황에 이를 수도 있습니다. 다행히도 개발은 저 혼자(?)하는 대신 3명의 팀원 분들이 팀장 역할과 발표 역할을 나누어서 맡아주셨습니다.
그렇게 만들어진 것이 바로 Vue 프레임워크에 기반하여 Firebase에 배포된, sketch-rnn을 사용해 그림을 그려주며 PWA로 제작되어 모바일 앱으로도 실행이 가능한 'Sketch It'이라는 앱입니다. sketch-rnn의 데모 버전을 클론 해서 만들었고 갤러리 기능도 추가하려고 했는데 당시에 시간이 없어서 못했던 기억이 납니다. 다행히 발표도 좋았고 팀장님이 고생했다고 선물도 주셔서 해피엔딩으로 마무리되었습니다.
2021년~2022년 상반기: 개발 암흑기
이 시기에는 많은 방황이 있었습니다. Go 언어를 배우면서 개발에 대한 흥미를 가지게 되었지만, 그 흥미가 어디로 향해야 할지 몰랐기 때문입니다. 그래서 무작정 이것저것 다 맛보면서 어떤 분야로 나아가야 할지 찾아보았습니다. 프런트엔드도 해보고 벡엔드는 당연히 해보고, 데브옵스도 해봤는데, 어느 분야도 이렇다 할 만큼의 흥미를 느끼지 못했습니다.
이 시기가 길어지다 보니 결과적으로는 여러 분야를 다 할 줄 아는 사람이 되었지만, 동시에 어느 것도 제대로 할 줄 모르는 사람이 되었습니다. 마치 튜토리얼만 찾아다니는 '튜토리얼 좀비'가 되어버린 것이죠. 지금 생각해 보면 이 시기에 컴퓨터 과학이나 운영체제, 네트워크 같은 도메인 지식을 쌓았더라면 더 좋았을 것 같습니다. 그런 부분에서 이 시기는 개발 암흑기라고 생각합니다.
2022년 하반기: 블록체인, 첫 번째 dApp 만들기
2022년 하반기는 블록체인개론 수업을 통해 제 인생의 향방을 재구성하게 되었습니다. 이전까지는 블록체인=코인이라는 인식이 지배적이어서 블록체인에 대한 관심이 없었지만, 이 수업을 통해 블록체인 기반의 인프라를 구축하고, 서비스를 개발하여 중개 비용을 줄이고, 투명성을 높이고, 보안성을 높이는 등 다양한 가능성을 이끌어낼 수 있다는 것을 알게 되었습니다. 이 당시의 신선한 충격은 원피스 1화를 처음 보았을 때의 충격과 비슷했습니다.
원피스 1화를 여는 첫 장면에서 골 D. 로저는 다음과 같이 말합니다.
그렇게 대해적 시대의 막이 오릅니다. 저는 어쩌면 블록체인이 불러올 새로운 시대의 도입부에 서 있는 것이 아닌가 싶습니다. 일상다반사에서 벗어난, 자세히 알 수는 없지만 도파민을 자극하는 낭만의 쓰나미가 느껴지지 않으신가요? 이 새로운 시대의 도입부에 막 발을 들인 지금, 블록체인을 통해 무엇을 할 수 있는지, 어떤 서비스를 개발할 수 있는지, 어떤 기술을 사용할 수 있는지에 대한 궁금증이 생겼습니다. 그래서 이 시기부터 블록체인을 중심으로 공부하기로 방향을 잡았습니다.
마침 블록체인 개론 수업의 기말 프로젝트로 Solidity를 사용한 스마트 컨트랙트를 개발하는 프로젝트를 진행하게 되었습니다. 2인 팀으로 진행이 되었는데, 팀원이 개발 경험이 없는 분이셔서 전체적인 프로젝트 구상만 함께 하고, 실제 개발은 제가 담당했습니다. 프로젝트는 'Buy me a coffee'에서 영감을 받아서 도넛을 기부하는 'Treat a Donut'이라는 dApp을 개발했습니다. 이 프로젝트를 통해서 스마트 컨트랙트를 개발하고, Goerli 테스트넷에 배포하는 과정을 경험했습니다. 그리고 React를 사용한 프런트엔드에서 메타마스크와 연동하여 스마트 컨트랙트와 상호작용하는 기능을 구현했습니다. 첫 블록체인 프로젝트인 만큼 많은 어려움이 있었지만, 그만큼 성취감도 컸던 것 같습니다.
2023년 3월 ~ 8월: 블록체인 부트캠프
여차저차 졸업장은 따게 된 piatoss. 하지만 현업으로 진출하기에는 아직 너무 부족하다는 것을 몸소 느낀 바, 진로를 탐색하던 중에 발견한 것이 블록체인 부트캠프였습니다. 사실 뭔가를 새로 배운다는 것보다는 팀 프로젝트가 3회 진행된다는 것에 크게 끌렸던 것 같습니다. 이전에 제대로 된 팀 프로젝트를 경험해 보지 못했던 서러움 만회! 팀원 찾으러 발품 팔러 다닐 필요 없이 배움에 대한 열의로 자원한 동기들과의 드림팀 결성! 팀워크! 와아ㅏㅏ!
그런 소년 만화 같은 느낌은 아니었지만, 그래도 남는 것들은 있었습니다. 먼저 세 개의 프로젝트부터 간단히 살펴보겠습니다.
1. Opensea 클론 코딩
지갑 연결하고 NFT 리스팅 하는 것까지는 얼추 구현했는데 나머지가 너무 핵심적인 기능들이라 '대실패'라고 밖에 볼 수 없는 프로젝트였습니다. 가장 핵심적인 문제는 그 당시에 '인덱서'라는 존재 자체를 몰라서 'NFT 마켓플레이스에서 온체인 데이터를 빠르게 불러올 수 있는 이유는 이벤트 구독을 통해 DB를 업데이트하고 DB에서 데이터를 불러와서가 아닐까?' 하는 의문에 초점이 맞춰지다 보니 MongoDB를 연결하고 거기에 API로 불러온 NFT 컬렉션 데이터를 저장하는 등의 헛짓거리를 하고 있었다는 것입니다.
근데 지금 생각해 보니까 열받네요. 인덱서 정도는 수강생들한테 알려줄 수 있는 거 아니야? 당신들도 잘 모르지?
2. PloHub
두 번째 프로젝트는 플로깅이라고 하는 조깅 하면서 쓰레기를 줍는 환경보호 활동 정보와 경험들을 공유할 수 있는 인센티브 기반 커뮤니티입니다. 가나슈를 사용해 프라이빗 블록체인 네트워크를 구축하여 이를 기반으로 토큰 보상 지급 및 NFT 발행이 가능하게 만들었습니다. 전체적인 아키텍처는 블록체인과 관련된 기능을 수행하는 서버와 프런트엔드와 직접 상호작용하는 서버를 분리하여 마이크로 서비스 아키텍처를 흉내 내 보았습니다. http 통신을 통해 프런트엔드와 서버, 서버와 서버가 주고받는 데이터의 필드명과 타입을 일관되게 읽고 쓸 수 있게 서로 다른 언어로 작성된 코드를 조율하는 부분이 특히 어려웠던 기억이 납니다.
3. CleanMile
세 번째 프로젝트는 두 번째 프로젝트에서 한 단계 진화하여 전반적인 환경 보호 캠페인을 관장하는 플랫폼을 만들어 보았습니다. 웹 2 경험에 기반하여 ERC-721, ERC-1155 토큰을 곁들인 보상 체계를 통해 사용자들의 적극적인 참여를 촉진하는 것이 주된 목적입니다. 전체 기간은 4주 정도였는데 기획에 일주일 이상을 소모해서 3주가 안 되는 시간 동안 개발을 마무리해야 했습니다. 생각보다 볼륨이 커져서 막판에 배포까지 허둥지둥 끝내고 발표 영상까지 준비하려고 정말 고생했던 기억이 납니다.
돌이켜보니 프로젝트 발표가 끝나고 피드백을 받을 때 '계정 추상화'의 필요성을 언급해 주신 분이 있었습니다. 그때는 그게 뭔지도 몰랐는데 지금에서야 돌이켜보니 프로젝트 전체를 관통하는 키워드였다는 생각이 듭니다. 이것을 좀 더 일찍 알아차렸다면 그 사이에 또 방황하는 일은 없었을 텐데... 젠장!
부트캠프를 통해 얻은 것
부트캠프를 통해 얻은 것 중에 가장 큰 것은 '사람'입니다. 오리너구리군(깃허브 프로필 사진에서 따옴)은 세 살 아래의 동생이자 부트캠프 동기입니다. 그리고 부트캠프에서 만난 어떤 이들보다 빠르고 매섭게 성장한 친구입니다. 이 친구와의 기연은 지금까지 이어지고 있습니다.
3월에 처음 만났을 때는 'npm install' 명령어를 어디에서 사용해야 되는지도 몰랐던 친구가 저와 발표 스터디도 같이 하고, 두 번째와 세 번째 프로젝트를 함께 마무리하던 시점에서는 하드햇으로 컨트랙트 배포+테스트, node.js로 백엔드 서버를 혼자 뚝딱 만들어낼 수 있을 정도가 되었으니, 일취월장을 거듭한 것이죠. 이게 직접 경험해 보니 6개월 한다고 아무나 할 수 있는 것이 아니었습니다. 게다가 이 친구가 '카피닌자'의 특성을 가지고 있어서 보여주는 족족 가져가서 자기 것으로 만듦ㄷㄷ. (그렇게 제 Go 언어 기술도 싹 카피당해서 저는 이제 남은 것이 없습니다...) 부트캠프를 수료하고 나서는 복학함과 동시에 블록체인 학회에 들어갔는데 얼마 전에 개발 부장인가 하는 감투도 썼다고 합니다. 행동력도 상당한 친구죠. 삼국지로 치면 '여몽'과 같은 대도독이 될 잠재력을 가지고 있다고 해야 할까요?
결론은 이 친구를 제가 키웠다는 겁니다. 바로! 내가! 뭔가 특별한 활동을 한 것은 아닙니다. 그냥 프로젝트 같이 하면서 코드 리뷰해 주고 컨트랙트 개발했으면 테스트도 작성해 보면 좋겠다고 이거 저거 은근히 권유한 것 밖에 없습니다. 이 친구는 그런 것들을 고깝게 듣지 않고 자신의 성장을 위해 기꺼이 받아들였다, 그뿐입니다. 반대로 제가 해준 조언들 고깝다는 태도로 듣던 사람은 대부분 탈주 닌자가 되었습니다(제가 탈주시켰다는 건 아님). 멘토를 자처한 적은 없지만, 제 말에 귀 기울 여준 오리너구리군 덕분에 저는 타인의 성장을 진심으로 응원하고 축하해 주는 스스로를 발견할 수 있었습니다. 혼자서만 정신수양 캠프에 다녀온 것 같은 느낌이긴 한데, 그만큼 이전에는 느껴보지 못했던 새로운 것들을 느껴보고 새로운 자신을 발견할 수 있는 좋은 기회였습니다. 앞으로도 이런 기회가 더 많이 생기면 좋겠습니다. 그리고 오리너구리군도 학회 및 대학교 생활 열심히 하면서 제가 그랬듯이 누군가에게 도움이 되는 사람이 되길 바랍니다.
한 가지 아쉬운 점은 나의 멘토를 찾을 수 없었다는 것. 실력자를 만나서 이것저것 배울 수 있기를 내심 바라면서 부트캠프에 지원했건만, 이세계 전생물처럼 내가 최강자였다는 엉뚱한 전개가 이루어지고 말았습니다. 그러다 보니 부트캠프에 참가하기 전에 느꼈던 부족함은 부트캠프를 수료한 뒤에도 여전히 가시지 않았습니다. 아니, 오히려 더 커졌습니다. 이쯤 되면 멘토를 찾아 어디든 가야 하는 게 맞지만, 오랜 방구석 생활로 사교 능력이 박살 난 제 머리는 그런 방향으로 굴러가지 못했습니다.
고민 끝에 내린 결론은 '폐관수련'. 365일 집에 있는데 평소에 하던 거랑 무슨 차이지?
글이 너무 길어지니 여기서 끊고 2편으로 찾아뵙겠습니다.
'생각 정리' 카테고리의 다른 글
2024년 7월 회고 - 내가 웃을 수 있는 이유 (0) | 2024.08.07 |
---|---|
오늘의 기묘한 모험 (0) | 2024.07.27 |
대면 면접 회고 (1) | 2024.07.11 |
전화 면접 회고 (0) | 2024.07.04 |
생애 첫 커피챗 짧은 회고 (0) | 2024.06.21 |