inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 클럽 스터디] BE 1기 두번째 발자국

박지원
0

섹션 3. 역할의 분리와 스프링 컨테이너

  1. 스프링 컨테이너와 스프링 빈

  1. 스프링 컨테이너의 필요성

  1. 스프링 빈을 다루는 법

     

    • 스프링 빈으로 등록하기

       

      • @Service@Repository: 개발자가 만든 클래스를 스프링 빈으로 등록할 때 사용

      • @Configuration@Bean: 외부 라이브러리나 프레임워크에 만들어져 있는 클래스를 스프링 빈으로 등록할 때 사용

        • @Configuration : 클래스에 붙이는 어노테이션. @Bean을 사용할 때 함께 사용.

           

        • @Bean : 메소드에 붙이는 어노테이션. 메소드에서 반환되는 객체를 스프링 빈에 등록.

      • @Component: 컨트롤러, 서비스, 리포지토리 외의 추가적인 클래스를 스프링 빈으로 등록할 때 사용. 주어진 클래스를 컴포넌트로 간주한다. 스프링 서버가 사용될 때 자동으로 감지된다.

         

    • 스프링 빈을 주입받기

       

      • 생성자 이용하기: 가장 간단, 권장되는 방법

        • ex. JdbcTemplate jdbcTemplate

      public UserRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
      }
      • setter 사용하기: final 키워드 제거, 메소드에 @Autowired 붙이기

      • 필드에 직접 주입: 필드 위에 바로 @Autowired를 적어준다.

         

      • @Qualifier: @Primary 어노테이션이 없는 상황에서 주입받는 쪽이 특정 스프링 빈을 선택함.

        • @Primary @Qualifier를 모두 사용하고 있다면?: @Qualifier를 사용한다.


섹션 4. 생애 최초 JPA 사용하기

1-1. 문자열 SQL을 직접 사용하는 것의 한계

  1. Spring Data JPA를 이용해 다양한 쿼리 작성하기

public interface UserRepository extends JpaRepository<User, Long> { 
  User findByName(String name); 
}
public void deleteUser(String name) { 
  User user = userRepository.findByName(name); 
  if (user == null) { 
    throw new IllegalArgumentException(); 
  } 
  userRepository.delete(user); 
}

 

  1. 트랜잭션의 필요성과 스프링에서 트랜잭션을 제어하는 방법

  1. 책 생성, 대출, 반납 API 개발하기

     

    • 책 생성 API:

      book 테이블을 설계하고, Book 객체를 만들고, Repository, Service, Controller, DTO를 만든다.

       

      • book 테이블 명세:

create table book( 
  id bigint auto_increment, 
  name varchar(255), 
  primary key (id) 
);
create table user_loan_history ( 
  id bigint auto_increment, 
  user_id bigint, 
  book_name varchar(255), 
/* 
유저가 빌린 책을 대출 중인지, 반납 완료했는지 확인하는 필드이다. 
이 필드에 0이 들어가 있으면 대출 중인 것이고, 1이 들어가 있으면 반납한 것이다.
tinyint는 객체와 매핑되면 true인 경우 1이, false인 경우 0이 저장된다. 
*/
  is_return tinyint(1), 
  primary key (id) 
)

인프런워밍업클럽스터디

답변 0