inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

457

이정완

작성한 질문수 8

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());
}

 

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

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

spring-boot

답변 1

1

홍팍

가능한 코드입니다

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

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

0

이정완

피드백 감사합니다.

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

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

23강 댓글 생성 메소드 오류

0

82

2

15.14 강 에러 문제 질문

0

56

1

21강 자율 과제중 update

0

120

2

28강 DB mysql연동 관련 질문

0

281

1

27강 관련 질문

0

199

1

22강 관련질문

0

308

2

21강 create테스트 질문

0

357

1

9강 질문 있습니다

0

282

1

로그창에 내용이 출력이 안됩니다.

0

367

1

index()함수 질문있습니다.

0

361

3

수정완료를 눌렀을때 첫번째 데이터는 전송이 안되고 다시 수정완료 버튼을 눌러야 데이터가 전송 됩니다.

0

474

1

강의와 책 질문

0

435

1

20강 질문있습니다.

0

398

1

20강에서 Article create 부분

0

289

1

16강 질문있습니다.

0

264

1

mustache의 article의 정의가 뭔가요?

0

339

2

17강 Unique index or primary key violation

1

1828

2

8강 에러 질문있습니다.

0

269

1

15강 DB연결

0

342

1

추상클래스를 사용 할 수있을까요?

0

241

1

22강 과제 질문

0

374

1

22강 질문입니다.

0

369

1

19강 create POST 500 에러

0

455

1

19강 JSON create 메서드 질문이여!!

1

541

1