일상/Kernel360

[Kernel360] E2E 프로젝트 '생생' 후기

Emil :) 2023. 12. 19. 22:17
728x90
반응형

서론


Kernel360에서 진행한 E2E 프로젝트가 11.24(금) 부로 종료되었다.

총 4개의 프로젝트(Boot-up, 해커톤, E2E, Final) 중 두 번째로 규모가 큰 프로젝트인데, 회고와 리뷰 겸 후기를 작성하고자 한다.

E2E 프로젝트는 5주간 이뤄지는 것으로, MVP를 뽑아내는 과정이라고 생각하면 된다.
E2E 프로젝트의 목표는 다음과 같다.

Front-End부터 Back-End까지의 구현 기술을 협업으로 경험해보는 프로젝트로 기획, 설계 개발, 배포까지 구현한다. 웹서비스 전체를 구현하는 것을 목표로 서비스 요청 WAS와 DB를 활용한 처리 서버의 응답을 화면에 보여주기까지 구현하고 이를 배포하도록 한다.

달성 과제
- GitHub 을 활용하여 프로젝트와 이슈를 관리한다.
- CRUD와 간단한 데이터 분석이 포함되는 SPA 구조의 간단한 서비스를 구현한다.
- 개발하고자 하는 서비스의 기능을 사용자, 어드민 기능까지 완성하도록 한다. (기능의 개수에는 한정을 두지 않으나 설계한 기능은 모두 개발하는것을 목표로 함)
- 단위테스트와 통합테스트를 작성한다.
- GitHub Actions, Jenkins 등을 활용하여 빌드, 테스트, 배포 과정을 자동화한다.
- 배치 작업을 통해 데이터를 추가하거나 업데이트를 해야한다.
- AWS에 배포하여 외부 접근이 가능한 형태로 구현한다.
- 프로그램 구현 시 짝 코딩을 2주간 진행하도록 한다.

짧다면 짧고 길다면 긴 5주간의 여정이었지만, 현재 개발자로서 내 위치, 실력과 앞으로의 방향성,
그리고 내가 뭘 모르는지 알 수 있는 뜻깊은 시간을 회고해보도록 하자.

 

우리팀 산출물


https://github.com/Kernel360/E2E1-Orury/tree/main

 

GitHub - Kernel360/E2E1-Orury: 당신만의 클라이밍 커뮤니티

당신만의 클라이밍 커뮤니티. Contribute to Kernel360/E2E1-Orury development by creating an account on GitHub.

github.com

본론


1주차 : 아이디어 워크샵 및 기획


권장 목표
기본적인 프로젝트 구조 구현
최소 테이블 1개의 CRUD 구현

각자 프로젝트 아이디어를 발표하고, 20명의 팀원들로부터 투표를 통해 6개의 프로젝트가 선정된다.
감사하게도, 팀원들의 선택을 받아 내 프로젝트가 선정이 되었다.

평소 클라이밍을 즐겨했고, 불편함이 느껴지는 요소들을 해소하고 싶어서, 클라이밍 관련 커뮤니티 앱을 제작했다.
(사실 클라이밍 관련 기능은 아직 없고.. 그냥 게시판 기능이다.)

Spring JPA/Security/Batch, Mockito, github action 등등 안써본 기술스택들을 많이 사용해보는 것이 목적이었어서, 기능은 최소한으로 뒀다. 진짜는 4개월짜리 파이널 프로젝트 때 힘을 쏟아야 하니까..

다만, SNS 커뮤니티의 기능은 완벽하게 작동할 수 있도록 디테일에 좀 더 힘을 썼다. (SSE, 좋아요 기능 등)

본래 목적은 1주 내내 설계를 진행하는 것이었는데, 박은종 디렉터님의 조언으로 일단 개발을 진행했다.
대략적인 테이블 설계와 UI는 구성이 된 상태였기 때문에, 3일차부터 바로 개발에 돌입했다.

그런데.. 우리 팀은 모두 스프링부트와 JPA로 개발을 처음 해봤다. 따라서, 일단은 강의를 보고 강의코드를 기반으로 삼고, 이를 우리 코드에 맞게 커스터마이징 하는 방식으로 진행했다.
아무래도 워낙 간단한 게시판/게시글/댓글 CRUD 작업이었기 때문에, 1주차엔 간단하게 API를 완성할 수 있었다.

2주차 : 본격적인 개발 진행


2주차는 로그인 및 회원가입 기능을 구현하고, 게시판 화면을 작성하고자 했다.

이 때 네비게이터(관찰자)와 드라이버(코드작성자)로 구성되어 페어 프로그래밍을 진행했다.
사실 개발 속도가 너무 안나서 페어 프로그래밍을 하면서 "이렇게까지 해야되나..?" 라는 생각이 많이 들었다. 

그러나 의외로 괜찮았던게, 내가 코드를 짤 때마다 옆에서 바로바로 훈수(..)가 들어오니까.. 좀 더 좋은 코드를 작성할 수 있게 되었고, 내가 놓쳤던 부분을 네비게이터가 바로잡아주고, 내가 네비게이터일 땐 상대방이 놓치는 부분이 내 눈엔 보였다.

굉장히 신기한 경험이었음.

E2E는 우리가 프론트도 개발을 해야되서, 부랴부랴 Flutter 문법도 공부하고, 잘 만들어진 로그인/회원가입 템플릿 가져다가 쓸 수 있게 되었다. 그리고 대략적인 게시판/게시글/댓글의 형태를 갖춘 화면을 완성할 수 있었다.

