Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

Flèche

[spring]MemoryMemberRepository 와 SpringDataJpaMemberRepository 의 차이점 본문

spring

[spring]MemoryMemberRepository 와 SpringDataJpaMemberRepository 의 차이점

철학자 2021. 2. 28. 16:28

요즘에 스프링부트로 프로젝트를 해보고 있다.

이제 막 시작하는 단계라 회원가입 기능이나 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에 데이터를
저장하는 법을 다룰 것이다.