JAVA

[JAVA] ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

 

 

๐Ÿ’ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ข…๋ฅ˜ ( ๊ฐ„๋‹จ ์š”์•ฝ )

 

์˜ˆ์™ธ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—๋Ÿฌ(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);
}

 

๐Ÿ“ƒ ์ •๋ฆฌ

์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• 

  • ์˜ˆ์™ธ ๋ณต๊ตฌ
  • ์˜ˆ์™ธ ํšŒํ”ผ
  • ์˜ˆ์™ธ ์ „ํ™˜

 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ž˜ ์ด์šฉํ•ด ์˜ˆ์™ธ ์ „๋žต์„ ์ž˜ ๋งŒ๋“ค์–ด๋ณด์ž!

 

๊ถ๊ธˆํ•˜์‹  ๊ฒƒ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”!

 

 

๋ฐ˜์‘ํ˜•