코인 마이그레이션 (1)

주노·2023년 12월 4일
1

KOIN 마이그레이션

목록 보기
1/8
post-thumbnail

서론

Spring 3로 구성되어있는 Koin 서비스를 SpringBoot로 마이그레이션하기 시작하기로 했다.

이 과정에서 마이그레이션이 정상적으로 완료 되었는지 확인하기 위해 ATDD 방식을 적용하고자한다.

인수테스트 작성, SpringBoot, 협업 방식, 코드컨벤션 등 프로젝트 초기 구성 과정에서 구성원들의 이해를 맞추기 위해 몹 프로그래밍 방식이 유용하다고 생각했다.

초기에 간단한 도메인을 목표로 잡고 몹프로그래밍을 진행하며 구성원의 이해도를 동일하게 맞춰가는 과정을 진행하려고한다.

마이그레이션 이유에 대한 자세한 이야기는 BCSDLab - 레거시 이야기 참고

사전 고려사항

프로젝트를 시작하기 전 사전에 다음과 같은 내용들을 고려하면 좋겠다고 생각하여 정리해본다.

프로젝트 목적

  1. Spring 프로젝트를 SpringBoot로 마이그레이션한다.
  2. Regular 신규 전환 인원이 프로젝트에 원활하게 참가할 수 있도록 프로젝트 기반을 다져둔다.
  3. 단발성 프로젝트가 아닌 지속 가능한 프로젝트를 구성한다.

🙋 작업 인원 선정

  1. BCSDLab BackEnd Regular 인원
  2. 해당 프로젝트의 필요성을 이해하고 함께 할 인원
  3. 지속적으로 소통이 가능한 인원

💻 개발환경

  1. IntelliJ IDE를 사용한다.
  2. 각 환경별로 동일한 코드 컨벤션 적용을 위해 IntelliJ CodeStyle을 적용한다.
  3. 정적 분석 툴의 도움을 받는다. (plugin: Sonar Lint)

🔨 기술 스택

  • SpringBoot 3.1
  • Java 17
  • JPA
  • Lombok
  • RestAssured
  • 그 외 기타 기술스택은 마이그레이션 진행 과정에서 기존 인프라 환경을 참고하여 추가한다.
    • ex) redis, mysql, mongodb, AWS S3, Slack 등

✅ 요구사항 정의

  1. 기존 서비스 API EndPoint를 유지한다. (배포를 해도 클라이언트는 문제 없게 해야한다.)
  2. 차후 다른 인원들이 작업방식을 이해할 수 있도록 문서화를 진행한다. (PR 템플릿, 이슈 템플릿, 컨벤션, 작업 개요 등)

💬 코드리뷰 문화 및 기술스택 정의

초기 몹프로그래밍을 완료한 뒤 구성원들과 논의하여 도출할 예정

🔍 기존 KOIN 프로젝트 인프라 확인

  1. 기존 인프라 환경 (Ubuntu 16)
    1. 새로운 인스턴스를 구성할지도 논의한다.
  2. 서버에서 cron으로 돌고있는 Batch job 확인
    1. https://github.com/BCSDLab/KOIN_BATCH
  3. DB 마이그레이션은 현재 고려하지 않는다. (인원, 기간상 어려울 것이라고 생각됨, 다만 계속 고려는 하고있는 상황)
    1. 현재 5.7 버전, 8.0 이상으로 업그레이드 할 것인가 고민은 있으나 현재 고려하진 않는다.
    2. 마이그레이션을 해야 할 이유, 사이드이펙트를 충분히 고려하지 못한 상황이기도 하다.

시작하기

나를 포함한 BackEnd Regular 인원 4명이 마이그레이션 프로젝트에 참여했다.

프로젝트 시작 및 구성원의 이해과정을 동기화 하기 위해 몹 프로그래밍으로 SpringBoot 프로젝트 생성부터 진행했다.

마이그레이션을 진행하기 위해 인수테스트를 도입했다.

