본문 바로가기
Everyday Study

2024.07.29 (월) { Maven, POM 파일, cascade, @Entity }

by xogns93 2024. 7. 29.

Maven

 

Maven은 Java 프로젝트의 빌드, 보고, 문서화 등을 자동화하는 프로젝트 관리 도구입니다. Apache Software Foundation에서 개발하였으며, 프로젝트 빌드와 의존성 관리를 중앙에서 처리할 수 있도록 도와줍니다.

 

Maven의 주요 기능

  1. 빌드 자동화: Maven은 소스 코드를 컴파일하고, 테스트를 실행하며, 패키징을 수행하여 최종 산출물을 생성합니다.
  2. 의존성 관리: Maven은 프로젝트에서 사용하는 외부 라이브러리와 그 버전을 중앙에서 관리합니다. pom.xml 파일에 의존성을 명시하면 Maven이 이를 다운로드하고 관리합니다.
  3. 프로젝트 구조 표준화: Maven은 프로젝트의 디렉토리 구조를 표준화하여 일관된 방식으로 프로젝트를 구성할 수 있도록 도와줍니다.
  4. 멀티 모듈 프로젝트 지원: Maven은 여러 모듈로 구성된 프로젝트를 쉽게 관리할 수 있습니다.
  5. 플러그인 시스템: Maven은 다양한 플러그인을 통해 확장할 수 있습니다. 예를 들어, 코드를 컴파일하는 플러그인, 테스트를 실행하는 플러그인, 문서를 생성하는 플러그인 등이 있습니다.

Maven의 기본 개념

  1. POM (Project Object Model): pom.xml 파일은 Maven 프로젝트의 핵심입니다. 이 파일에는 프로젝트의 메타데이터, 의존성, 빌드 설정 등이 포함됩니다.
  2. Repository: Maven은 중앙 저장소(Central Repository)와 로컬 저장소(Local Repository)를 사용합니다. 중앙 저장소는 인터넷에서 접근 가능한 저장소이고, 로컬 저장소는 각 개발자의 로컬 시스템에 존재합니다.
  3. 라이프사이클: Maven은 빌드 라이프사이클을 통해 프로젝트의 빌드 단계를 정의합니다. 기본 라이프사이클에는 validate, compile, test, package, verify, install, deploy 단계가 포함됩니다.

 


POM 파일

 

POM 파일은 Maven 프로젝트의 핵심 구성 파일로, Project Object Model의 약자입니다. 이 파일은 XML 형식으로 작성되며, 프로젝트에 대한 다양한 정보를 담고 있습니다. POM 파일은 프로젝트 빌드, 의존성 관리, 플러그인 설정 등을 정의하는 데 사용됩니다.

 

POM 파일의 주요 역할

  1. 프로젝트 메타데이터 관리: 프로젝트의 이름, 버전, 그룹 ID, 설명 등을 정의합니다.
  2. 의존성 관리: 프로젝트에서 필요한 외부 라이브러리와 그 버전을 지정하여, Maven이 자동으로 필요한 라이브러리를 다운로드하고 관리할 수 있도록 합니다.
  3. 빌드 설정: 프로젝트의 빌드 과정에서 사용할 플러그인과 그 설정을 정의합니다.
  4. 프로파일 관리: 다양한 빌드 환경(예: 개발, 테스트, 배포)에 맞춘 설정을 정의할 수 있습니다.
  5. 리포지토리 관리: 라이브러리를 다운로드할 중앙 리포지토리와 회사 내부의 리포지토리를 정의할 수 있습니다.
  6. 배포 설정: 프로젝트의 배포 정보를 정의할 수 있습니다.

POM 파일의 역할 요약

POM 파일은 Maven 프로젝트의 모든 설정을 중앙에서 관리할 수 있도록 하여, 프로젝트의 빌드, 의존성, 플러그인 설정 등을 체계적으로 정의하고 관리할 수 있게 해줍니다. 이를 통해 개발자들은 일관된 환경에서 프로젝트를 개발하고 빌드할 수 있습니다.

 


빌드 (Build)

빌드는 소스 코드를 실행 가능한 애플리케이션으로 변환하는 과정을 의미합니다. Maven에서는 여러 단계의 빌드 라이프사이클을 통해 프로젝트를 빌드합니다.

Maven 빌드 라이프사이클

  1. validate: 프로젝트가 올바른지, 모든 필요한 정보를 가지고 있는지 검증합니다.
  2. compile: 프로젝트 소스 코드를 컴파일합니다.
  3. test: 컴파일된 코드를 테스트 실행 환경에서 테스트합니다.
  4. package: 컴파일된 코드를 JAR 파일 등으로 패키징합니다.
  5. verify: 통합 테스트를 실행하여 패키징이 유효한지 검증합니다.
  6. install: 패키지를 로컬 리포지토리에 설치하여 다른 로컬 프로젝트에서 사용할 수 있게 합니다.
  7. deploy: 패키지를 원격 리포지토리에 배포하여 다른 개발자들이 사용할 수 있게 합니다.

 

