이제 회원 관리 예제를 한번 만들어보자!!
비즈니스 요구 사항은 다음과 같다고 하자.
● 데이터: 회원 ID, 이름
● 기능: 회원 등록, 조회
● 아직 데이터 저장소는 선정되지 않음
일반적인 웹 애플리케이션 구조를 한번 알아보자
● 컨트롤러: 웹 MVC의 컨트롤러 역할
● 서비스: 핵심 비즈니스 로직 구현 (회원은 중복가입이 안된다는 로직 등)
● 리포지토리: DB에 접근, 도메인 객체를 DB에 저장하고 관리
● 도메인: 비즈니스 도메인 객체(회원, 주문, 쿠폰 등 주로 DB에 저장하고 관리됨)
클래스 의존관계에 대해 알아보도록 하자.
아직 데이터 저장소가 선정되지 않았기 때문에 인터페이스로 구현 클래스를(MemberRepository) 변경할 수 있도록 설계한다(데이터 저장소는 RDB, NoSQL 등 고민중). 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 이용한다.
이제 회원 도메인과 리포지토리를 만들어보도록 하자!
main -> java -> com.example.hellospringboot 에 가서 domain이라는 package를 하나 만들어준다.
그리고 이 pacakage 안에 Member 라는 Class를 하나 만들어준다.
Member 클래스 안에 위와 같은 코드를 작성해준다.
id는 system 이 회원을 구별하기 위해 알아서 정해주는 값이고, name은 회원이 직접 입력하는 값이다.
그리고 main -> java -> com.example.hellospringboot 에 가서 repository라는 package를 하나 만들어준 뒤, 여기에 MemberRepository라는 Interface를 하나 만들어준다.
만들어준 인터페이스에 위와 같은 코드를 작성해주자.
이제 구현체를 만들어주어야 한다.
repository 패키지 안에 MemoryMemberRepository 라는 Class를 하나 만들어주자.
이 Class 안에 위의 코드를 작성해주자.
save시 데이터를 어딘가에 저장해주어야 하기 때문에 Map을 활용해주고, sequence 변수는 id를 나타낸다.
이제 save를 작성해주자.
save에 위와 같은 코드를 적어준다.
Member 클래스에 있는 setId 메소드를 이용하여 member 객체의 id에 현재 sequence값+1 을 저장해주고, store.put을 이용하여 store에 id 값과 member 객체를 저장해준다.
다음으로 findById를 작성해주자.
findById에 위와 같은 코드를 적어준다.
store.get(id)를 하여 찾는 id를 가진 member객체를 반환하여 주는데, 이때 찾는 id가 null인 상황을 방지하여 Optional.ofNullable을 활용한다.
다음으로 findByName을 작성해주자.
findByName에 위와 같은 코드를 적어준다.
store.values().stream() 을 통해 store에 저장되어있는 member객체들을 모두 돌며 filter()를 통해 찾는 name과 같은 name을 가진 객체를 찾은 후, findAny()를 통해 그 중 하나를 return 해준다.
다음으로 findAll을 작성해주자.
ArrayList에 store.values()를 하여 store에 있는 모든 member객체를 넣은 후 반환해준다.
♣ 참고: Interface란?
-> https://hyeonguj.github.io/2020/02/07/java-interface-1/
interface 란? spring interface injection - interface의 구현체 주입
동기 인터페이스(interface)는 자바 프로그래밍 언어에서 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상형이다. 위키백과
hyeonguj.github.io
'BackEnd > Spring Boot' 카테고리의 다른 글
회원 Service 만들기 (0) | 2022.10.11 |
---|---|
회원 Repository 테스트 케이스 작성하기 (2) | 2022.10.08 |
API 란? (4) | 2022.10.03 |
MVC 와 템플릿 엔진 (0) | 2022.10.01 |
정적 컨텐츠 (0) | 2022.10.01 |