728x90
반응형
728x90

 

 

 

JPA Repository

 


 

JPA는 "Java Persistence API"의 약자로, 자바 객체를 관계형 데이터 베이스에 영속적으로 저장하고 조회할 수 있는 ORM 기술에 대한 표준 명세를 의미합니다. JPA를 통해 개발자는 SQL쿼리를 작성하지 않고도 객체를 통해 데이터베이스를 조작할 수 있으며, 객체 지향적인 코드 작성과 유지 보수성이 향상됩니다.

기본적으로 Entity클래스를 작성한 후 Repository 인터페이스를 생성해야 하는데, Springboot에서 기본적인 작업을 도와주는 JPA Repository 인터페이스가 있습니다.

Spring Data JPA에서 제공하는 인터페이스 중 하나로, JPA를 사용하여 데이터베이스를 조작하기 위한 메서드들을 제공합니다. JPARepository 인터페이스를 상속받는 인터페이스를 정의하면, 해당 인터페이스를 구현하는 클래스는 JPA에서 제공하는 메서드들을 사용할 수 있습니다.

데이터베이스의 추가, 조회, 수정, 삭제의 findAll(), findById(), save() 등의 메서드들을 사용할 수 있습니다. 제공되는 메서드들 이용하여 쉽고 간편하게 CRUD 조작을 할 수 있습니다.
즉, JPA Repository를 사용 시, 복잡한 JDBC(Java DataBase Connectivity) 코드를 작성하지 않아도 간단하게 DB와의 데이터 접근 작업을 처리할 수 있습니다.

JPARepository 인터페이스는 제네릭 타입을 사용하여 Entity클래스와 복합키를 사용하고 있다면 해당 Entity의 ID클래스를 명시합니다. 이를 통해 해당 인터페이스를 상속받는 구현체는 Entity클래스와 ID클래스에 대한 정보를 알고 있어서, 런타임 시점에 적절한 쿼리를 생성하고 실행할 수 있습니다.

 

JPA Repository 사용법

 

먼저 데이터베이스에 저장하기 위해 유저가 정의한 클래스가 필요한데 그런 클래스를 Entity라고 한다. Domain이라고 생각하면 쉽게 이해가 가능합니다. 일반적으로 RDBMS에서 Table을 객체화 시킨 것으로 보면 되며, 그래서 Table의 이름이나 컬럼들에 대한 정보를 가지게 됩니다.

Table 및 컬럼을 설정하는 데 사용되는 어노테이션을 먼저 설명해드리겠습니다.

@Id
primary key를 가지는 변수를 선언하는 것을 뜻한다. @GeneratedValue 어노테이션은 해당 Id 값을 어떻게 자동으로 생성할지 전략을 선택할 수 있습니다. 여기서의 전략은 Auto로 설정해두었습니다.

@Table
별도의 이름을 가진 데이터베이스 테이블과 매핑되며, 기본적으로 @Entity로 선언된 클래스의 이름은 실제 데이터베이스의 테이블 명과 일치하는 것을 매핑합니다. 따라서 @Entity의 클래스명과 데이터베이스의 테이블명이 다를 경우에 @Table(name=" ")과 같은 형식을 사용해서 매핑이 가능합니다.


@Column
@Column 선언이 꼭 필요한 것은 아니지만 @Column에서 지정한 변수명과 데이터베이스의 컬럼명을 서로 다르게 주고 싶다면 @Column(name=" ") 같은 형식으로 작성하면 됩니다. 그렇지 않은 경우에는 기본적으로 멤버 변수명과 일치하는 데이터베이스 컬럼을 매핑합니다.

 

 

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @Column
    private String name;

    @Column
    private int age;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
728x90
반응형

'[EEEEEEETC]' 카테고리의 다른 글

[복 - 습] Module & Library & Framework  (0) 2024.03.11
728x90

 

모듈 , 라이브러리 그리고 프레임워크


 

프로그램은 작은 부분들이 모여서 크고 복잡한 부분으로 발전합니다. 그 과정에서 기존에 작성되었던 코드의 재활용과 손쉬운 유지보수를 위해 다양한 방법들이 사용됩니다.

하나의 복잡한 코드를 여러 개의 모듈로 나누어서 분리하는 방법이 그중 하나이며, 아래와 같은 장점을 가지고 있습니다.

자주 사용되는 코드를 별도의 파일로 만들게 되면 해당 코드가 필요할 때마다 사용할 수 있으며, 별도의 파일로 존재하기 때문에 해당 부분을 리팩토링하여 개선하게 되면 모든 코드에도 반영이 손쉬운 장점이 있습니다. 또한, 필요한 로직을 해당 위치에서 로드해 사용하기 때문에 메모리 낭비를 줄일 수 있습니다. 

이렇게 분리하는 방법을 학습해나가다보면 모듈, 라이브러리, 프레임워크라는 용어 들이 등장합니다. 해당 용어의 사전적 정의는 많이 나와 있으나, 실무에서 커뮤니케이션 할 때 사용시에는 각각의 개념을 정확히 알지 못하는 상태에서 사용하는 경우도 있습니다.

그래서 한번 정리하며 복습해보는 시간을 가져보도록 하겠습니다.

 

1. MODULE

 

 

Module은 별도의 파일로 독립도니 기능을 의미합니다. 순수한 javascript에서는 모듈이라는 개념이 분명하게 존재하지 않는다고도 합니다. javascript가 구동되는 호스트 환경에 따라 서로 다른 모듈화 방법이 제공됩니다. 
여기서 호스트 환경이란 ?  JavaScript가 구동되는 환경을 의미한다. 예를 들어, Node.js는 JavaScript의 문법을 따르지만 이 언어가 구동되는 환경은 브라우저가 아니라 시스템을 제어하는 서버 측 환경을 의미합니다.

모듈을 만들면 다른 파일에서 해당 모듈을 불러와서 선언한 후 사용할 수 있습니다.

 

 

2. LIBRARY

 

 

라이브러리는 모듈과 비슷한(거의 같은) 개념이다 생활 코딩에서는 설명하는 차이점은 다음과 같습니다. 모듈이 프로그램을 구성하는 작은 부품의 느낌이라면, 라이브러리는 자주 사용 되는 로직을 잘 정리한 집합 느낌입니다. 사전적 의미로는 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임으로 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있습니다. 

 

3. Framework

 

 

복잡한 문제를 해결하거나 서술하는 데에 사용 되는 기본 개념 구조, 즉 뼈대입니다. 애플리케이션 개발에 바탕이 되는 템플릿과 같은 역할을 하는 클래스들과 인터페이스의 집합으로 애플리케이션을 구축할 때 공통적인 부분을 제공합다.
개발자가 처음부터 모든 것을 개발을 할 수 있지만, 프레임워크를 사용하면 원하는 기능에만 집중하여 구현할 수 있습니다. 프레임워크 안에는 기본적으로 필요한 기능을 갖추고 있으므로 라이브러리(혹은 모듈)이 포함되어 있습니다.

728x90
반응형

'[EEEEEEETC]' 카테고리의 다른 글

[복 - 습] JPA Repository  (1) 2024.03.12

+ Recent posts