😎 Daily

[Kernel360 1기] E2E 프로젝트 후기

date
Jan 17, 2024
slug
kernel360-e2e-review
author
status
Public
tags
Kernel360
Review
summary
패스트캠퍼스 커널360 과정 중에 E2E 프로젝트를 진행한 경험을 되돌아 봅니다
type
Post
thumbnail
제목을-입력해주세요_-001 (30).png
category
😎 Daily
updatedAt
Jan 18, 2024 01:27 AM
지난 해커톤 프로젝트가 끝나고 약 한 달 가량의 E2E 프로젝트 과정이 시작되었답니다.
이 게시물에선 E2E 프로젝트에서 참여한 경험을 나누고자 합니다.
프로젝트의 제가 기여한 부분 위주로 서술하도록 하겠습니다 ☺️

E2E 프로젝트란 무엇인가


E2E 프로젝트 란 프로젝트 기획 단계부터 구현 배포까지 웹 개발의 전 과정을 경험해보는 프로젝트입니다.
그래서 1달간의 시간동안 기획 설계부터 시작해서 프론트엔드, 백엔드 개발 구현 및 인프라 요소들까지 전부 체험해보고 필수적인 백엔드 개발 스택에 대한 숙련도를 높이는 과정입니다.
이번 프로젝트는 본격적인(?) 개발이 시작되는 프로젝트인 만큼 열정이 활활 타오르기 시작했고🔥 이러한 열정을 크루분들이 알아주셨는지 팀장으로써 프로젝트를 이끌어나가는 경험 또한 할 수 있게 되었답니다.
 
아래에서는 이번에 참여한 프로젝트인 Teach Me 에 대해서 소개하도록 하겠습니다!

티치미 (Teach Me)


🟢 프로젝트 소개

notion image
깃허브: https://github.com/Kernel360/E2E1-TeachMe/tree/develop 티치미 프로젝트는 인터넷 상에 배포되어 있는 많은 인터넷 강의 플랫폼들의 강의들을 직접 비교해보고 고를 수 있도록 하는 서비스입니다.
우리나라의 대표적인 인터넷 강의 서비스인 패스트캠퍼스인프런 의 강의를 크롤링해서, 해당 강의들의 가격 정보, 리뷰들을 작성 및 비교해서 나에게 맞는 강의를 찾을 수 있게 도와줍니다.
 
이 서비스는 저도 인터넷 강의들을 직접 구매하고 들어보면서, 직접 여러 플랫폼의 강의들을 비교할 수 있으면 어떨까? 하는 마음에 기획을 시작하였습니다.
 
그렇게 첫 주차에는 마음이 맞는 팀원들과 함께모여 프로젝트를 시작할 수 있었습니다.

🟡 시스템 아키텍처

notion image
저희는 이번에는 본격적으로 배포 프로세스를 확립하였습니다.
그래서 특별히 AWS EC2 환경에서 Docker 로 구성된 인프라를 설계하도록 하였습니다.
특별히 더 기여한 부분은 커스텀 도메인SSL 인증서 를 구매 및 프로젝트에 도입함으로써, 시스템 접근성을 높일 수 있었습니다.
그래서 Githubmain 브랜치에 기능이 병합되면 배포 자동화 프로세스가 실행됩니다.
이후, Docker hub 를 통한 도커 이미지 빌드 및 배포 프로세스가 진핻되고 이후 AWS 환경에서 빌드된 이미지가 배포되는 형식입니다.

🔵 DB ERD

notion image
저희는 먼저 간단한 기능 명세서를 작성한 후, 데이터베이스 ERD를 작성하였는데요,
ERD 작성에 경우는 지난 번 해커톤과 마찬가지로 dbdiagram.io 를 활용하여 작성하였습니다.

🟣 API 명세서

notion image
API 명세서의 경우에는, 지난번에 꼭 Swagger 를 통한 자동화를 진행하고 싶다고 했었는데, 그 부분을 충족시켜서 API 명세서를 자동화 했습니다.
 

내가 기여한 점


우선 팀장으로 다시 하게된 것 만큼 가장 중요한 것은 일정을 잘 조절하고 팀원들의 의견을 잘 수렴해서 프로젝트를 잘 진행해야겠다는 프로젝트 매니징의 부분에 초점을 맞추었습니다.
notion image
그래서, 그러한 부분을 충족시키기 위해
  1. 주 단위 업무 분배 및 데일리 스크럼 회의
  1. 유연한 브랜치 전략으로 프로젝트에 적합한 프로세스 구현
  1. 짝 단위의 업무 분배로 짝 프로그래밍 문화 활성화
