Flèche
[spring]MemoryMemberRepository 와 SpringDataJpaMemberRepository 의 차이점 본문
요즘에 스프링부트로 프로젝트를 해보고 있다.
이제 막 시작하는 단계라 회원가입 기능이나 CRUD게시판 정도만 만들 수 있다.
이번 글에서는 스프링부트로 회원관리 API를 개발할 때 사용 하는
데이터 저장소들에 대해 글을 쓰려고 한다.
0. 시작하기에 앞서
회원 관리 API를 개발하기 위해 회원 객체와 회원레포지토리 인터페이스를
만들어야 한다. src/main/java/hello.hellospring/domain
안에
Member클래스를 작성한다
package hello.hellospring.domain;
public class Member {
private Long id;
private String name;
public Long getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
그리고 src/main/java/hello.hellospring/repository
안에 다음 회원을 저장할
레포지토리의 인터페이스를 구현한다. 인터페이스에는 save, findById기능 구현을 위한
기본적인 틀이 작성되어있다
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);
List<Member> findAll();
}
1. 메모리 리포지토리를 이용하는 경우
회원에 대한 data를 컴퓨터 메모리 상에 저장하는 경우를 생각해보자.
이 경우 스프링부트 웹 애플리케이션의 서버를 종료하면 메모리 상에서 데이터가 삭제된다.(인프런 4분28초)
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 List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
}
}
Member객체와 MemoryMemberRepository객체를 만든 뒤 repository.save(member)
을 하게 되면 hashmap에 데이터가 저장된
회원에 대한 데이터를 hashmap 에 저장한다.
스프링부트 웹 애플리케이션의 서버를 종료하면 메모리 상에서 데이터가 삭제된다.
그래서 database를 사용하는 경우 서버를 끄더라도 데이터가 계속 저장되어 남아있다.
다음 시간에는 h2 database와 Spring Data JPA 를 이용해서 DB에 데이터를
저장하는 법을 다룰 것이다.
'spring' 카테고리의 다른 글
[http] put과 post/http헤더와 바디_get방식과 post방식 (0) | 2021.03.06 |
---|---|
[http]testresttemplate -> http get,post -> header body (0) | 2021.03.05 |
[spring] 그레이들 버전 update, gradle5부터 lombok 설정 (0) | 2021.03.03 |
[spring] 스프링과 자바 객체지향 (0) | 2021.02.20 |
[SQL] PK(Primary Key) (0) | 2021.02.01 |