[JPA 엔티티 생명 주기, spring과 springboot 사용규모는?, 컨테이너, 컨테이너의 3가지 환경, 인프라 환경, 젠킨스]
JPA 엔티티 생명 주기
JPA 엔티티 생명 주기:
JPA 엔티티의 생명 주기는 크게 4가지 상태로 나눌 수 있습니다.
'비영속(new/transient)', '영속(managed)', '준영속(detached)', 그리고 '삭제(removed)' 상태입니다.
'비영속' 상태는 엔티티 객체가 생성되었지만 아직 영속성 컨텍스트와 연결되지 않은 상태를 말합니다.
'영속' 상태는 엔티티가 영속성 컨텍스트에 저장되어 있는 상태를 말하며, 이 상태에서는 변경 감지(Dirty Checking),
지연 로딩(Lazy Loading) 등 JPA의 다양한 이점을 활용할 수 있습니다.
'준영속' 상태는 영속성 컨텍스트에서콘텍스트에서 분리된 상태를 말하며, 이 상태의 엔티티는 변경 감지 등의 이점을 활용할 수 없습니다. '삭제' 상태는 엔티티가 영속성 콘텍스트에서 삭제된 상태를 의미합니다.
1. **새로 생성(New):**
엔티티가 처음 만들어지는 상태입니다. 이 상태에서는 엔티티는 아직 데이터베이스에 저장되지 않았습니다.
2. **관리(Managed):**
엔티티가 영속성 컨텍스트에 의해 관리되는 상태입니다. 이 상태에서 엔티티는 데이터베이스에 저장되거나 업데이트될 수 있습니다.
3. **분리(Detached):**
엔티티가 영속성 컨텍스트에서 분리된 상태입니다.
이 상태에서 엔티티는 데이터베이스에 저장되거나 업데이트될 수 없습니다.
4. **제거(Removed):**
엔티티가 영속성 컨텍스트에서 제거되는 상태입니다. 이 상태에서 엔티티는 데이터베이스에서 삭제됩니다.
새로 생성(New):
java
Member member = new Member(); // 비영속
엔티티 객체를 처음 생성하면 '비영속' 상태가 됩니다. 이 상태에서 엔티티는 아직 영속성 콘텍스트와 연결되지 않았고, 따라서 데이터베이스에 저장되지 않은 상태입니다.
관리(Managed):
java
entityManager.persist(member); // 영속
엔티티 매니저의 persist 메소드를 호출하여 엔티티를 영속성 콘텍스트에 저장하면 '영속' 상태가 됩니다. 이 상태에서 엔티티는 데이터베이스에 저장되거나 업데이트될 수 있으며, 변경 감지(Dirty Checking)와 지연 로딩(Lazy Loading) 등 JPA의 다양한 기능을 활용할 수 있습니다.
분리(Detached):
java
entityManager.detach(member); // 준영속
엔티티 매니저의 detach 메소드를 호출하여 영속성 콘텍스트에서 엔티티를 분리하면 '준영속' 상태가 됩니다. 이 상태에서 엔티티는 데이터베이스에 저장되거나 업데이트될 수 없고, 변경 감지 등의 기능을 활용할 수 없습니다.
준영속 상태의 엔티티를 다시 영속 상태로 변경하려면 merge 메소드를 사용하면 됩니다. merge 메서드는 준영속 상태의 엔티티를 다시 영속 상태로 변경하며, 데이터베이스에 해당 엔티티의 최신 상태를 반영합니다.
예를 들어,
java
member.setName("newName");
entityManager.merge(member);
위와 같이 merge 메소드를 호출하면, 준영속 상태의 member 엔티티가 다시 영속 상태가 되고,
member 엔티티의 이름이 "newName"으로 변경된 최신 상태가 데이터베이스에 반영됩니다.
따라서 준영속 상태의 엔티티는 메서드를 호출할 때마다 영속되는 것이 아니라, 명시적으로 merge 메서드를 호출했을 때만 다시 영속 상태로 변경되며, 그 시점에 데이터베이스에 최신 상태가 반영됩니다.
제거(Removed):
java
entityManager.remove(member); // 삭제
엔티티 매니저의 remove 메소드를 호출하여 영속성 콘텍스트에서 엔티티를 제거하면 '삭제' 상태가 됩니다. 이 상태에서 엔티티는 데이터베이스에서 삭제되며, 더 이상 영속성 콘텍스트에 의해 관리되지 않습니다.
이렇게 각 상태별로 엔티티의 생명 주기를 관리함으로써, 데이터베이스와의 연동을 효율적으로 처리할 수 있습니다.
spring과 springboot 는 어떤 규모의 상황에 쓰이는 것인가
Spring과 Spring Boot 사용 상황:
Spring Framework는 엔터프라이즈급 애플리케이션 개발에 필요한 모든 기능을 제공하는데, 이는 때로는 많은 설정과 코드 작성을 필요로 합니다. 반면, Spring Boot는 Spring 기반의 애플리케이션을 빠르게 구축할 수 있도록 단순화된 설정, 내장 서버 제공 등의 기능을 제공합니다. 따라서 복잡하고 크기가 큰 프로젝트는 Spring Framework를, 빠른 개발이 필요하거나 프로토타입을 만들어야 하는 상황에서는 Spring Boot를 사용하는 것이 적합합니다.
Spring과 Spring Boot는 다양한 규모의 상황에 사용될 수 있는 인기 있는 Java 프레임워크입니다.
컨테이너가 독립적 프로세스 환경을 뜻한다
컨테이너와 그 환경:
컨테이너는 독립적인 프로세스 환경을 제공하는 기술로, 애플리케이션 실행에 필요한 모든 환경을 패키징하여 이식성을 높입니다. 이러한 컨테이너는 크게 '모놀리식 아키텍처', '마이크로서비스 아키텍처', 그리고 '에지 컴퓨팅' 환경에서 사용됩니다. '모놀리식 아키텍처'에서는 하나의 큰 서비스를 컨테이너로 패키징하여 실행합니다. 반면, '마이크로서비스 아키텍처'에서는 서비스를 세세히 분리하여 각각을 독립적인 컨테이너로 실행합니다. '에지 컴퓨팅' 환경에서는 리소스 제한이 있는 환경에서도 효율적인 서비스 제공을 위해 컨테이너를 사용합니다.
컨테이너는 독립적인 프로세스 환경을 제공하는 운영 체제 수준의 가상화 기술입니다.
컨테이너는 호스트 운영 체제와 다른 컨테이너와 독립적으로 실행됩니다.
컨테이너는 가상 머신보다 가볍고 빠르며 보안이 강화되어 있습니다. 때문에 컨테이너는 클라우드 컴퓨팅과 마이크로서비스 아키텍처에서 널리 사용되고 있습니다.
컨테이너의 3가지 환경
모놀로 식 (하나의 큰 서비스)
마이크로서비스 아키텍처 (서비스별로 세세히)
에서
인프라 환경에 적합한 도구:
도커와 쿠버네티스는 현대의 인프라 환경에서 효율적인 서비스 제공을 위한 도구입니다. 도커는 애플리케이션과 그 실행 환경을 컨테이너로 패키징 하는 기술이며, 쿠버네티스는 이러한 컨테이너를 효율적으로 리고 스케일링하는 플랫폼입니다.
컨테이너는 다음과 같은 3가지 환경에서 사용될 수 있습니다.
1. **모놀로 식(하나의 큰 서비스):** 모든 애플리케이션 코드가 단일 프로세스에서 실행되는 아키텍처입니다.
이 아키텍처는 단순하고 관리하기 쉽지만 확장하기 어렵습니다.
2. **마이크로서비스 아키텍처(서비스별로 세세히):** 애플리케이션이 여러 개의 독립적인 서비스로 분해되는 아키텍처입니다. 각 서비스는 별도의 프로세스에서 실행되며 서로 통신하여 기능을 수행합니다. 이 아키텍처는 확장하기 쉽지만 관리하기 어렵습니다.
3. **에저:** 에지는 클라우드와 사용자 사이에 위치한 네트워크 가장자리입니다.
에지는 사물 인터넷(IoT) 장치, 모바일 장치 및 라우터와 같은 다양한 장치로 구성될 수 있습니다. 컨테이너는 에지 장치에서 애플리케이션을 실행하는 데 사용될 수 있습니다.
인프라 환경에서 가장 적합한 것은 도커를 통한 쿠버네티스이다
인프라 환경에서 가장 적합한 컨테이너 오 케스트레이터는 도커를 통한 쿠버네티스입니다.
쿠버네티스는 컨테이너화된 애플리케이션을 관리하고 배포하기 위한 오픈소스 플랫폼입니다.
쿠버네티스는 컨테이너를 클러스터로 그룹화하고, 컨테이너를 자동으로 스케일링하고, 컨테이너의 상태를 모니터링합니다.
도커는 컨테이너를 생성하고 관리하기 위한 오픈소스 플랫폼입니다.
도커는 컨테이너 이미지를 생성하고, 컨테이너를 실행하고, 컨테이너를 배포하는 작업을 수행합니다.
도커와 쿠버네티스를 함께 사용하면 컨테이너화된 애플리케이션을 손쉽게 관리하고 배포할 수 있습니다.
젠킨스로 CI/CD를 해야 된다
CI/CD를 위한 젠킨스:
젠킨스는 소프트웨어 개발 시 지속적인 통합(CI)과 지속적인 배포(CD)를 가능하게 하는 도구입니다. 개발자가 코드를 커밋하면 젠킨스는 자동으로 빌드, 테스트, 배포 등의 작업을 수행하여 개발 효율성을 높이고 배포 시의 오류를 최소화합니다.
젠킨스는 CI/CD를 위한 오픈소스 자동화 서버입니다. 젠킨스는 소스 코드 변경, 빌드, 테스트, 배포 등의 작업을 자동화할 수 있습니다.
젠킨스를 사용하면 소프트웨어 개발 프로세스를 더 효율적으로 만들고, 소프트웨어의 품질을 높이고, 소프트웨어를 더 빠르게 제공할 수 있습니다.
댓글