devFancy BE Developer

[2023년 회고] 다양한 활동으로 가득한 특별한 한 해

2023-12-31
devFancy

2023년은 20대 동안 개발 면에서 가장 활발하게 다양한 활동을 경험한 한 해이자, 휴식이 적은 한 해였다. 정말 순식간에 1년이 지나가버린 것 같다 🤔.

그동안 내가 무엇을 배웠고 어떤 성장을 했는지 하나씩 정리해보자. ✍🏻

2023년에 내가 공부하면서 배운 내용을 2023 Dev History에도 기록해두었다.

2023년에 참여한 모임

1월 ~ 5월: 신입 개발자를 위한 CS 스터디 모임
3월 ~ 11월: 히빗(팀 프로젝트) 
(8월: 대학교 졸업)
4월 ~ 9월: 우리FISA '클라우드 서비스 개발자'
8월 ~ 9월, 12월: 굿프렌즈(팀 프로젝트)
11월 ~ 12월: 우아한스터디 2023 겨울시즌 '내 코드가 그렇게 이상한가요?'
12월: 글또 9기 '글 쓰는 또라이가 세상을 바꾼다! 글쓰는 개발자 모임'

신입 개발자를 위한 CS 스터디 모임

2023년 1월에 시작한 신입 개발자를 위한 CS 스터디 5월 말까지 5개월 동안 지속적으로 운영해왔다. 그 당시에는 컴퓨터 기반 지식이 부족했고, 배워야 할 것이 너무 많아서 운영체제, 데이터베이스, 네트워크와 같은 컴퓨터 공학의 필수 과목을 매월 1개씩 스터디원들과 공부해나갔다.

스터디를 처음 운영해보는 경험이라 깊이 있는 학습과 철저한 기록을 목표로 삼았다. 그래서 우리 스터디의 목표는 CS 기본 지식들을 깊이 있게 습득하고, 공부한 내용을 설명하여 죽은 지식이 아닌 살아있는 지식으로 바꾸고자 했다. 여러 시행착오를 거치면서 더 나은 개선 방향을 찾고, 이러한 경험을 Issues와 Wiki에 정리해놓았다.

  • Issues에는 주제와 내용을 매주 정하고, 각 스터디원이 주제를 정해 발표하는 내용을 기록했다.

  • Wiki에는 외부인도 쉽게 이해할 수 있도록 주제를 카테고리별로 정리하고, 주차별로 기록했다.

5개월 동안 진행한 뒤 6월부터는 다른 교육과 사이드 프로젝트로 인해 참석하지 못했지만, 남아있는 스터디원들이 적극적으로 활동하여 12월 31일 현재까지 총 591개의 Star를 받게 되었다. 이는 1-3월에 80개, 5월에 150개, 11월에 500개로 거의 매일 Star가 증가한 것을 보며 뿌듯함과 신기함을 느끼게 되었습니다.

이 스터디가 많은 Star를 받은 이유는 다른 CS 스터디 모임보다 CS 지식을 깊게 공부하고 정리한 점과 외부 사람이 이해하기 쉽도록 작성하려고 노력한 점이라고 생각한다. 현재까지도 스터디원분들끼리 매주 온라인 회의로 스터디를 진행하시는데, 이런 분들과 같이 스터디를 할 수 있어서 영광이라고 생각한다 👏🏻.

해당 스터디에서 배운 내용은 아래와 같다.

신입 개발자를 위한 CS 스터디 모임에서 진행했던 내용

  1. 데이터베이스 - 데이터베이스 개론, 면접을 위한 CS 전공지식 노트, 학교 전공 서적
  2. 운영체제 - Operating Systems: Three Easy Pieces , 운영체제와 정보기술의 원리
  3. 네트워크 - 면접을 위한 CS 전공지식 노트
  4. 자바 - 자바의 정석

Spring, JPA 부분은 김영한의 스프링 완전 정복에 있는 강의를 혼자서 들으면서, 관련 내용을 블로그에 정리했다.

  • Spring - 스프링 핵심원리 기본편, 스프링 MVC 1편
  • JPA - 자바 ORM 표준 JPA 프로그래밍 - 기본편, 실전! 스프링 부트와 JPA 활용 1, 2

우리FISA 클라우드 서비스 개발자

4월 말부터 9월 말까지 우리FISA에 클라우드 서비스 개발자로 참여하면서 다양한 경험을 쌓았다. 이 기간 동안 어떤 일들을 경험했는지를 정리하고자 한다.

올 한 해의 절반에 해당하는 시간 동안 쌓은 경험들에 대한 상세 내용은 팬시의 우리FISA 학습 기록에서 확인하실 수 있습니다.

미션

약 5개월이라는 시간동안 여러 가지 지식과 경험을 쌓았다.

첫 달 동안은 프론트엔드의 필수 지식인 HTML, CSS, JavaScript 언어와 동적 JavaScript 프레임워크인 Vue.js를 학습했다. 이전에 HTML, CSS, JavaScript 언어는 몇번 사용해보지 않는 상황이였고, Vue.js는 사용해본 적이 없었다. 그래서 한 달이라는 시간동안 최대한 많은 학습을 배우려고 노력했다.

하나의 언어를 마칠 때마다, 토이 프로젝트로 간단하게 구현하는 미션도 받았다. HTML, CSS 언어 만으로 간단하게 웹 페이지를 만든다라던지, JavaScript를 이용해서 ‘코인 슬롯 머신 게임’ 과 같은 토이 프로젝트를 진행했다. 이때는 기본적인 문법을 익히는 데에만 집중했고, 개발하면서 설계와 기능을 구현하는 것 뿐만 아니라 리팩터링도 신경쓰면서 만들었다. 나는 거의 처음 학습하는 수준이였기에 프론트엔드 과정을 배우면서, 주위에 같이 듣는 사람들에게 많은 질문을 하면서 최대한 따라가려고 노력했다.

