현의 개발 블로그

[Servlet, JSP, MVC 패턴] 비즈니스 로직 작성 본문

스프링부트 이론/MVC

[Servlet, JSP, MVC 패턴] 비즈니스 로직 작성

hyun2371 2023. 6. 19. 20:10

간단한 회원 관리 웹 애플리케이션을 만들 것이다.

 

Servlet, JSP, MVC 패턴 순서로 각각 웹 애플리케이션을 만들고

이전 단계의 한계점들을 개선해 나가고자 한다.

 

먼저 회원을 저장 및 조회하는 핵심 비즈니스 로직 작성하자.

 

도메인 설계

회원 도메인을 먼저 설계한다.

@Getter @Setter @AllArgsConstructor @NoArgsConstructor
public class Member {
    private Long id;
    private String username;
    private int age;}

 

Repository 생성

회원을 저장하는 Repository를 생성한다.

public class MemberRepository {
    private static Map<Long, Member> store = new HashMap<>();
    private static long sequence = 0L;

    private static final MemberRepository instance = new MemberRepository();

    public static MemberRepository getInstance(){
        return instance;
    }
    private MemberRepository(){}
}

hashMap store 객체로 Member와 id를 저장한다.

필드들을 static으로 설정했기 때문에 MemberRepository 객체가 여러 개 생성되어도 필드값은 하나이다.

 

private 생성자를 사용해 다른 클래스에서 접근할 수 없도록 한다.

getInstance()를 통해서만 repository 객체에 접근할 수 있기 때문에 싱글톤이 보장된다.

 

 

저장, 조회, 삭제 로직을 만든다.

저장될 때마다 id값이 증가되도록 하였다.

public Member save(Member member){
        member.setId(++sequence);
        store.put(member.getId(), member);
        return member;
  }

public Member findById(Long id){
    return store.get(id);
}

public List<Member> findAll(){
    return new ArrayList<>(store.values());//store 값들을 꺼내 ArrayList로 반환
}

public void clearStore(){
    store.clear();
}

 

테스트 코드 작성

단축키 commad+shift+T로 간편하게 클래스를 생성할 수 있다.

 

getInstance()를 통해 객체를 싱글톤으로 가져올 수 있다.

만약 스프링을 쓴다면 싱글톤을 보장해주기 때문에, 아래처럼 작성하지 않아도 된다.

MemberRepository memberRepository = MemberRepository.getInstance();

 

각 테스트가 끝날 때마다 store 객체를 초기화해주는 코드를 작성한다.

@AfterEach
void afterEach(){
    memberRepository.clearStore();
}

 

저장 테스트

@Test
void save(){
    //given
    Member member = new Member("hello", 20);

    //when
    Member savedMember = memberRepository.save(member);

    //then
    Member findMember = memberRepository.findById(savedMember.getId());
    assertThat(findMember).isEqualTo(savedMember);
}

 

조회 테스트

  • 객체 2개를 저장하고 2개가 맞는지 확인한다
  • result 리스트 객체가 member1, member2를 포함하고 있는지 확인한다.
@Test
void findAll(){
    //given
    Member member1 = new Member("member1", 20);
    Member member2 = new Member("member2", 30);

    memberRepository.save(member1);
    memberRepository.save(member2);

    //when
    List<Member> result = memberRepository.findAll();

    //then
    assertThat(result.size()).isEqualTo(2);
    assertThat(result).contains(member1, member2);
}

 

 

 


Reference

스프링 MVC 1편 - 백엔드 웹 개발 기술

 

 

Comments