• inflearn 김영한의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 보고 정리한 내용입니다.

1. 비즈니스 요구사항 정리

  • 데이터 : 회원ID, 이름
  • 기능 : 회원 등록, 조회
  • 아직 데이터 저장소가 선정되지 않음(가상의 시나리오)

웹 애플리케이션 계층 구조

  • 컨트롤러 : 웹 MVC의 컨트롤러 역할

  • 서비스 : 핵심 비지니스 로직 구현 (ex. 회원가입)

  • 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리

  • 도메인 : 비지니스 도메인 객체 (ex. 회원, 주문 등 주로 데이터베이스에 저장하고 관리)

2. 회원 도메인과 리포지토리 만들기

소스코드

  • 회원 객체 (domain/Member.java)
  • 회원 리포지토리 인터페이스 (repository/MemberRepository.java)
    • 코드
    • 데이터 저장소가 아직 선정되지 않았기 때문에 interface로 구현
    • Optional : NPE(NullPointerException)가 발생되는 것을 방지하기 위해 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다.

  • 회원 리포지토리 메모리 구현체 (repository/MemoryMemberRepository.java)

3. 회원 리포지토리 테스트 케이스 작성

일반적인 테스트 방법

  • 자바의 main메서드를 통해 실행하거나, 웹 애플리케이션의 컨트롤러를 통해 실행한다.
    • 단점 : 준비과정이 복잡하고, 반복 실행하기 어려우며, 여러 테스트를 한번에 실행하기 어렵다.

Spring Test

  • 스프링 프레임워크에서 제공하는 통합 테스트 및 스프링 MVC 통합 테스트를 지원한다.
    • 일반적인 테스트 방법의 단점을 해결하여 좀 더 편리한 테스트 환경을 제공한다.

JUnit

  • 자바로 단위테스트를 쉽게 해주는 테스트용 프레임워크이다.

소스코드

  • 코드

  • test코드 생성 규칙
    • 테스트하려는 소스파일이 속한 패키지와 동일한 패키지이름으로 test폴더에 생성한다.
    • 테스트파일 이름은 소스파일 이름뒤에 Test를 붙인다(관례).

  • 테스트 순서는 정해져 있지 않다. (보통의 코드처럼 처음부터 끝까지 순차적으로 진행되지 않는다.)

  • 여러 메서드를 한번에 테스트할 때 메모리 DB에 직전 테스트의 결과가 남을 수 있다.
    • 문제점 : 이전 테스트 때문에 다음 테스트가 실패할 가능성이 있다.
    • 해결방법 : @AfterEach

  • @AfterEach : 각 테스트가 끝날때마다 메서드를 실행한다.

4. 회원 서비스 개발

소스코드

  • 기능: 회원가입, 중복회원 검증, 전체회원 조회, id로 회원 조회

  • 코드

5. 회원 서비스 테스트

소스코드

  • 코드

  • @BeforeEach
    • 각 테스트 실행 전에 메서드를 실행한다.
    • 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성한다.
profile
화이팅!

0개의 댓글

관련 채용 정보