이 3가지의 목표를 선정하고 지키려 노력하였답니다. 그리고 그러한 부분이 잘 이루어져서 프로젝트 진행사항이 다른 팀들보다 조금 더 수월하게 진행되는 경험을 할 수 있었답니다.
 
또 기존 프로젝트가 진행되면서 생겼던 문제들도 해결하는 경험을 가질 수 있었습니다.
notion image
 
처음 프로젝트가 진행될 당시에는, 데이터 크롤링 기능이 수동으로 버튼을 눌러야지만, 실행되는 방식이었습니다.
그래서 데이터 최신화를 하기 위해서는 원할 때마다, 사용자가 직접 사용해야하는 문제가 있었습니다.
그러한 부분을 Spring Scheduler 의 도입으로 해결하였습니다.
@Slf4j @Component @RequiredArgsConstructor public class FastcampusAutoCrawler implements AutoCrawler{ private final LectureRepository lectureRepository; private final RestTemplate restTemplate; private static final String PLATFORM = "fastcampus"; @Value("${url.fastcampus.detail}") String BASE_URL; @Override @Scheduled(cron = "0 0 0/1 * * *") @LogExecutionTime("패스트캠퍼스 상시 크롤링 실행") public void crawlLectureAutomatically() throws InterruptedException { List<Lecture> lecturesToUpdate = fetchLecturesToUpdate(); List<Lecture> updatedLectures = updateLectureDetails(lecturesToUpdate); saveUpdatedLectures(updatedLectures); } @Override public List<Lecture> fetchLecturesToUpdate() { return lectureRepository.findTop10ByPlatformOrderByLastCrawlDateAsc(PLATFORM); } @Override public List<Lecture> updateLectureDetails(List<Lecture> lectures) throws InterruptedException { List<Lecture> updatedLectures = new ArrayList<>(); for (Lecture lecture : lectures){ FastcampusLectureDetailResponse detailResponse = fetchLectureDetail(lecture); FastcampusLectureUpdateResponse updateResponse = mapToLectureUpdateResponse(detailResponse); lecture.updateFastcampusDetailInfo(updateResponse); updatedLectures.add(lecture); Thread.sleep(1000); } return updatedLectures; } @Override public void saveUpdatedLectures(List<Lecture> lectures) { lectureRepository.saveAll(lectures); } // ... 이외 private 메서드 }
그래서 결과적으로 서비스가 배포되어있는 환경에서 따로 관리를 안해주어도 data가 자동으로 최신화되고 관리되는 사용자 경험을 만들 수 있었습니다.
 

프로젝트 후기


티치미라는 프로젝트를 진행하면서 정말 뜻 깊은 경험을 할 수 있었습니다.
정말 제대로된 팀 프로젝트를 진행하면서, 프로젝트의 전반적인 진행을 몸소 체험해볼 수 있었고,
특히 프론트엔드 백엔드 데브옵스 등 포지션에 구애받지 않고 모든 역할을 몸소 체험해보면서 웹 프로젝트의 동작 방식 또한 경험해보게 되었습니다.
 
특히 프론트엔드는 거의 모두 맡아서 하기로 하였는데, 그러한 부분에 대해서 UI/UX 적인 요소들을 크루분들이 많이 칭찬을 해주셔서 전향을 해야하나 싶기도 했던… (농담입니다)
 
프로젝트 보다도 팀 내에서 함께 협업을 하는 경험이 가장 만족스러웠던 프로젝트였던 것 같기도 합니다.
이러한 프로젝트 경험을 살려서 파이널 프로젝트에서는 더욱더 멋진 작품을 만들어야겠다는 생각입니다!
 
티치미 프로젝트 같은 경우는 따로 관리해야할 소요가 많이 적고, 누군가는 사용해도 좋을 프로젝트여서 계속해서 배포해놓을 생각입니다. (프리티어가 유지되는 한에서요)
그래서 많이 많이 사용해주시고 피드백 남겨주시면 감사드리겠습니다! 다음 게시글에서는 파이널 프로젝트 후기로 돌아오겠습니다!!