Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- Dockerfile
- springboot
- crud
- 코딩테스트
- 쿠키로그인
- fastapi
- Lv.2
- cors
- 우테코
- 회고
- 게시판
- 프로젝트
- 로그인
- LV2
- Spring
- Java
- 알고리즘
- mysql
- 네팔
- 해외봉사
- 프로그래머스
- OOM
- 커밋 메시지
- openAI
- 세션로그인
- spring boot
- docker
- llm
- 부트스트랩
- 서버 꺼짐
Archives
- Today
- Total
s00jin 님의 블로그
8. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | Repository 생성 및 JUnit 테스트 본문
프로젝트/하고 싶은거 다해보는 내 사이트
8. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | Repository 생성 및 JUnit 테스트
s00jin 2025. 8. 21. 15:56리포지터리 패키지 생성
우선 webBoard 패키지 안에 repository 패키지를 생성해줬다. (생략가능)
BoardRepository 생성
repository 패키지 안에 BoardRepository 파일을 생성해준 후 아래 코드를 작성한다.
package org.mySite.webBoard.repository;
import org.mySite.webBoard.domain.Board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
}
Comment Repository 생성
repository 패키지 안에 CommentRepository 파일 생성 후 아래 코드를 작성한다.
package org.mySite.webBoard.repository;
import org.mySite.webBoard.domain.Comment;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CommentRepository extends JpaRepository<Comment, Long> {
}
JUnit으로 실행 테스트
JUnit 설치
JUnit을 사용하기 위해 설치해줘야 한다.
buil.gradle에 아래 코드를 작성한 후 새로 고침 해준다.
// JUnit
testImplementation 'org.junit.jupiter:junit-jupiter'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
JPA 작동 테스트 코드 작성
src/test/java 디렉터리의 org.mySite 패키지에 MySiteApplicationTests 파일을 만들고 아래 코드를 작성해줬다.
JPA가 정상적으로 작동하는 확인하기 위한 JUnit 테스트 코드이다.
package org.mySite;
import org.junit.jupiter.api.Test;
import org.mySite.webBoard.domain.Board;
import org.mySite.webBoard.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
@SpringBootTest
class MySiteApplicationTests {
@Autowired
private BoardRepository boardRepository;
@Test
void testJpa() {
Board b1 = new Board();
b1.setSubject("안녕하세요");
b1.setContent("jpa 테스트 중입니다");
b1.setCreateDate(LocalDateTime.now());
this.boardRepository.save(b1);
}
}
@SpringBootTest
- MySiteApplicationTests 클래스가 테스트 클래스임을 의미
@Autowired
- 의존성 주입 (DI)
- 스프링이 객체를 대신 생성하여 주입하는 것
@Test
- testJpa 메서드가 테스트 메서드임을 나타냄
실행 시 테스트 성공


Repository 작동 테스트 코드 작성
위에 작성한 테스트 코드에서 추가해줬다.
package org.mySite;
import org.junit.jupiter.api.Test;
import org.mySite.webBoard.domain.Board;
import org.mySite.webBoard.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
class MySiteApplicationTests {
@Autowired
private BoardRepository boardRepository;
@Test
void testJpa() {
Board b1 = new Board();
b1.setSubject("안녕하세요");
b1.setContent("jpa 테스트 중입니다");
b1.setCreateDate(LocalDateTime.now());
this.boardRepository.save(b1);
List<Board> all = this.boardRepository.findAll();
assertEquals(1, all.size());
Board b = all.get(0);
assertEquals("안녕하세요", b.getSubject());
Optional<Board> oq = this.boardRepository.findById(1L);
if (oq.isPresent()){
Board bb = oq.get();
assertEquals("안녕하세요", bb.getSubject());
}
}
}
assertEquals(기댓값, 실제값)
- 기댓값과 실제값이 동일한지 조사
findById()
- id 값으로 데이터를 조회
- 호출한 값이 존재할 수도 있고, 존재하지 않을 수도 있어 리턴 타입으로 Optional 사용
Optional
- null값을 유연하게 처리하기 위한 클래스
- isPresent() 메서드로 값이 존재하는 확인
- 존재한다면 get 메서드를 통해 값을 얻음
findBy+속성명
Repository에서 findBy+속성명을 정의하여, 해당 속성으로 데이터 조회가 가능하게 해줬다.
package org.mySite.webBoard.repository;
import org.mySite.webBoard.domain.Board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
Board findBySubject(String subject);
Board findBySubjectAndContent(String subject, String content);
}
findBy + 엔티티의 속성명
- 입력한 속성의 값으로 데이터 조회 가능
- 데이터를 조회하는 쿼리문의 where 조건을 결정하는 역할
- 두 개의 열을 조회하기 위해서는 And 연산자 사용하면 됨 (ex. findBySubjectAndContent)

