인프런 워밍업 클럽 0기 - 백엔드 코스 (2주차 회고)
인프런 2주차까지 모든 강의와 과제들을 마무리했습니다.1주차에 학습했던 내용과 함께 스프링 컨테이너, Spring Data Jpa, 트랜잭션 등 스프링과 DB 개념 그리고 스프링과 DB 매핑 방법과 같이 전반적인 백엔드 기술들을 배울 수 있었습니다. 이후에는 이를 활용한 다른 요구사항 개발과정들을 다시 복습할 수 있는 과정으로 이어져 배운 내용들을 활용해볼 수 있는 기회를 가질 수 있었습니다. 6일차이전에 모든 계층이 JdbcTemplate이나 다른 계층의 객체에 의존적으로 설계되어 있었습니다. 이러한 구조는 의존할 객체가 변경될 경우 의존할 객체를 변경해주어야 되므로, 객체지향 개발 원리 중 OCP와 DIP를 위반하고 있습니다. 그렇기 때문에 스프링이 제공하는 스프링 컨테이너를 활용해 클래스 내부에서 사용할 다른 클래스들을 스프링 빈으로 등록하고, 필요할 때 등록된 빈을 자동 주입받는 형식으로 사용하도록 변경되었습니다.이럴 경우 인터페이스의 구현체만 사용자가 변경해주면 자동적으로 스프링이 주입할 빈을 선택하여 자동 주입해주기 때문에 스프링 빈을 사용하는 구간에서는 코드의 변경이 발생하지 않고 사용할 수 있습니다.사용할 인터페이스에 구현체가 여러 개일 경우 @Primary 어노테이션이나 @Qualifer를 통해 자동 주입 받을 빈을 선택하는 방법도 있습니다. 과제https://www.inflearn.com/blogs/6817 7~8일차이전까지는 JdbcTemplate을 활용해 직접 SQL 쿼리를 작성해 DB에 접근했습니다.이러한 경우 쿼리문에 실수를 해도 컴파일 시점에 오류를 파악할 수 없다는 문제점이 있습니다. 또한, SQL쿼리가 하나의 데이터베이스에 종속적이게 됩니다.그래서 JPA를 활용함으로써 이러한 단점들을 극복하려 했습니다.Jpa는 자바에서 데이터베이스에 접근할 수 있도록 도와주는 ORM입니다. 이 ORM을 통해 객체와 테이블을 매핑할 수 있는 기술을 제공해주고, 영속성 컨텍스트를 통해 한 트랜잭션 내 데이터를 영구히 저장할 수 있도록 해줍니다.영속성 컨텍스트의 특징은 다음과 같다.하나의 DB 작업 단위를 나타내는 트랜잭션 내부에서는 변경 감지 기능이 있다. 처음 DB에서 데이터를 조회하는 경우 데이터의 첫 상태를 스냅샷 형태로 저장한 뒤, 트랜잭션이 끝나는 시점에 데이터를 스냅샷과 비교하여 변경이 발생했다면 UPDATE쿼리를 통해 데이터를 자동 수정해준다.트랜잭션 내부에서 데이터를 삽입했다면 해당 트랜잭션이 끝날 때까지 데이터 삽입을 지연시킵니다.트랜잭션 내부에서 조회한 엔티티를 다시 조회할 경우 DB에 접근하지 않고 영속성 컨텍스트 내부에서 똑같은 인스턴스를 제공해준다. 과제https://www.inflearn.com/blogs/6850 9일차현재까지 배운 스프링 컨테이너, Jpa, 트랜잭션 이론을 활용할 수 있는 개발을 진행했습니다.Jpa를 스프링 내에서 좀 더 쉽게 사용할 수 있고 간단한 쿼리 메서드를 제공해주는 Spring Data Jpa를 활용해 개발을 진행했습니다.