프론트엔드 과정이 끝나고, 곧바로 백엔드 과정에 대한 기술 지식들을 학습해 나갔다. 서비스의 기능 부분을 담당하는 백엔드 프로그래밍 언어인 Java의 기본 문법부터 관련 예제를 학습했고, 관계형 데이터베이스 관리 시스템인 MySQL를 학습하면서 개념 및 DB 조작 명령어를 학습했다. 이때, MySQL 기반의 Select, Join, SubQuery 문제에 대해 여러 문제를 풀었고, 이를 포스팅으로 정리했다.

이후에는 웹 애플리케이션 서버(WSA)인 Servelt, JSP를 학습하며 구현과 동작 원리를 이해해나갔다. Spring 프레임워크를 사용하면서 MVC 패턴을 적용하여 HTTP 요청 및 응답 처리 방식을 학습했다. 이전에 MVC 패턴에 대해 개인적으로 공부했지만, 깊이 있게는 하지 않았던 것 같다. 그래서 다시 한번 복습하면서 왜 MVC 패턴을 나오게 되었는지, 그리고 MVC 패턴을 사용하면서 장점은 무엇인지에 대해 직접 코드를 작성하면서 알게되었다.

그런 다음 Gradle 환경에서 Spring Boot와 JPA를 이용하여 CRUD 기능 개발과 MySQL을 연결하는 과정을 학습했다. 이전에 JDBC를 사용할 때 데이터베이스와의 상호 작용을 직접 다루어야 하는 번거로움과 복잡성이 있었다. SQL 쿼리를 직접 작성하고 결과를 매핑하는 등의 작업을 하면서 개발 생산성을 저하시키는 반면에, JPA는 이러한 ORM 기술을 Java에서 쉽게 사용할 수 있도록 표준을 제공해준다는 점이다.

백엔드 과정에서 배운 걸 기반으로 백엔드 과정의 마지막 5일은 토이 프로젝트로 ‘지각 면제권을 얻기 위한 퀴즈 게임 풀기’를 개발했다. 이때, 이전에 배웠던 프론트엔드와 백엔드간의 API 연동하는 점과, API 문서를 Swagger로 작성하는 경험까지 했다. 이 과정에서 팀원들과 협업하는 과정 뿐 아니라, 페어 프로그래밍을 하면서 서로 간의 코드 리뷰를 아낌없이 해주면서 개발 실력을 조금 더 성장할 수 있었다.

프론트엔드 과정과 백엔드 과정을 마치고, 마지막 과정인 클라우드 네이티브 과정을 약 10일 동안 진행했다. 이때 AWS를 사용할 때 필요한 기술인 리눅스 서버를 학습하면서 기존에 구현한 프로그램을 서버에 배포하는 경험을 했다. 이전 토이 프로젝트인 ‘지각 면제권을 얻기 위한 퀴즈 게임 풀기’을 AWS EC2 환경에 배포해보는 것부터 Dokcer와 Jenkins를 활용하여 배포를 자동화하는 경험까지 했다. 이전에 Docker와 Jenkins를 사용해본 적이 없었기 때문에, 해당 과정을 들으면서 개인 노션에 하나하나 다 정리해나갔다.

이렇게 세 가지(프론트엔드, 백엔드, 클라우드 네이티브) 과정을 겪으면서, 배운 내용을 이후에 팀프로젝트 때 제대로 적용할 수 있을까?에 대해 스스로 걱정이 됐었다. 그래서 ‘하나라도 제대로 알고 공부하자’라는 마음과 ‘내가 모르는 부분, 그리고 중요한 부분은 내 개인 블로그에 남기자’라는 마음으로 임했다.

기술 세미나

프론트엔드, 백엔드, 클라우드 네이티브에 대한 각 과정이 끝날 때마다 기술 세미나를 진행했다. 이때, 나는 다음 3가지에 대한 주제를 선정해서 진행했다.

각 과정에 대한 공부도 많았는데, 기술 세미나 준비까지 해야해서 일주일 내내 제대로 잠을 자본 적이 없었다. 기술 세미나는 주로 평일 저녁 이후, 아니면 주말에 모여서 아침부터 지하철 끊기는 시간까지 공부했던 기억이 난다. 이 과정에서 굉장히 많은 피로감이 쌓였지만, 이러한 과정이 ‘미래의 나에게 도움이 많이 될거야’ 라는 생각으로 임했다. 그리고 이때, 같이 준비한 팀원끼리도 서로 좋은 에너지를 주고 받았기 때문에 힘들었지만 재밌었다.

3개의 주제를 발표하면서, 운이 좋게도 ‘왜 우리는 Vue.js를 사용하는가?’에 대한 우수상을 받게 되었고, 수상금으로 같이 발표 준비를 했던 팀원들이랑 맛있는 저녁을 먹었다 😋.

굿프렌즈

8월부터 2달간 ‘굿프렌즈’ 이라는 팀 프로젝트를 진행하며, 제대로된 협업과 장기간 프로젝트 경험을 손에 넣었다. 굿프렌즈 팀에서는 훌륭한 팀원들을 만나서 대체적으로 큰 트러블이 없었고, 기쁨과 즐거움 속에서 프로젝트를 마무리할 수 있었다. 이 기간 동안 함께 성장하고 배우면서, 협업의 소중함과 함께 얼마나 행복한 일인지를 다시 한번 깨닫게 되었다.

팀 모두가 서비스에 대한 공통된 이해를 가지기 위해 이벤트 스토밍을 도입하면서 많은 토론을 진행했다. 도메인에 대해 서로가 알고 있는 내용을 포스트잇으로 정리하고, 하나로 합치는 과정에서 많은 경험을 쌓았다. 그 과정에서 페르소나 분석을 통해 사용자 이미지를 구체화하면서 서비스 도메인을 보다 명확히 이해할 수 있었다.

자바스크립트로부터 접근 방지를 위해 Cookie의 보안 속성을 적용하는 과정 속에서 많은 경험을 얻었다. 또한, 상품 등록 및 수정하는 API 개발에서 Spring Boot에서 AWS S3에 파일을 업로드하는 방법을 처음으로 알게되었다.

