스프링부트 입문 개념정리 2 - 기본 백엔드 개념, 스프링빈과 의존관계

Haeun Kim·2022년 5월 11일
0

spring 기본개념

목록 보기
2/3

8. 웹 어플리케이션 계층 구조

  • 컨트롤러 : 웹 MVC의 컨트롤러 역할
  • 서비스 : 핵심 비즈니스 로직 구현
  • 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
  • 도메인 : 비즈니스 도메인 객체 예) 회원, 주문, 쿠폰등의 데이터 객체

9. 테스트 케이스 작성 (JUnit 활용)

given - when - then(결과 확인) 형태로 코드를 구성한다.
assert는 테스트가 실패했을 시, 테스트 시의 기댓값과 실제값을 직접 보여주어 유용하다.

@AfterEach
 public void afterEach() {
 	repository.clearStore();
 }
 
@Test
 public void save() {
 	//given
 	Member member = new Member();
 	member.setName("hi");
 
 	//when
 	repository.save(member);
 
 	//then
 	Member result = repository.findById(member.getId()).get();
 	assertThat(result).isEqualTo(member);
    Assertions.assertEquals(member, result); // 위 코드와 기능이 동일하다. 
    
    IllegalException e = arrertThrows(IllegalException.class, ()-> memberService.join(member2));
   // 뒷 함수에서 IllegalException 에러가 터질 것으로 기대된다 -> 터지면 테스트 성공
 }

test 안에 package를 선택해서 test하면 package 안의 모든 파일에 대해 test를 실행한다.
모든 test는 순서 상관 없이 실행되므로, test 이후에 repository를 clear 할 수 있는 함수를 @afterEach 안에 생성하여 테스트에 사용한 모든 데이터를 지워줘야 한다.
그리고 @beforeEach에서 DI와 관련된 코드를 수행한다.

10. 스프링 빈과 의존관계

스프링 빈 : 스프링 컨테이너에 등록되어 스프링이 관리하는 객체
컴포넌트 스캔 : @Component 애노테이션이 있으면 자동으로 스프링 빈에 등록된다. @Service, @Controller 와 같은 애노테이션에는 @Component가 포함되어 있다.
이 때 Application 파일이 있는 폴더의 모든 하위 폴더에서만 컴포넌트 스캔이 진행된다.


의존관계 : 컨트롤러가 서비스를 통해서 비즈니스 로직을 수행한다. 이 때 컨트롤러가 서비스에 의존한다고 표현한다.
DI(의존성 주입) : 생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 연결 해준다.

private final MemberService memberService;

@Autowired
 public MemberController(MemberService memberService) { 
 	this.memberService = memberService;
 }

0개의 댓글