geeone 스터디 블로그
[Spring] 강의 스터디 WIL 4주차 본문
1. 회원 서비스 개발
2. 회원 서비스 테스트
3. 컴포넌트 스캔과 자동 의존관계 설정
4. 자바 코드로 직접 스프링 빈 등록하기
1. 회원 서비스 개발
서비스 클래스(비즈니스 매서드들) 작성하기
- 자주 쓰는건 method로 빼기 : Control + T , extract method
- MemberService.java
package hello.hello_spring.service;
import hello.hello_spring.domain.Member;
import hello.hello_spring.repository.MemberRepository;
import hello.hello_spring.repository.MemoryMemberRepository;
import java.util.List;
import java.util.Optional;
public class MemberService {
private final MemberRepository memberRepository = new MemoryMemberRepository();
public Long join(Member member){
validateDuplicateMember(member); // 중복 회원 검증
memberRepository.save(member);
return member.getId();
}
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m ->{ //null이 아니라 어떠한 값이 있으면
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
public List<Member> findMembers(){
return memberRepository.findAll();
}
public Optional<Member> findOne(Long memberId){
return memberRepository.findById(memberId);
}
}
2. 회원 서비스 테스트
- 편리하게 테스트 하는 방법
→ Class에서 command+shift+T

- 테스트는 이름을 한글로 적어도 됨. (테스트 코드는 실제 코드에 빌드 될 때 포함되지 않음.)
- 테스트 추천 tip
→ given, when, then
@Test
void 회원가입() {
//given
Member member = new Member();
member.setName("hello");
//when
Long saveId = memberService.join(member);
//then
Member findMember=memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());
}
@Test
public void 중복_회원_예외(){
//given
Member member1=new Member();
member1.setName("spring");
Member member2=new Member();
member2.setName("spring");
//when
memberService.join(member1);
assertThrows(IllegalStateException.class, () -> memberService.join(member2));
//then
}
MemoryMemberRepository memberRepository = new MemoryMemberRepository();
@AfterEach //테스트가 하나 끝날 때마다 콜백 되어서 실행됨.
public void afterEach(){
memberRepository.clearStore();
}
- DB 정리해주는 것 잊지 말기
3. 컴포넌트 스캔과 자동 의존관계 설정
회원 컨트롤러에 의존 관계 추가
package hello.hellospring.controller;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
- 생성자에 `@Autowired` 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.
- 이전 테스트에서는 개발자가 직접 주입했고, 여기서는 @Autowired에 의해 스프링이 주입해준다.
4. 자바 코드로 직접 스프링 빈 등록하기
- 회원 서비스와 회원 리포지토리의 @Service, @Repository, @Autowired 애노테이션을 제거하고 진행 한다.
package hello.hellospring;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}'Spring' 카테고리의 다른 글
| [Spring] GDG 7주차 WIL : JPA 및 Hibernate를 사용한 ORM 통합 (0) | 2024.12.21 |
|---|---|
| [Spring] GDG 6주차 WIL : 스프링 DAO와 JDBC 템플릿 및 트랜잭션 관리 (0) | 2024.11.23 |
| [Spring] GDG 4주차 WIL : 관점 지향 프로그래밍(AoP) 및 커스텀 어노테이션 (0) | 2024.10.11 |
| [Spring] 강의 스터디 WIL 3주차 (4) | 2024.10.06 |
| [Spring] GDG 3주차 WIL (0) | 2024.10.04 |