의존성 (Dependency)

의존성은 프로젝트가 빌드되고 실행되는 데 필요한 외부 라이브러리나 모듈을 의미합니다. Maven은 프로젝트에서 필요한 모든 의존성을 pom.xml 파일에 명시하고, 이를 자동으로 다운로드하여 관리합니다.

 

플러그인 (Plugin)

플러그인은 Maven이 프로젝트를 빌드할 때 특정 작업을 수행하기 위해 사용하는 도구입니다. 플러그인은 컴파일, 테스트, 패키징, 배포 등의 작업을 자동화합니다.

 

  • 빌드 (Build): 소스 코드를 컴파일하고 패키징하여 실행 가능한 형태로 변환하는 과정입니다.
  • 의존성 (Dependency): 프로젝트가 필요로 하는 외부 라이브러리나 모듈입니다. pom.xml 파일에 명시하여 Maven이 자동으로 관리합니다.
  • 플러그인 (Plugin): Maven 빌드 프로세스에서 특정 작업을 수행하는 도구입니다. 컴파일, 테스트, 패키징 등의 작업을 자동화합니다.

cascade

 

JPA와 Hibernate는 Java 애플리케이션에서 관계형 데이터베이스와의 상호작용을 단순화하는 데 사용되는 ORM(Object-Relational Mapping) 프레임워크입니다. cascade 옵션은 엔티티 간의 연관 관계에서 특정 작업이 연관된 엔티티에 자동으로 전파되는 방식을 제어합니다.

 

Cascade 옵션 설명

JPA에서 cascade 옵션은 부모 엔티티에서 수행된 작업(예: 저장, 삭제 등)이 자식 엔티티에도 동일하게 적용되도록 설정하는 데 사용됩니다. cascade 옵션은 여러 가지 유형이 있으며, 주로 다음과 같은 값들을 가집니다:

  1. CascadeType.PERSIST: 부모 엔티티가 저장될 때 자식 엔티티도 함께 저장됩니다.
  2. CascadeType.MERGE: 부모 엔티티가 병합될 때 자식 엔티티도 함께 병합됩니다.
  3. CascadeType.REMOVE: 부모 엔티티가 삭제될 때 자식 엔티티도 함께 삭제됩니다.
  4. CascadeType.REFRESH: 부모 엔티티가 새로고침될 때 자식 엔티티도 함께 새로고침됩니다.
  5. CascadeType.DETACH: 부모 엔티티가 분리될 때 자식 엔티티도 함께 분리됩니다.
  6. CascadeType.ALL: 모든 작업(PERSIST, MERGE, REMOVE, REFRESH, DETACH)이 자식 엔티티에 전파됩니다.

 

엔티티 (Entity)

 

**엔티티(Entity)**는 객체 지향 프로그래밍에서 데이터베이스 테이블과 매핑되는 클래스입니다. 엔티티 클래스는 데이터베이스 테이블의 각 행을 객체로 나타내며, 각 열을 클래스의 필드로 나타냅니다. 엔티티는 JPA(Java Persistence API) 표준에 따라 정의되며, 데이터베이스와의 상호작용을 단순화합니다.

 

아래는 JPA를 사용하여 엔티티를 정의하는 예제입니다:

package com.example;

import javax.persistence.*;

@Entity // 이 클래스가 엔티티임을 나타냅니다.
public class User {
    @Id // 기본 키를 나타냅니다.
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본 키 생성을 데이터베이스에 위임합니다.
    private Long id;

    @Column(nullable = false) // 이 필드는 null 값을 허용하지 않습니다.
    private String name;

    private String email;

    // 기본 생성자 (JPA는 기본 생성자가 필요합니다)
    public User() {}

    // getters and setters
    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 String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

 

 

Hibernate

 

Hibernate는 자바 언어용 ORM(Object-Relational Mapping) 프레임워크입니다. ORM은 객체 지향 프로그래밍의 객체와 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해주는 기술입니다. Hibernate는 JPA의 구현체 중 하나로, JPA를 사용하는 Java 애플리케이션에서 데이터베이스 작업을 쉽게 할 수 있도록 도와줍니다.

 

Hibernate의 주요 기능

  1. 데이터베이스와의 매핑: 객체와 데이터베이스 테이블을 매핑하여 SQL 쿼리를 작성하지 않고도 데이터베이스 작업을 수행할 수 있습니다.
  2. 자동화된 데이터베이스 작업: CRUD(Create, Read, Update, Delete) 작업을 자동으로 처리합니다.
  3. 캐시: 성능 향상을 위해 1차 및 2차 캐시를 지원합니다.
  4. 쿼리 언어: HQL(Hibernate Query Language)을 사용하여 객체 지향적인 쿼리를 작성할 수 있습니다.
  5. 트랜잭션 관리: 데이터베이스 트랜잭션을 관리하여 데이터 일관성을 보장합니다.