[Spring]9. Login 기능 구현(1) - 다시 보기 쉽게 정리 필요

최혜원·2024년 2월 13일

Spring

목록 보기
9/9

역할 분리
1. controller : 웹 MVC의 컨트롤러 역할
2. 서비스 : 핵심 비지니스 로직 구현
3. 리포지토리 : db에 접근, 도메인 객체를 db에 저장하고 관리
4. 도메인 : 비지니스 도메인 객체 ex) 회원, 주문, 쿠폰 등등 주로 db에 저장, 관리

상황) 아직 db가 없는 상황
현재 가상의 db를 실제로 나중에 만들어진 db를 바꿔끼우기 위해 연결해주는 interface 필요

member service - interface(member repository) - momory momber repository(현재 가상의 db이자 실제로 나중에 바꿔끼울 실제 db)

https://www.inflearn.com/questions/903577/class-to-import-%EC%B0%BD%EC%9D%84-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%9D%84%EC%9A%B0%EB%82%98%EC%9A%94

  1. repository package 안
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 id);
    List<Member> findAll(); //모든 회원 LIST 반환


    void clearStore();
}
  1. 함수 구현
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)); //null 값이 들어와도 error 가 뜨지 않도록
    }

    @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());
    } //여기까지 했으면 검증을 위해 testcase 작성
    // testcase를 main에서 하면 힘들겠지, jUnit이라는 framework로 testcase 실행

    public void clearStore(){
        store.clear();
    }
}
  1. 이제 이를 실행하기 위해 testcase 해보자
package hello.hellospring.repository;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import hello.hellospring.domain.Member;
import net.bytebuddy.implementation.bind.MethodDelegationBinder;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.List;

import static org.assertj.core.api.Java6Assertions.assertThat;

class MemoryMemberRepositoryTest {

    MemberRepository repository = new MemoryMemberRepository();

    @AfterEach
    public void afterEach(){
        repository.clearStore();
    }

    @Test
    public void save(){
        Member member = new Member();
        member.setName("spring");

        repository.save(member);
        Member result = repository.findById(member.getId()).get();
        //sol1
        // System.out.println("result = " + (result == member));
        //sol2
        //Assertions.assertEquals(result, member);
        //sol3
        assertThat(member).isEqualTo(result);
    }

   @Test
   public void findByName(){
       Member member1 = new Member();
       member1.setName("spring1");
       repository.save(member1);

       Member member2 = new Member();
       member2.setName("spring2");
       repository.save(member2);

       Member result = repository.findByName("spring1").get();
       assertThat(result).isEqualTo(member1);
   }

    @Test
    public void findAll(){
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);

        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);

        List<Member> result = repository.findAll();
        assertThat(result.size()).isEqualTo(2);
    }
}
profile
공부하자

0개의 댓글