본문 바로가기
웹 개발/Back End

스프링 입문 - 회원 관리 예제

by L3m0n S0ju 2022. 1. 1.

 

 

 

비즈니스 요구사항 정리

 

데이터: 회원ID, 이름

기능: 회원 등록, 조회

아직 데이터 저장소가 선정되지 않음(가상의 시나리오)

 

 

 

일반적인 웹 에플리케이션 계층으로 개발한다.

 

 

 

 

 

1. 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계

2. 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정

3. 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용

 

MemberRepository에는 사용할 함수들을 선언하고 구현은 MemoryMemberRepository을 통해 구현한다. C언어를 비유하면 MemberRepository는 헤더파일이고 MemoryMemberRepository는 함수를 구현한 c 파일이라고 할 수 있겠다. 

 

 

 

 

 

 


extends -> 부모에서 선언, 정의를 하면 자식은 해당 메소드, 변수를 그대로 사용할 수 있음 -> 상속의 개념

implements(interface 구현) -> 부모 객체는 선언만 하고 자식에서 Override해서 재정의한다. -> 구현의 개념

 

 

public class : 모든  package에서 해당 class로 접근이 가능하다.

private class : 자신을 포함한 package에서만 해당 class로 접근이 가능하다.

protected class : 상속받은 class 에서만 해당 class로 접근이 가능하다.

 

 

 

 

 

 

 

 


 

도메인, 레포지토리 구현

https://github.com/Lemon-soju/springboot-newbie-project/commit/9fe16041414412ff9cbceda8e29274e4260e39f4

 

domain and repository · Lemon-soju/springboot-newbie-project@9fe1604

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files domain and repository Loading branch information Showing 3 changed files with 71 additions and 0 deletions. +23 −0 sr

github.com

 

 

 

 

 

 

 


Repositoory 테스트 코드

 

 

https://github.com/Lemon-soju/springboot-newbie-project/commit/b257f6d2047c42aa84a75aad90f9291eadd112b9

 

repository test · Lemon-soju/springboot-newbie-project@b257f6d

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files repository test Loading branch information Showing 2 changed files with 60 additions and 0 deletions. +4 −0 src/main/

github.com

 

 

{

    MemoryMemberRepository repository = new MemoryMemberRepository();

    @AfterEach
    public void afterEach() { // 메소드가 끝날 때 마다 실행
        repository.clearStore();
    }
    @Test
    public void save() {
        //given
        Member member = new Member();
        member.setName("spring");
        //when
        repository.save(member);
        //then
        Member result = repository.findById(member.getId()).get(); // Optional에서 값을 꺼낼 때 get 사용
        assertThat(result).isEqualTo(member); // result랑 member가 다르면 실행 시 빨간불
    }
    @Test
    public void findByName() {
        //given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);
        Member member2 = new Member(); // Shift + F6 -> 한꺼번에 rename 하기
        member2.setName("spring2");
        repository.save(member2);
        //when
        Member result = repository.findByName("spring1").get();
        //then
        assertThat(result).isEqualTo(member1);
    }
    @Test
    public void findAll() {
        //given
        Member member1 = new Member();
        member1.setName("spring1");
        repository.save(member1);
        Member member2 = new Member();
        member2.setName("spring2");
        repository.save(member2);
        //when
        List<Member> result = repository.findAll();
        //then
        assertThat(result.size()).isEqualTo(2);
    }
}

 

 

 

 

 

 


회원 서비스 개발

 

https://github.com/Lemon-soju/springboot-newbie-project/commit/a4b7086842616df40f8edca202d3edf331673730

 

Merge pull request #11 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@a4b7086

user service

github.com

 

 

 

 

 

 

 

 

 


회원 서비스 테스트 -> 자바 람다식과 Dependency Injection, Given When Then 개념을 사용

 

https://github.com/Lemon-soju/springboot-newbie-project/commit/f504a13a2bd8bb159da48c2bfbd077e2997d9c3b

 

Merge pull request #12 from Lemon-soju/slave-01 · Lemon-soju/springboot-newbie-project@f504a13

user service test

github.com

 

 

댓글