스프링부트 입문 시리즈
#03 회원 관리 페이지 만들기 👈
회원관리 페이지는 다음과 같은 순서로 만든다
비즈니스 요구사항 정리
데이터: 회원ID, 이름
기능: 회원 등록, 조회
DB: 아직 데이터 저장소가 선정되지 않음(가상의 시나리오)
스프링의 전반적인 구조를 이해하기 위해 단순한 비즈니스를 구현할 것이다
컨트롤러: 웹 MVC의 컨트롤러 역할
서비스: 핵심 비즈니스 로직 구현
리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
도메인: 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용한다
아직 데이터 저장소가 선정되지 않았기 때문에, 우선 인터페이스 구현 클래스를 변경할 수 있도록 설계했다
회원 도메인과 리포지토리 만들기
도메인 만들기
scr/main/java/yeon.hello_spring에서 마우스 우클릭 후
New - Package로 패키지를 생성한다
domain이라는 패키지 생성하고
domain - 우클릭 New - Class로 Member 클래스를 만든다
Alt + Shift + S를 누르면 다음과 같은 창이 뜬다
Generate Getters and Setter로
Getter/Setter 메소드 만들어준다
Member.java
package yeon.hello_spring.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;
}
}
리포지토리 만들기
scr/main/java/yeon.hello_spring에서 마우스 우클릭 후
New - Package로 repository 패키지를 생성한다
패키지에서 우클릭 후 Interface를 만든다
MemberRepository.java
package yeon.hello_spring.repository;
import java.util.List;
import java.util.Optional;
import yeon.hello_spring.domain.Member;
public interface MemberRepository {
Member save(Member member);
Optional<Member> findById(Long id);
Optional<Member> findByName(String name);
List<Member> findAll();
}
MemberRepository 인터페이스에 정의해놓은 기능들은 구현체를 만들어 거기서 구현할 것이다
repository 패키지에서 우클릭 후에 MemoryMemberRepository 클래스를 만든다
클래스를 만들면 implements MemberRepository를 해 준 다음
Alt + Shift + S를 누르고 Override/Implement Methods를 클릭한다
OK를 클릭하면 다음과 같이 자동으로 메소드가 생성된다
save()를 저장할 공간이 필요하다 Map을 사용해서 저장공간을 만들고
sequence는 순서(번호)를 저장
실무에서는 동시성 문제가 있을 수 있어서 공유되는 변수일 때는 ConcurrentHashMap을 써야된다고 한다
하지만 여기서는 예제이기 때문에 단순하게 HashMap을 사용했다
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
처음에 우리는 Member에 id와 name을 만들었다
name은 사용자가 직접 입력하는 값이고
id는 시스템이 정해준다
따라서 다음과 같이 id는 ++sequence를 통해 번호를 정해주고
store.put()을 통해 id를 Map에 저장한다
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
findeById()는 회원을 찾는 기능인데
store.get(id)로 id를 받아오면 된다
@Override
public Optional<Member> findById(Long id) {
return store.get(id);
}
그치만 위에 코드처럼 작성하면 빨간줄로 에러가 뜨는 것을 확인 할 수 있는데
id 값이 null 값일 수도 있기 때문이다
그럴때는 Optional을 사용해 감싸주면 된다
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
findByName과 findAll은 다음과 같이 작성해주면 기능 구현은 모두 끝난다
@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());
}
스프링부트 입문 시리즈
#03 회원 관리 페이지 만들기 👈
'Framework(Library) > Spring(Springboot)' 카테고리의 다른 글
[스프링부트 입문] 시리즈 #05 회원 서비스 개발 + 테스트 (0) | 2023.09.05 |
---|---|
[스프링부트 입문] 시리즈 #04 회원 리포지토리 만들기 + 테스트 (0) | 2023.09.04 |
[스프링부트 입문] 시리즈 #02 정적페이지 만들고 화면 띄우기 (0) | 2023.08.31 |
[스프링부트 입문] 시리즈 #01 프로젝트 생성하기 (0) | 2023.08.30 |
[Spring] 빌드 관리 도구 : Maven과 Gradle의 차이 (0) | 2023.08.23 |