2022-06-28 TIL
Transaction Isolation
- READ UNCOMMITED: ์ปค๋ฐ๋์ง ์์ ์ฝ๋๋ค.
- READ COMMITED: ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ค.
- REPETABLE READ: ์์ ์ ํธ๋์ญ์ ์ด ์์ฑ๋๊ธฐ ์ด์ ์ ํธ๋์ญ์ (๋ฎ์ ๋ฒํธ์ ํธ๋์ญ์ )์ ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ค.
- SERIALIZABLE: Lock ๊ฑธ๊ณ ์ฌ์ฉ.
- DEFAULT: ์ฌ์ฉํ๋ DB ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ๋ฅธ๋ค. (ORACLE์ READ_COMMITED, MySQL InnoDB๋ REPETABLE_READ)
Commit
auto commit ๋ชจ๋์์ manual commit ๋ชจ๋๋ก ์ ํํ๋ ๊ฒ์ ํธ๋์ญ์ ์ ์์ํ๋ค๊ณ ๊ด๋ก์ ์ผ๋ก ํํํ๋ค.
DB Connection
์ ํ๋ฆฌ์ผ์ด์ ์์ DB ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ ค๋ฉด ํธ๋์ญ์ ์ ์ฌ์ฉํ๋ ๋์ ๊ฐ์ Connection์ ์ ์งํด์ผ ํ๋ค. ๊ทธ๋์ผ ๊ฐ์ ์ธ์ ์ ์ฌ์ฉํ ์ ์๋ค.
Exception
๊น์ํ๋ ์คํ๋ง DB 2ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํต์ฌ ์๋ฆฌ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
์์ธ์ ๋ํด์๋ 2๊ฐ์ง ๊ธฐ๋ณธ ๊ท์น์ ๊ธฐ์ตํ ๊ฒ
- ์์ธ๋ ์ก์์ ์ฒ๋ฆฌํ๊ฑฐ๋ ๋์ ธ์ผ ํ๋ค.
- ์์ธ๋ฅผ ์ก๊ฑฐ๋ ๋์ง ๋๋ ์ง์ ํ ์์ธ๋ฟ๋ง ์๋๋ผ ๊ทธ ์์๋ค๋ ํจ๊ป ์ฒ๋ฆฌ๋๋ค.
- ์๋ฅผ ๋ค์ด์,
Exception
์catch
๋ก ๋ฐ์ผ๋ฉด ๊ทธ ํ์ ์์ธ๋ค๋ ์ ๋ถ ์ก์ ์ ์๋ค. - ์๋ฅผ ๋ค์ด์,
Exception
์throws Exception
์ผ๋ก ๋์ง๋ฉด ๊ทธ ํ์ ์์ธ๋ค๋ ๋ชจ๋ ๋์ง ์ ์๋ค.
- ์๋ฅผ ๋ค์ด์,
์ฐธ๊ณ : ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ ๊ณ์ ๋์ง๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- Java
main()
์ฐ๋ ๋์ ๊ฒฝ์ฐ์๋ ์์ธ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ฉด์ ์์คํ ์ด ์ข ๋ฃ๋๋ค. - ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํ๋์ ์์ธ ๋๋ฌธ์ ์์คํ ์ด ์ข ๋ฃ๋๋ฉด ์ ๋๋ค. WAS๊ฐ ํด๋น ์์ธ๋ฅผ ๋ฐ์์ ์ฒ๋ฆฌํ๋๋ฐ, ์ฃผ๋ก ์ฌ์ฉ์์๊ฒ ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์ค๋ฅ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค.
class Controller {
.
.
.
public void request() throws SQLException, ConnectException {
service.executeBusinessLogic();
}
}
class Service {
.
.
.
public void executeBusinessLogic() throws SQLException, ConnectException {
repository.call();
networkClient.call();
}
}
throws SQLException, ConnectException
์ฒ๋ผ ์์ธ๋ฅผ ๋์ง๋ ๋ถ๋ถ์ ์ฝ๋์์ ์ ์ธํ๋ ๊ฒ์ด ์ ๋ฌธ์ ์ด๋พ? ๋ฐ๋ก ์๋น์ค, ์ปจํธ๋กค๋ฌ ๋จ์์ java.sql.SQLException
์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์๊ธด๋ค. ํฅํ Repository๋ฅผ JDBC ๊ธฐ์ ์ด ์๋ ๋ค๋ฅธ ๊ธฐ์ ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด, ๊ทธ๋์ SQLException
์ด ์๋๋ผ ์๋ฅผ ๋ค์ด, JPAException
์ผ๋ก ์์ธ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด SQLException
์ ์์กดํ๋ ๋ชจ๋ Service, Controller ์ฝ๋๋ฅผ JPAException
์ ์์กดํ๋๋ก ๊ณ ์ณ์ผ ํ๋ค. Service๋ Controller ์
์ฅ์์๋ ์ด์ฐจํผ ๋ณธ ๊ณ์ธต์์ ์ฒ๋ฆฌํ ์ ์๋ ์์ธ๋ฅผ ์์กดํ๋ค๋ ์ ์์ ํฐ ๋นํจ์จ์ฑ์ด ๋ฐ์ํ๋ค(SQL ์ฟผ๋ฆฌ ๋ฌธ์ ๋, ๋คํธ์ํฌ ๋ฌธ์ ๋ฅผ Service๋ Controller ๋จ์์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ด ์๋?). ๊ฒฐ๊ณผ์ ์ OCP(Open-Close-Principle), DI๋ฅผ ํตํด ํด๋ผ์ด์ธํธ ์ฝ๋์ ๋ณ๊ฒฝ ์์ด ๋์ ๊ตฌํ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์คํ๋ง์ ์ฅ์ ์ด CheckedException
๋๋ฌธ์ ๋ฐ๋ชฉ์ ์กํ๊ฒ ๋๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