
๐ก ์์ธ ์ฒ๋ฆฌ ์ข ๋ฅ ( ๊ฐ๋จ ์์ฝ )
์์ธ์๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฌ(Error)์ ์์ธ(Exception)์ด ์๋ค.
Error : ์์คํ ์ ๋น์ ์์ ์ธ ์ํฉ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ
Exception : ์๋ฌ์ ๋ฌ๋ฆฌ ๊ฐ๋ฐ์๋ค์ด ๋ง๋ ์ฝ๋์ ์์ ์ค์ ์์ธ์ํฉ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ
๋ฐ๋ผ์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ Error์ ๋ํ ์ฒ๋ฆฌ๋ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค.
Exception ํด๋์ค์๋ ํฌ๊ฒ ์ฒดํฌ์์ธ์ ์ธ์ฒดํฌ์์ธ๋ก ๊ตฌ๋ถ๋๋ค.
์ฒดํฌ ์์ธ : RuntimeException ํด๋์ค๋ฅผ ์์ํ์ง ์์ ์์ธ ์๋ธํด๋์ค๋ค
์ธ์ฒดํฌ ์์ธ : RuntimeException์ ์์ํ ์๋ธํด๋์ค๋ค
์ผ๋ฐ์ ์ผ๋ก ์ฒดํฌ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ try/catch๋ฌธ์ผ๋ก ์ก๊ฑฐ๋ throws๋ฅผ ์ ์ํด ๋์ ธ์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.

