개인 토이 프로젝트 정리 Post. 개인 토이 프로젝트를 뭘 할까 고민하다가 예약 시스템으로 결정했다. 그에대한 계획을 정리하고자 한다.

MSA 구축 학습을 위해 어떤 내용을 해볼까 하다 예약 시스템으로 결정했다. 먼저 1차적인 학습 목표는 스프링 클라우드를 이용해서 MSA를 구축해보는 것이고, 후에 이 시스템을 쿠버네티스 환경으로 변환하는 작업을 진행해볼까 한다. 먼저 구축을 완료해보고 해당 시스템을 지속 개선, Template Project를 구성하는 게 목표다.

1차 기술 요구사항

  • Spring Boot 기반 RestAPI 서비스
  • Spring Cloud 기반 MSA
  • Spring Data JPA 기반 데이터 관리

1차 목표는 심플하게 MSA를 구축하는게 목표고 구축한 시스템을 기반으로 공통 코어 개발 및 공통 기능 개발이다.

1차 비즈니스 요구사항

시스템에 대한 비즈니스 요구사항을 심플하게 정리하자.

  • 다수의 대상의 예약을 관리한다.
  • 대상은 예약 스케줄을 설정할 수 있다.
  • 대상은 아이템을 소유하고 스케줄에 대한 아이템을 예약할 수 있다.
  • 아이템은 요금을 설정할 수 있다.
  • 대상은 상품을 설정할 수 있다.
  • 상품은 1 ~ N 개의 아이템을 설정할 수 있다.
  • 상품은 할인율을 설정할 수 있다.
  • 상품에 대한 아이템, 아이템에 대한 상품으로 예약할 수 있다.
  • 비회원도 예약할 수 있다.
  • 회원은 상품으로 할인된 요금으로 예약할 수 있다.

1차 예약시스템 ERD및 마이크로 서비스 구성

ER 다이어그램 역시 심플하게 다이어그램툴

예약시스템 ERD

ERD Entity의 색상 구분으로 서비스를 구현한다.
MasterService, ItemService, GoodsService, ReservationService, MemberService, CombinationService 6개의 마이크로 서비스로 MSA를 구축한다.

간단한 MSA 학습이 목적이라서 구현 서비스를 줄였다. MasterService, ReservationService, CompositeService 3개의 마이크로 서비스로 심플하게 구성해보자.

기술 요구사항 변경

1차 목표에서 조금 수정이됬다. Spring webflux functional endpoint로 api를 구성하고, Spring data r2dbc로 리액티브 시스템을 구성한다.

  • Spring webflux - Functional endpoint
  • Spring data r2dbc
  • Docker - mysql

처음 환경을 구성할 때 h2 메모리 DB용 서비스를 띄워서 프로젝트만으로 환경을 구성하려고 했다, 그런데 h2 메모리 DB는 외부에서 접속을 하려면 tcp통신을 이용해서 접근을 해야 하는데 r2 dbc는 tcp접속을 지원하지 않았다, 며칠의 삽질 끝에 Mysql DB를 Docker에 띄워서 구성하고 r2 dbc 환경을 구성할 수 있었다. 대충 2주 조금 넘게 Spring webflux - Functional endppoint로 api 서버 개발을 진행 중인데 더디다.. 아직 인터넷으로 정보들을 검색하기가 쉽지 않고 리액티브(Mono, Flux)에 대한 이해도가 낮아서 이런저런 시험도 해보고 이렇게도 되나 저렇게도 되나 이것저것 만져보며 천천히 진행 중이다. 오랜만에 새로운 패러다임으로 공부해보니 답답한 감도 있긴 한데 재미있고 성취감이 있다, 다만 역시 업무 외 시간을 써서 하려다 보니 시간이 많이 부족하긴 하다.

학습보단 그래도 가정, 개인 생활

처음 공부에 대한 목표를 세웠을 때 여러 가지 이유 중 하나가 딸아이한테 아빠가 공부하는 모습을 보여주는 거였다, 어디서 주서들은 건지 내생 각인 지는 기억이 나지 않은데 아빠의 공부하는 모습을 보여주면 딸아이도 따라서 공부하는 습관이 자연스럽게 생기지 않을까 하는 생각이었는데, 아직 딸이 너무 어린 거 같다 딸 옆에서 일단 책을 읽을 수가 없고 (옆에서 읽으면 장난을 걸기 일쑤다.) 평소엔 아빠한테 관심 없어 보이는 딸이 책만 펴서 보면 같이 보자며 관심을 보이는데 같이 책을 보면 다행이지만 그렇지가 않다. 그래서 딸아이를 재운 다음 책을 보던가 토이 프로젝트를 진행하던가 하는데 딸아이가 잠이 들면 빠르면 10시 반 보통 11시를 넘기기 일쑤다. 책이야 한 시간 ~ 한 시간 반 정도 읽고 잠을 청하면 되는데 토이 프로젝트는 한 시간이라는 시간은 좀 짧은 거 같다 특히 새로운 걸 학습하기엔.. 코딩하다 막히고 고민하다 보면 한 시간이 훌쩍 지나가 버린다. 내가 토이 프로젝트 목표를 좀 높게 잡은 것도 이유 중 하나이려나.. 이런저런 핑계로 처음 목표한 거 보단 매우 더디게 진행될 거 같은 생각이다. 그리고 살도 빼야 된다. 돌아오는 10월에 동생 놈 결혼인데 인생 처음 80킬로를 넘어 84킬로 까지 쪘다. 심각하다 운동도 해야 되고 공부도 해야 되고 딸아이와 시간도 보내야 한다, 하루는 24시간이 한정돼있고 포기할 수 있는 건 포기해야 될 거 같은데 아무래도 토이 프로젝트를 좀 더디게 진행하면서 시간을 할애해야 하지 않을까.. 운동은 새벽시간 밖에 할 시간이 없다, 일찍 자고 일찍 일어나 운동하고 남은 시간에 조금 책을 읽는걸로 해야되지않을까 싶다.

  • 10시 취침 ~
  • 5시45분 기상
  • 6시 ~ 7시 헬스장에서 운동
  • 7시 ~ 7시 30분까지 씻고 준비하고
  • 7시 30분 ~ 8시 20분 까지 독서
  • 8시 40분 까지 딸아이 깨워서 등원후 출근

10 - 7 탄력근무로 인해 가능한 스케쥴이다.
토이프로젝트는 회사에서 시간생길때마다 틈틈히 조금씩 진행해야하지 않을까 싶다.

-2021.05.17