FireDrago
[Spring] 회원관리 예제 본문
intro
웹 에플리케이션의 구조를 간단한 예시로 알아보고, 테스트 코드도 작성해보자
패키지 구조
Controller : 사용자의 요청을 받아서, 해당 요청을 처리하기 위한 Service를 호출하고 데이터를 View로 전달한다.
Service : 비지니스 로직이 작성되는곳 (회원정보 저장 , 회원정보 검사)
Domain : 데이터 베이스에 저장되는 정보 객체 (회원정보, 쿠폰 등)
Repository : 데이터 베이스와 연결하여 데이터를 받아오는 객체 (회원정보 조회, 수정)

Domain

- 회원 정보는 id 와 name 으로 이루어져 있다.
- getter 와 setter를 사용하여 회원정보를 가져온다.
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 |
