[Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (3) μŠ€ν”„λ§ 톡합 ν…ŒμŠ€νŠΈ

2021. 9. 20. 13:47Β·πŸ“ Language/✏ JAVA

μŠ€ν”„λ§ DB μ ‘κ·Ό κΈ°μˆ 

3. μŠ€ν”„λ§ ν†΅ν•© ν…ŒμŠ€νŠΈ

  • 이번 ν…ŒμŠ€νŠΈλŠ” μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ DBκΉŒμ§€ μ—°κ²°ν•œ 톡합 ν…ŒμŠ€νŠΈμ΄λ‹€.
  • 이전 ν…ŒμŠ€νŠΈλŠ” 순수 μžλ°” μ½”λ“œλ§ŒμœΌλ‘œ 이루어진 λ‹¨μœ„ ν…ŒμŠ€νŠΈμ΄λ‹€.
  • μˆœμˆ˜ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ λŒ€λΆ€λΆ„ 쒋은 ν…ŒμŠ€νŠΈμ΄κ³  섀계가 잘 λ˜μ–΄μžˆλŠ” 것이닀.
  • @SpringBootTest: μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ™€ ν…ŒμŠ€νŠΈλ₯Ό ν•¨κ»˜ μ‹€ν–‰ν•œλ‹€.
  • @Transactional: ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— 이 μ• λ…Έν…Œμ΄μ…˜μ΄ 있으면, ν…ŒμŠ€νŠΈ μ‹œμž‘ 전에 νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•˜κ³  ν…ŒμŠ€νŠΈ μ™„λ£Œ 후에 λ‘€λ°±ν•œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ DB에 데이터가 남지 μ•ŠμœΌλ―€λ‘œ λ‹€μŒ ν…ŒμŠ€νŠΈμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€. (@AfterEach λΆˆν•„μš”)
  • @Commit: @Transactionalκ°€ μžˆμ–΄λ„ ν…ŒμŠ€νŠΈκ°€ λλ‚œ ν›„ DB에 λ°˜μ˜ν•œλ‹€.
package hello.hello.spring.service;

import hello.hello.spring.domain.Member;
import hello.hello.spring.repository.MemberRepository;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Commit;
import org.springframework.transaction.annotation.Transactional;

import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {

    // 직접 객체λ₯Ό μƒμ„±ν•˜λŠ” λŒ€μ‹ (@BeforeEach) μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλ‘œλΆ€ν„° λ°›μ•„μ˜¨λ‹€.(@Autowired)
    // μ™œλƒν•˜λ©΄, ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•  땐 제일 νŽΈν•œ 방법을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.
    @Autowired
    MemberService memberService;
    @Autowired
    MemberRepository memberRepository; // μŠ€ν”„λ§μ— λ“±λ‘λ˜μ–΄ μžˆλŠ” κ΅¬ν˜„μ²΄

    @Test
    @Commit
    void νšŒμ›κ°€μž…() {
        // given
        Member member = new Member();
        member.setName("hello123");

        // when
        Long saveId = memberService.join(member);

        // then
        Member findMember = memberService.findOne(saveId).get();
        Assertions.assertThat(member.getName()).isEqualTo(findMember.getName());
    }

    @Test
    public void 쀑볡_νšŒμ›_μ˜ˆμ™Έ() {
        // given
        Member member1 = new Member();
        member1.setName("spring123");

        Member member2 = new Member();
        member2.setName("spring123");

        // when
        memberService.join(member1);
        IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));
        Assertions.assertThat(e.getMessage()).isEqualTo("이미 μ‘΄μž¬ν•˜λŠ” νšŒμ›μž…λ‹ˆλ‹€.");
    }
}
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (5) JPA
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (4) μŠ€ν”„λ§ JDBC Template
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (2) 순수 JDBC
  • [Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (1) H2 DB μ„€μΉ˜
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[Spring][혼곡] 6. μŠ€ν”„λ§ DB μ ‘κ·Ό 기술 - (3) μŠ€ν”„λ§ 톡합 ν…ŒμŠ€νŠΈ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”