1. Repository 구현
@RequiredArgsConstructor // final이 붙어있는 변수의 생성자를 만들어 줌
@Repository
public class BoardRepository {
// JPA는 EntityManager로 DB에 접근. (자바에서 DBConnection)
private final EntityManager em;
public List<Board> findAll() {
Query q = em.createNativeQuery("select * from board_tb order by id desc", Board.class); // Board 클래스에 매핑하여 전달
return q.getResultList();
}
}
주요내용
- 클래스 어노테이션:
@RequiredArgsConstructor
: final이 붙어있는 모든 필드에 대해 생성자를 자동으로 생성@Repository
: 해당 클래스가 데이터베이스와의 상호 작용을 담당하는 리포지토리 클래스임을 나타냄
- EntityManager:
private final EntityManager em;
: JPA(Java Persistence API)에서EntityManager
를 사용하여 데이터베이스에 접근. 이는 자바에서 데이터베이스와의 연결을 관리하는 객체
- 메소드:
public List<Board> findAll()
: 데이터베이스에서 모든Board
엔티티를 조회하는 메소드Query q = em.createNativeQuery("select * from board_tb order by id desc", Board.class);
: Native SQL 쿼리를 사용하여board_tb
테이블의 모든 레코드를 조회하고, 이를Board
클래스에 매핑. 레코드는 ID를 기준으로 내림차순 정렬return q.getResultList();
: 쿼리 결과를 리스트로 반환
기본적으로 데이터베이스에서
Board
엔티티의 모든 레코드를 조회하고, 이를 자바 객체로 반환하는 역할이 후 html파일까지 모두 만들어 직접 실행해보고 테스트할 수도 있으나, 해당 방법은 느리고 비효율적이기 때문에 TEST 클래스를 만들어 테스트하는 것이 바람직
2. Test하기
- test 폴더에서 BoardRepositoryTest 클래스를 작성

1. Test 클래스 파일 내용:
@Import(BoardRepository.class)
@DataJpaTest // DB 관련된 자원들을 메모리(IOC)에 올림
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepository;
// 테스트 코드에서는 "테스트 할 메소드 명_test"로 메소드명을 쓰는 것이 컨벤션
@Test
public void findAll_test() {
// given
// when
List<Board> boardList = boardRepository.findAll();
System.out.println();
// eye
for (Board board : boardList) {
System.out.println(board.getId());
System.out.println(board.getTitle());
System.out.println(board.getContent());
System.out.println(board.getCreatedAt());
System.out.println("=====================");
}
}
}
2. 주요 내용
- 클래스 어노테이션:
@Import(BoardRepository.class)
:BoardRepository
클래스를 테스트 컨텍스트에 가져 옴- 테스트 컨텍스트 프레임워크
- 테스트 컨텍스트
@DataJpaTest
: JPA 관련된 테스트를 위한 설정을 제공하며, 데이터베이스 관련 자원들을 메모리에 로드
스프링은 테스트에 사용되는 애플리케이션 컨텍스트를 생성하고 관리하여 테스트에 적용해주는 테스트 프레임워크를 제공
테스트에서 사용되는 애플리케이션 컨텍스트를 생성하고 관리하기 위한 컨텍스트
- 변수:
@Autowired private BoardRepository boardRepository;
: 의존성 주입을 통해BoardRepository
객체를 자동으로 주입 받음
- 테스트 메소드:
@Test public void findAll_test()
: JUnit 테스트 메소드given
: 테스트 초기 설정을 위한 코드가 들어갈 부분when
:boardRepository.findAll()
메소드를 호출하여 모든 게시물을 조회then
: 조회한 게시물 리스트를 출력
- 출력:
System.out.println()
: 데이터베이스에서 조회한Board
객체의 ID, 제목, 내용, 생성 시간을 출력
@DataJpaTest
어노테이션을 통해 JPA 관련 설정을 로드하고, @Autowired
어노테이션을 통해 BoardRepository
를 주입받아 실제 데이터베이스 접근이 없이 메모리 상에서 테스트를 수행
테스트는 메서드 왼쪽의 버튼을 누르면 해당 메서드만 테스트 가능. (인텔리제이 기준)
3. 수행 결과


결과적으로 findAll 메서드를 통해 총 5개의 Board 객체를 받아온 것을 확인 가능
Share article