[스프링] 3. 회원 관리 예제 - 백엔드 개발

지니🧸·2023년 1월 20일
0

Spring Boot & JPA

목록 보기
32/35

본 문서는 인프런의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한) 강의를 공부하며 작성한 개인 노트입니다.

🧣 비즈니스 요구사항 정리

비즈니스 요구사항

  • 데이터: 회원 ID, 이름
  • 기능: 회원 등록/조회

웹 애플리케이션 계층 구조

  • 컨트롤러: 웹 MVC 컨트롤러
  • 서비스: 핵심 비즈니스 로직 구현
  • 리포지토리: 데이터베이ㅇ스에 접근, 도메인 객체를 디비에 저장/관리
  • 도메인: 비즈니 도메인 객체
    • (예) 회원, 주문, 쿠폰

클래스 의존 관계

  • 인터페이스 사용 이유: 아직 데이터 저장소가 정해지지 않아, 나중에 구현 클래스 변경 가능하도록

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

도메인 객체는 src/main/java/hello.hellospring/domain 패키지에 작성
리포지토리는 src/main/java/hello.hellospring/repository 패키지에 작성

  • Optional<T> 클래스: null일 수도 있는 값을 감싸는 wrapper 클래스
    • 값이 null일 경우에도 이 값을 참조하는 객체/메소드 등에 NullPointerException이 일어나지 않음
    • ofNullable(value): value가 null이여도 NullPointerException이 일어나지 않도록
    • .get(): Optional의 값 반환
    • result.ifPresent(값 존재 시 일어날 코드): optional의 값이 null이 아닐 경우
  memberRepository.findByName(member.getName())
                    .ifPresent(m -> {
                        throw new IllegalStateException("이미 존재하는 회원입니다.");
                    });

⛈️ 회원 리포지토리 테스트 케이스 작성

테스트 케이스는 src/test/java/hello.hellospring/repository 패키지에 작성

Assertions

  • org.assertj.core.api.Assertions
  • assertThat(값).isEqualTo(값);

AfterEach

test 하나가 끝날 때마다 run. 주로 테스트 동안 저장한 데이터를 clear하는 데 사용

  • 테스트 간 의존관계는 없어야 하기 때문에 @AfterEach를 이용해 테스트 간 정보 클리어 필요

🍔 회원 서비스 개발

회원 서비스는 src/main/java/hello.hellopspring/service에 작성

Extract Method (ctrl+T)

자주 사용될 코드 부분을 드래그 후 ctrl+T 후 8 클릭. 메소드를 분리해줌

🥉 회원 서비스 테스트

쉽게 테스트 만들기 (cmd+shift+T)

클래스 이름에 커서를 두고 cmd+shift+T해서 테스트 자동 생성

테스트 짜는 방법

given

  • 어느 데이터를 기반하는지

when

  • 무엇을 검증하는지

then

  • 검증할 코드

코드를 변수에 저장하기 (option+cmd+V)

assertThrows

assertThrows(IllegalStateException.class, () -> memberService.join(member2));
  • () -> : 이 뒤로 오는 코드를 수행
  • 수행했을 때 IllegalStateException 클래스의 오류가 발생해야 한다
profile
우당탕탕

0개의 댓글