리포지터리: 데이터의 저장, 조회, 수정, 삭제 등을 돕는 중간 연결 인터페이스(JPA인터페이스)
//QuestionRepository.java
package com.mysite.sbb;
import org.springframework.data.jpa.repository.JpaRepository;
public interface QuestionRepository extends JpaRepository<Question, Integer>{
//리포지터리 상속, <어떤 엔티티 클래스인지, 엔티티 클래스에서 사용하는 아이디 타입>
}
//AnswerRepository.java
package com.mysite.sbb;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AnswerRepository extends JpaRepository<Answer, Integer>{
}
이제 각 리포지터리를 이용하여 question, answer 테이블에 데이터를 저장, 조회, 수정, 삭제를 할 수 있다.
리포지터리를 이용하여 데이터를 저장하려면 질문을 등록하는 화면과 사용자가 입력한 질문 관련 정보를 저장하는 컨트롤러, 서비스 파일 등이 필요하다. 하지만 JUnit을 사용하면 이러한 프로세스를 따르지 않아도 리포지터리만 개별적으로 실행해 테스트해볼 수 있다.
<aside> 💡 JUnit이란? 테스트 코드를 작성하고, 작성한 테스트 코드를 실행할 때 사용하는 자바의 테스트 프레임워크이다. 리포지터리 뿐만 아니라 소프트웨어 개발 시 테스트 작업을 수행할 때 많이 사용한다.
</aside>
//JUnit을 사용하려면 build.gradle에 다음 코드를 추가해야한다.
dependencies{
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
package com.mysite.sbb;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;
@SpringBootTest
class SbbApplicationTests {
@Autowired
private QuestionRepository questionRepository;
@Transactional
@Test //testJpa 메서드가 테스트 메서드임을 나타냄
void testJpa() {
Question q1 = new Question();
q1.setSubject("sbb가 무엇인가요?");
q1.setContent("sbb에 대해 알고싶습니다.");
q1.setCreateDate(LocalDateTime.now());
this.questionRepository.save(q1);
Question q2 = new Question();
q2.setSubject("스프링부트 모델 질문");
q2.setContent("id는 자동으로 생성되나요?");
q2.setCreateDate(LocalDateTime.now());
this.questionRepository.save(q2);
}
}
<aside> 💡 @Autowired 애너테이션이란? 스프링의 의존성 주입(DI)을 사용하는 방식 DI: 스프링이 객체를 대신 생성하여 주입하는 기법 객체를 주입하는 방식에는 @Autowired 애너테이션 외에 Setter 메서드 또는 생성자를 사용하는 방법이 있고, 일반적인 경우로는 순환 참조 문제와 같은 이유로 개발 시 해당 애너테이션보다는 생성자를 통한 객체 주입 방식을 권장한다.
</aside>
test 코드는 Run → Run As → JUnit Test에서 실행시킬 수 있다.
에 다시 접속해 Question 테이블을 살펴보면 해당 값들이 테이블에 들어간 것을 확인할 수 있다.