#1 프로젝트 설계

달래·2023년 11월 28일
0

개인프로젝트

목록 보기
1/6

으악 개인프로젝트 진짜 시작할 것이다..!!! 라는 다짐과 함께 힘차게 출발~

0. 아이디어🤔


사실 아이디어는 그렇게 중요한 부분은 아닙니다.
멀티 모듈 기반의 RestApi를 Spring Boot와 Jpa를 기반으로 여러가지 기술들을 적용하여 backend를 만들어 보자는 것이 핵심 아이디어입니다.

일단, todo + diary + 친구와 상호작용의 서비스를 개발할 예정이다.
너무 많은 API를 만드는 것보다, 하나하나 API에 집중해서 보다 빠르게 개발할 것이 필요해보여서 todo는 개발을 생략했습니다.

개발할 서비스를 목록화하면 다음과 같습니다.

  • 다이어리
  • 친구
  • 댓글
  • 하트(좋아요)
  • 알림

많다..


1. 사용할 기술 🛠️


  • java 11
  • spring boot 2.7
  • mysql
  • redis
  • swagger
  • git

<예정>

  • jenkins
  • docker
  • aws ec2
  • aws s3

2. 구조설계⚙️


다른사람들의 오픈소스 코드를 많이 참고해보았습니다.

그 결과, 다음과 같이 레이어드 아키텍처 기반의 구조를 만들것입니다.

  • core api
  • application
  • auth
  • repository
  • global

처음에 위와 같이 구성했는데요, 프로젝트를 실제로 개발하고 모듈과 아키텍처를 더 공부하면서 다음과 같이 구조를 변경하였습니다.

  • api-diary
  • application
  • auth-jwt
  • common
  • core-mysql
  • core-redis

이에 대한 자세한 설명은 후에 포스팅할 멀티 모듈에서 자세히 다뤄볼 예정입니다.


1) api-diary

데이터의 요청/응답을 처리하는 패키지입니다.
서비스마다 클라이언트로부터 받는 request와 response, 그리고 이를 다루는 controller가 포함됩니다.
즉, presentation 레이어의 역할입니다.

  • request
  • response
  • controller
  • exception(Controller Advice)

2) application

api로 받은 데이터로 비즈니스 로직을 수행하는 패키지입니다.
주의해야 할 점은, api와 무관하게 (참조하지 않게) 설계 로직을 짜야한다는 것입니다. api가 변경되어도 핵심로직은 똑같아야 하기 때문입니다.

  • domain (entity)
  • dto
  • service
  • exception

3) core-mysql, core-redis

db에 접근하여 정보를 가져오는 패키지입니다.
jpa로 구현할 것입니다.

4) auth-jwt

spring security를 기반으로 jwt토큰 통신을 하고, 여기에 OAuth2(Google, Naver, Kakao)를 추가하여 로그인 처리를 담당할 패키지입니다.
즉, 인증/인가를 담당합니다.

5) common

api나 비즈니스 로직과 무관하게 전역적으로 처리해야할 설정을 담는 패키지이다.

  • config (swagger/spring ...)
  • controllerAdvice / interceptor / filter / resolver ...
  • exception
    : 전역처리 할 exception을 따로 빼주었다.

3. git-flow 브랜치전략😼


git을 사용할 때도 git-flow 브랜치 전략을 사용해서, 깃을 꾸준하게 관리하며 사용해보기로했다! (혼자 하는 프로젝트라 큰 의미는 없겠지만..)

  • main
  • develop
  • feature
  • hotfix

자세한 git-flow 전략은 다음을 참고!
https://puleugo.tistory.com/107
https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html

그 외 고려사항... 🫥

  • 동시성 문제 (ConcurrentHashMap, AtomicLong)를 고려해야한다! (영한님 도와줘요)
  • 로깅은 어떻게 할까!
  • 테스트 코드 열심히 짜기!
  • JPA 열심히 공부!
  • 쓰레드 고려
profile
아좌잣~!

0개의 댓글