Lazy Loading VS Eager Loading

Lazy Loading Lazy Loading이란 Lazy Loading은 지연 로딩이라고도 하며, 연관된 엔티티를 실제로 사용할 때 로딩하는 방식이다. 특징 연관된 데이터를 바로 가져오지 않고, 실제로 사용할 때 가져온다. 성능 최적화와 메로리 사용량을 줄이기 위해 사용된다. 연관된 엔티티가 많은 경우 초기 로딩 시간이 단축된다. 예시 1 2 @OneToMany(fetch = FetchType.LAZY) private List<Order> orders; 장점 초기 로딩 시간이 단축된다. 연관된 엔티티가 많은 경우 메모리 사용량을 줄일 수 있다. 단점 연관된 엔티티를 사용할 때마다 쿼리가 실행되어 성능 저하가 발생할 수 있다. Eager Loading Eager Loading이란 Eager Loading은 즉시 로딩이라고도 하며, 엔티티를 조회할 때 연관된 엔티티를 함께 로딩하는 방식이다. ...

6월 8, 2024 · 1 분 · 188 단어 · In-Jun Hwang

엔티티 생명주기 알아보기

엔티티 생명주기 JPA(Java Persistence API)에서 엔티티의 생명주기는 엔티티가 생성되고 소멸할 때까지의 과정을 의미한다. 엔티티 생명주기의 4가지 상태 비영속(new/transient): 새로운 엔티티가 생성되었지만, 아직 EntityManager에 의해 관리되지 않은 상태이다. 데이터베이스에 저장되지 않은 상태이며, 영속성 컨텍스트에 관리되지 않는다. new 키워드로 생성된 엔티티는 비영속 상태이다. 영속(managed): EntityManager에 의해 관리되는 상태로, 영속성 컨텍스트에 저장된 상태이다. 엔티티는 데이터베이스와 동기화되어 있으며, 영속성 컨텍스트에 의해 관리된다. persist() 메서드를 사용하여 엔티티를 영속 상태로 만들 수 있다. 준영속(detached): 영속성 컨텍스트에 의해 관리되지 않는 상태이다. 영속 상태에서 분리된 상태로, 영속성 컨텍스트에 의해 관리되지 않는다. detach() 메서드를 사용하여 엔티티를 준영속 상태로 만들 수 있다. 삭제(removed): ...

6월 8, 2024 · 1 분 · 137 단어 · In-Jun Hwang

EntityManager란 무엇인가?

EntityManager는 엔티티의 생명주기를 관리하고 엔티티와 관련된 모든 작업을 수행한다. EntityManager 뜻 엔티티 매니저는 엔티티의 생명주기를 관리하고 엔티티와 관련된 모든 작업을 수행한다. 엔티티 매니저는 엔티티를 데이터베이스에 저장하거나 데이터베이스에서 엔티티를 읽어오는 등의 작업을 수행한다. 주요 기능 엔티티 매니저의 주요 기능은 다음과 같다: 저장: 엔티티를 데이터베이스에 저장한다. 조회: 데이터베이스에서 엔티티를 읽어온다. 수정: 데이터베이스에 저장된 엔티티를 수정한다. 삭제: 데이터베이스에서 엔티티를 삭제한다. 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 @Repository public class UserRepository { @PersistenceContext private EntityManager em; public void save(User user) { em.persist(user); } public User findById(Long id) { return em.find(User.class, id); } public void update(User user) { em.merge(user); } public void delete(User user) { em.remove(user); } } @PersistenceContext 어노테이션을 사용하여 엔티티 매니저를 주입받을 수 있다. 엔티티 매니저를 사용하여 엔티티를 저장하거나 조회, 수정, 삭제하는 등의 작업을 수행할 수 있다. 엔티티 매니저는 트랜잭션 단위로 동작하며, 트랜잭션이 종료되면 엔티티 매니저가 자동으로 종료된다. ...

6월 7, 2024 · 2 분 · 228 단어 · In-Jun Hwang

Spring Data JPA와 JPA의 차이점

JPA(Java Persistence API) JPA란 무엇인가? JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세이다. ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 기술이다. JPA는 이러한 ORM 기술을 사용하기 위한 인터페이스를 모아놓은 것이다. JPA를 사용하면 개발자는 객체 중심으로 개발을 할 수 있고, JPA가 이를 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행해 준다. JPA의 특징 표준 명세: JPA는 자바에서 ORM 기술을 구현하기 위한 표준 명세이다. 객체 중심 개발: JPA를 사용하면 개발자는 객체 중심으로 개발을 할 수 있다. SQL 자동 생성: JPA는 개발자가 직접 SQL을 작성하지 않아도 SQL을 자동으로 생성해서 실행해 준다. 구현체 필요: JPA는 인터페이스이기 때문에 이를 구현한 구현체가 필요하다. Spring Data JPA Spring Data JPA란 무엇인가? Spring Data JPA는 스프링에서 JPA를 쉽게 사용할 수 있도록 도와주는 기술이다. JPA를 사용하기 위해서는 EntityManagerFactory, EntityManager, EntityTransaction 등 많은 설정이 필요한데, Spring Data JPA는 이러한 설정을 대신해준다. 또한 Spring Data JPA는 JPA를 사용하기 위한 다양한 기능을 제공한다. ...

