본문 바로가기
IT 기록/Spring

📚 JPA 완전 정복! – 객체와 데이터베이스를 연결하는 마법

by 뚠스뚠스 2025. 4. 2.
반응형

백엔드 개발을 하다 보면 가장 자주 마주치는 기술 중 하나가 바로 JPA입니다.
"JPA는 ORM이야" 라고들 하는데… 그게 대체 뭘까요?
이번 포스팅에서는 JPA의 개념부터 실사용 예제까지 쏙쏙 정리해드릴게요 😊


🔍 JPA란?

JPA(Java Persistence API) 는 자바에서 데이터를 객체(Object) 로 다룰 수 있게 해주는 ORM 기술 표준입니다.

🎯 ORM(Object-Relational Mapping) = 객체와 관계형 데이터베이스를 매핑시켜주는 기술

JPA는 자바 진영에서 ORM을 구현하기 위한 표준 인터페이스를 제공하고,
대표적인 구현체로는 Hibernate, EclipseLink, DataNucleus 등이 있어요.


💡 왜 JPA를 써야 할까?

  • ✅ SQL을 직접 작성하지 않아도 된다 (CRUD는 거의 자동!)
  • ✅ 객체 중심의 프로그래밍 가능
  • ✅ 유지보수와 리팩토링이 훨씬 쉬워짐
  • ✅ 캐시, 지연로딩 등 성능 최적화 기능 제공

⚙️ 기본 사용 흐름

  1. @Entity로 객체를 정의
  2. @Repository를 통해 JPA 인터페이스 활용
  3. @Transactional로 트랜잭션 관리
  4. save(), findById() 등의 메서드로 데이터 접근

🧪 실전 예제 코드

📁 엔티티 클래스

@Entity
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // 기본 생성자, Getter/Setter 생략
}

🗂 Repository 인터페이스

public interface UserRepository extends JpaRepository<User, Long> {
    
    // 쿼리 메서드 자동 지원
    List<User> findByName(String name);
}

🔧 서비스 클래스

@Service
@RequiredArgsConstructor
public class UserService {
    
    private final UserRepository userRepository;

    public User createUser(String name, String email) {
        return userRepository.save(new User(name, email));
    }

    public List<User> searchByName(String name) {
        return userRepository.findByName(name);
    }
}

📡 컨트롤러 클래스

@RestController
@RequiredArgsConstructor
@RequestMapping("/users")
public class UserController {
    
    private final UserService userService;

    @PostMapping
    public ResponseEntity<User> create(@RequestBody UserDto dto) {
        User saved = userService.createUser(dto.getName(), dto.getEmail());
        return ResponseEntity.ok(saved);
    }
}
 

📌 추가 개념 (한 번쯤 들어봤다면 이거!)

  • 지연 로딩(Lazy Loading) vs 즉시 로딩(Eager Loading)
  • JPQL(Java Persistence Query Language)
  • 영속성 컨텍스트 (Persistence Context)

🧑‍💻 이런 분들께 추천해요!

  • Java/Spring 기반 백엔드 개발자
  • SQL 대신 객체 지향적인 방식으로 DB를 다루고 싶은 분
  • 스프링 부트와 데이터베이스 연동을 고민 중인 분

🧾 결론

JPA는 학습곡선이 살짝 있을 수 있지만, 한 번 익혀두면 수십 배의 생산성을 가져다주는 도구입니다.
이제는 선택이 아닌 필수 기술이 된 만큼, 꼭 익혀두면 좋아요! 🙌

반응형