인프런 커뮤니티 질문&답변

이정완님의 프로필 이미지
이정완

작성한 질문수

[개념은 호옹~, 실습 빡] 스프링 부트, 입문!

@Transactional 어노테이션 위치에 관하여 질문합니다 :)

작성

·

377

1

홍빡 선생님 반갑습니다. 덕분에 스프링 부트에 대한 개념과 전체적인 흐름이 잘잡히고 있습니다. 아직 너무도 부족한.... ㅠㅠ 1인 그래도 부지런히 따라 가겠습니다.

다름이 아니라 선생님이 하신 코드를 따라 치면서 생각하다가 이렇게도 해도 괜찮을것같은데

혹여나 문제가 발생하면 안될거 같아서 정확히 알고자 질문드리빈다.

우선 기존에 짜셨던 코드입니다.

@SpringBootTest
class ArticleServiceTest {

@Autowired
ArticleService articleService;

@Transactional

@Test
void index() {
// 예상
Article a = new Article(1L, "가가가가", "1111");
Article b = new Article(2L, "나나나나", "2222");
Article c = new Article(3L, "다다다다", "3333");
List<Article> expected = new ArrayList<Article>(Arrays.asList(a,b,c));
// 실제
List<Article> articles = articleService.index();
// 검증
assertEquals(expected.toString(), articles.toString());
}

@Transactional
@Test
void show_성공____존재하는_id_입력() {
// 예상
Long id = 1L;
Article expected = new Article(id, "가가가가", "1111");
// 실제
Article article = articleService.show(id);
// 검증
assertEquals(expected.toString(), article.toString());
}

제가 말씀드리고 싶은 부분은 저 롤백역할을 하려는 Transactional 어노테이션?? 에 관한 이야기인데요. 테스트 코드가 랜덤으로 진행이 되는건지는 정확히 모르겠습니다.

그런데 Transactional을 초반에 설정하면 어떨까요 ? 우선 그렇게 해서 2번을 돌려보았는데 테스트 코드 2번 다 성공했습니다.

예를들어서

 

 

@Trasactional

@SpringBootTest
class ArticleServiceTest {

@Autowired
ArticleService articleService;


@Test
void index() {
// 예상
Article a = new Article(1L, "가가가가", "1111");
Article b = new Article(2L, "나나나나", "2222");
Article c = new Article(3L, "다다다다", "3333");
List<Article> expected = new ArrayList<Article>(Arrays.asList(a,b,c));
// 실제
List<Article> articles = articleService.index();
// 검증
assertEquals(expected.toString(), articles.toString());
}


@Test
void show_성공____존재하는_id_입력() {
// 예상
Long id = 1L;
Article expected = new Article(id, "가가가가", "1111");
// 실제
Article article = articleService.show(id);
// 검증
assertEquals(expected.toString(), article.toString());
}

 

이런식으로요!! 그러면 일일이 작업을 안해도될것같은데

혹시나 이게 잘못될수도 있을까봐 질문드려봅니다!

답변 1

1

홍팍님의 프로필 이미지
홍팍
지식공유자

가능한 코드입니다

@Transactional은
각 메소드에 적용시킬 수도,
클래스 단위로도 적용시킬 수 있습니다

단, 처리 속도가 중요한 상황에서는
롤백이 반드시 필요한 메소드에만
적용하는 것이 좋습니다

이정완님의 프로필 이미지
이정완
질문자

피드백 감사합니다.

나중에 스프링부트 전체적 맥락을 배울때가 아닌 정밀하게 스프링을 다루게될때 필히 참고하겠습니다.

바쁘신데도 글을읽어주시고 답변주셔서 다시한번더 감사드립니다.

이정완님의 프로필 이미지
이정완

작성한 질문수

질문하기