From 3902af57e3a6e6ee97839cf0c9283ac05f3a776d Mon Sep 17 00:00:00 2001 From: geonhos Date: Thu, 23 May 2024 16:21:14 +0900 Subject: [PATCH] =?UTF-8?q?admin:=20=EC=84=A4=EB=AA=85=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- poc/admin/description.md | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 poc/admin/description.md diff --git a/poc/admin/description.md b/poc/admin/description.md new file mode 100644 index 0000000..ed5a7f9 --- /dev/null +++ b/poc/admin/description.md @@ -0,0 +1,50 @@ +# 관리자 서비스 + +## Stack +- Spring Boot 3.2.5 +- Spring Security 6 +- JWT (Json Web Token) +- JPA + QueryDsl (Java Persistence Api) +- MariaDB LTS 10.11.7 +- Docker (for Database, 선택사항) +- Test Containers (for Integration Test) + +## Domain 설명 +- 로그인 시 Access Token 과 Refresh Token 을 발급한다. +- Access Token 만료 시 Refresh Token 을 이용하여 자동으로 재발급한다. +- Refresh Token 은 ip 를 추가 검증한다. +- Refresh Token 만료 시 로그인 페이지로 이동한다. +- 로그아웃 시 Access Token, Refresh Token 을 삭제한다. +- 서버에서 세션을 별도로 관리하지 않고 발급한 AT/RT 를 이용하여 인증/인가를 처리한다. +- 관리자는 하나의 권한을 가진다. +- 메뉴는 메뉴 그룹과 메뉴 2 Depth 로 등록하고 노출한다. +- 권한에 메뉴를 등록하여 접근할 수 있는 메뉴를 제공한다. +- 등록된 메뉴 외 접근 시 권한이 없다는 메시지를 노출한다. +- 메뉴를 등록할 때 메뉴 별 추가 권한 등록이 가능하다. + +## 아키텍처 +- CQRS(Command and Query Responsibility Segregation) 적용 +- 상위 계층에서 하위 계층 호출은 가능하지만 하위 계층에서 상위 계층 호출은 불가하다. + (e.g. 표현 -> 응용, 도메인 호출 가능, 도메인 -> 응용 호출 불가능) + +### 표현 계층 +- /admin/web/**Controller.java: Client 와 통신하는 계층 +- /admin/web/**WebService.java: 화면 노출을 위한 계층 +- /admin/web/**QueryRepository.java: QueryDsl 을 이용한 화면에 노출할 데이터 조회 + +### 응용 계층 +- /admin/app/**AppService.java: 비즈니스 로직을 처리하는 계층, 1 또는 N개 이상의 도메인 로직을 조합하여 도메인 Service를 호출한다. + +### 도메인 계층 +- /admin/domain/**/{엔티티}Service.java: 도메인 로직을 처리하는 계층 +- /admin/domain/**/{엔티티}Repository.java: JPA 를 이용한 데이터 조회 및 저장 + +## 테스트 더블 +- Test Container를 이용하여 실제 동작 테스트 +- 응용 / 도메인 계층에 대해 작성한다. +- 테스트 코드 작성 시 Mock/Fake/Stub을 이용하는 것이 아닌 의존성을 주입받고 테스트 대상 클래스의 메서드를 호출하여 테스트한다. + + +## TODO +- 화면 +- Exception 처리 (AS-IS: Unchecked Exception 처리 중, 로그인은 Checked Exception 으로 필요에 따라 추후 처리) \ No newline at end of file