우리는 여러 방법들 중에 MultipartFile 업로드하는 방식을 사용했고, 이 과정에서 Client - Spring Boot - AWS S3 사이에 어떻게 처리가 이루어지는지 알게되었다. 또한, 상품과 주문 사이에 발생하는 N+1 문제라든가, 하나의 정보를 삭제할 때 관련된 정보도 같이 삭제되는지에 대해서 신경써야 할 부분들이 많았다. 단순히 눈으로 보여지는 부분 뿐 아니라 영속성 컨텍스트나 프록시 처럼 눈에 보이지 않는 부분에 대해서 이해해야 하는 점에서 고군분투를 겪으면서 많은 걸 배웠다.

프로젝트 구조에 대한 토론 또한 팀원들과 활발히 진행했다. 여기에 대한 명확한 정답은 없기 때문에, 계층적 패키지 구조로 갈지, 기능적 패키지 구조로 갈지에 대해 적극적으로 참여하면서 팀원들과 의견을 주고 받았다. 팀 프로젝트 당시에는 매일 다 같이 모여있는 시간이 많았고, 팀원 모두가 서비스 기획부터 개발까지 참여하기 때문에 프로젝트에 대한 이해도가 높아서 기능별 패키지 구조를 선택했다.

배포 자동화를 위해서 많은 시간을 쏟았었다. Jenkins를 사용해서 CI/CD를 구축하는 과정에서 많은 문제를 겪고 해결을 했던 기억이 난다. EC2 t2.micro 기본 인스턴스를 사용하다보니 빌드를 하다가 서버가 자꾸 죽는 일이 발생해서, Executors 수를 1개로 제한하여 프론트 -> 백엔드 식으로 순서대로 빌드가 되도록 설정했다. 그리고 프론트엔드와 백엔드, 두 개의 코드 중 하나라도 Merge가 되었을 때 빌드 및 배포가 되고 있는 상황이였다. 그래서 PR시 Merge되었을 때 각 트랙별로 코드가 빌드 및 배포될 수 있도록 빌드 트리거를 조금 더 세분화하여 Github의 라벨을 기반으로 트리거를 개선했던 경험이 있다. 정말 뿌듯했던 경험 중 하나였다.

그 외에도 시스템 장애를 미리 예방하기 위해 Amazon CloudWatch를 활용한 모니터링, 다양한 예외를 하나의 클래스에서 효율적으로 관리하기 위해 RestControllerAdvice, ExceptionHandler 어노테이션 활용 등 실무에서 적용할 법한 고민과 기술을 도입하게 되었다.

해당 팀 프로젝트를 하면서, 해결한 과정들을 기록하기 위해 팀 기술 블로그를 만들고 운영했다. 2달간 10개의 포스팅을 업로드했지만, 프로젝트 기간이 끝난 이후에도 추가적으로 4개를 더 업로드해왔다. (총 14개) 처음에는 포스팅을 작성하면서 기록을 중요시했던 내가 주로 글을 작성하고, 작성 방법에 대한 가이드라인을 팀원들에게 제시했다. 그 결과, 팀원들도 하나씩 글을 작성하게 되었다. 글을 작성하는 데에는 초기에 시간과 노력이 소요되지만, 나중에 동일한 문제에 직면했을 때 이를 빠르게 해결할 수 있는 장점을 제공해준다. 이 과정을 통해 우리는 팀 전체적인 개발 지식을 증진시키는 동시에, 향후 발생할 수 있는 문제에 대한 대비책을 마련하는 데도 도움을 얻을 수 있었다.

아쉬웠던 점

프로젝트에 대해 개인적으로 아쉬웠던 점은 코드 품질이 좋지 못하다고 생각했고, ‘과연 우리가 만든 코드가 지속 성장 가능한 코드인가?’에 대한 의구심이 들었다.

토스 유튜브에 업로드된 토스 SLASH 22에서 토스페이먼츠 재민님께서 발표하신 ‘지속 성장 가능한 코드를 만들어가는 방법’ 영상을 팀 프로젝트 기간이 종료된 후에 시청하게 되었다. 이 영상에서 가장 기억에 남은 문구가 ‘토스페이먼츠에서는 코드 한 줄 한 줄의 의미를 곱씹고 코드에 대해서 “왜?”라는 질문을 하는 것을 권장하는데, 개인적으로 가장 중요한 것은 코드라고 생각합니다.’ 라는 내용이었다.

이 영상을 통해 다양한 인사이트를 얻었고, 이를 바탕으로 9월 27일을 기준으로 팀 프로젝트의 공식 기간은 종료되었지만, 굿프렌즈 프로젝트에 대한 코드를 개선하고자 했다. 하지만, 코드에 대해 명확히 어떻게 개선해야 할지 모르는 와중에, ‘우아한스터디 2023 겨울시즌’ 이 열리게 된 것을 보게 되었다. 좋은 코드를 작성하는 방법을 배우고 싶어서 해당 스터디 여러 주제 중 ‘내 코드가 그렇게 이상한가요?’ 를 선택하게 되었고, 신청할 때 진심을 다해 지원서를 작성했던 기억이 난다. 정말 운이 좋게도 스터디에 합격하게 되었고, 11월부터 12월까지 2달이라는 시간동안 스터디를 열심히 참여했다. 스터디에서 배운 내용을 기반으로 12월부터 굿프렌즈 프로젝트에서 사용자 기반 기능들(프로필, 상품, 주문, 신고)에 적용했고, 이때 정말 많은 리팩터링 경험을 가졌다.

(해당 포스팅 - 굿프렌즈 - 사용자 기반 기능 전체 리팩터링)

추가적으로 단위 및 통합 테스트 코드도 적용하기 위해 11월, 한달 동안 인프런에서 우빈님이 만든 ‘Practical Testing: 실용적인 테스트 가이드’ 강의를 전부 들으면서 Practical Testing: 테스트 코드 작성 방법 이라는 포스팅을 내 개인 블로그에 정리했다. 12월에 기존 프로젝트에 리팩터링하면서 단위 테스트 코드만 적용했지만, 나중에 통합 테스트도 꼭 적용해보려고 한다.

