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

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

강의 출처

https://inf.run/XKQg

 

 

2주차 학습 내용 요약

 

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

스프링 컨테이너를 통해 애플리케이션의 객체 라이프사이클과 설정을 관리하며, 개발자가 직접 객체를 생성하지 않고 의존성 주입을 요청할 수 있어 코드 간의 결합도를 낮추고 유지보수성을 향상할 수 있습니다.

또한, @Primary와 @Qualifier 어노테이션을 사용하면, 같은 타입의 빈이 여러 개 있을 경우 어떤 빈을 주입받을 것인지를 선택할 수 있습니다.

 

 

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

Spring Data JPA는 개발자가 JPA를 더 쉽고 편리하게 사용할 수 있도록 도와주는 도구입니다.

JPA는 Java Persistence API의 약자로, 자바 ORM 기술에 대한 API 표준 명세입니다. ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말합니다.

SQL을 직접 사용하는 경우, 개발자가 직접 문자열을 작성하기 때문에 실수를 할 수 있고, 실수를 인지하는 시점이 늦어져 서버를 실행할 때 오류를 발견하게 됩니다.

또한, SQL은 DB에 종속적이므로, MySQL이 아닌 다른 DB를 사용한다면 모든 SQL문을 수정해야 합니다. 이러한 문제를 해결하기 위해 JPA가 탄생하게 되었습니다.

JPA는 API이기 때문에 말 그대로 규칙일 뿐이며, 이 규칙에 따라 코드를 작성해야 합니다.

이를 돕기 위해 Hibernate와 같은 JPA 구현체를 사용합니다.

Hibernate는 JPA의 표준을 준수하면서, 데이터베이스와의 작업을 단순화하고 자동화해주는 역할을 합니다.

Spring Data JPA는 이를 한 단계 더 추상화하여, 개발자가 JPA를 더 쉽고 편리하게 사용할 수 있게 도와주는 도구입니다.

이를 통해, 데이터베이스의 Create, Read, Update, Delete(CRUD) 연산을 Repository 인터페이스에 정의된 메소드로 간단히 수행할 수 있습니다.

또한, 메소드 이름만으로도 쿼리를 생성하고 실행하는 기능을 제공합니다.

 

 

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

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한 번에 수행되어야 할 일련의 연산들을 의미합니다.

트랜잭션은 데이터의 일관성을 보장하며, 작업이 완전히 수행되거나(Commit), 아니면 전혀 수행되지 않아야(Rollback) 함을 보장하는 '원자성'을 가집니다.

영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 의미합니다.

JPA에서는 엔티티 매니저를 통해 엔티티를 영속화하며, 이 때 엔티티 매니저는 영속성 컨텍스트에서 엔티티를 관리합니다.

트랜잭션과 영속성 컨텍스트는 밀접한 관계를 가지고 있습니다.

영속성 컨텍스트는 트랜잭션을 시작할 때 생성되며, 트랜잭션이 끝날 때까지 엔티티를 관리합니다.

트랜잭션이 커밋되면, 영속성 컨텍스트에 저장된(영속화된) 엔티티들이 데이터베이스에 반영됩니다.

만약 중간에 오류가 발생하면 트랜잭션이 롤백되면서 데이터베이스에는 아무런 변화가 없게 됩니다.

 

 

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

스프링빈, Spring Data JPA, 트랜잭션 등의 개념을 활용하여 도서관 API를 개발하는 과정에 대해 배웠습니다.

 

 

Day 10: 객체지향과 JPA 연관관계

객체지향 프로그래밍에서는 객체 간의 관계를 표현하기 위해 연관관계를 사용합니다.

이는 객체가 다른 객체를 참조하는 것을 의미하며, 이를 통해 객체 간의 상호작용을 표현할 수 있습니다.

JPA에서는 이러한 객체지향적 연관관계를 데이터베이스의 테이블 관계에 매핑하는 방법을 제공합니다.

@ManyToOne, @OneToMany, @OneToOne, @ManyToMany 등의 어노테이션을 사용하여 엔티티 간의 연관관계를 설정할 수 있습니다.

 


 

2주차 미션

 

이번 2주차 미션을 통해, JPA를 활용하여 개발 과정을 보다 효율적으로 진행할 수 있음을 배웠습니다.

Repository를 인터페이스로 구현하는 방식을 적용해봄으로써 다양한 구현 클래스를 활용한 유연한 설계 방법을 배울 수 있었습니다.

@Primary와 @Qualifier 어노테이션을 활용하여 두 개의 Repository가 바뀌어 동작하는 과정을 관찰하며, 이를 통해 코드의 확장성과 유연성을 높일 수 있었습니다.

Spring Data JPA를 활용하여 기존 코드를 리팩토링하는 작업을 수행하였습니다.

여기서 Entity와 JpaRepository를 이용하니 데이터베이스 연산을 보다 간편하게 처리할 수 있었고, 이를 통해 코드의 효율성과 가독성이 크게 향상되는 것을 체감할 수 있었습니다.

특히, 인터페이스 내에서 메소드 시그니처만을 작성하면 스프링이 알아서 해당 인터페이스에 대한 구현체를 생성해주는 점이 매우 인상적이었습니다.

이를 통해 JPA를 활용하면 얼마나 코드를 효율적이고 깔끔하게 작성할 수 있는지를 실감할 수 있었습니다.

 

 

 

댓글을 작성해보세요.