프레임워크/Spring

[인프런][스프링 입문] 13~16 강

pythaac 2022. 3. 4. 21:17
  • 회원 서비스 테스트
  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기
  • 회원 웹 기능 - 홈 화면 추가

 

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

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 파일을 찾는다