2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

[Item 8] 상태를 영구적으로 수정하는 작업 #22

Closed gmelon closed 1 year ago

gmelon commented 1 year ago

p.41에 프로그램 생애주기와 상관없는, 상태를 영구적으로 수정하는 작업 이라는 표현이 있는데 이러한 작업의 예시가 무엇이 있을까요?

본문에서는 DB에서의 lock을 예로 든 것 같은데 잘 이해가 되지 않아서 다른 분들은 어떻게 이해하셨는지 궁금합니다.

ssstopeun commented 1 year ago

DB와 같은 공유자원과 프로그램간의 연관성을 정확하게 판단하기엔 경험이 부족해서 잘 모르겠지만...

본문의 DB lock을 생각해봤을때 프로그램이 돌아가는 동안 다른 세션에서 DB에 접근을 하지 못하도록 lock을 걸어놓고 해당 DB에 대한 접근이 없어지면 lock을 해제하고자 하는 의도로 finallizer나 cleaner를 사용한다고 생각해보았습니다.

finallizer와 cleaner의 가장 핵심적인 문제가 수행 시점뿐 아니라 수행 여부조차 보장하지 않는다. 이니 프로그램이 끝난 후 DB에 접근해 수정을 하거나 열람을 하려고 할때 프로그램은 종료되었지만 lock은 해제되지 않는 상황이 발생할 수 있을 것 같습니다.

DB에 대한 lock을 해제해야하는 상황(상태를 영구적으로 수정하는 작업) 이라면 프로그램이 종료되기전에 실행이될 수도 안될 수도 있는 finallize, cleaner를 사용한(프로그램의 생애주기와 연관이 큰) 작업은 시스템에 문제를 일으킬 수 있다는 이야기인 것 같습니다.

(이런 경우가 DB배울때 배운 Deadlock유발되는 상황이라고 볼수도 있을까요...? 프로그램 종료로 되지 않은 lock해제를 기다리다가 다른 접근도 안되서 결국 아무것도 안되는...)