- 회원 서비스 테스트
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
- 회원 웹 기능 - 홈 화면 추가
31648eca2da56fcc703cc95558c95ea3672261a2
<스프링 입문 강의 - 13강 회원 서비스 테스트>
* 테스트 자동 생성 단축키
- ctrl + shift + t
* 테스트 코드 짜는 양식
- given : 이게 주어졌을 때
- when : 이걸 실행 할 때
- then : 이게 나와야 한다
* Exception 발생 테스트
// assertThrows(기대하는 예외, 로직) -> 이 예외가 발생해야한다
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
// 예외처리시 메시지 확인
assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");
* @BeforeEach / @AfterEach 까먹지 말것
<스프링 입문 강의 - 14강 컴포넌트 스캔과 자동 의존관계 설정>
* Controller / Service / Repository
- Controller : 외부 요청을 받음
- Service : 비즈니스 로직 구현
- Repository : 데이터 저장
* 컴포넌트 스캔
- [정의] 스프링이 실행될 때 @Component가 붙은 객체들을 생성해서 등록
- [범위] @SpringBootApplication의 package 하위 package -> @SpringBootApplication에 @ComponentScan이 포함
- [종류] @Controller, @Service, @Repoistory 모두 @Component을 포함
- [기타] @AutoWired는 연관 관계
- [기타] 스프링 컨네이터에 빈을 등록할 때, 기본으로 싱글톤으로 등록
<스프링 입문 강의 - 15강 자바 코드로 직접 스프링 빈 등록하기>
* @Configuration
- [정의] 스프링 설정 클래스를 정의하여 빈을 등록
- [방법] @Bean이 붙은 메서드가 반환하는 객체를 등록
* DI 방법
1) 필드 주입
@AutoWired private MemberService memberService;
2) setter 주입
@AutoWired
public void setMemberRepository(MemberRepository memberRepoistory){
this.memberRepoistory = memberReository;
}
3) 생성자 주입
@AutoWired
public MemberService(MemberRepository memberRepoistory){
this.memberRepoistory = memberReository;
}
* DI
- [권장] 런타임에 의존관계가 동적으로 변하는 경우는 거의 없으므로 생성자 주입 권장
- [참고] 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔 사용
- [중요] 상황에 따라 구현 클래스를 변경해야하면 설정을 통해 스프링 빈 등록
(MemoryMemberRepoistory를 DbMemberRepository로 바꿀 때)
// 전
@Bean
public MemberRepository memberRepoistory(){
return new MemoryMemberRepository();
}
// 후
@Bean
public MemberRepository memberRepoistory(){
return new DbMemberRepository();
}
- [주의] @Autowired는 스프링 빈으로 등록된 객체에 대해서만 동작
<스프링 입문 강의 - 16강 회원 웹 기능 - 홈 화면 추가>
* template에 home.html 추가
* 요청 처리 순서
- 요청의 관련 controller가 있는지 확인
- 없으면 staic 파일을 찾는다
'프레임워크 > Spring' 카테고리의 다른 글
[인프런][스프링 입문] 21~24강 (0) | 2022.03.08 |
---|---|
[인프런][스프링 입문] 17~20 강 (0) | 2022.03.05 |
[인프런][스프링 입문] 9~12 강 (0) | 2022.02.07 |
[인프런][스프링 입문] 5~8 강 (0) | 2022.02.06 |
[인프런][스프링 입문] 1~4 강 (0) | 2022.02.04 |