언제 static을 사용해야하나요? 그리고 JPA에 관해 #1

이상민·2024년 9월 27일
1

1. static 키워드의 사용

Java에서 static 키워드는 클래스에 속하는 변수를 선언할 때 사용된다. 가장 대표적인 예로 public static void main(String[] args)를 볼 수 있다. 우리는 자주 static을 사용했지만, 이를 의식하지 못했을 수도 있다.

main() 메소드가 실행된다는 것은 메모리에 올라간다는 뜻이다. 이는 static으로 선언되었기 때문에 메모리에 로드된 것이다. 따라서 우리가 일반적으로 사용하는 run() 메소드 역시 내부적으로 static으로 선언되어 있어, 실행 시 오류가 발생하지 않는다.

2. 언제 static을 사용할까?

static은 클래스에 속한 것이므로, 해당 클래스의 인스턴스를 생성하지 않고도 사용할 수 있다. 일반적으로 많이 사용하지는 않지만, 알고 있으면 유용하게 사용할 수 있는 경우가 많다. 예를 들어, 공통으로 사용하는 유틸리티 함수나 상수값을 정의할 때 static을 많이 활용한다.

3. JPA (Java Persistence API)

JPA는 Java에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스다. ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 방법을 의미한다. 이는 우리가 직접 SQL 쿼리를 작성하지 않고도 객체 지향 프로그래밍에 집중할 수 있게 해준다.

하지만 ORM만으로 복잡한 쿼리를 완벽하게 대체하기는 어렵다. 이런 경우에는 직접 쿼리를 작성하는 것이 더 유리할 수 있다.

4. Hibernate

Hibernate는 자바 언어를 위한 ORM 프레임워크로, JPA의 구현체다. JPA 인터페이스를 구현하며 내부적으로 JDBC API를 사용한다. Hibernate는 데이터를 효율적으로 관리하고, 복잡한 쿼리를 작성하지 않도록 도와준다.

5. Spring Data JPA

Spring Data JPA는 개발자가 JPA를 더 쉽게 사용할 수 있도록 도와주는 라이브러리다. 복잡한 쿼리를 작성할 필요 없이 메서드 네이밍만으로도 데이터베이스 접근을 할 수 있게 해주며, 다양한 기능을 제공한다.

6. JPA의 엔티티 생명주기

JPA에서 엔티티 객체는 생성, 관리, 소멸되기까지 데이터베이스와 상호작용한다. 엔티티가 JPA 영속성 컨텍스트에 등록되면, 이후에는 JPA가 해당 객체의 상태를 관리한다. 마치 도서관에서 책을 입고 및 관리하는 과정과 비슷하다.

7. 엔티티 매니저 팩토리 (EntityManagerFactory)

EntityManagerFactory는 JPA에서 EntityManager를 생성하고 관리하는 팩토리 객체다. 이는 애플리케이션이 실행될 때 한 번만 생성되며, 애플리케이션 전체에서 공유된다. 또한 EntityManagerFactory는 thread-safe 하며, 데이터베이스 연결 및 트랜잭션 관리 역할도 수행한다.

8. 엔티티 매니저 (EntityManager)

EntityManager는 데이터베이스와 상호작용하는 객체로, 엔티티의 생명 주기를 관리한다. 다만 thread-safe 하지 않으며, 엔티티 객체에 대한 CRUD 연산을 처리한다. 여러 스레드가 동시에 접근할 때 일관성을 보장하는 thread-safe 상태가 아니므로, 이를 주의해야 한다.

9. N+1 문제 (N+1 Problem)

연관 관계가 설정된 엔티티를 조회할 때, N+1 문제라는 성능 저하가 발생할 수 있다. 이는 부모 엔티티를 조회하고, 각각의 자식 엔티티를 별도로 조회하는 방식 때문에 발생하는 문제다. 즉, 메인 엔티티를 조회하는 쿼리가 1번 실행된 후, 자식 엔티티를 가져오기 위한 쿼리가 N번 발생하게 된다.

이로 인해 데이터베이스와 애플리케이션 성능에 큰 영향을 미칠 수 있다.

10. Fetch Join

Fetch Join은 JPQL에서 성능 최적화를 위해 제공하는 기능이다. 연관된 엔티티나 컬렉션을 한 번에 조회할 수 있도록 지원하며, 이를 통해 N+1 문제를 해결할 수 있다. SQL의 일반적인 Join과는 다른 개념이며, JPQL에서만 사용된다.

마무리

위와 같이 Java의 static 키워드부터 시작해 JPA와 Hibernate, 그리고 N+1 문제와 Fetch Join까지 알아보았다. 해당 내용들을 잘 이해하고 활용하면, 더 나은 성능과 유지보수성을 갖춘 애플리케이션을 만들 수 있다.

profile
안녕하세요

0개의 댓글