최원종의 개발 블로그

V2(PersistentContext) 게시글 목록 보기 - Persistence Context와 JPQL 활용 본문

Spring boot 입문

V2(PersistentContext) 게시글 목록 보기 - Persistence Context와 JPQL 활용

chl6698 2026. 5. 7. 13:57

EntityManager( 엔티티를 관리하는 실질적인 관리자)

영속성 컨텍스트에 접근하고 엔티티의 생명주기를 관리하는 가장 중요한 인터페이스

EntityManager 핵심 메서드

메서드 용도 사용법 주의사항
persist(entity) 생성 - 새 엔티티 저장 em.persist(board); @Transactional 필수
find(Class, id) 조회 - ID로 엔티티 찾기 Board board = em.find(Board.class, 1L); 없으면 null 반환
merge(entity) 수정 - 준영속 엔티티 병합 Board merged = em.merge(board); 모든 필드 덮어씀 주의
remove(entity) 삭제 - 엔티티 제거 em.remove(board); 영속 상태 엔티티만 가능

영속성 컨텍스트를 활용한 게시글 목록 조회

V2에서는 Persistence Context의 장점을 활용하여 JPQL 문법으로 게시글 목록을 조회

**V1 vs V2 조회 방식 비교:**
- **V1**: 네이티브 SQL 직접 작성 (SELECT * FROM board_tb...)
- **V2**: JPQL을 통한 객체지향적 조회 (SELECT b FROM Board b...)

 

BoardPersistRepository.java - 조회 기능 추가( JPQL 문법으로 변환)

    // JPQL을 사용한 게시글 목록 조회
    public List<Board> findAll() {

        // JPQL : 엔티티 객체를 대상으로 하는 객체지향 쿼리
        // Board는 엔티티 클래스 명, b 는 별칭
        // 주의! 테이블 명이 아닌 클래스명(엔티티명) 사용
        String jpql = """
                SELECT b FROM Board b ORDER BY b.createdAt DESC 
                """;
        List<Board> boardList = em.createQuery(jpql, Board.class).getResultList();
        return boardList;
    }

 


BoardController.java - ( boardPersistRepository - 영속성 컨텍스트를 활용한 코드로 수정)

    /**
     * 게시글 목록 화면 요청
     * 주소설계 : http://localhost:8080/
     */
    @GetMapping({"/", "index"})
    public String list(Model model) {
        //List<Board> boardList = boardNativeRepository.findAll();
        List<Board> boardList = boardPersistRepository.findAll();
        model.addAttribute("boardList", boardList);
        return "board/list";
    }