대학교 졸업

2020년부터 2023년 상반기까지 약 3년 반동안 대학 시절을 보내면서 대학에서만 누릴 수 있는 소중한 경험들을 쌓았다. 더 이상 대학교 수업을 안들어도 되어서 신났지만, 이젠 학생도 아니고 아무 소속도 없었기 때문에 백수가 되어버렸지만 말이다.

대학교 시절, 3년 반의 시간 동안 난 무엇을 했는가

3년 반의 시간을 전부 얘기하는 것보다 기억에 남는 몇 가지 순간을 나열해보려고 한다.

먼저 글로벌소프트웨어융합 학과를 선택하게 된 배경에 대해 먼저 얘기해보려고 한다.

2017년 군복무를 하는 당시에, 주말과 같은 여유로운 시간에 자기개발, 경제, 금융 도서를 읽으면서 진로에 대해 진지하게 고민하는 시간을 가졌다. 그 당시에는 나는 IT와는 거리가 먼 전기공학과 학생이었지만, 미국 주식 시장에서 에너지 및 금융 회사가 하락하고 IT 대기업이 선두에 서는 모습을 책과 인터넷을 통해 알게되면서, IT 분야에 흥미를 느꼈다. 이 흥미가 계속 이어지면서 제대 이후에도 1년 반동안 열심히 공부한 결과, 내가 정말 가고싶었던 대학과 전공인 컴퓨터학부 글로벌소프트웨어융합 학과에 편입으로 들어갔다.

사실, 내가 글로벌소프트웨어융합 학과을 택한 이유는 컴퓨터학부이면서도 해외 복수학위에 대한 기회를 얻을 수 있었기 때문이다. 하지만, 2020년 내가 입학할 당시에 코로나라는 병이 터질 줄은 꿈에도 몰랐다. 코로나로 인해 대면 수업을 물론, 해외 복수학위의 꿈은 물거품으로 넘어가 버렸다 🥲.

2020년부터 2021년의 2년 동안은 고난의 시기를 경험했다. 2020년, 입학하고 나서 들었던 과목중에서 가장 어려웠던 과목을 고르자면, 자료구조자료구조응용이였다. C언어에 대한 기본 문법만 알고 있었는데, 매주 과제로 나오는 자료구조의 다양한 문제들을 푸는 과정이 나에겐 험난의 연속이였다. 비대면이라 친구도 사귈 수 없던 환경에서 혼자서 과제를 푸는게 힘들었고, 정말 많은 좌절감을 맛보았다. 하지만 교수님의 격려로 이 어려운 과목을 꾸준히 반복해서 푸는 노력을 게을리하지 않고 성취했다. 교수님께서 격려의 말로 ‘어려운 건 당연하다. 그러니 포기하지말고 알 때까지 반복해서 풀어라’ 라고 말씀해주셨던 게 기억에 남았다.

2021년에는 몸이 좋지 않아서 대학교에 질병 휴학을 신청했고, 1학기 동안 내 건강 회복에만 전념했다. 이때, ‘건강하지 않으면 아무것도 못하는 구나’ 라는 깨달음을 얻고 운동을 꾸준히 해야겠다고 다짐했다. 건강이 어느 정도 회복된 이후부터는 최소 주 3일 헬스장에 운동하러 갔다. 2학기때 복학을 신청하고 대학에 다니면서, 데이터분석 이라는 분야에 관심이 생겨서 경상학부내 동아리인 금융데이터분석학회(KNU DART)에 참여하게 됐다. 해당 동아리에서 금융이론 뿐 아니라 Python을 이용해서 데이터를 분석하는 걸 배웠다. 그 외에도 모의투자 대회, 리서치 경험, 팀 프로젝트 수행 등 여러 경험을 가지게 되었다. 이때, 데이터분석 직무로 취업을 해야 하나 고민을 많이 했지만, 백엔드 개발자라는 직무가 나에게 더 안정감과 적성에 맞는 것 같아서 데이터분석 직무에 대한 고민을 뒤로하고 백엔드 개발자를 선택하게 되었다.

그래서 2022년부터는 백엔드 개발자 직무로 취업하기 위해 공모전, 대회를 알아보기 시작했다. 3월에 혼자서 아이디어를 만든 다음, 4월부터 인원을 모으면서 다양한 공모전에 참여하게 했지만, 결과는 처참했다. 지금 생각해 보면 당연한 결과인 게, 나는 이제 막 시작하는 병아리 정도의 수준이었고, 대회에 참가한 대부분의 팀들은 어느 정도 경험을 갖춘 사람들이었기 때문이다. 그리고 그 당시에 나는 기본기가 많이 부족했고, 개발 경험도 적었다. 그래서 기본기를 쌓기 위해 자바의 정석 책을 보기 시작했고, 여름방학(7-8월)에는 운이 좋게도 스타트업 회사의 백엔드 개발자 인턴(현장실습)으로 합격해서, 2달간 백엔드 역량 및 경험을 가졌다. 해당 스타트업에서 처음으로 Spring Boot, JPA를 사용하였고, 기본적인 CRUD 개발부터 약간의 프론트엔드 언어인 JavaScript를 이용하여 메인 페이지를 개발 경험을 가지게 되었다. 백엔드 개발자 인턴으로 근무했지만, 프론트 개발도 조금 하면서 관련 지식을 쌓았고, UI/UX에 대한 기획 경험도 가지게 되었다. 인턴 근무기간이 거의 끝날 당시에, 해당 회사의 팀장님께서 ‘책임감 있게 잘해줘서 고맙다’라는 말씀을 들어서 많이 뿌듯했고, 마지막 회식 때 회사에 재직하시는 분들과 아주 즐겁게 보냈던 기억이 난다. 인턴이 끝나고 해당 회사로부터 최우수 점수인 100점을 받게 되어서 너무 기뻤다.