์๋ฐ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ์ ๊ฒฝ ์ฐ๊ธฐ ๊ท์ฐฎ์ํ๋ ๊ฒ ์ค์ ํ๋๊ฐ ์์ธ์ฒ๋ฆฌ๋ค.
๋ณดํต ์ ์์ ์ธ ๊ฒฐ๊ณผ์ ํ๋ฆ์ ๋ณด์ฌ์ฃผ๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ๋ ๋ฒ๊ฑฐ์ด๋ฐ ์์ธ์ํฉ๊น์ง ์ฒ๋ฆฌํ๋ ๊ฑด ๋ถ๋ด์ค๋ฝ๋ค.
ํ์ง๋ง, ์๋ฐ ๊ฐ๋ฐ์๊ฐ ์๋ฒฝํ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ ํด์ค์ผํ๋ค.
๐ก ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
1. ์์ธ ๋ณต๊ตฌ
์์ธ์ํฉ์ ํ์ ํ๊ณ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ ์ ์ ์ํ๋ก ๋๋ ค๋๋ ๊ฒ
์์)
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ํ์ผ์ ์ฝ์ด์ผํ๋ ๋ฉ์๋๋ฅผ ์คํํ์ ๋, ํด๋น ํ์ผ์ด ์์ด IOException์ด ๋ฐ์ํ๋ค๋ฉด,
์ฌ์ฉ์์๊ฒ ์ํฉ์ ์๋ ค์ฃผ๊ณ ๋ค๋ฅธ ํ์ผ์ ์ด์ฉํ๋๋ก ์๋ดํด ์์ธ์ํฉ์ ํด๊ฒฐํด ์ค ์ ์๋ค.
์ฆ, ๊ธฐ๋ณธ ์์ ํ๋ฆ์ด ๋ถ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ์์ ํ๋ฆ์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ์ ๋ํด์ค ์ ์์ผ๋ก ๋์์ค๋ ๊ฒ.
์ด๊ฒ์ด ์์ธ๋ฅผ ๋ณต๊ตฌํ๋ ๊ณผ์ ์ด๋ค.
( โป IOException ์๋ฌ ๋ฉ์ธ์ง๊ฐ ์ฌ์ฉ์์๊ฒ ๊ทธ๋ฅ ๋์ ธ์ง๋ ๊ฒ์ ์์ธ ๋ณต๊ตฌ๋ผ๊ณ ๋ณผ ์ ์๋ค.)
์์ ์ฝ๋
int maxretry = MAX_RETRY; while(maxretry > 0) { try { //...์๋ต return; // ์์ ์ฑ๊ณต }catch(SomeException e) { //๋ก๊ทธ ์ถ๋ ฅ, ์ ํด์ง ์๊ฐ๋งํผ ๋๊ธฐ } finally { // ๋ฆฌ์์ค ๋ฐ๋ฉ, ์ ๋ฆฌ ์์ } } throw new RetryFailedException(); //์ต๋ ์ฌ์๋ ํ์๋ฅผ ๋๊ธฐ๋ฉด ์ง์ ์์ธ ๋ฐ์
2. ์์ธ ํํผ
์์ธ์ฒ๋ฆฌ๋ฅผ ์์ ์ด ๋ด๋นํ์ง ์๊ณ ์์ ์ ํธ์ถํ ์ชฝ์ผ๋ก ๋์ ธ๋ฒ๋ฆฌ๋ ๊ฒ.
throws ๋ฌธ์ผ๋ก ์ ์ธํด์ ๋์ง๊ฑฐ๋, catch๋ฌธ์ผ๋ก ์ผ๋จ ์์ธ๋ฅผ ์ก์ ํ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๊ณ ๋์ง๋ ๊ฒ
์์ ์ฝ๋
(1) throws ๋ฌธ์ผ๋ก ์ ์ธํด ๋์ง๋ ๋ฐฉ๋ฒ.
public void add() throws SQLException{ //JDBC API }
(2) catch๋ฌธ์ผ๋ก ์ผ๋จ ์์ธ๋ฅผ ์ก์ ํ ๋ก๊ทธ๋ฅผ ๋จ๊ธด ํ ๋์ง๋ ๋ฐฉ๋ฒ.
public void add() throws SQLException{ try { // JDBC API } catch(SQLException e) { // ๋ก๊ทธ ์ถ๋ ฅ throw e } }
ํ ํ๋ฆฟ ์ฝ๋ฐฑ ์ ๋ต์์์ ํ ํ๋ฆฟ ์ฝ๋ฐฑ๊ณผ ๊ฐ์ ๊ธด๋ฐํ ๊ด๊ณ๋ผ๋ฉด ์์ธ๋ฅผ ๋์ ธ๋ฒ๋ ค๋ ์๊ด์์ง๋ง,
์ด๋ฌํ ๊ด๊ณ๊ฐ ์๋๋ผ๋ฉด ๋ฌด์ฑ ์ํ๊ฒ ์์ธ๋ฅผ ๋์ ธ๋ฒ๋ฆฌ๋ฉด ์๋๋ค.
๋ง์ฝ ๋ชจ๋ ๊ฐ์ฒด๋ค์ด ์์ธ๋ฅผ ํํผํ๋ค๋ฉด ๋์ค์๋ ์๋ฒ๋ก ์ ๋ฌ๋๊ณ ๋ง๋ค.
๊ทธ๋ฌ๋ ์๋๊ฐ ๋ถ๋ช ํ ๋ ์์ธ๋ฅผ ํํผํด์ฃผ์.
3. ์์ธ ์ ํ
์์ธ ํํผ์ ๋น์ทํ๊ฒ ์์ธ๋ฅผ ๋ฉ์๋ ๋ฐ์ผ๋ก ๋์ง๋ ๊ฒ์ด์ง๋ง,
๋ฐ์ํ ์์ธ๋ฅผ ๊ทธ๋๋ก ๋๊ธฐ๋ ๊ฒ์ด ์๋ ์ ์ ํ ์์ธ๋ก ์ ํํด ๋์ง๋ ๋ฐฉ๋ฒ
์์ธ ์ ํ์ 2๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
(1) ์์ธ ์ํฉ์ ๋ํ ์ ์ ํ ์๋ฏธ๋ฅผ ๋ถ์ฌํด์ฃผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
์์) SQLException
์ฌ์ฉ์ ๋ฑ๋ก์ ์๋ํ๋ ์ํฉ์์
์ค๋ณต๋๋ ์์ด๋๊ฐ ์์ผ๋ฉด DB์๋ฌ๊ฐ ๋ฐ์ํด JDBC API๋ SQLException์ ๋ฐ์์์ผ DAO ๋ฉ์๋๋ก ๋ฉ์๋๋ฅผ ๋์ก์ ๋,
์ด ์๋ฌ๋ฅผ ๋ฐ์ DAO ๊ฐ์ฒด๋ SQLException์ด๋ผ๋ ์์ธ๋ง ์๋ฟ ์ ๋ฐ์ํ๋์ง ์ฝ๊ฒ ์ ๋ฐฉ๋ฒ์ด ์๋ ์ํฉ์ด ๋ฐ์ํ๋ค.
์ด๋ DAO ๊ฐ์ฒด๊ฐ ์์ด๋ ์ค๋ณต์ผ๋ก ๋ฐ์ํจ์ ์ ๋๋ก ์ ์ ์๋๋ก DuplicatedUserException ๊ฐ์ ์์ธ๋ก ๋ฐ๊ฟ์ ๋์ ธ ์ค ์ ์๋ค.
์์ ์ฝ๋
public void add(User user) throws DuplicateUserIdException, SQLException { try { // JDBC๋ฅผ ์ด์ฉํด user ์ ๋ณด๋ฅผ DB์ ์ถ๊ฐํ๋ ์ฝ๋ ๋๋ // ๊ทธ๋ฐ ๊ธฐ๋ฅ์ ๊ฐ์ง ๋ค๋ฅธ SQLException์ ๋์ง๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ์ฝ๋ } catch(SQLException e) { //ErrorCode๊ฐ Mysql์ "Duplicate Entry(1062)"์ด๋ฉด ์์ธ ์ ํ if(e.getErrorCode() == MysqlErrorNumbers.ER_DUP_ENTRY) throw DuplicateUserIdException(); else throw e; //๊ทธ ์ธ์ ๊ฒฝ์ฐ๋ SQLException ๊ทธ๋๋ก } }
๋ณดํต ์ ํํ๋ ์์ธ์ ์๋ ๋ฐ์ํ ์์ธ๋ฅผ ๋ด๋ ์ค์ฒฉ ์์ธ๋ก ๋ง๋ค์.
(2) ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ฝ๊ณ ๋จ์ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํฌ์ฅํ๋ ๋ฐฉ๋ฒ.
์ค์ฒฉ ์์ธ๋ฅผ ์ด์ฉํด ๋์ง๋ ๋ฐฉ์๊ณผ ๋น์ทํ์ง๋ง ๋ค๋ฅธ ์ ์ ์๋ฏธ๋ฅผ ๋ช ํํ๊ฒ ํ๋ ค๊ณ ์ ํํ๋ ๊ฒ์ด ์๋
์ฃผ๋ก ๊ฐ์ ํ๋ ์ฒดํฌ ์์ธ๋ฅผ ์ธ์ฒดํฌ ์์ธ์ธ ๋ฐํ์ ์์ธ๋ก ๋ฐ๊พธ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ํ์ ์ผ๋ก EJBException์ด ์๋ค.
์์) EJBException
EJB์ปดํฌ๋ํธ ์ฝ๋์์ ๋ฐ์ํ๋ ์ฒดํฌ ์์ธ๋ ๋น์ฆ๋์ค ๋ก์ง์ผ๋ก ๋ณด๋ฉด ์๋ฏธ ์๋ ์์ธ์ด๊ฑฐ๋ ๋ณต๊ตฌ ๊ฐ๋ฅํ ์์ธ๊ฐ ์๋๋ค.
์ด๋ EJBException์ RuntimeException ํด๋์ค๋ฅผ ์์ํ ๋ฐํ์ ์์ธ์ด๋ฏ๋ก
์ด ์์ธ๋ก ๋ฐ๊ฟ ๋์ ธ์ฃผ๋ฉด EJB๋ ์ด๋ฅผ ์์คํ ์ต์ ์ ์ผ๋ก ์ธ์ํด ํธ๋์ญ์ ์ ์๋์ผ๋ก ๋กค๋ฐฑํด์ค ์ ์๋ค.
์์ ์ฝ๋
try { OrderHome orderHome = EJBHomeFactory.getInstance().getOrderHome(); Order order = orderHome.findByPrimaryKey(Integer id); } catch(NamingException ne) { throw new EJBException(ne); } catch(SQLException se) { throw new EJBException(se); } catch(RemoteException re) { throw new EJBException(re); }
๐ ์ ๋ฆฌ
์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
- ์์ธ ๋ณต๊ตฌ
- ์์ธ ํํผ
- ์์ธ ์ ํ
์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ์ด์ฉํด ์์ธ ์ ๋ต์ ์ ๋ง๋ค์ด๋ณด์!
๊ถ๊ธํ์ ๊ฒ์ด ์์ผ์๋ฉด ์ธ์ ๋ ์ง ๋๊ธ ๋ฌ์์ฃผ์ธ์!

'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ์ค๋ธ์ ํธ์ ๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ (0) | 2020.07.31 |
---|---|
[JAVA]Random์ ์ธ ์ Seed๋ ๋ฌด์์ ์๋ฏธํ๊ณ , ์ ์ฐ๋๊ฐ? (5) | 2018.05.28 |