[인프런 워밍업 스터디 클럽 1기] 백엔드 2주차 발자국
Day 7. 스프링 컨테이너의 의미와 사용 방법
이 날 강의를 통해서 드디어 베일에 쌓인 의존성을 공부하는 기회가 되었다.
의존성이란
다음 코드를 보면 UserController의 생성자는 JdbcTemplate이라는 클래스를 필요로 하고 있다.
@RestController
public class UserController {
private final UserService userService;
public UserController(JdbcTemplate jdbcTemplate) {
this.userService = new UserService(jdbcTemplate);
}
}
이것을 어려운 말로 '의존한다'라고 한다.
스프링 빈이란
스프링부트 서버를 시작할 때 자동으로 해주는 것 중 하나가 거대한 컨테이너(실제 컨테이너를 떠올리면 된다)를 만드는 것이다.
이 컨테이너 안에는 클래스가 들어가게 되는데 이렇게 들어간 클래스를 스프링 빈이라고 부른다.
클래스가 들어갈 때는 이 빈을 식별 할 수 있는 이름 및 타입과 다양한 정보가 들어가고 인스턴스화도 이루어진다.
Day8. Spring Data JPA를 사용한 데이터베이스 조작
8일차 강의를 통해 SQL을 통해서 접근했던 DB를 자바 객체를 DB와 매핑 시켜서 사용하는 JPA를 학습하였다.
JPA란
객체와 관계형 데이터베이스의 테이블을 짝지어 데이터를 영구적으로 저장할 수 있도록 정해진 Java 진영의 규칙
JPA는 API이기 때문에 말 그대로 규칙이고 (자바의 인터페이스와 같다) 이 규칙을 누군가는 실제로 구현을 해야한다
그 구현체가 바로 Hibernate이다.
Day9. 트랜잭션과 영속성 컨텍스트
9일차 강의는 서비스 계층의 남은 중요한 역할인 트랜잭션에 대해 배웠다.
트랜잭션이란
쪼갤 수 없는 업무의 최소단위이다.
실제로 예를 들면 인터넷 결제를 진행할 때 1. 주문 기록을 저장하고 2. 포인트를 적립해주고 3. 구매 기록을 저장해준다
이 3가지의 과정을 쪼갤 수 없는 하나의 최소단위로 묶고 하나가 실패하면 다른 모든 과정도 실패해버리게 만드는게 트랜잭션이다.
Start transaction -> 성공하면 COMMIT
-> 실패하면 ROLLBACK
또한 영속성 컨텍스트에 관해서도 학습했는데 조금 어려워서 꼭 기억해야하는것
스프링에서는 트랜잭션을 사용하면 영속성 컨택스트가 생기고, 트랜잭션이 종료되면 영속성 컨텍스트가 종료된다.
영속성 컨텍스트의 특별한 능력
변경 감지 : 영속성 컨텍스트 안에서 불러와진 Entity는 명시적으로 save를 해주지 않더라도 알아서 변경을 감지하여 저장할 수 있게 해준다.
쓰기 지연 : 영속성 컨텍스트에 의해 트랜잭션이 Commit 되는 시점에 SQL을 모아서 한 번만 날리게 된다.
1차 캐싱 : ID를 기준으로 Entity를 기억하는 기능이다.
조금 더 복잡한 기능을 API로 구성하기
10일차는 앞서 배운 것들로 JPA를 이용해서 책 생성, 대출, 반납 API를 개발해보았다.
과제
과제 4일차
queryForObject() 에 대한 학습이 필요.
과제 5일차
주어진 코드를 클린코드로 리팩토링하는 과제를 수행하였다.
클래스를 나누기에는 너무 작은 기능이라 생각해서 읽기 좋은 코드로만 수정한다는 생각으로 수정했는데
나중에 금요일에 코치님이 따로 열어주신 특강에서 테스트를 하기 위해 역할 별로 클래스를 쪼개고 테스트를 하는 강의를 진행 해 주셔서 새로운 내용에 대해 학습하는 기회가 되었다
리팩토링 전에는 테스트를 작성하자! (Junit5, assertj)
given / when / then 패턴
전략 패턴 (= NumberGenerator의 인터페이스화 + 구현체 갈아끼우기)
일급컬렉션
MVC 패턴
출처
아쉬운점
좀 더 추가적인 학습(모르는것에 대한 학습)을 하려고 했는데 나태해져서 진행하지 못했다.
다음 마지막 주차는 좀 더 내가 모르는 내용에 대해 민감하게 반응해서 학습 하거나 학습 하지 못한다면 따로 블로그나 노션에 기록해서 추후 공부할 수 있도록 하겠다.
댓글을 작성해보세요.