ErrorCode๋ฅผ ์ด์ฉํ ํน์ ์์ธ ๋ณต๊ตฌ
by rlaehddnd0422์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์๋ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
1. ์์ธ ๋ด๋์ง๊ธฐ : ์์ ์ด ์ฒ๋ฆฌํ์ง ๋ชปํ๋ ์์ธ๋ฅผ ์์ ์ ํธ์ถํ ๋ฉ์๋์๊ฒ throws ํค์๋๋ก ๋ด๋์ง๋ ๋ฐฉ๋ฒ ( main()์์๋ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ฉด ์ค๋ฅ ์ถ๋ ฅํ ์ข ๋ฃ )
2. ์์ธ ์ ํ : catch ๋ฌธ์์ Checked Exception -> Unchecked Exceptionํ์ฌ throw ํค์๋๋ก ๋์ง๊ธฐ
3. ์์ธ ๋ณต๊ตฌ : catch ๋ฌธ์ try ๋ฌธ์์ ๋ฐ์ํ ์์ธ์ ๋ํ ๋ณต๊ตฌ ๋ก์ง ๊ตฌํํ๊ธฐ
์์ธ ์ ํ๊ณผ ์์ธ ๋ณต๊ตฌ๋ฅผ ์ด์ฉํด์ ์๋น์ค ๊ณ์ธต์์ ๋ฆฌํฌ์งํ ๋ฆฌ ๊ณ์ธต์ ์ ๊ทผํด DB์ Member๋ฅผ ์ ์ฅํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ํ ํ ๋, member_id๊ฐ ์ค๋ณต์ธ ๊ฒฝ์ฐ ์ ๋ ฅํ member_id๋ค์ ๋ฌด์์ ์ซ์ 4์๋ฆฌ๋ฅผ ๋ถํ์ insert ํ ์ ์๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
์ค๋ณต ํค ์ค๋ฅ ๋ฐ์ ์
1. Service ๊ณ์ธต์ ๋น์ฆ๋์ค ๋ก์ง create ๋ฉ์๋์์ repository ๊ณ์ธต์ ์ ๊ทผํด ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ member save
- Repository ๊ณ์ธต์์ ์ปค๋ฅ์ ์์ฑ ํ PreparedStatement์ ๋ฐ์ธ๋ฉ ํ ์ฟผ๋ฆฌ ์คํ
2. Repository ๊ณ์ธต์์ ์ฟผ๋ฆฌ ์คํ ์ค SQLException ๋ฐ์ ์ ์๋ฌ ์ฝ๋๊ฐ 23505์ธ ๊ฒฝ์ฐ ์ ์ํ ์์ธ throw
3. Service ๊ณ์ธต์์ Repository ๊ณ์ธต์์ throw ๋ ์์ธ๋ฅผ catchํ์ฌ ๋ณต๊ตฌ ๋ก์ง ์ํ
4. ๋ณต๊ตฌ ๋ก์ง ์ํ ํ Repostiory ๊ณ์ธต์ผ๋ก ๋ค์ ๋์ด๊ฐ finally ๊ตฌ๋ฌธ ์คํ
์ฐธ๊ณ ๋ก ๊ฐ์ ์ค๋ฅ์ฌ๋ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ ์๋ ์ค๋ฅ ์ฝ๋๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ค๋ฅ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋๋ ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฉ๋ด์ผ์ ํ์ธํด์ผ ํฉ๋๋ค.
TestCode
@Slf4j
public class TestServiceTest {
MemberRepository memberRepository;
TestService memberService;
DataSource dataSource;
@BeforeEach
void init()
{
dataSource = new DriverManagerDataSource(URL,USERNAME, PASSWORD);
memberRepository = new TestRepository(dataSource);
memberService = new TestService(memberRepository);
}
@Test
void duplicate()
{
memberService.create(new Member("myId",0));
memberService.create(new Member("myId",0));
}
}
<์ ๋ฆฌ>
- SQL ErrorCode๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ค ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ์์ธ ์ ํ์ ํตํด SQLException์ ํน์ ๊ธฐ์ ์ ์์กดํ์ง ์์ ์ง์ ๋ง๋ ์์ธ์ธ MyDuplicateKeyException์ผ๋ก ๋ณํํ ์ ์์์ต๋๋ค.
- Repository ๊ณ์ธต์ด ์์ธ๋ฅผ ๋ณํํด์ค ๋๋ถ์ ์๋น์ค ๊ณ์ธต์ ํน์ ๊ธฐ์ ์ ์์กดํ์ง ์๋ MyDuplicateKeyException์ ์ฌ์ฉํด ์์ธ๋ฅผ ๋ณต๊ตฌํ๊ณ , ์๋น์ค ๊ณ์ธต์ ์์์ฑ๋ ์ ์งํ ์ ์์ต๋๋ค.
- ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์์ธ์ฝ๋๊ฐ ๋ฌ๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฐ๋๋ฉด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค๋ ์ ์ธ๋ฐ, ์ด ๋ฌธ์ ๋ ์คํ๋ง์ ์์ธ ์ถ์ํ์ ์์ธ ๋ณํ๊ธฐ๋ฅผ ์ด์ฉํด ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ค์ ํฌ์คํ ์์ ์์ธ ์ถ์ํ์ ์์ธ ๋ณํ๊ธฐ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > DB Access' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422