It's easy, if you try

[Spring] 스프링 입문 강의 섹션 3 - 웹 어플리케이션 계층 구조 / 도메인, 리포지토리, 테스트케이스 작성 본문

스프링

[Spring] 스프링 입문 강의 섹션 3 - 웹 어플리케이션 계층 구조 / 도메인, 리포지토리, 테스트케이스 작성

s5he2 2023. 1. 19. 00:18
반응형

비즈니스 요구사항 정리

일반적인 웹 어플리케이션 계층 구조

  • 컨트롤러: 웹 MVC의 컨트롤러 역할
  • 서비스: 핵심 비즈니스 로직 구현
  • 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
  • 도메인: 비즈니스 도메인 객체 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨.
데이터 저장소가 선정되지 않았을땐, 우선 Repository를 인터페이스로 생성하여 추후에 구현 클래스를 변경할 수 있도록 설계한다.

 

1. 도메인 , 리포지토리 작성

⭐️ Optional Java8에 도입됨. null 처리하는 방법 중 하나.

사용방법 예시)

  • Optional<Member> member : Optional 객체 선언
  • Optional.ofNullable(store.get(id)); : null이어도 감싸서 반환
  • Optional객체.ifPresent : null이 아니면 (값이 있으면)

2. 테스트케이스 작성 (리포지토리)

  • Junit 테스트 프레임워크로 테스트를 실행 : 반복 실행에 유리하다.
  • test폴더에 작성
  • @Test 어노테이션을 함수위에 선언
  • Assertions.assertEquals : 두개의 파라미터가 동일한지 검증 (동일하지 않으면 테스트 실패)
  • Assertions는 static으로 선언해두면 더욱 간략한 코드 작성이 가능하다.
  • @AfterEach : 각각의 테스트가 끝날때마다 실행하고 싶은 함수 위에 선언
    테스트가 끝날때마다 데이터를 clear해주는 것이 좋다. 

3. 서비스 클래스 작성

서비스 클래스의 함수명은 비즈니스적으로, 리포지토리는 좀더 기계적으로 작성하면 좋다.
DI한 repository를 작성(외부에서 repository를 넣어준다, 아래 사진 참고)하면 같은 메모리 repository를 사용할 수 있다. 

4. 테스트케이스 작성 (서비스)

클래스에서 command + shift + T : create New Test (클래스의 테스트 껍데기 코드를 만들어줌)

테스트 함수는 한글로 작성해도 괜찮다.
  • 함수 내에 주석 활용
    • //given : 주어진 데이터로
    • //when : 이걸 실행했을 때
    • //then : 검증이 되어야한다.
  • fail(""); 
  • Exception e  = assertThrows(Exception.class, () -> Exception 예외가 발생했을 때)
    Exception이 발생하지 않으면 테스트 실패함. 
    e.getMessage
  • Repository 초기화를 @BeforeEach에서 한다.

같은 메모리를 갖는 repository

반응형
Comments