[스프링 입문] 회원 도메인과 리포지토리 만들기
📌 비즈니스 요구사항 정리
✔ 데이터 : 회원ID, 이름
✔ 기능 : 회원등록, 조회
✔ 아직 데이터 저장소가 선정되지 않음 (가상의 시나리오)
📌 웹 애플리케이션 계층 구조
➰ 컨트롤러 : 웹 MVC의 컨트롤러 역할
➰ 서비스 : 핵심 비즈니스 로직 구현
➰ 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
➰ 도메인 : 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리
📌 클래스 의존관계
➰ 아직 데이터저장소가 선정되지 않아서, 우선 인터페이스로만 구현 클래스를 변경할 수 있도록 설계
➰ 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정
➰ 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용
📌 회원 도메인 리포지토리 만들기
✔ 회원 객체
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
public Long getId(){
return id;
}
public void setId(Long id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
✔ 회원 리포지토리 인터페이스
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.List;
import java.util.Optional;
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
✔ 회원 리포지토리 메모리 구현체
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import java.util.*;
public class MemoryMemberRepository implements MemberRepository{
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore(){
store.clear();
}
}
동시성 문제가 고려되어 있지 않다.
실무에서는 ConcurrentHashMap, AtomicLong 사용 고려
Author And Source
이 문제에 관하여([스프링 입문] 회원 도메인과 리포지토리 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kureungkureung/스프링-입문-회원-도메인과-리포지토리-만들기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)