[인프런 워밍업 클럽 BE 0기] 2주차 발자국

[인프런 워밍업 클럽 BE 0기] 2주차 발자국

Day 7 : 스프링 컨테이너의 의미와 사용 방법

스프링 컨테이너가 생성되는 과정과 스프링 빈을 등록해서 사용하면 어떠한 장점이 있는지 알아보았다.

스프링 컨테이너는 우리가 어떠한 객체를 사용할지 대신 결정해준다. 이를 IoC(제어의 역전)이라고 한다.

빈을 만들고 객체간의 의존성을 연결해준 다음 프로그램에게 그 객체를 제공한다

DI(의존성 주입)에서 "의존"은 A클래스가 B클래스의 메서드를 실행할 때 A클래스가 B클래스에 의존한다는 뜻으로 해석할 수 있다.

만약 회원가입 기능을 MemberService 클래스에서 구현한다 가정했을 때 이 기능은 정확히 MemberRepository의 save 기능을 이용하는 것이다. 그러면 MemberService 클래스는 MemberRepository 클래스에 의존한다고 볼 수 있다.

 

  • 미션

     

    • Fruit 기능들을 JPA를 이용해 변경

    • 특정 과일 기준으로 지금까지 가게를 거쳤갔던 과일 개수 세는 기능 개발

    • 아직 판매되지 않은 특정 금액 이상 혹은 특정 금액 이하의 과일 목록 조회 기능 개

  • 제출

 

Day 8 : Spring Data JPA를 사용한 데이터베이스 조작

JPA를 이용하여 DB를 조작하였다.

User 테이블에 대응되는 Enttiy 클래스인 User을 만들었다.

UserRepository 인터페이스를 생성한 뒤 JpaRepository 클래스를 상속받아 JPA를 활용하여

문자열 SQL 보다 편하게 DB를 조작하였다.

public void saveUser(UserCreateRequest request){
        User u = userRepository.save(new User(request.getName(), request.getAge()));
}

 userRepository 클래스의 save 메소드는 이미 JpaRepository 클래스에 구현되어 있는 메소드이다.

이 메소드를 활용하여 User 정보를 저장하였다.

 

Day 9 : 트랜잭션과 영속성 컨텍스트

트랜잭션은 쪼갤 수 없는 업무의 단위이다. SQL문을 실행했을 때 중간에 오류가 발생해서 중단되면 데이터 오류가 발생하기 때문에 모든 SQL을 성공시키거나 하나라도 실패하면 모두 실패시키기 위해 존재한다.

영속성 컨텍스트는 테이블과 매핑된 Entity 객체를 관리/보관하는 역할이다.

영속성 컨텍스트 기능으로는 변경감지/쓰기지연/1차 캐싱이 있다.

@Transactional
    public void updateUser(UserUpdateRequest request){
        User user = userRepository.findById(request.getId())
                .orElseThrow(IllegalAccessError::new);

        user.updateName(request.getName());
        userRepository.save(user); //여기서 변경 감지. 이게 없어도 업데이트됨
}

@Transactional은 함수 시작 때 트랜잭션이 시작되고 끝나면 트랜잭션을 commit하는 어노테이션이다.

 

Day 10 : 조금 더 복잡한 기능을 API로 구성하기

책 관련 API를 개발하였다.

Entity 클래스인 Book, JpaRepository를 상속받은 BookRepository, dto, service, controller 클래스를 생성하여 개발하였다.

 



현재 미니프로젝트 개발을 진행하고 있다. 스스로 개발하는 것 이다보니 어렵다. 최선을 다해서 3단계까지 개발을 할 수 있도록 열심히 하겠다

 

댓글을 작성해보세요.