기존 API와 동일하게 동작하는지 확인하기위한 최소한의 안전장치라고 생각하여 도입했다.
초기에는 다소 어색하고 테스트짜는것이 불편할 수도 있겠지만 무수히 많은 API를 손으로 일일히 테스트하는것 보다는 훨씬 더 나을 것이라고 팀원들을 설득했다.

도구는 가장 익숙한 RestAssured를 사용하기로 했다.

진행사항

4명이서 몹프로그래밍을 진행하며 수행한 작업내용을 정리해두고자 한다.
향후 다른 작업을 수행할 때 어떤 작업을 고려해야할 것인가에 대한 지표가 될 수 있을 것 같다는 생각이다.

SpringBoot 프로젝트 생성

  • SpringBoot 3.1.5
  • JPA
  • Lombok
  • RestAssured 등

인수테스트 작성

  • 인수테스트를 왜 사용해야하는가? 설득하기

브라운의 ATDD 강의를 참고하며 팀원들에게 인수테스트의 중요성을 설득했다.

참고자료: 2023 우아콘 - 지속 가능한 인수 테스트 주도 개발

  • 인수테스트 작성 방법 익히기 (RestAssured 사용법)

가장 간단한 API를 우선적으로 구현하며 팀원들과 컨벤션, 코드스타일, 인수테스트 작성방식 등 다양한 정보에 대해 이해를 맞춰가는 시간을 가졌다.

BCSDLab의 트랙 정보를 나타내는 /tracks/tracks/{id} API에 대한 인수테스트 작성 및 구현을 몹프로그래밍으로 진행했다.

정리

약 3일에 거쳐 간단한 API 몹프로그래밍을 완료했다.
하루에 2시간씩 약 6시간 이상을 투자한 것 같다.

다른 팀원들을 학교에, 나는 서울에 있어 임시 레포를 통해 코드를 옮겨가며 작업을 진행했다.

다들 처음 해보는 몹프로그래밍에 다소 뚝딱거리는 면도 있었지만 2일차부터 익숙해지며 이야기를 나누며 작업하는 모습이 나름 효과적이였다고 생각한다.

TODO

이제 본격적으로 해야할 것들이 눈앞에 보이기 시작한다.
약간 아찔하긴 한데 조금은 장기적으로 보되 템포는 빠르게 진행하고자 한다.

협업

  • PR Template
  • issue Template
  • 코드 컨벤션
  • 신규 레귤러 인원 인수인계 어떻게할지?
    • 2024 레귤러 전환인원에게 줄 업무?
  • 작업들 어떻게 관리할지
    • 트렐로, 깃헙 이슈
    • 주기적으로 청소 (주간공유 때)
  • 회의, 공유 방식
    • 주간공유 활용
  • 온보딩 어떻게 할지 (천천히)
    • 인프라
    • 초록 스터디
    • 코인 마이그레이션
    • BCSD BackEnd Regular 온보딩 문서 활용

개발

  • 인증
    • JWT 기반 인증
  • AWS S3 이미지 업로드
  • 슬랙 알림발송
  • 회원가입 이메일 전송 로직
  • 외부 API 연동(버스 쪽)
  • API들 정리
    • 누가 할 것인지
    • 어떤걸 신규인원줄건지

질문 키워드

몹프로그래밍을 진행하며 다양한 질문들이 나왔는데 해당하는 키워드들에 대해서 간략하게 정리해두고 마무리하려고한다.

몹 프로그래밍, 드라이버, 네비게이터, 그라운드 룰

WAR, Jar, 스프링 부트 설정, Lombok, Flyway, Bean Validation, Swagger, .gitignore, DS_STORE, yaml, gradle, RestAssured, Instant와 LocalDateTime, Bean Validation과 JPA, CRUD Repository

차후 다른 레귤러들의 온보딩 과정에 해당 키워드를 학습하도록 유도해야겠다는 생각이 든다.

다음은 repository를 init하는 부분부터 이어나가볼 예정이다.

앞으로도 화이팅이다!

profile
안녕하세요 😆

0개의 댓글