작성
·
550
·
수정됨
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)네
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네
[질문 내용]
1-1)
MemberServiceIntegrationTest 파일에서
@Autowired MemberService "memberService"
@Autowired MemberRepository "memberRepository"
임의로 제가 "" 를 표시했는데,
위 내용의 의미가 앱이 실행될때 @configuration 에서 @Bean 된 MemberService,MemberRepository 메서드를 찾아서 호출한다음 반환값을 제가 임의로 ""표시한 memberService, memberRepository 로 넣어주는걸로 이해했는데 맞는지 궁금합니다!
1-2)
test파일에서 @Autowired MemberService memberService 이 문장이 실행되면 스프링 빈에서 땡겨온 (db에 연결된)멤버 서비스 객체를 이용할 수 있다고 이해했는데요, @Autowired MemberRepository memberRepository 이 문장은 왜 들어가있는지 이해가 안갑니다. 필요한 문장인가요??
2). 테스트라는게 저는 처음에 다른 특별한 무언가로 처음부터 규격이 정해져 있고 뭐 그런건줄 알았는데, 그냥 test 폴더에 test 객체를 생성해서 돌리는거같다고 생각되서요. 어렵게 생각 안해도 되겠죠??
3) 강의 듣다보니 Jdbc 쪽은 이해가 잘 안되는데 가볍게 받아드리고 JPA 부터 신경써도 되겠죠?
다소 긴 질문 죄송합니다 ㅠㅠ
답변 1
1
안녕하세요, 김동현 님. 공식 서포터즈 y2gcoder 입니다.
1-1) 말씀하신 게 맞습니다. 변수에 해당 객체 레퍼런스가 들어간다고 보시면 될 것 같습니다. 대신 스프링 빈 객체 등록은 그 이전에 등록되고 @Autowired를 통해 해당 타입의 빈을 찾아 연결해준다고 보시는게 더 정확합니다. 해당 부분은 스프링 핵심 원리 기본편 강의에 자세하게 소개되어 있습니다.
1-2) 이 부분은 강의 자료에 있는 코드와 다르게 작성하신 것 같습니다.
@Test
public void 회원가입() throws Exception {
//Given
Member member = new Member();
member.setName("hello");
//When
Long saveId = memberService.join(member);
//Then
Member findMember = memberRepository.findById(saveId).get();
assertEquals(member.getName(), findMember.getName());
}
강의 자료에 있는 회원가입 테스트입니다. 보시면 Then에서 memberRepository의 findById() 를 통해 member 객체를 가져와 검증하고 있는 것을 알 수 있습니다. memberService.findOne()을 이용하지 않는 이유는 검증하고 있는 대상의 메서드로 다시 검증하지 않기 위해서입니다. 지금 memberService에 대해 검증하고 있는 테스트 클래스입니다. 거기서 memberService의 메서드 하나를 테스트하기 위해 검증하고 있는 객체의 다른 메서드를 가져오는 것은 맞지 않습니다.
2) 개발은 어떻게 하느냐에 따라 한없이 자유롭기도 하고 엄격하기도 합니다. 실제로 테스트가 한줄도 없는 프로젝트도 생각보다 많이 있습니다. 시작을 부담없이 접근하는 것은 좋다고 생각합니다. 개발하시면서 테스트에 대한 필요성과 좋은 테스트에 대한 고민을 시작하게 되는 때 다시 생각하셔도 괜찮을 것 같습니다. 제 경험 상 테스트 코드는 있으면 분명히 좋습니다.
3) 지금 입문 단계에서는 충분히 그러실 수 있다고 생각합니다. 하지만 결국 JPA도 JDBC를 기반으로 만들어지고, DB에 대해 알면 알수록 JDBC에 대한 기본 지식을 잘 쌓아놔야 문제 해결이나 이해가 쉽습니다. Java 백엔드 개발자에게 결국 DB, SQL에 대한 지식은 필수적인 역량이고, JDBC도 알아야 할 날이 올 것이라 생각합니다.
감사합니다.
아 강의내용(22강)을 따라 했는데 강의자료랑 다를 수도 있군요. 알려주셔서 감사합니다!
"검증하고 있는 대상의 메서드로 다시 검증하지 않기 위해" memberRepository 의 메서드를 사용한다는 말씀 덕분에 어떻게 테스트해야 하는지에 대해 생각해볼 수 있었습니다.
강의를 한사이클 돌고 난뒤에 다시 복습하려 합니다.
주말에도 세심하게 답변해주시고 많은 도움되었습니다. 감사합니다!