2-5. 리포지터리로 데이터 베이스 관리하기

리포지터리: 데이터의 저장, 조회, 수정, 삭제 등을 돕는 중간 연결 인터페이스(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 설치하기

리포지터리를 이용하여 데이터를 저장하려면 질문을 등록하는 화면과 사용자가 입력한 질문 관련 정보를 저장하는 컨트롤러, 서비스 파일 등이 필요하다. 하지만 JUnit을 사용하면 이러한 프로세스를 따르지 않아도 리포지터리만 개별적으로 실행해 테스트해볼 수 있다.

<aside> 💡 JUnit이란? 테스트 코드를 작성하고, 작성한 테스트 코드를 실행할 때 사용하는 자바의 테스트 프레임워크이다. 리포지터리 뿐만 아니라 소프트웨어 개발 시 테스트 작업을 수행할 때 많이 사용한다.

</aside>

//JUnit을 사용하려면 build.gradle에 다음 코드를 추가해야한다.
dependencies{
	testImplementation 'org.junit.jupiter:junit-jupiter'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}

✍🏻 실습

질문 데이터 저장하기(C)

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 테이블을 살펴보면 해당 값들이 테이블에 들어간 것을 확인할 수 있다.

Untitled

질문 데이터 조회하기(R)