서론 오늘 spring을 혼자 공부하는 중, 유튜브에서 백기선님의 "이 문제 답 모르면 JPA를 쓰지말아라!" 하는 영상을 보게되었다. 그래서 객체간의 관계에 대해서 다시 공부하는 시간을 가지게 되었다. 객체 간 관계 매핑? "객체 간 관계"는 예를 들어, 하나의 클래스가 다른 클래스를 참조하거나, 여러 클래스들이 상호작용하고 서로 연결되어 있는 것을 의미한다. 하지만 SQL 쿼리문으로 수동으로 객체간의 관계를 관리할 수 있다. 하지만 이 방법은 매우 번거로울 수 있다. 이 관계를 데이터베이스에 저장하고 유지하기 위해 JPA는 몇 가지 어노테이션을 제공한다. JPA에서의 객체 간 관계 매핑은 다음과 같은 상황을 다룬다. 1대1(One-to-One): 하나의 객체가 다른 하나의 객체와 연결된 경우. 1대다..
트랜잭션? 트랜잭션(transaction)은 "쪼갤 수 없는 업무처리의 최소 단위"를 말합니다 개발에서는 "DB(database)의 상태를 변화시키기 위해서 수행하는 작업의 단위"를 의미합니다. DB에 접근하기 위해서 SQL(질의어)문을 이용하는데, 작업단위는 질의어 하나가 아니라, 많은 질의어를 사람이 기준을 정해서 사용합니다. 예시 예를들어 장기게임을 만든다고 치고, 게임을 즐기기위해서 방을 만들도록 합니다. 방을 만들면 데이터베이스에서는는 방을 만드는 작업, 방을 만들면서 장기말을 세팅하는 작업, 두가지가 일어나게 됩니다. 트랜잭션 단위로 데이터가 처리되지 않는다면, 오작동 했을 시 원인을 찾기가 힘들것입니다. 게임방 생성과 장기 기물을 생성하는 두개의 과정을 별도의 과정으로 보게되고, DB입장에서..
Spring Boot를 배우면서 코딩 용어에 대해서 제가 이해하기 쉽도록 정리를 하는 시간을 가져보기로 했습니다. 잘 모르는 건지 아는건지 확실치 않는 내용들이 존재했었기 때문이죠. 계속 수정하면서 추가할 예정입니다. 인스턴스 Spring Boot에서 "인스턴스"라는 용어는 일반적으로 객체 지향 프로그래밍 (OOP) 컨텍스트에서 사용되며, 객체를 생성하고 사용하는 개념을 나타냅니다.객체 지향 프로그래밍에서 "인스턴스"는 클래스의 정의에 따라 생성된 구체적인 객체를 의미합니다. 클래스는 객체의 특성과 동작을 정의한 것이며, 실제로 프로그램에서 사용할 때는 클래스를 기반으로 객체를 생성합니다. 이렇게 생성된 객체를 "인스턴스"라고 부릅니다. 쉽게말하자면, 자동차를 만들고 싶습니다. 개발자는 '클래스'라는 자..
연관관계 매핑 RDBMS를 사용할 때는 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하기 불가능하다. 따라서 설계가 복잡해지면 각 도메인에 맞는 테이블을 설계하고 연관관계를 설정해서 조인(Join)등의 기능을 활용한다. JPA를 사용하는 애플리케이션에서도 테이블의 연관관계를 엔티티 간의 연관관계로 표현할 수 있다. 다만 객체와 테이블의 성질이 달라서 정확한 연관관계를 표현할 수는 없다. 연관관계 매핑 종류와 방향 연관관계를 맺는 두 엔티티 간에 생성할 수 있는 연관관계의 종류는 다음과 같습니다. One To One : 일대일 (1 : 1) One to Many : 일대다 (1 : N) Many To One : 다대일 (N : 1) Many to Many : 다대다 (N : M) 연관관계를 이해하..
MVC 모델? 스프링 부트에서 MVC 모델은 애플리케이션의 구조를 설계하고 관리하는 방법 중 하나로, MVC는 모델(Model: M), 뷰(View: V), 컨트롤러(Controller: C)로 분류합니다. 이 패턴은 소프트웨어를 세 가지 역할로 구분하여 개발하고, 이를 통해 애플리케이션의 유지보수와 확장을 용이하게 합니다. Model 모델은 애플리케이션의 데이터와 비즈니스 로직을 담당합니다. 데이터베이스와 상호 작용하거나 비즈니스 규칙을 적용하여 데이터를 가공하는 역할을 합니다. 주로 데이터를 가져오고 저장하는데 관련된 코드가 모델에 포함됩니다. 스프링 부트에서는 데이터베이스와의 상호 작용을 위해 JPA(Java Persistence API)를 사용하거나, JDBC(Java Database Connec..
JPQL? JPQL은 JPA Query Language의 줄임말로 JPA에서 사용할 수 있는 쿼리를 의미합니다. JPQL의 문법은 SQL과 매우 비슷해서 데이터베이스 쿼리에 익숙하다면 어렵지 않게 사용할 수 있습니다. SQL과 차이점은 SQL에서는 테이블이나 칼럼의 이름을 사용하지만 JPQL은 엔티티 객체를 대상으로 수행하는 쿼리이기 때문에 매핑된 엔티티의 이름과 필드의 이름을 사용합니다. // JPQL 쿼리의 기본 구조 // Product = 엔티티 타입, p.number = 엔티티 속성 SELECT p FROM Product p WHERE p.number =?1; 쿼리 메서드 리포지토리는 JpaRepository를 상속받는 것만으로 다양한 CRUD 메서드를 제공합니다. 하지만 이러한 기본 메서드들은 ..