사실 인턴을 다니면서, 동시에 내가 만든 아이디어인 주제를 가지고 7월에 7명의 팀원들과 “2022 공개 SW 개발자 대회”에 참가하게 되었다. 7월부터 8월까지 2달 동안 평일에는 인턴으로 회사 출근을, 평일 저녁 이후에 혹은 주말에는 대회에 같이 참가한 팀원들과 모여서 대회 준비를 하면서 정신없이 보냈다. 약 5개월 동안 팀원 모두가 열심히 참여한 결과, 9월 1차 서면 평가에서 합격해서 본선에 진출하게 되었다. 서면 평가에 합격한 그날 저녁에 팀원 모두가 모여서 서로 고생했다면서 박수와 함께 행복한 시간을 보냈다. 그 이후에도 프로젝트에 대해 진지하게 임하였고, 11월 서울 코엑스에서 우리 서비스에 대해 PPT를 통해 최종 발표를 진행하게 되었다.

위의 사진은 최종 발표를 위해 코엑스에 같이 와준 팀원들과 기념으로 같이 찍은 사진이다. 결과적으로 우수작에만 선정되고 수상은 받지 못했지만, 대회 기간 동안 모두 열심히 참여해 줘서 너무 고맙게 생각한다. 수상을 받지 못하게 된 이유는 아이디어적으로 참신하지 못했고, 기획에 나온 기능들에 대해 완벽히 구현하지 못했다. 또한 우리가 만든 서비스는 수익성이 있는 비즈니스 모델을 기반으로 만든 서비스였기 때문에. 공개 SW인 만큼 오픈 소스의 취지에 부합하지 못했다고 생각한다. 이러한 점에서 팀원 모두가 결과에 대해 인정했고, 이를 바탕으로 서비스를 고도화 시킨 후 우리 서비스의 주제에 부합한 대회에 참여하기로 했다. 그래서 10월 대내에서 진행한 ‘창업성과 경진대회’에 참여하게 되었고, 장려상을 수상 받게 되었다.

이 외에도 개인적으로 대내에서 진행한 ‘KNU 학생설계 융합전공 공모전’에 참가하여 대상을 수상 받았다. 하지만, 취업은 별개였다. ‘내가 대학 시절에 ~~ 했고, ~~ 경험을 했어요’와 같은 말은 취업에서 통하기도 하고, 통하지 않기도 한다. 내가 가고자 하는 직무와 관련된 경험이 있어야 하며, 해당 직무에서 요구하는 역량을 갖춰야만 했다. 나는 공모전(대회), 인턴을 통해 프로젝트 경험은 했지만, 취업을 위한 코딩테스트와 CS 지식에 대한 준비를 제대로 하지 못했다. 그 결과 백엔드 직무로의 취업은 실패했고, 이를 깨닫고 난 이후에는 코딩테스트와 CS 지식을 꾸준히 공부해야겠다고 결심했다. 그래서 2022년 12월부터 코딩테스트와 CS 지식을 공부하면서, 해당 내용을 개인 블로그에 정리했다. (이때가 개인 블로그를 제대로 운영하기 시작했다)

대외활동

2023년에는 다양한 대외활동을 했다. 히빗(팀 프로젝트), 우아한스터디, 글쓰는 개발자 모임에 대해 하나씩 얘기해보고자 한다.

히빗

올해 3월, 지인으로부터 팀 프로젝트를 같이 하자는 제안이 와서, 좋은 기회라 생각해서 같이 하게 되었다. 좋은 기회라고 생각한 이유는 아이디어 적으로 참신했고, 기획과 디자인이 어느 정도 완성되어 있어서 바로 개발에 들어갈 수 있어서였다.

무엇보다 팀원들 다 성격도 좋았고, 프로젝트 경험이 있기 때문에 안정감이 많이 들었다. 들어왔을 때는 기획자 2명, 디자이너 1명, 프론트엔드 개발자 2명, 백엔드 개발자 1명이었고, 나는 백엔드 개발자로 합류하게 되었다.

내용을 들어보니 이전에 해당 프로젝트를 진행했지만, 마무리가 잘 안되어서 런칭하지 못하게 되었다고 한다. 그래서 이번 계기로 제대로 런칭을 하고자 하는 게 팀원분들의 공통적인 목표였다.

이 프로젝트에서 내가 구현해야 할 기능은 구글 소셜 로그인프로필이였다. OAuth에 대한 개념을 몰랐던 상황에서 소셜 로그인 기능을 구현해야 했기에, 초반에는 생활코딩에서 무료로 업로드된 유튜브 영상을 보면서 이해했다. 그런 다음 구글 공식 문서: OAuth 2.0을 참고했다.

하지만, 코드에 대해 구현하는 건 또 다른 막막함이였기에, 이미 구현해두었던 달록 프로젝트의 코드를 참고했다. 해당 프로젝트는 우아한테크코스라는 우아한형제들에서 주관하는 교육 기관에서 진행한 프로젝트였고, 소셜 로그인에 대한 구현 과정을 Issues와 Pull Requests에 잘 기록했기 때문이다. 이미 깔끔하게 구현된 코드라 처음 보는 나에게는 전부 이해하기 어려워서, 이해가 잘 안된 코드는 구글링과 GPT의 도움을 받으면서 최대한 이해해보려고 노력했다.

액세스 토큰과 리프레시 토큰을 발급하는 기능을 구현하면서 처음으로 JWT에 대해서도 알게 되었고, 해당 개념에 대해서도 공부하게 되었다. 또한 보안적 이슈적인 문제도 있어서, 프론트엔드와 해결하는 과정에서 2주 동안 회의를 계속하면서 어떤 부분이 문제였고, 어떻게 해결해야 하는지 서로 의견을 많이 주고받았다. 이 과정에서 쿠키의 보안적인 속성도 알 수 있었고, 로컬 서버가 아닌 HTTPS로 서버를 띄울 때, 어떻게 설정해야 하는지 많은 걸 배울 수 있게 되었다.

개발 외에 협업적인 면에서도 많은 걸 배웠다.