내가 프론트쪽을 담당하고, 다른 팀원 두명이 Spring Security 기반으로 로그인/회원가입 로직을 작성했는데, 시큐리티가 워낙 러닝커브가 높다보니, 이부분이 생각보다 오래걸렸다.

본래 목적이었던 로그인 기능 구현은 결국 이 주엔 완성하지 못했고, 그 다음주가 되어서야 프로토타입이 완성되었다.

3주차 : 디테일 끌어올리기


3주차. 현재까지 진행도는 다음과 같았다.

프론트 : 로그인/회원가입 및 게시판 껍데기 구현
백 : 로그인/회원가입 jwt 토큰 로그인 구현, 게시판/게시글/댓글 CRUD API 구현

이제 프론트와 백을 엮어서 실행시키는데, 당연하게도, 굉장히 많은 에러가 발생했다.

  1. 대댓글의 렌더링이 이상하게 됨
  2. 댓글 기능의 페이지네이션이 먹히지 않음
  3. 프론트 화면 부족으로 인한 이상한 박스(?) UI 생성
  4. 그 외 클린하지 않은 코드 등등..

대부분 프론트쪽에서 문제가 많이 발생했다.
아무래도 기초 지식 없이 무작정 구현하려고 해서, 여러 컴포넌트들 간에 충돌이 발생했던 것 같다.

난생 처음으로 Flutter 사용자 단톡방에 들어가서 도움도 구하고.. 프론트에서 상태관리도 해보고.. 신기한 경험이었다.

사실 그동안은 백엔드는 백엔드만 알면되고, 프론트는 프론트만 알면 된다 주의였는데, 상호간의 로직 프로세스가 어떻게 흘러가는지 조금이라도 파악하고 있으면 서로에게 더 좋은 개발을 할 수 있다는 것도 깨닫는 계기가 되었다.

3주차는 RDS 적용, Jasypt 적용 등, 기존 기능에 디테일을 좀 더 올리는 작업을 진행했다.

그리고, 여기저기서 터지는 에러들을 커버치기에 바쁜 3주차였다..

4주차 : 자동배포 적용 및 인프라 구성


이 때 까지는 로그인에 Refresh 토큰도 적용이 된 상태였고, 백 쪽에서 대부분의 API는 개발이 완료된 상태였다.

따라서 기존에 로그인 작업을 하던 팀원은 어드민 작업을 진행했고, 나는 Flyway, Github action과 같은 형상관리 / CI/CD 작업을 진행했다.
Github action도 처음하는거라 굉장히 애를 먹었는데, 다른 팀은 모노레포(하나의 repo에 프론트/백이 다 있는 프로젝트)로 진행했으나, 우리는 앱 특성상 백/프론트 디렉토리를 나눴었다.

이 때, 대부분의 예제가 모노레포 기반이라.. 왜 안되지 안되지 하다가 경로를 직접 설정해줘야 한다는 걸 알게되었다...
굉장히 오랜 시간 삽질했는데, 그래도 정상적으로 동작해서 다행이었다.

CI/CD 파이프라인은 아래와 같이 구성했다. 가장 대표적인 방법이라고 한다.

CI/CD 파이프라인

5주차 : 프로젝트 마무리 및 발표


마지막 주는 발표에 필요한 자료들을 만들고, 어드민 개발 및 통합 테스트를 진행했다.

사실 내 눈엔 아직 부족한 것들이 너무 많았다. 테스트코드도 부족하고, 프론트 최적화나 백 로직의 안정성이 부족하다거나.
5주라는 짧은 기간안에 개발했기 때문에 어쩔 수 없는 건 당연하지만, 그래도 사람 욕심이란게 항상 더 나은 목표를 추구하다보니...
그렇게 발표를 무사히 마치고, 5주짜리 프로젝트도 마무리가 되었다.

시스템 아키텍처

시스템 아키텍처를 뭐로 그리지..하다가, 처음엔 피그마로 했는데 모양이 도저히 예쁘게 나오질 않아서, Cloudcraft 라는 툴을 사용해봤다.

디자인 똥손인 나에게도 그럴싸하게 나와서, 꽤나 괜찮았다.

커널360 E2E 프로젝트 발표회 (출처 : https://youtu.be/aJnfl49HGvs?si=htVVANgodCYNiYlH)

마치며


취업 이후로 처음으로 온전히 몰입했던 프로젝트를 겪었다.
죽어있던 프로젝트 개발세포(?)들이 다시 깨어나는 것 같았고.. 여전히 많이 부족하다는 것을 느꼈다.

현재는 파이널 프로젝트를 진행하며 다른 팀원이 맡았던 시큐리티를 활용한 로그인을 구현중인데..
스프링부트 3.x를 쓰다보니 시큐리티도 변경점이 많아서, 굉장히 애를 먹고있다.
새삼 E2E에 로그인 기능에서 Access/Refresh 토큰까지 구현하신 팀원이 대단하게 느껴지는 중이다.

E2E때 겪은 시행착오와 지켜지지 않은 코드 컨벤션 등을 유념하면서, 현재는 클린 코드에 좀 병적으로(?) 집착하고 있다.
전 회사에서 레거시코드에 굉장히 고통받았기 때문에.. "나중에 리팩토링 하지 뭐" 하고 묻어둔 코드는 그대로 부채가 된다는걸 잘 알고 있다.. ^^...

아무튼 조금 늦었지만, 이렇게 E2E에 대한 후기를 남겨봤다.
서비스 기업에 가기 위해선 아직 많이 부족하다는 걸 느끼는 계기가 되었고, 이를 토대로 파이널 땐 제대로 된 포폴을 완성해보자.

화이팅... 나 자신.. 그리고 우리 크루들..

728x90
반응형