본 문서는 인프런의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 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에 작성
자주 사용될 코드 부분을 드래그 후 ctrl+T 후 8 클릭. 메소드를 분리해줌
🥉 회원 서비스 테스트
쉽게 테스트 만들기 (cmd+shift+T)
클래스 이름에 커서를 두고 cmd+shift+T해서 테스트 자동 생성
테스트 짜는 방법
given
when
then
코드를 변수에 저장하기 (option+cmd+V)
assertThrows
assertThrows(IllegalStateException.class, () -> memberService.join(member2));
- () -> : 이 뒤로 오는 코드를 수행
- 수행했을 때 IllegalStateException 클래스의 오류가 발생해야 한다