매주 Zoom을 통해 온라인 회의에 참석하면서, 이번 주에 해야 할 일들과 논의 사항들을 노션(Notion)을 통해 정리해나갔다. 다들 개개인 일정이 있는 와중에도 팀 회의만큼은 참여하고자 하는 의지가 컸고, 이런 팀원들과 프로젝트를 함께할 수 있어서 감사했다. 그중에서도 기획자이신 JM님이 매주 회의록을 정리해 주시고, 슬랙에 공유해 주신 점이 감사했다. 누구에게 대신 작성해달라고 부탁해도 되는데, 이러한 작업을 혼자서 거의 5개월간 지속해오신 게 정말 대단하신 것 같다.

프로젝트 중반에는 팀 전체적으로 슬럼프가 찾아왔고, 이를 해결하기 위해 체크인-체크아웃 문화를 도입하게 되었다. 개발을 5월에 시작하고, 7월쯤 되었을 무렵에 초기와는 다르게 팀 전체적으로 열정적인 분위기가 사라졌다. 그도 그럴게, 나는 우리FISA에 4월 말부터 참가하게 되면서 평일에는 저녁 9시 이후 또는 주말밖에 시간이 나질 않았다. 다른 팀원분들 중에서 인턴, 정규직 사원 되신 분도 있고, 몇 분은 취업 준비하느라 바빠진 시기였다.

그래서 ‘왜 나만 일하는 것 같지?’, ‘다른 팀원들은 뭐 하고 있지?’ 와 같은 생각을 가졌을 때, 프론트엔드 개발자로 참여한 SJ님이 체크인-체크아웃 문화를 도입을 제안했다.

SJ님이 그 당시에 제안했던 얘기를 정리하면 아래와 같다.

체크인이란, 내가 히빗과 관련된 어떤 일이든 하고 있다면 슬랙의 체크인-체크아웃 채널에 스레드를 남기는 겁니다. 이때 체크인 시간과 함께 오늘 해야할 일과 목표를 작성하는 거죠. 달성하지 못해도 괜찮습니다.

체크아웃이란, 일을 마칠 때 내가 오늘 한 일과, 다음 체크인 시 할 일들을 체크아웃 시간과 댓글로 함께 남겨 놓는 겁니다. 이렇게 하면 수시로 채널에 우리 팀원들이 무얼 하고 있는지 실시간으로 파악할 수 있다는 장점과, 팀원이 체크인했을 때 내가 궁금한 질문을 물어보면, 답변을 빠르게 받을 수 있는 확신,

마지막으로 나 뿐만 아니라 다른 팀원들도 정말 열심히 하고 있구나 라는 동기부여를 얻을 수 있습니다.

예시) 슬랙 : 체크인/체크아웃 채널 - devFancy
체크인: 21:30
오늘 할일(목표)
- [x] 프로필 등록 기능 구현 => 완료 O
- 프로필 조회 기능 구현 => 완료 X

체크아웃: 23:30

이러한 제안을 팀원 모두가 수락하고, 도입하면서 2달 동안은 정말 모두가 열심히 수행해줬다. 덕분에, 슬럼프를 깨고 열정적으로 팀 프로젝트에 임했다. 물론, 매번 히빗 프로젝트에서 작업할 때마다 체크인-체크아웃 채널에 무얼 하고 있는지 작성하는 게 귀찮을 때도 있다. 하지만 돌이켜봤을 때, 지난 과거에 내가 무얼 했는지 알 수 있는 증명할 수 있는 자료라서, 주간 회의 때 다른 팀원이 무엇을 했는지 참고할 수 있게 되었다.

11월에는 한국대학생IT경영학회에서 초청을 받아, 28기 학회원들과 함께 우리 서비스에 대한 소개와 회고를 공유하는 소중한 시간을 가졌다.

처음에는 우리 팀의 기획자 JM님이 히빗 서비스에 대한 간략한 소개를 진행했고, 그 후에는 토크 세션(토크쇼 30분 + 현장 질의응답 5분) 시간을 가졌다. 이 때, 사전에 준비한 질문들에 대해 우리 팀원들이 번갈아가면서 답변을 드렸고, 프로젝트와 관련된 현실적인 조언들을 최대한 많이 공유하려고 노력했다. 나는 학회원분들에게 백엔드 개발자에서 중요한 부분들과 기록의 중요성에 대해 이야기를 했다. 생각보다 듣는 사람들이 많아서 나도 모르게 긴장해버렸고, 너무 긴장한 나머지 말을 조금 빠르게 한 것 같아서 조금 아쉽긴 했다.

히빗 팀프로젝트를 하면서 기술과 협업에 대한 다양한 경험을 쌓았다. 그러나 예상과 달리 프로젝트는 계획대로 진행되지 않았다. 초기 목표는 3개월 이내로 개발을 완료하고 7월에 런칭하는 것이었다. 하지만 각 개인의 일정을 고려하고 존중하는 데 많은 시간을 할애하다 보니 런칭 일정이 미뤄지게 되었고, 결과적으로 8개월이라는 긴 시간이 소요되었다. 만일 초기 3월로 돌아갔더라면, 모두가 3개월 동안 몰입해서 신속하게 MVP를 개발하고 빠르게 런칭을 했을 것이다. 그럼에도 불구하고 이번 경험은 계획대로 진행하지 못한 실패를 통해 얻은 귀중한 경험이였다. 성공적인 경험보다는 실패를 했지만, 이를 통해 다음 팀 프로젝트에서 더 강하고 효과적으로 진행할 수 있게 해준 값진 경험이였다고 생각한다.

모든 경험이 성공이 아니더라도 실패로부터 배우는 것이 중요하다는 생각이 들었다. 이번 프로젝트에서의 실패는 다음에 더 나은 결과를 이끌어 내기 위한 강력한 학습 기회로 삼을 수 있었다. 이 자리를 빌려, 히빗 팀 모두에게 고생하셨다는 큰 감사의 인사를 전하고 싶다.👏🏻.

우아한스터디

10월 초에 우아한스터디 2023 겨울 시즌이 시작되었다는 걸 메일을 통해 알게 되었다. 이 당시에 9월 27일까지 굿프렌즈 프로젝트에 대한 공식 일정을 마쳤지만, 프로젝트에서 구현된 코드에 대해 개인적인 아쉬움이 있었다. 그래서 기존 코드를 좋은 코드로 리팩터링하는 경험을 쌓고 싶었는데, 우연한 타이밍에 우아한스터디가 열리게 된 것이였다.

