회원 관리 프로젝트를 만들어볼건데, 요구사항은 다음과 같다.

일반적인 웹 어플리케이션의 구조이다.
컨트롤러는 웹 MVC의 컨트롤러 역할,
도메인은 주로 데이터베이스에 저장하고 관리되는 비즈니스 도메인 객체,
서비스는 도메인 객체를 가지고 핵심 비즈니스 로직 동작,
리포지토리는 데이터베이스에 접근하여 도메인 객체를 DB에 저장 및 관리하는 역할을 한다.

클래스 간의 의존관계는 다음과 같다.
아직 데이터베이스가 선정되지 않은 상황이기 때문에, 회원 리포지토리는 인터페이스로 설계하고, 가벼운 메모리 구현체를 이용해서 구현한다.
향후 데이터베이스가 선정되고 나면 바꿔끼울 예정이므로 인터페이스를 정의한다.
Member.java
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;
}
}
MemberRepository.java
package hello.hellospring.repository;
public interface MemberRepository {
// 회원 저장
Member save(Member member);
// 회원아이디로 회원 조회
Optional<Member> findById(Long id);
// 회원이름으로 회원 조회
Optional<Member> findByName(String name);
// 회원 리스트 조회
List<Member> findAll();
}