비즈니스 요구사항 정리
일반적인 웹 어플리케이션 계층 구조
- 컨트롤러: 웹 MVC의 컨트롤러 역할
- 서비스: 핵심 비즈니스 로직 구현
- 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
- 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨
데이터 저장소가 선정되지 않아 인터페이스로 구현 클래스를 변경할 수 있도록 설계함
RDB로 할지 JPA로 할지 등 정해지면 바꿔 끼울 것
회원 도메인과 레포지터리 만들기
shift + F6 : 파일 이름 변경
Optional이란?
Java 8에 포함된 기능
id로 찾지 못한 경우 null로 반환 하는 대신 Optional으로 감싸서 반환
Optional.ofNullable()로 감싸 반환하면 클라이언트에서 대응할 수 있음
실무에서는 동시성 문제가 있어 conquerent hash? 써야하지만 여기는 예제라 그냥진행
회원 레포지터리와 테스트케이스 작성
제대로 동작하는지 확인하기 위해 JUnit 프레임워크로 테스트 실행
src/test/java 밑에 보통 같은 이름으로 패키지 생성
같은 이름으로 클래스 생성하고 관례적으로 Test를 뒤에 붙여줌
굳이 public class일 필요 없음
@Test를 붙이면 그 함수를 실행시켜볼 수 있음
직접 텍스트를 모두 확인하기 어려움 -> JUnit 의 Assertions활용
실패한 경우 difference 확인 가능
요즘은 org.assertj.core의 Assertions.assertThat()를 많이 사용
클래스에서 실행하면 내부 test코드 한번에 실행시킬 수 있음
테스트 함수가 실행되는 순서는 보장되지 않음 -> 순서와 관계없이 메소드별로 따로 동작하도록 설계해야 함
TDD (Test Driven Development)
테스트 주도개발
회원 서비스
ctrl + alt + v : 리턴 변수 만들어줌
ctrl + alt + shift + T : Refactor this
단축키 확인법: File - Setting - keymap - 검색
서비스는 비즈니스 로직과 관련된 네이밍 해야 함 (join 등...)
회원 서비스 테스트
ctrl + shift + T : Create New Test
테스트 코드의 함수 이름은 종종 한글로 짓기도 함
빌드 시 테스트 코드는 포함되지 않음
@Test
public void Test() {
//given
기존 데이터
//when
특정 상황
//then
동작
}
given-when-then 문법
ctrl + shift + F10 : 이전 실행했던 것 다시 실행
Dependency Injection : 외부에서 필요한 클래스 넣어줌. DI라고 한다.
'Spring boot' 카테고리의 다른 글
[입문] spring DB 접근 기술 (1) | 2021.07.27 |
---|---|
[입문] 회원 관리 예제_웹 MVC 개발 (0) | 2021.07.27 |
[입문] 스프링 빈과 의존관계 (0) | 2021.07.18 |
[입문] 스프링 웹 개발 기초 (0) | 2021.07.11 |
[입문] 프로젝트 환경설정 (0) | 2021.07.06 |