여러 스터디 주제 중에 나에게 딱 맞는게 ‘내 코드가 그렇게 이상한가요?’ 였다. 대상에 나와있는 내용이 나의 상황과 매우 부합하다고 생각했고, 무엇보다도 우아한스터디라는 기회를 놓치고 싶지 않았다. 사실 이전 2023 여름 시즌도 관심있게 봤었지만, 그 당시에는 우리FISA와 히빗 프로젝트를 하느라 시간이 안될 것 같아서 신청하지 못했다.

10월 초에는 우리FISA와 굿프렌즈 프로젝트도 끝났고 히빗 프로젝트도 거의 마무리된 상태였기 때문에, 꼭 지원해봐야 겠다는 생각이 들었고, 지원서를 누구보다 열심히 작성했다. 그 결과, 정말 운이 좋게도 합격하게 되어 11월부터 12월까지 2달 간 스터디에 참여할 수 있었다.

11월 한 달간은 ‘내 코드가 그렇게 이상한가요?’ 책을 읽으면서 궁금한 점들을 슬랙을 통해 스레드로 남기고, 스터디 당일에 참여하는 구성원분들과 토론하는 시간을 가졌다. 나는 매주 정해진 챕터를 읽으면서 기억에 남거나 중요한 내용을 GoodGode라는 카테고리로 분류해서 블로그에 정리했다.

12월에 나는 책에서 배운 내용을 기반으로 이전에 구현했던 코드에 대해 리팩터링을 하는 시간을 보냈다. 스터디 당일에는 나처럼 리팩터링한 결과물(코드)에 대해서 다른 구성원분들은 어떻게 생각하시는지 토론하는 시간을 갖거나 자유 주제로 평소 궁금한 질문들에 대해 편하게 얘기하는 시간을 가졌다.

  • 굿프렌즈 팀 프로젝트 - 리팩터링 관련 Pull requests (신고, 프로필, 상품, 주문)

팀 프로젝트를 진행했을 당시에는 주어진 요구사항을 맞추는 것 대비하여 시간이 너무나도 부족했기 때문에 구현에만 초점을 맞춰서 코드가 그리 좋지 못했다. 그래서 리팩터링했을 때에는 내가 구현했던 것 뿐만 아니라 팀원이 구현했던 코드에 대해서도 같이 진행했다.

(자세한 리팩터링 과정에 대한 얘기는 해당 포스팅에 정리해두었다)

스터디를 통해 나는 내가 기여한 것보다 더 많은 것을 배웠다고 생각한다. 그래서 더더욱 해당 스터디에 합격해주신 운영진인 지훈님께 감사의 말씀을 전하고 싶다 🙇🏻‍♂️.

한 가지 아쉬운 점은 내가 참여한 스터디는 온라인으로 진행했어서, 스터디에 참가했던 분들의 성함은 알지만 얼굴은 뵌 적이 없어서 친해지지 못했다는 거였다. 그래도 해당 스터디 덕분에, 객체지향 설계에 대해 많은 인사이트를 얻었고, 앞으로 이런 스터디가 여러 곳에서 열린다면 또 참여해보고 싶다.

글또(글쓰는 개발자 모임)

11월에는 글또(글 쓰는 또라이가 세상을 바꾼다) 9기를 모집한다는 소식을 메일을 통해 알게되었다. 이전부터 관심갔지만, 언제 모집할지 몰랐기에 미리 알림을 설정되도록 했다. 지원서를 작성할 때, 가장 기억에 남는 건 삶의 지도였다.

삶의 지도라는 것은 글또를 만드신 성윤님이 지은 이름이며, ‘자신이 어떤 사람이고 어떤 성격을 가지고 있고, 어떤 사건으로 지금의 내가 되었는가’ 에 대해 작성하는 내용이다. 삶의 지도를 작성할 때는 ‘나’라는 인물이 어떤 사람인지 보여주기 위해 내가 여지껏 살아오면서 어떻게 지냈는지 정말 솔직하고 담백하게 작성했다. 내가 글또 9기 지원서에 작성했던 삶의 지도에 대한 글은 조금씩 다듬은 뒤에 나중에 블로그에 업로드할 예정이다. (현재는 개인 노션에 보관해두고 있다)

글또를 지원한 이유는 크게 2가지였다. 하나는 지난 1년간 혼자서 개인 블로그를 운영하면서, ‘내가 이제껏 작성하고 업로드한 글이 과연 좋은 글인가?’에 대해 의구심이 들었다. 이러한 부분을 글또에 계신 분들로부터 조언을 얻고자 했고, 개인적으로 글을 잘 쓰는 능력을 향상시키고자 했다. 다른 하나는 개발에 열정을 품은 다양한 사람들을 만나보고 싶었다. 지금까지 대학교나 소속된 그룹에서는 개발에 진심인 사람들과 충분히 소통하진 못했다. 글또를 통해 오프라인에서 다양한 분들과 만나 커피챗을 나누는 경험을 통해 인맥을 넓히고, 새로운 시각과 지식을 얻고자 했다.

정리하면, 글또에 참여하는 목표는 글쓰기 능력 향상과 함께, 다양한 개발 열정을 품은 분들과 소통하며 인맥을 쌓는 것이다.

현재는 글또 9기에 활동하면서, 2주에 한 번씩 포스팅를 업로드하고 있다. 이전과 다른 점은 글또에 제출하는 포스팅은 다른 포스팅에 비해 훨씬 더 시간 투자를 많이했고, 그만큼 High-Quality 있는 내용으로 채웠다. 또한 보는 사람이 이해하기 쉽도록 작성하려고 노력했다.

지난 한 달간 글또에 제출한 포스팅

  1. Practical Testing: 테스트 코드 작성 방법

  2. Practical Testing: 테스트 코드 작성 방법 - Mock, 더 나은 테스트를 위한 구체적 조언

