AOP와 JPA

froajnzd·2024년 7월 29일
0

java

목록 보기
11/11
post-thumbnail

AOP (Aspect Oriented Programming)

관점지향 프로그래밍

AOP(Aspect Oriented Programming)는 소프트웨어 개발에서 공통된 관심사를 분리하여 모듈화하는 프로그래밍 패러다임이다. 이는 주로 로그, 보안, 트랜잭션 관리 등의 횡단 관심사를 처리하는 데 유용하다.

예시 시나리오

쇼핑몰을 개발하려는 팀이 있다.
여러 명이 쇼핑몰 도메인을 분리하여 개발하려고 한다.

  • 구매 담당 개발자는 구매 버튼을 클릭하고, 로그인을 체크한 후, 구매 완료되는 상황을 구현해야 하고
  • 장바구니 담당 개발자는 장바구니 버튼을 클릭하고, 로그인을 체크한 후, 아이템을 삭제 완료하는 로직을 구현해야 하며
  • 찜 버튼 담당 개발자는 찜 버튼을 클릭하고, 로그인을 체크한 후, 찜하기 로직을 구현해야 한다.

여기서 로그인을 체크하는 부분이 공통으로 들어가 있다.
로그인 체크 기능을 각각 개발하면 낭비!!!!!!이다.
이를 로그인 담당 개발자가 맡아서 해당 부분을 아래처럼 개발하면, 구매, 장바구니, 찜버튼 개발자는 모두 로그인 체크 부분을 신경쓰지 않고 본인 부분을 완벽히 구현할 수 있다!~!

스프링의 AOP

스프링 프레임워크는 AOP를 어노테이션 형식으로 제공하여 코드의 중복을 없애고, 관심사를 분리하는 데 도움을 준다.

JPA Starter Library에 AOP가 포함된 이유

JPA Starter Library에 AOP가 포함된 이유는 주로 @Transactional 어노테이션에서 찾을 수 있다. 이는 트랜잭션 관리를 위해 AOP를 활용하기 때문이다.

JPA의 주요 요소: EntityManager

JPA(Java Persistence API)의 핵심은 EntityManager이다. 이 클래스는 엔티티를 관리하고 데이터베이스 작업을 수행하는 데 사용된다.

주요 어노테이션

  • @Entity: 엔티티 클래스를 정의한다. 이는 스프링 컨테이너(ApplicationContext)에 저장된다.
  • @Transactional: 트랜잭션 관리를 위해 사용된다.
  • @Id: 엔티티의 식별자를 지정한다.

EntityManager의 주요 메소드

  • persist(객체): 엔티티를 영속성 컨텍스트에 추가하고, 데이터베이스에 저장한다.
    - persist는 객체를 영속화하여 데이터베이스에 저장한다.

  • find(타입, 식별자): 식별자를 사용하여 엔티티를 조회한다.
    - 이는 스프링의 빈 검색과 유사하게 타입으로 구별된다. 스프링에서는 같은 타입의 빈이 하나만 존재하기 때문에 기본적으로 싱글톤으로 관리된다.

  • remove(객체): 엔티티를 제거한다.
    - 데이터베이스에서 해당 엔티티를 삭제한다.

  • createQuery(자바스러운 쿼리): JPQL(Java Persistence Query Language)을 사용하여 쿼리를 생성한다.
    - JPQL은 객체지향적인 방식으로 쿼리를 작성하여 JPA가 이를 SQL로 변환한다.
    - 예시:
    SQL: SELECT * FROM room;
    JPQL: SELECT r FROM Room r

  • clear(): 영속성 컨텍스트를 비운다.

  • flush(): 영속성 컨텍스트와 데이터베이스를 동기화한다.

  • close(): 영속성 컨텍스트를 종료한다. = 영업 종료!

profile
Hi I'm 열쯔엉

0개의 댓글