특정 문자열 데이터 조회
package org.mySite.webBoard.repository;
import org.mySite.webBoard.domain.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface BoardRepository extends JpaRepository<Board, Long> {
Board findBySubject(String subject);
Board findBySubjectAndContent(String subject, String content);
// 특정 문자열 포함하는 지 데이터 조회
List<Board> findBySubjectLike(String subject);
}
위에 코드에서 추가해줬다.
Like 사용
- 특정 문자열을 포함하는 데이터 조회
테스트 코드 추가
테스트 코드는 작성할 때마다 테스트 파일을 실행시켜보면 좋다!
package org.mySite;
import org.junit.jupiter.api.Test;
import org.mySite.webBoard.domain.Board;
import org.mySite.webBoard.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
class MySiteApplicationTests {
@Autowired
private BoardRepository boardRepository;
@Test
void testJpa() {
// jpa
Board b1 = new Board();
b1.setSubject("안녕하세요");
b1.setContent("jpa 테스트 중입니다");
b1.setCreateDate(LocalDateTime.now());
this.boardRepository.save(b1);
// repository
List<Board> all = this.boardRepository.findAll();
assertEquals(1, all.size());
Board b = all.get(0);
assertEquals("안녕하세요", b.getSubject());
// findById
Optional<Board> oq = this.boardRepository.findById(1L);
if (oq.isPresent()){
Board bb = oq.get();
assertEquals("안녕하세요", bb.getSubject());
}
// findBySubject
Board qq = this.boardRepository.findBySubject("안녕하세요");
assertEquals(1, qq.getId());
// findBySubjectAndContent
Board sc = this.boardRepository.findBySubjectAndContent("안녕하세요", "jpa 테스트 중입니다");
assertEquals(1, sc.getId());
// like
List<Board> bList = this.boardRepository.findBySubjectLike("안녕%");
Board bL = bList.get(0);
assertEquals("안녕하세요", bL.getSubject());
}
}
댓글 데이터 저장 테스트 코드
package org.mySite;
import org.junit.jupiter.api.Test;
import org.mySite.webBoard.domain.Board;
import org.mySite.webBoard.domain.Comment;
import org.mySite.webBoard.repository.BoardRepository;
import org.mySite.webBoard.repository.CommentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertEquals;
@SpringBootTest
class MySiteApplicationTests {
@Autowired
private BoardRepository boardRepository;
@Autowired
private CommentRepository commentRepository;
@Test
void testJpa() {
// jpa
Board b1 = new Board();
b1.setSubject("안녕하세요");
b1.setContent("jpa 테스트 중입니다");
b1.setCreateDate(LocalDateTime.now());
this.boardRepository.save(b1);
// repository
List<Board> all = this.boardRepository.findAll();
assertEquals(1, all.size());
Board b = all.get(0);
assertEquals("안녕하세요", b.getSubject());
// findById
Optional<Board> oq = this.boardRepository.findById(1L);
if (oq.isPresent()){
Board bb = oq.get();
assertEquals("안녕하세요", bb.getSubject());
}
// findBySubject
Board qq = this.boardRepository.findBySubject("안녕하세요");
assertEquals(1, qq.getId());
// findBySubjectAndContent
Board sc = this.boardRepository.findBySubjectAndContent("안녕하세요", "jpa 테스트 중입니다");
assertEquals(1, sc.getId());
// like
List<Board> bList = this.boardRepository.findBySubjectLike("안녕%");
Board bL = bList.get(0);
assertEquals("안녕하세요", bL.getSubject());
// comment test
Comment c = new Comment();
c.setContent("안녕하세용가리빵");
c.setBoard(bL);
c.setCreateDate(LocalDateTime.now());
this.commentRepository.save(c);
}
}
위에 comment test 부분을 테스트 파일에 추가해주고 실행하면 댓글이 정상적으로 추가된 것을 확인할 수 있다.

'프로젝트 > 하고 싶은거 다해보는 내 사이트' 카테고리의 다른 글
| 10. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 댓글 기능 구현 (0) | 2025.08.21 |
|---|---|
| 9. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 리스트 & 게시판 상세 페이지 구현하기 (0) | 2025.08.21 |
| 7. [게시판] Spring Boot/Mysql을 사용한 CRUD 게시판 만들기 | 게시판 엔티티 설계 및 구현 (0) | 2025.08.21 |
| 6. [로그인] JWT 인증 인가를 이용한 로그인 구현하기 | Spring Boot / JWT (1) | 2025.08.17 |
| 5. [로그인] SpringSecurity 로그인 구현하기 (5) | 2025.07.08 |