앞으로도 글또 9기 활동을 하면서, 최대한 많은 경험을 해보려고 한다. 이 자리를 빌려, 글또라는 모임을 만들어주신 성윤님께 감사의 말씀 전합니다 😌.

블로그

2023, 올 한 해동안 개인 블로그에 총 186(이 포스팅은 제외한)개의 포스팅을 업로드했다.

블로그를 어떻게 운영해야 할지 몰라서 상반기에는 내가 공부한 내용을 정리하는 걸 위주로 업로드했다. 그러다가 하반기 11월에 함께 자라기 라는 책을 읽으면서 의도적 수련을 알게되면서 ‘내가 지금까지 정리한 대부분이 인풋만 있었구나’ 라는 걸 알게되었다.

의도적 수련이란 자신의 기량을 향상시킬 목적으로 반복적으로 하는 수련

그래서 강의/책에서 공부한 내용을 정리해서 블로그에 업로드하는 것도 좋지만, 가끔은 사이드 프로젝트에 적용한 내용을 추가한, 즉 인풋 뿐 아니라 아웃풋까지 있는 이어나가는 과정과 결과의 내용이 담긴 포스팅을 업로드했다.

2024년 목표

내년 2024년은 어떻게 지낼지 알 수 없지만, 적어도 이루고자 하는 목표를 명확히 작성하려고 한다.

알고리즘 실력 키우기

지난 1년간 코딩테스트를 풀었지만, 생각보다 Program solving 실력이 좀처럼 성장하지 않는 것 같다. 백준에 있는 solved.ac - CLASS 에서 적어도 4단계(CLASS 4++)까지는 풀 수 있는 수준으로 높이고자 한다. 2024년 말이 될 때 쯔음에는 ‘이제 알고리즘 문제 두렵지 않네’라는 느낌을 받고 싶다.

부족한 부분 채우기

올해 초에 ‘신입 개발자를 위한 CS 스터디 모임’을 상반기에 진행했지만, 하반기에 복습을 안해서 그런지, 일부 개념들에 대해 많이 까먹었다. 꾸준히 시간 날 때마다 복습해 가면서, 추가적으로 부족한 부분을 채우고자 한다.

  • Kotlin, Java, Gradle
  • Spring Mvc, Spring Webflux, Spring Boot, Spring Cloud Gateway, Spring Cloud Config
  • JPA/Hibernate, MySQL, MongoDB, Redis, Zookeeper
  • Kubernetes** + Istio, GoCD, ArgoCD, Consul, Vault, Git, Docker, Ceph, Harbor
  • Kafka**, ELK, Prometheus + Thanos, Grafana

위에는 내가 개인적으로 가고 싶어하는 회사의 공고에서 가져온 기술들이다. 한 번에 공부하는 것보다 한 개씩 깊게 공부하면서 지식의 폭을 넓혀가고자 한다. 위에 있는 기술들과 함께 백엔드 & CS 지식을 탄탄히 만들고자 아래와 같이 학습을 병행하려고 한다.

런칭 & 서비스 운영

2023년에 히빗 프로젝트를 Version2로 새롭게 개발하여 런칭하고자 한다. 이 도전적인 결정은 글또의 12월 31일에 개최된 월간-메이커스’ 이벤트에서 히빗 프로젝트를 소개한 결과 나온 것이다. 모임 참석자들이 우호적인 피드백을 주셨고, 런칭을 권장하는 의견이 많았다. 그 동안의 노력과 열정을 지지해 주신 분들의 도움으로 런칭을 결심하게 되었다.

현재까지의 히빗 프로젝트는 AWS EC2 인스턴스 t2.micro를 이용한 백엔드와 Vercel로 호스팅된 프론트엔드로 구성되어 있다.

새로운 버전에서는 실제 유저들이 원활하게 사용할 수 있도록 고려하여 설계를 새롭게 구성하고자 한다. 확장성 있는 설계와 더 높은 코드 품질을 추구하기 위해 기존 코드를 마이그레이션하고 리팩터링할 예정이었으나, 기존 코드의 상태가 예상보다 좋지 않아서 기존 팀원들의 합의를 얻는 것이 어려웠다. 따라서 기존 프로젝트는 그대로 유지하면서, 새로운 레포지토리를 생성하여 프로젝트를 개발하고자 한다.

이 새로운 시작을 통해 최소 6개월 동안 서비스 운영 경험을 쌓고, 사용자들에게 높은 품질의 서비스를 제공하고자 한다.

인풋 뿐 아니라 아웃풋까지 하기

무작정 강의를 듣는다고 실력이 좋아지진 않는다. 강의를 듣는 걸 넘어서 실전에 적용하는 경험과 그러한 내용을 간단하게라도 정리해야 내것이 된다.

그래서 내년에는 정말 필요하다고 생각한 강의를 듣고, 듣고 난 이후에는 토이 프로젝트 혹은 기존 사이드 프로젝트에 적용까지 해보는 경험을 하자.

기술/언어적인 부분 내용도 좋지만, 가끔씩은 일상/생각에 대한 글이라든지, 취준에 대한 글도 작성하면서 생각의 스펙트럼을 넓히도록 하자.

2023년 Bye.

2023년을 정말 쉴 새 없이 보내면서, 1년이라는 시간이 정말 빠르게 흘러갔다. 이는 나 자신이 개발에 몰입했다는 명확한 증거일 것 같다.

올해에는 성공과 실패를 경험하며, 부족한 부분과 개선할 점에 대해 깊게 고민할 수 있었다. 이러한 다양한 경험을 토대로 앞으로도 더 나은 개발자로 성장하기 위해 꾸준히 공부해 나가야겠다는 결심을 하게 되었다. 2023년을 통해 얻은 교훈을 바탕으로, 앞으로도 건강하게 지내면서 꾸준하게 발전해 나가고자 한다.


글을 작성하는데 걸린 시간: 약 12시간

  • 맞춤법 수정, 자연스러운 문장이 되도록 문맥 정리: 1시간
  • 글 작성: 11시간

Comments

Index