비즈니스 요구사항 정리
이번 시간에는 비즈니스 요구사항을 정리할 건데, 가장 쉬운 예제로 진행할 거다. 이 강의 목표가 복잡한 비즈니스를 하는 강의가 아니라 단순한 예제를 가지고 스프링을 어떤 식으로 활용하여 개발을 하는지, 어떻게 동작하는지 알아보는 것이기 때문이다.
[요구사항]
- 데이터 : 회원ID, 이름
- 기능 : 회원 등록, 조회
- 전제조건 : '아직 데이터 저장소가 선정되지 않았다'라는 가상 시나리오. 즉, 개발자가 개발을 해야 하는데 아직 DB 선정이 되지 않은 상황이다.
[구조]
- 컨트롤러 : 웹 MVC에서 클라이언트의 요청을 처리하고 응답을 반환하는 역할이다.
- 서비스 : 핵심 비즈니스 로직을 구현하는 역할이다. 예를 들어, 회원가입 시 중복 여부를 확인하는 로직은 서비스에서 처리한다.
- 리포지토리 : 데이터베이스에 접근하여 도메인 객체를 저장하고 관리하는 역할이다.
- 도메인 : 비즈니스 도메인 객체를 나타낸다. 예를 들어, 회원, 주문, 쿠폰과 같은 데이터베이스에 저장되고 관리되는 객체이다.
[클래스 의존관계]
우리는 처음에 '아직 데이터 저장소가 선정되지 않았다'라는 전제조건이 존재한다. 즉, RDB나 JPA 등 무엇으로 할지 선정되지 않았기 때문에 구현체를 메모리 구현체로 생성은 하되, 추후에 저장소가 정해지게 되면 이 구현 클래스를 변경할 수 있도록 인터페이스도 같이 설계해야 한다.
*메모리 구현체(In-Memory DB) : 메모리구현체는 주 기억 장치에 데이터를 저장하며 휘발성이기 때문에 전원이 꺼지면 데이터가 사라진다. 즉, 데이터를 쉽게 In-Out 할 수 있다.
* RDB(관계형 데이터베이스) : SQL 언어를 사용하여 데이터에 접근하며, 데이터의 영속성을 보장한다.
따라서, 데이터의 영속성과 관계까 중요한 경우에는 RDB를 사용하고, 데이터 처리 속도가 중요한 경우에는 메로리 구현체를 고려할 수 있다.
회원 도메인과 리포지토리 만들기
이제 앞에 설명했던 내용을 바탕으로 회원 도메인과 리포지토리를 실제 프로젝트를 통해 생성해 보자
[프로젝트]
-회원 도메인 생성
- hello.hellospring.domain 패키지 생성
- Member 클래스 생성 : 요구사항(회원ID, 이름)을 구현해야 하므로 id, name 필드값 생성
- hello.hellospring.repository 패키지 생성
- MemberRepository 인터페이스 생성
- Member save(Member member) : 회원을 저장소에 저장한다.
- Optional<Member> findById(Long id) : id를 이용해서 회원을 찾는다.
- Optional<Member> findByName(String name) : 이름을 이용해서 회원을 찾는다.
- List<Member> findAll() : 저장소에 저장된 모든 회원을 반환한다.
Optional은 Java 8부터 도입된 Wrapper 클래스로, **Null Pointer Exception**을 방지하고, Null을 보다 명확하게 처리하도록 돕는 기능을 제공한다. 이 클래스는 java.util 패키지에 포함되어 있으며, 주목적은 Null이 될 수 있는 객체를 감싸는 것에 있다.
Optional.empty( ) : 값이 Null인 경우 | Optional.of( ) : 값이 Null이 아닌 경우 | Optional.ofNullable( ) : Null일지 모를 때
- MemoryMemberRepository(구현체) 생성
여기까지 회원 관리 코드를 전부 작성했다. 자 그럼 이제 다음으로는 우리가 할 것은 바로 검증이다. 소스 코드를 작성하는 것도 중요하지만, 그것보다도 더 중요하다고 생각하는 게 바로 내가 작성한 코드가 정상적으로 동작하는지에 대한 검증과정이라 생각한다.
'스프링부트 > 김영한' 카테고리의 다른 글
😀 회원 관리 예제 - 백엔드 개발( 2 )by 김영한 (0) | 2024.04.16 |
---|---|
😀 스프링 입문 - 스프링 웹 개발 기초 by 김영한 (0) | 2024.03.27 |
😀 스프링 입문 - 프로젝트 환경설정 by 김영한 (0) | 2024.03.27 |
😀 스프링 입문 by 김영한 (0) | 2024.03.18 |
👨🔬 코드로 배우는 스프링 부트, 김영한 (0) | 2024.03.18 |