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 클래스를 만들어 테스트하는 것이 바람직합니다.
Test하기

test 폴더에서 BoardRepositoryTest 클래스를 작성합니다.
(com.example.blog 까지만 원래 존재하였으나 위 이미지는 board 폴더를 추가 생성, 기존에 있던 데모 클래스를 삭제하였습니다.)
Test 클래스 파일 내용:
@Import(BoardRepository.class)
@DataJpaTest // DB 관련된 자원들을 메모리(IOC)에 올린다.
public class BoardRepositoryTest {
@Autowired
private BoardRepository boardRepository;
// 테스트 코드에서는 언더바를 쓰는 것이 약속이다.
@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("=====================");
}
}
}
주요 내용은 다음과 같습니다:
- 클래스 어노테이션:
@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
를 주입받아 실제 데이터베이스 접근이 없이 메모리상에서 테스트를 수행합니다.
테스트는 메서드 왼쪽의 버튼을 누르면 해당 메서드만 테스트 할 수 있습니다. (인텔리제이 기준)
수행 결과
(콘솔 출력 화면)

(디버깅으로도 확인할 수 있습니다.)

결과적으로 findAll 메서드를 통해 총 5개의 Board 객체를 받아온 것을 확인할 수 있습니다.
Share article