6월 7, 2024 · 2 분 · 290 단어 · In-Jun Hwang

namespace, cgroups 그리고 docker와의 관계

네임스페이스(Namespace) 개념: 리눅스 커널의 기능으로, 프로세스가 자원을 공유하지 않도록 분리하는 기술이다. virtual machine보다 가볍고 빠르다. virtual machine에서는 하드웨어를 가상화하지만, 네임스페이스는 커널의 기능을 분할한다. 커널의 기능을 분할하여, 충돌을 방지하고, 프로세스 간의 자원 공유를 제한한다. 구성 요소: PID: 프로세스 ID Network: 네트워크 장치, IP 주소, 포트 번호 등 Mount: 파일 시스템 IPC: 메시지 큐, 세마포어, 공유 메모리 등 UTS: 호스트 이름, 도메인 이름 User: 사용자 ID, 그룹 ID 사용 방법: unshare: 현재 프로세스의 네임스페이스를 분리한다. setns: 다른 프로세스의 네임스페이스에 참여한다. clone: 새로운 프로세스를 생성하면서, 네임스페이스를 지정한다. C그룹(Control groups) 개념: 리눅스 커널의 기능으로, 프로세스 그룹을 생성하고, 이 그룹에 CPU, 메모리, 디스크 등과 같은 리소스를 할당하고 관리하는 기능이다. 이를 통해 여러 프로세스의 동시 실행을 제어하고, 리소스의 사용을 제한하거나 우선순위를 지정할 수 있다. 구성 요소: CPU: CPU 시간 할당 Memory: 메모리 사용량 제한 Block I/O: 블록 장치의 I/O 트래픽 제어 Network: 네트워크 대역폭 제한 사용 방법: cgroup 파일 시스템 마운트: mount -t cgroup cgroup /sys/fs/cgroup C 그룹 생성: mkdir /sys/fs/cgroup/memory/mygroup 프로세스 할당 및 리소스 제한 설정: 생성된 C 그룹에 프로세스를 할당하고, 필요한 리소스 제한을 설정한다. 도커(Docker)와의 관계 도커의 개념: 도커는 컨테이너 기술을 활용하여 애플리케이션의 배포와 관리를 단순화하는 도구이다. 도커 컨테이너는 네임스페이스와 C 그룹 기능을 사용하여 애플리케이션을 격리된 환경에서 실행한다. 네임스페이스와 도커: PID 네임스페이스: 각 컨테이너는 독립된 프로세스 공간을 가지며, 호스트와 다른 PID 네임스페이스에서 실행된다. 네트워크 네임스페이스: 컨테이너는 독립된 네트워크 스택을 가지며, IP 주소, 라우팅 테이블 등을 호스트와 분리하여 사용할 수 있다. 마운트 네임스페이스: 각 컨테이너는 독립된 파일 시스템 뷰를 가지며, 호스트 파일 시스템과 분리된 파일 시스템 트리를 가질 수 있다. C 그룹과 도커: 리소스 할당: 도커는 C 그룹을 사용하여 각 컨테이너에 CPU, 메모리, 디스크 I/O와 같은 리소스를 할당하고 제한할 수 있다. 리소스 모니터링: 도커는 C 그룹을 통해 각 컨테이너의 리소스 사용량을 모니터링하고 관리할 수 있다. 결론: 도커는 리눅스의 C 그룹과 네임스페이스를 추상화하여 사용자가 쉽게 컨테이너를 생성하고 관리할 수 있도록 한다. 복잡한 C 그룹과 네임스페이스 설정을 신경 쓰지 않고, 단순한 명령어로 컨테이너를 관리할 수 있다. 도커 명령어 docker run을 사용하면 자동으로 필요한 네임스페이스와 C 그룹이 설정되고, 컨테이너가 실행된다. 리눅스의 네임스페이스와 C 그룹은 도커의 핵심 기술로, 도커 컨테이너의 격리성과 리소스 관리 기능을 지원한다. 이를 통해 애플리케이션의 배포, 확장 및 관리를 효율적으로 할 수 있다. ...

6월 5, 2024 · 2 분 · 347 단어 · In-Jun Hwang