프레임워크/Spring

[인프런][스프링 입문] 9~12 강

pythaac 2022. 2. 7. 23:35
  • 비즈니스 요구사항 정리
  • 회원 도메인과 리포지토리 만들기
  • 회원 리포지토리 테스트 케이스 작성
  • 회원 서비스 개발

 

https://github.com/pythaac/Spring_tutorial/tree/main/%EC%8A%A4%ED%94%84%EB%A7%81%20%EC%9E%85%EB%AC%B8%20-%20%EC%BD%94%EB%93%9C%EB%A1%9C%20%EB%B0%B0%EC%9A%B0%EB%8A%94%20%EC%8A%A4%ED%94%84%EB%A7%81%20%EB%B6%80%ED%8A%B8%2C%20%EC%9B%B9%20MVC%2C%20DB%20%EC%A0%91%EA%B7%BC%EA%B8%B0%EC%88%A0

 

GitHub - pythaac/Spring_tutorial: These are test tutorial codes between react native(android) and spring boot

These are test tutorial codes between react native(android) and spring boot - GitHub - pythaac/Spring_tutorial: These are test tutorial codes between react native(android) and spring boot

github.com

6f9bd5ef4fb7d5625e42850fbedcaeb603e3e925

 

 

<스프링 입문 강의 – 9강 비즈니스 요구사항 정리>

l  비즈니스 요구사항

-       데이터 : 회원 ID, 이름

-       기능 : 회원 등록, 조회

-       가상 시나리오 : 아직 데이터 저장소가 선정되지 않음

 

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

-       컨트롤러 : MVC의 컨트롤러 역할

-       서비스 : 회원 중복 가입 불가 등 도메인 객체로 핵심 비즈니스 로직

-       도메인 : 회원, 주문, 쿠폰 등 DB에 저장되고 관리되는 비즈니스 도메인 객체

-       리포지토리 : 도메인 객체를 DB에 저장하고 관리


<스프링 입문 강의 – 10강 회원 도메인과 리포지토리 만들기>

l  Optional 객체 사용 이유

-       복잡한 조건문 없이 null로 인해 발생하는 예외를 처리

-       of()를 통해 생성된 Optional 객체에 null이 들어갈 경우 NullPointerException 발생

-       ofNullable()null이 될 가능성이 있을 때 사용


<스프링 입문 강의 – 11강 회원 리포지토리 테스트 케이스 작성>

l  테스트 케이스를 작성하는 이유

-       기존 테스트 방법 : main 메서드에서 실행 / Controller를 통해 실행

-       그러나 시간이 오래걸림 / 반복 실행이 어려움 / 여러 테스트를 한 번에 실행하기 어려움

 

l  테스트 케이스 작성

-       Naming Convention : 테스트할 class 이름 + Test

-       @Test : 테스트 메서드를 따로 실행해볼 수 있음

-       테스트 순서는 보장되지 않음 (이를 고려하여 설계해야함)

l  Assertions

-       Junit Assertions > Assertions.assertEquals($EXPECTED, $RESULT);

-       assertj Assertions > Assertions.assertThat($EXPECTED).isEqualTo($RESULT);

-       assertjstatic으로 assertThat부터 시작 가능 (Alt+Enter)

l  @AfterEach

-       각 테스트가 끝날 때마다 실행시킬 메서드

l  TDD (테스트 주도 개발)

-       테스트로 틀을 먼저 만들고 개발하는 방식


<스프링 입문 강의 – 12강 회원 서비스 개발>

l  Optional에 값이 있을 때 exception

-       ifPresent($FUNCTION) : 값이 있으면 함수 동작

-       throw new IllegalStateException($MESSAGE);

 

l  네이밍 컨벤션 (리포지토리 vs 서비스)

-       리포지토리 : save / find 등 무언가 개발자스럽게 그냥 저장하고 찾는 느낌?

-       서비스 : join / findMembers 등 더 비즈니스스러운 이름

-       role에 맞도록 네이밍