[JPA] ORM(Object-Relational Mapping)과 JPA란 무엇인가?

2024. 7. 13. 22:54BackEnd/Spring Data JPA

ORM이란?

ORM은 데이터베이스 테이블과 객체 지향 프로그래밍의 클래스 간의 매핑을 자동화하는 기술이다.

이를 통해 SQL 쿼리를 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있다.

 

ORM의 장점

1. 개발 생산성 향상

SQL 쿼리를 직접 작성하는 대신, ORM을 통해 간단한 메서드 호출로 데이터베이스 작업을 수행할 수 있다.

 

2. 유지보수성 향상

객체 지향 코드로 데이터베이스 작업을 처리하므로, 코드의 가독성이 높아지고 유지보수가 쉬워진다.

 

3. 데이터베이스 독립성

ORM 프레임워크는 다양한 데이터베이스를 지원하므로, 특정 데이터베이스에 종속되지 않고 애플리케이션을 개발할 수 있다.


JPA(Java Persistence API)란?

JPA는 자바 플랫폼의 ORM 표준 인터페이스이다.

JPA는 객체와 관계형 데이터베이스 간의 매핑을 관리하고, 데이터베이스 작업을 간편하게 수행할 수 있도록 도와준다.

JPA의 주요 구현체로는 Hibernate, EclipseLink, OpenJPA 등이 있다.

 

JPA의 주요 기능

  • 엔티티 매핑: 클래스와 테이블, 필드와 컬럼 간의 매핑을 정의
  • 영속성 컨텍스트: 엔티티의 생명주기를 관리
  • 쿼리 언어: JPQL(Java Persistence Query Language)을 사용하여 객체지향 쿼리 작성

 

JPA 사용 예시

Entity 클래스

@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;
    private String name;
    private String email;
    private String password;
    // Getter, Setter 등
}

 

 

Repository 클래스

public interface MemberRepository extends JpaRepository<Member, Long> {
    Member findByEmail(String email);
}

 

Service 클래스

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    @Transactional
    public void registerMember(Member member) {
        if (memberRepository.findByEmail(member.getEmail()) != null) {
            throw new IllegalStateException("이미 존재하는 이메일입니다.");
        }
        String encryptedPassword = encryptPassword(member.getPassword());
        member.setPassword(encryptedPassword);
        memberRepository.save(member);
    }

    public Member findMemberByEmail(String email) {
        return memberRepository.findByEmail(email);
    }

    private String encryptPassword(String password) {
        return BCrypt.hashpw(password, BCrypt.gensalt());
    }
}

'BackEnd > Spring Data JPA' 카테고리의 다른 글

[JPA 오류] MySQL5InnoDBDialect deprecated 되었을 때  (0) 2024.03.14