FireDrago

[Spring] 회원관리 예제 본문

프로그래밍/Spring

[Spring] 회원관리 예제

화이용 2023. 12. 29. 17:12

intro

 

웹 에플리케이션의 구조를 간단한 예시로 알아보고, 테스트 코드도 작성해보자

 

 

패키지 구조

Controller : 사용자의 요청을 받아서, 해당 요청을 처리하기 위한 Service를 호출하고 데이터를 View로 전달한다.

Service : 비지니스 로직이 작성되는곳 (회원정보 저장 , 회원정보 검사)

Domain : 데이터 베이스에 저장되는 정보 객체 (회원정보, 쿠폰 등)

Repository : 데이터 베이스와 연결하여 데이터를 받아오는 객체 (회원정보 조회, 수정)

 

 

Domain

도메인 예시

- 회원 정보는 id 와 name 으로 이루어져 있다.

- getter 와 setter를 사용하여 회원정보를 가져온다.

 

Repository

인터페이스로 정의한 Repository

- Repository 의 db가 정해지지 않은 경우, 일단 개발해야 하므로 interface로 정의한다.
  인터페이스로 정의할 경우, JDBC, JPA 등 다양한 저장 메커니즘에 맞게 구현할 수 있다.

- Optional<T> 는 NullPointException 을 방지한다. 

 

- Optional.ofNullable() 메서드는 값이 있거나, 없는 경우를 모두 포함한다. (NullpointException 예방)

- Map.values().stream().filter().findAny() 를 통해 조건에 맞는 값을 찾아온다. 

- clearStore() 메서드는 테스트 코드에서 사용된다.

 

class MemoryMemberRepositoryTest {

    MemoryMemberRepository 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();
        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);
    }
}

 

 

Service

 

 

- Service 객체는 Repository를 주입받는다. (Dependency Injection) 

- Repository 객체와 다르게 이름이 좀더 비지니스적이다. (findById -> findOne)

 

이 글은 인프런 김영한님의 스프링 입문 강의를 바탕으로 작성했습니다.

'프로그래밍 > Spring' 카테고리의 다른 글

[Spring] 스프링 기본 원리  (0) 2024.01.04
[Spring] AOP  (0) 2024.01.02
[Spring] 스프링 의존관계 설정  (0) 2023.12.30
[Spring] 웹 개발의 기초  (0) 2023.12.28
[Spring] Spring에서 Mybatis 사용하기  (0) 2023.09.04