이 글은 인프런에 있는 김영한님의 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의를 듣고 정리한 필기입니다.
⛅️ "회원 관리 예제"에서 해볼 내용들
여러 시간에 걸쳐서 회원을 관리하는 예제를 5개의 단계에 걸쳐서 진행한다.
- 비즈니스 요구 사항 정리
- 회원 도메인과 리포지트리 만들기
- 회원 도메인과 회원 도메인 객체를 저장하고 불러올 수 있는 저장소인 리포지트리 객체 생성 - 회원 리포지트리 테스트 케이스 작성
- 위에서 만들었던 리포지트리가 정상 동작하는지 확인 - 회원 서비스 개발
- 실제 비즈니스 로직이 있는 회원 서비스 개발 - 회원 서비스 테스트
- 위에서 만든 회원 서비스가 정상 동작하는지 확인
여기서 테스트는 Junit과 test framework를 이용하여 만든다.
⛅️ 비즈니스 요구사항 정리
이 강의의 목표는 스프링 생태계 전반적으로 개발을 어떻게 하고, 어떻게 동작하는지를 알아보는 것이 목표이다.
그렇기 때문에 비즈니스 요구 사항도 가장 간단한 것으로 할 것이다.
- 데이터 : 회원 ID, 이름
- 기능 : 회원 등록(단, 중복 이름 허용X), 회원 조회
- 아직 DB가 선정되지 않은 상황 (가상의 시나리오)
- 개발자를 개발을 해야 하는 상황인데, 어떤 DB를 사용할지 선정되지 않은 상황.
성능이 좋은 DB를 사용할지, noSQL을 사용할지 아직 정해지지 않은 상황에서 개발을 해야하는 상황.
⛅️ 일반적인 웹 어플리케이션 계층 구조
일반적인 웹 어플리케이션들은 컨트롤러, 서비스, 리포지트리, 도메인 객체, 그리고 데이터베이스(DB)로 구성이 된다.
컨트롤러는 이전 강의에서 이야기했었던 웹 MVC의 컨트롤러 역할을 하며, API를 만들 때에 사용한다.
도메인은 회원, 주문, 쿠폰처럼 데이터베이스에 주로 저장하고 관리되는 비즈니스 도메인 객체입니다.
서비스. 서비스 클래스에 핵심 비즈니스 모델이 들어가 있으며, 예를 들어 회원 중복 가입 허용 안됨과 같은 로직들이 서비스 객체에 들어가 있다.
또한 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직이 동작하도록 구현한 객체이다.
리포지트리는 데이터베이스에 접근하여 도메인 객체를 DB에 저장하고 관리한다.
웹 어플리케이션은 저러한 계층 구조를 가지고 있고, 우리도 일반적인 계층적 구조를 따라 갈 것이다.
⛅️ 클래스 의존 관계
MemberService
- 회원 비즈니스 로직이 있는 회원 서비스. (서비스 클래스에 핵심 비즈니스 모델이 있음)
MemberRepository
- 리포지트리는 도메인 객체를 DB에 저장하고 관리하는데, 아직 DB가 선정되지 않은 상태이다.
따라서 구현체를 우선 Memory 구현체(Memory Member Repository)로 만든다. 개발을 해야하기 때문에 메모리로 단순하게 저장하는 방식을 사용하자.
이후에 구체적인 기술이 선정되고 나면 Memory 구현체를 해당 기술로 교체가 필요하다.
이를 위해서 interface가 필요하다. 따라서 MemberRepository를 Interface로 정의한다.
- 아직 데이터 저장소가 선정되지 않았기 때문에, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계.
- 데이터 저장소는 RDB, NoSQL 등 다양한 저장소를 고민중인 상황이라고 가정.
- 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용.