2022년은 개발자로 진로를 정하고 나에게 가장 의미있는 해인 것 같다. 고민도 많이하고 그만큼 성장도 많이 했지만 후회도 많았던 한 해였다. 회고를 분류별로 작성할지 시간 순서대로 작성할지 고민하다가 한 해동안 내가 했던 고민이나 그 결과를 잘 돌아보기 위해선 시간 순서대로 작성하는게 좋을 것 같아 후자를 택했다.
백엔드 공부 시작
2022년 2월쯤부터 백엔드 공부를 (아예 처음) 시작했다. 보통은 2-3학년 때 진로를 정하고 공부를 시작하는데 나는 학부 4학년이 시작될 시기에 시작했으니 좀 많이 늦었다고 생각이 든다.
근데 그렇다고 그전까지는 마냥 놀았냐고 하면, 그렇진 않았다. 뭔가 항상 무지하게 바빴다. 매일 4-5시에 잠들면서 과제를 쳐내고 전공 공부를 했다. 운이 좋게 성적도 잘 받아서 자연스럽게 교수님께서 대학원을 권유해주셨다. 지금 생각해보면 그때의 나는 딱히 하고 싶은게 없었고 찾아볼 의지도 없었다. 그냥 학교에서 하라는 것만 열심히 하는 수동적인 학생이었던 것 같다. 그래서 별 계획없이 당연히 졸업하면 대학원에 가서 공부를 계속 하겠거니~ 하고 생각해왔다.
ETRI 인턴
그래도 이왕 가는 대학원인데 좋은 대학으로 가고 싶었고, 대학원 입시 준비의 일환으로 한국전자통신연구원 겨울방학 인턴에 지원해서 합격했다. 연구원이다보니 사수님을 포함하여 모든 팀원분들이 석,박사님이셨고 자연스럽게 그분들과 진로 관련 상담을 할 기회가 많았다.
아이러니하게도 그 분들과 상담을 하면 할 수록, 대학원 진학을 접고 다른 공부를 하고싶다는 생각이 점점 강해졌다. 내가 하고 싶은 일은 사람들이 즐겨 사용하는 서비스를 개발하는 것이다. 대학원에 진학을 해야 겠다고 마음먹었던 이유도 컴퓨터 공학에 대한 더 깊은 지식을 쌓고 이를 바탕으로 더 고급 개발자가 되어야겠다는 생각 때문이었다. 그런데 대학원을 진학하는 게 어쩌면 같은 목표를 두고 굳이 돌아서 도착하는 결과를 낳을 수도 있겠다는 생각이 들었다. 결정적으로 취업에 대한 두려움 때문에 도피성으로 대학원을 택한게 아닌지에 대해 스스로에 대한 의구심이 계속 들었다.
그렇게 본격적으로 백엔드 공부를 시작하게 되었다. 많고 많은 직무 중에 백엔드 개발자를 선택한 이유는 뭔가 백엔드 개발자라는 이름에서 뒷단에서 묵묵히 서비스가 잘 돌아가도록 버텨주는.. 그런 이미지가 멋있어 보였기 때문이다.😙
약간 이런 느낌..?
내가 그런 일을 하면 지치지 않고 보람을 느끼며 오래 지속할 수 있을 것 같았다. 알고 있는 직무보다 모르는 직무가 훨씬 많기 때문에 고민하다가 우선 뭐라도 해야할 것 같아 그 중에 가장 하고 싶은 걸 골랐다. 1년이 지난 지금도 후회가 없는 걸 보면 잘 선택한 것 같다는 생각이 든다.
인프런 강좌
그렇게 공부를 하기로 하고, 어떤 방법으로 공부를 할 지 고민을 했다. 가장 눈에 띄는 건 아무래도 인프런의 김영한님 스프링 로드맵 이었다. 이 로드맵의 강좌들로 스프링, JPA 등에 대한 기초를 다졌다. 하반기에는 좀 여유로웠지만 상반기까지는 학부 수업도 18학점 가까이 들어야했어서 비중을 어떻게 가져갈지 고민이 많았는데 그래도 지난 2-3년간 그렇게 까지 열심히 노력해서 만든 성적을 4학년 때 망치기 싫어서 학부 수업과 백엔드 공부 비중을 4:6 정도로 두고 진행했던 것 같다.
나는 뭔가 어떤 기능이 어떻게 동작하는지 원리가 이해되지 않으면 그 기능을 쓸 때 알 수 없는 찝찝함을 느낀다. 특히, 중요한 과제나 프로젝트에서 사용할 땐 더 심한 것 같다. 그래서 이런 기능을 쓸 때 다르게 동작하는 경우는 없을까? 내 의도대로 항상 동작해줄까?
이런 것들을 고민하게 되는데 영한님의 강의는 단순히 기능의 사용법만을 알려주지 않고 내부 구조부터 동작 방식까지 밑바닥부터 차근차근 알려주는 강의이었기 때문에 이러한 고민 없이 공부를 해나갈 수 있었다.
멘토링
그렇게 2-3달 정도 인프런 강의를 들으며 백엔드 공부를 했다. 근데 막상 시작하니 뭐랄까.. 너무 막막했다. 내가 백엔드 개발자로 취업하기 위해 뭘 해야하는건지? 이렇게 계속 강의만 들어서는 아무것도 안 될 것 같은데 뭘 더 해야하는건지? 등 어디에 무얼 물어봐야할지도 모른채 강의만 듣고 있었던 것 같다. 창피하지만 백엔드 공부를 하겠다고 말하고 다니면서 그게 정확히 뭔지도 잘 몰랐다ㅜㅜ
다행히 얼마 지나지 않아 이곳 저곳에서 좋은 기회가 많이 생겨서 희미했던 방향성을 명확히할 수 있었는데 그 중 하나가 바로 인프런 CTO이신 동욱님과의 멘토링이었다.
너무 막막했던 상황에 멘토링이 정말 정말 큰 도움이 됐다. 멘토님 뿐만 아니라 다른 멘티님들의 질문을 들으면서도 지금 내가 준비해야 할 게 무엇인지, 무엇이 부족한지, 다른 사람들은 어떤 것들을 하고 있는지 등 어느정도 방향을 세울 수 있었다. 매번 멘토링 때마다 추상적인 이야기가 아닌 실질적인 이야기를 많이 해주셔서 (action item 등) 노션에 정리해두고 잊힐 때마다 보면서 참고하고 멘토링 때마다 생기는 의지를 잊지 않으려고 노력하고 있다.
인턴 & 컨퍼런스 참여
쎄트렉아이 인턴
여름 방학 두 달 기간을 활용해 쎄트렉아이 백엔드 부서에서 인턴 경험을 하게되었다. 실제로 수행한 업무는 웹 백엔드 개발이라기 보단 백엔드에서
돌아가는 소프트웨어 모듈 개발에 가까웠지만 그래도 백엔드 공부를 시작하고 백엔드 직무로 지원해서 합격한 첫 인턴이었기 때문에 뿌듯함이 컸다. 지난 ETRI 인턴 때는 개발 업무 보다는 문서 작업을 훨씬 많이 했어서🥺 현업 개발 문화를 경험해보지 못해 그것에 대한 갈망이 있었는데 이번 인턴을 통해 그러한 부분을 충족할 수 있었다.
쎄트렉아이에서 많은 것을 배우고 경험했지만, 가장 값졌던 것 몇 가지만 뽑으라면 아래 3가지를 들 수 있을 것 같다.
1. 협업 툴 사용 경험
우선 JIRA, Confluence, BitBucket 등 현업에서 사용하는 버전 관리 툴과 협업 툴을 사용해볼 수 있었다. Task가 생기면 사수님이 JIRA 티켓을 발행해 업무를 전달해주시고, BitBucket 레포 & 브런치와 연동해 개발을 하는 과정이 너무 신기하고 재밌었다. 열심히 개발하고 리뷰받고 리팩토링한 코드의 개발이 완료되어 task가 완료될 때 completed로 티켓을 넘기는게 너무나 뿌듯했다ㅋㅋ 이 과정에서 자연스럽게 예상 일정 산출이나 작업 내용 구체화, 업무 요구사항 파악 등의 요령을 익힐 수 있었다.
또 우리 팀은 인턴들에게 매일 매일 작업일지를 간단하게라도 작성하게 하는 문화가 있었다.
(당시 작성했던 업무 일지 일부)
그동안 공부나 개발을 하면서 매일매일 하는 일을 기록해둬야지 안 그럼 까먹어서 나중에 내가 뭐했는지도 모르겠다
싶은 적이 한 두번이 아니었고 그때마다 기록을 해야지! 다짐했지만 쉽지 않았었다. 근데 이번에 이렇게 반강제로 기록을 하다보니 어느정도 기록에 대한 막연함이 사라지고 습관을 들일 수 있었다. (물론 인턴 끝나고 다시 잘 못하고 있지만ㅜ) 동욱님께서 멘토링 때 하셨던 말씀 중에 공부하는 시간과 기록하는 시간은 1:1이어야 한다고 하셨던 게 너무나 와닿았던 경험이었고, 앞으로는 꼭 짧게라도 그날그날 공부한 것들에 대해 기록하겠다는 다짐을 하게 되었다.
2. 코드 리뷰 문화 경험
인턴으로 일하며 작성한 코드들에 대해선 사수님과 페어프로그래밍 방식으로 코드 리뷰를 진행했다.
이전까지는 토이 프로젝트나 과제 코드만 작성해봤기 때문에 원하는대로 프로그램이 동작만 하면 됐지 코드 품질에 대해서는 전혀 고민해본 적도, 필요성도 느끼지 못했었다. 그런데 회사에 와서 작은 모듈이지만 회사의 요구사항을 토대로 실제 운용될 코드를 작성한다고 생각하니 코드를 이쁘게 짜야한다는 생각 때문에 코드 한 줄 한 줄 작성하기가 너무 어려웠다.
이때 코드 리뷰가 큰 도움이 되었다. 아래 3번
항목에서 다시 얘기하겠지만 내가 처음 작성한 코드는 동작은 하지만 구조적으로 확장이 어렵고, 유지보수가 어려운 고약한 냄새가 나는 코드였다. 혼자 코드를 작성하고 말았다면 이를 깨닫지도 못했겠지만, 여러 번의 코드 리뷰를 통해 점진적으로 코드를 리팩토링해나가며 설계를 개선하는 경험을 할 수 있었다. 이 과정에서 여러 상황에 적합한 베스트 프렉티스를 체득할 수 있었고 점차 코드 작성에 자신감을 얻게 되었다.
인턴 경험에서 내가 가장 값지다고 느낀 부분이 바로 이 지점이다. 이전까지는 내가 짠 코드가 가치를 만들어낼 수 있을까? 에 대해 계속해서 의심했었는데 코드 리뷰를 받고 코드 품질을 개선하는 과정을 반복하면서 좋은 코드가 무엇인지 감을 익힐 수 있었고 누군가 내 코드를 보고 피드백을 주는 과정 자체를 통해 내 코드에 자신감과 책임감을 가질 수 있었다.
3. 클린 코드, 테스트 코드의 중요성에 대한 인식
인턴 기간 중, DMZ망의 host에서 폐쇄망의 host로 파일을 전송하는 모듈
을 개발하는 일을 한적이 있었다. Redis
를 사용해 DMZ host에서 전송할 파일과 시기에 대한 정보를 폐쇄망 host로 보내면 폐쇄망 host에 위치한 내가 개발한 모듈이 파일 전송을 시도하게 되는 구조이다.
이러한 요구사항을 받아들고 내가 처음 설계한 구조는 아래와 같다.
나름대로,, Redis
관련 설정 파일은 분리하여 프로그램 실행 인자로 주입할 수 있게 하고, 파일 전송은 Sftp
를 사용해 구현했지만 전송 프로토콜이 바뀔 수 있음을 고려해 FileTransferer
이라는 인터페이스도 추가했다. 하지만 이러한 설계는 (여러가지 작은 문제를 포함하여😂) 아래의 두 가지 큰 문제가 있었다.
- 상위 계층에 외부 의존성이 많아 단위 테스트가 어려워지는 문제
- 전송해야할 파일의 정보를 Redis가 아닌 다른 방식으로 수신할 때 (
실제로 개발 도중 요구사항이 추가됨..!
) 코드가 과도하게 수정되어야 했던 문제 (OCP 위반)
개발을 마치고 모듈이 정상적으로 파일을 전송하는 걸 확인했지만, 이러한 문제를 개선하고자 다시 코드 리팩토링을 진행했다.
먼저, 첫번째 문제이다. 기존에는 하위 계층인 RedisTransferController
에서 직접 설정파일이나 필요한 외부 의존 객체를 생성해서 사용했다. 이러한 구조다보니 테스트를 하려고 할 때 Redis 서버 등 외부 의존 객체가 준비되지 않으면 테스트가 불가능해지거나, 상황에 따라 테스트의 결과가 달라지는 문제가 발생했다.
테스트 코드 자체에 대한 경험이 없었기에 테스트 코드가 잘 동작하도록 작성하는건 둘째치고 고작(..) 테스트를 위해서 구현 코드를 변경해야 하는건가? 하는 의구심이 먼저 들었다. 나름 이쁘게 구현 코드를 작성한다고 해서 만들어진 코드인데 테스트를 위해 구조를 다시 변경하면서 설계가 오히려 더 지저분해지지 않을까 하는 생각때문에 고민을 많이 했었다.
이때 동욱님 블로그에서 내 상황과 유사한 상황에 대해 정리해놓으신 글을 보고 명확한 답을 얻을 수 있었다. 인용하자면, 동욱님께서는 블로그에서 '구현 코드의 테스트가 어렵다면 설계가 잘못되었을 가능성이 높다. 테스트는 구현 설계의 Smell을 맡게 해주는 좋은 수단이다.' 라고 말씀하신다. 이런 명확한 가이드를 통해 설계를 개선해야할 필요성을 깨닫게 되었고, 방법을 고민하다가 마치 DI처럼 외부 의존성의 주입을 최대한 상위 계층으로 미루는 방법을 찾고 선택하게 되었다.
위 코드에서처럼 기존에는 클라이언트 코드에서 직접 생성했던 외부 의존 객체를 팩토리 클래스에서 생성하여 생성자를 통해 주입해주는 방식으로 변경하였다. 이를 통해 클라이언트 (RedisTransferController
) 테스트 시에는 외부 의존 객체를 mocking한 상태에서 내부 로직만을 반복적으로 테스트할 수 있게 되었다.
다음으로, 두번째 문제이다. 기존 코드는 최상단 Application 부터 하단의 FileTransferer까지 결합도가 매우 높고 응집도가 낮은 상태였다. 이를 개선하기 위해 먼저 Application 하단에 TransferController
인터페이스를 생성하고 Redis
와 새롭게 추가된 방식인 Scheduler
각각에 맞는 구현체를 작성했다. 이렇게 하면 Application은 더 이상 구현체가 아닌 추상화 객체에 의존하므로 DIP 원칙을 만족하게 된다.
또한, 아래 이미지처럼 팩토리 패턴(+enum)을 적용했다. 이를 통해 파일 전송에 사용할 방식
을 실행 인자로 전달받아 팩토리 클래스에서 하위 객체를 생성해주는 방식으로 변경하여 파일 전송 방식
변경에 따른 클라이언트 코드 변경없이 애플리케이션 실행 시점에 결정할 수 있게 되었다. main 함수로 굉장히 간결하게 유지할 수 있었다.
이때 신기했던 경험은 위의 리팩토링을 진행할 때 앞서 작성해둔 테스트 코드가 있었기 때문에 코드가 많이 바뀌어도 지속적으로 테스트 코드를 돌려보며 기존 기능이 정상 작동하는지 확인하면서 안전하게 코드를 변경할 수 있었다는 것이다. 이 글을 쓰는 지금은 넥스트스텝 클린코딩 과정을 이수하며 테스트 코드를 작성하는게 당연하게 여겨지지만 인턴을 할 때만해도 테스트 코드를 작성해본 경험은 거의 없었다. 이때의 경험을 통해 클린코딩, 테스트 코드, TDD 등을 공부해야겠다는 생각을 갖게 되었고 이후 넥스트스텝 클린코딩 과정을 이수하게되는 결정적인 계기가 되었다.
인프콘
군 복학 직후에 코로나가 터져서 대형 개발 컨퍼런스에 단 한 번도 가보지 못했던 터라 개발자들간의 오프라인 네트워킹에 대한 갈망이 있었다. 2021년까지도 거의 모든 컨퍼런스가 온라인으로 진행되었기에 계속 아쉬워만 하고 있었는데 드디어..! 인턴 기간 중에 인프런에서 컨퍼런스를 연다는 소식이 들려왔다. 너무 가고 싶어서 참여 신청을 했지만 당연히 추첨에서 떨어져 슬퍼하고 있었는데,, 앞서 말했던 멘토링을 진행해주시던 동욱님께서 인프콘 초대권을 주셔서(ㅜㅜㅜ) 참여할 수 있게 되었다. 그때 정말 너무 기뻤던 기억이 있다.ㅋㅋㅋ
멘토링을 같이 받는 분들과 함께 다녔었는데 초반에는 어떻게든 모든 발표를 들으려고 막 동분서주하다가 가만 생각해보니 어차피 발표는 나중에 클립으로 제공된다고 했고.. 그럼 발표보다는 지금 현장에서만 할 수 있는 일을 하는게 더 좋지 않나? 하는 생각에 그때부터 열심히 기업 부스 줄을 서기 시작했다ㅋㅋㅋ
이런 기업들의 부스를 한 자리에서 모두 체험할 수 있다는게 너무 좋았던 기억이 있다. 열심히 부스 돌고, 굿즈도 야무지게 챙겼다. (대전까지 이고 가느라 너무 힘들었다ㅋㅋㅋ)
동욱님도 줌으로만 뵙다가 실제로 봬서 너무 반가웠고, (멘티분들과 다같이 사진도 찍었다😎) 발표도 나머지는 거의 안 들었지만 영한님의 마지막 발표는 꼭 듣고 싶어서 들었는데 많은 인사이트와 동기부여를 받을 수 있었다.
인프콘에 갈 때쯤엔 공부를 시작한지 반년 정도 지나고, 별 성과도 없이 계속 강의만 듣고 있어서 한참 지루한 즈음이었던 것 같다. 그래서 그냥 이렇게 열정 넘치는 개발자분들, 취준생분들을 실제로 만나는 것만으로도 큰 자극을 받을 수 있었고, 기업 부스 방문이나 발표를 들으면서 꼭 나도 저런 개발자가 되고 싶다는 생각을 정말 많이 가지고 돌아갈 수 있었던 것 같다.
프로젝트
효과적인 공부 방법에 대한 고민
공부를 시작하고부터 계속해서 들었던 고민이 있었다. 대략 공부해야 할 내용이 이렇게 많은데!!! 이걸 어떻게 다 공부하고 익히고 외우지?
이런 느낌의 고민이었다. 작년까지는 무조건 좋은 학점을 받기 위해 공부를 해왔으므로 관성적으로 개발 공부도 그렇게 했다.
예를 들면, 인프런에서 영한님의 스프링 강의를 들을 때도 이번에 듣고 모두 외워버리겠다는 생각
으로 들었다. 이해되지 않으면 계속 반복해서 듣고, 중요하다고 생각되는 내용은 모두 노션에 필기하며 공부했다. 하지만, 전공 공부와는 달리 이 공부는 시험 범위가 없고 심지어는 시험이랄것도 없다. 그걸 어렴풋이 알고 있었는데도 이렇게 하지 않으면 안 될 것 같다는 불안감에 계속 그렇게 공부했던 것 같다.
그렇게 몇 달을 공부하고보니 그동안 공부한 것에 비해 나에게 남아있는게 거의 없다는 생각이 들었고 너무 허무했다. 남들은 어떻게 공부를 하는거지? 나는 어떻게 공부를 해야 하는거지? 하는 고민이 계속해서 들었다. 많은 사람들이 나만의 학습법
이나 성장 가능성
의 중요성을 강조하는데 이걸 도대체 어떻게 만들고 키워야 하는걸까 고민이 많았다.
영한님이 말씀하시는 학자형 vs 야생형
이 이런 느낌인 것도 같았다. 근데 난 사실 학자형이라기 보단 비현실적 완벽주의
에 가까웠던 것 같다.
완벽히 공부가 끝나면 뭔가 기가막힌걸 만들어봐야지!!! 라고 1년동안 생각하면서 계속 강의만 주구장창 듣다가 결국 아무것도 만들지 못하고 되려 공부했던 것만 까먹는 결과를 만들어버렸다.
이러한 고민을 계속하던 중에 여러 외부 인풋이 있었다. 예를 들면, 동욱님께서 멘토링 때 학습:기록의 비중을 1:1로 가져가야 한다고 하신거나 영한님께서 인프콘에서 학습을 완료하기 위해선 학습 -> 체득 -> 정리
의 과정을 반드시 거쳐야 한다고 한 것이 있다. 그리고 그중 내게 결정적으로 도움이 되었던 것은 일본인 MS 개발자분이 쓴 책 ‘오늘, 또 일을 미루고 말았다’에 나오는 다음 문장이었다.
공부에 대해서 나는 나만의 신념을 가지고 있다. ‘목적 없는 공부’는 하지 않는다는 것이다. (중략) 배워두면 어딘가에 도움이 될 것 같았다. 하지만 그래서는 공부를 지속하기 힘들다는 사실을 깨달았다. 그래서 무언가 계기가 생기기를 기다렸다. (중략) 그에 대한 대답은 ‘일단 시작부터 한 후 그 과정을 기억한다’라고 답할 수 있겠다. (중략) 공부는 어디까지나 수단이다. 그 수단을 활용해 이루고 싶은 목적이 있을 경우에만 유용하다. (오늘, 또 일을 미루고 말았다 189-192)
평소 책을 잘 보진 않지만 제목이 너무 내 모습같아서 궁금함을 못이기고 읽었던 책인데 이런 문장을 발견하게 될 줄은 생각도 못했다. 머리를 퉁 치는 것 같았다. 난 지금까지 뭐하고 있었던 거지? 하는 생각에 후회, 아쉬움과 함께 한편으론 기대와 설렘이 느껴졌다. 계속 강의만 듣는다고해서 아무것도 되지 않는단걸 사실 알곤 있었지만 이때 확실히 깨닫게 되었던 것 같다. 알 수 없는 두려움이 사라지고 뭐든 만들어보고 싶은 욕심이 생겼다. 내가 지금까지 공부한걸 바탕으로 뭐라도 만들어보자. 그리고, 만들다 필요한 기능이 있는데 그걸 내가 모르면 공부해서 채워넣자는 생각이 들었다.
그래서 다음부터 얘기할 두 개의 해커톤에 무작정 지원해서 참가하게 되었다. (빌드업 무엇)
콜라톤
콜라톤
은 충남대학교 컴공 동아리인 모션
에서 주관하고 학교 SW중심대학사업단
에서 후원하는 모바일 앱 개발 공모전이다. 예전에 SW중심대학 공동해커톤에 지원했다가 광탈한 기억이 있어서 좀 무서웠는데 이건 동아리에서 하는 공모전이라 별도의 지원자격이나 제한이 없어 해커톤에 대한 경험을 쌓기에 좋은 기회였다고 생각한다.
콜라톤에 대한 자세한 후기는 별도의 글로 정리해두어서 여기선 개발 공부 방법
과 관련해 느낀점만 적었다.
팀에 개발자가 나 혼자뿐이었고, 앱 개발을 해야하는 해커톤이었어서 앱 개발을 위해 처음 사용해보는 Flutter나 Dart를 공부했어야 했다. 그런데 신기했던 것은 그동안은 그렇지 않았는데 앱 개발을 위해 인프런 강의를 듣고 개발하는 과정이 너무나 즐거웠다는 점이다. 왜 그럴까 생각해봤는데, 목표가 있는 공부와 개발을 할 수 있어서 그런게 아닌가 싶었다. 그동안은 취업을 위해서
혹은 언젠가 필요할테니깐
과 같은 마음으로 공부를 했다면 이번에는 당장 눈 앞에 보이는 결과물을 완성시키기 위해서 필요한 기술을 공부하고 코드를 작성하다보니 공부할 의욕도 넘치고, 밤을 세워 코딩을 해도 지치지 않고 재미를 느낄 수 있었다. 혼자서 모든 코드를 작성한 앱으로 결국 수상도 하게 되어 이런 것들을 더욱 크게 느낄 수 있었다.
이게 바로 나에게 맞는 학습 방법인 것같다는 생각이 들었다. 아직 이 앱에는 백엔드가 없다(두둥). 봄이 오기 전에 이 앱을 스토어에 출시하는게 목표인데 그때까지 이 앱에 지금까지 배웠던 것들을 녹여내보고 싶다. 그 과정에서 자연스럽게 백엔드, 스프링, DB 등등에 대해 복습하고 지식을 내 것으로 만들 수 있을 것이라고 생각한다.
또, 추가하고 싶은 기능이 있을 때 그 방법을 모른다면 그 부분에 대해 추가로 학습하고 바로 앱에 적용해볼 수 있을 것이다. 이러한 사이클을 반복하며 단순히 취업을 위해 쓰지도 않을 지식을 우겨넣는게 아니라 내 서비스에 활용해보면서 배운 지식을 체득할 수 있을 것이라고 기대한다.
GDG Daegu - devfest 2022 해커톤
한 번 해커톤을 성공적으로 마치고나니 뭔가 뚝딱뚝딱 만드는 것에 재미가 들려서 더 큰 해커톤에 참여해보고 싶은 생각이 들었다ㅋㅋ. 그래서 GDG Daegu - devfest 2022 참여 신청을 하고, 참여하게 되었다.
마찬가지로 여기에 따로 정리해두었다. 지난 해커톤과 달리 팀원 분들이 모두 개발자셔서 프론트와 협업도 할 수 있었고 여러 가지로 재밌는 경험이었다.
이번 해커톤에서 가장 크게 느꼈던 점은 너무나도 당연한 사실이지만 코드를 ‘잘’ 작성하는 건 나중 문제고 우선 스스로의 힘으로 서비스를 개발할 수 있어야 하겠다는 것이다. 그동안 코드를 이쁘게 짜야하고, OOP와 프레임워크의 의도에 맞게 설계를 해야하고,, 등등의 생각에 사로잡혀 간단한 서비스 하나 만들어보지 못한게 많이 후회됐다.
집에 돌아가서 공부하고 만들어보고 싶은 것들이 해커톤을 하는 내내 머리에서 맴돌았다. 잘 하는 것과 별개로 단순히 아는 것과 모르는 것으로도 큰 차이를 만들어낼 수 있다는 걸 깨달을 수 있었다. 이전의 경험과 더불어 이번 해커톤을 통해서도 앞으론 뭔가 배운 이후엔 정말 작은 서비스라도 꼭 직접 만들어보자는 다짐을 할 수 있었다.
교육
NEXTSTEP - TDD, 클린 코드 with Java 15기
쎄트렉아이에서 인턴할 때의 경험으로 클린코딩, 테스트 코드에 대한 공부를 해보고 싶었는데 NEXTSTEP 과정을 너무 경험해보고 싶어서 비싸긴하지만 큰맘먹고 수강하기로 했다. 그리고 너무 많은 것들을 배울 수 있었다.
사다리 미션과 볼링 2,3,4 단계 미션을 완료하지 못한채로 교육기간이 종료되었는데 박재성님께서 1/16까지는 피드백 및 PR 머지를 해주신다고 하여,, 남은 기간 동안 반드시 모든 미션을 완료해볼 생각이다. 그 이후에 이 과정에 대한 별도의 회고를 작성해보고자 한다!!
그래서 우선 2022 회고에서는 우선 지금 떠오르는 가치있었던 경험 몇 가지만 번호를 매겨 정리해봤다.
- 내가 작성한 코드에 대한 양질의 피드백을 받아본 경험
- 코드 리뷰를 위해 git의 보다 다양한 기능을 사용해본 경험
- 클린 코드에 대한 정량적인 기준을 두고 코드를 작성해본 경험
- 단계별로 요구사항이 추가될 때 마다 구조를 변경하고 코드를 개선하는 경험
- TDD로 개발해보는 경험
- 테스트 코드가 있어 동작하는 쓰레기를 마음껏 만들고, 좋은 구조로 계속해서 리팩토링할 수 있었던 경험
이 밖에도 정말 많은데, 다 기억이 안 난다.. (기록을 더 해둘걸..) 교육 과정이 찐으로 종료된 이후에 PR들을 다시 살펴보며, 기억하고 싶은 피드백들이나 느낀점들에 대해 꼭 정리해보고 싶다!
대학 생활
졸업 프로젝트
1년 간의 졸업 프로젝트를 마치고 드디어 졸업을 할 수 있게 되었다🥹. 우리 팀의 논문 주제는 한글 프로그래밍 언어 개발이었다. 구체적으로는 소나무
라는 한글 언어를 만들고 해당 언어에서 스마트 컨트렉트를 작성할 수 있는 언어인 Solidity
로 변환하는 컴파일러를 제작하여 개발자가 아닌 계약 당사자들이 스마트 컨트랙트를 쉽게 작성할 수 있도록 돕는 프로젝트이다.
1학기 때는 먼저 한글 언어의 명세를 정의하고 컴파일러를 제작했다. 그리고 2학기때는 언어의 보완과 함께 우리가 개발한 컴파일러를 모듈로 포함하는 간단한 스프링 백엔드 애플리케이션을 개발해 사용자들이 웹 상에서 쉽게 소나무 언어와 solidity 언어 간의 변환을 수행할 수 있도록 했다. 2학기 때는 다른 팀원이 컴파일러와 프론트엔드를 집중해서 맡아주고 내가 백엔드를 집중해서 개발했는데 스프링과 백엔드에 대해 공부한 지 얼마 안 되었지만 그 지식을 실제 프로젝트에서 활용해 볼 수 있어 개인적으로 의미가 있는 경험이었다.
졸업 학위 논문과 별개로 한국정보과학회에도 논문을 투고하여 제주도에서 열린 학회에 참석하여 발표를 하는 경험도 쌓을 수 있었다.
처음 생각했던 방향과 수준만큼의 결과를 만들어내진 못했지만 블록체인, Solidity 등 여러 가지 생소했던 기술과 언어를 익혀 결과물을 만들어냈고 또한 공부하고 있던 백엔드도 접목하여 웹 서비스가 가능하도록 구현해본 경험이 의미있었다고 생각된다.
전공 교과목 튜터링
2021년 2학기부터 3학기 동안 교과목 튜터로 활동했다. 교과목 튜터는 실습이 있는 전공 과목에 들어가서 학생들의 실습이나 이론 이해를 도와주게 된다. 말하자면 TA의 TA 같은 느낌? 이었다ㅋㅋ 전공 이론 및 실습에 대한 답변을 해주면서 이미 알고 있는 지식을 리마인드하기도 하고, 잊고 있었던 내용은 다시 찾아보면서 복습도 할 수 있어 좋았다. 한 학기에 70만원정도 적지만 지원도 받으면서 학부 생활을 할 수 있어서 더 좋았다ㅎㅎ
2021년 2학기부터 차례대로 시스템 프로그래밍
, 프로그래밍언어개론
, 컴퓨터네트워크
과목의 튜터로 활동했다.
이 중 가장 기억에 남는 과목은 프로그래밍언어개론
이었다. 이 수업은 ocaml
이라는 함수형 언어를 통해 함수형 프로그래밍에 대해 배우는 수업이다. 이 과목을 처음 들었을 때는 새로운 개념들이 너무 생소해서 감을 잘 못 잡았는데 한 번 감을 잡고 나니 함수형 프로그래밍을 왜 사용하는지 그 장점이 보이는 게 신기했었다. 또, 이때 배운 지식이 자바에서 람다식을 쓰면서 이론 공부를 할 때 도움이 되어 신기했던 경험이 있다. 이 과목이 튜터를 맡게 되면서 나와 비슷한 어려움을 겪는 학생들에게 도움을 줄 수 있어 뿌듯했다.
전공 공부, 성적
전공 공부는 재밌어서 나름 열심히 했었어서 성적은 좋은편인 것 같다..! 다만, 학부 2-3학년 때 너무 성적에만 집중하느라 그 밖에 공모전이나 프로젝트 같은 것들을 거의 경험해보지 못한게 아쉽다.
요즘은 대부분 학점을 보지 않으므로 학점 자체는 의미가 없다고 할 수 있겠지만, 이 성적을 받기 위해 열심히 공부했던 CS 지식은 면접 때나 개발 일을 하면서 언젠가 꼭 빛을 발할 것이라고 믿는다..! 근데 지금 까먹은 것도 많아서😂 면접 전에 시간날 때 틈틈이 복습해두려고 한다.
2023년엔
우선 지금 가장 신경쓰고 있는 것은 콜라톤으로 개발한 앱 플랭고
의 백엔드 코드를 완성하고 프론트를 개선해서 앱스토어에 출시하는 것이다. 이를 위해 필요한 지식을 공부하면서 코드를 작성하고 있다. 이 과정에서 스프링, DB, AWS, CI/CD 등 여러가지 경험을 쌓을 수 있을 것으로 기대하고 있다. 그리고, 프로젝트가 완성되면 이력서랑 포트폴리오를 우선 작성해볼 계획이다. 초안을 작성해두고 계속해서 회사들에 지원하면서 부족한 점을 파악하고 계속해서 이력서 & 포트폴리오를 개선해나갈 생각이다.
그리고 백엔드 공부도 계속 할텐데 이번에 강하게 느낀 것이, 토이프로젝트를 어떻게든 만들어서 계속 해야겠다는 것이다. 가상으로라도 기획안을 만들고 요구사항들을 만들어서 지금 배우고 있는 기술을 어떻게든 활용해볼 수 있는 프로젝트를 정말 간단하게라도 계속해서 만들어보는 방식으로 공부를 해볼 것이다. 이러한 과정을 통해 완벽주의라는 허상을 무너뜨리고 지식을 내 것으로 만들 수 있을 것 같다.
그동안 무시하고 있었던 CS 복습이나, 알고리즘, DB에 대한 더 깊은 지식, 자바의 기본에 대한 복습 및 공부도 진행하고 싶다. 가장 먼저 그동안 아무 생각 없이 써왔던 자바의 원리와 사용법을 좀 더 잘 알고 쓰기 위해 자바 스터디를 만들어 진행하고 있다.
아무쪼록 많은 것을 미루지 않고 잘 해낼 수 있는 2023년이 되었으면 좋겠다. 항상 생각은 많은데 게을러서 이상과 현실의 차이에 자주 괴로웠던 2022년이었던 것 같다. 올해는 목표만 보기좋게 세워두고 아무것도 못하기보다는 작은 것이라도 직접 만들고 공부하면서 조금씩이라도 매일매일 성장하는 개발자가 되고 싶다. 작년부터 스스로와의 약속으로 1일 1커밋을 하려고 하는 중인데, 이것도 올해는 최대한 빠짐없이 지킬 수 있었으면 좋겠다~!
'기록 > 후기, 회고' 카테고리의 다른 글
인프콘 2023 후기 (0) | 2023.08.31 |
---|---|
NEXTSTEP TDD, 클린 코드 with Java 피드백 정리 및 후기 (0) | 2023.01.22 |
GDG Daegu - devfest 2022 후기 (0) | 2023.01.21 |
쎄트렉아이 인턴 후기 (1) | 2022.12.07 |
인프랩 CTO 이동욱 님과의 멘토링 후기 (0) | 2022.04.04 |
백엔드 개발을 공부하고 있습니다.