블로그

bananachacha

[인프런 워밍업 스터디 클럽 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를 활용하면 얼마나 코드를 효율적이고 깔끔하게 작성할 수 있는지를 실감할 수 있었습니다.   

웹 개발인프런워밍업스터디클럽0기발자국스프링