[F-lab 모각코 챌린지 62일차] TIL

JeongheeKim·2023년 8월 1일

TIL

목록 보기
62/66

학습계획


  • 프로세스 동기화 - 세마포, 모니터

Today I Learned


프로세스 동기화

세마포(semaphore)

공유자원이 여러개 있는 상황에서도 적용이 가능한 동기화 도구

  • 임계 구역에 진입할 수 있는 프로세스의 개수를 나타내는 전역변수 S
  • 임계 구역에 들어가도 좋은지, 기다릴 지 알려주는 wait함수
  • 임계구역 앞에서 기다리는 프로세스에 진입해도 되는지 알려주는 signal함수

만약 사용할 공유자원이 없을 경우 무한정 wait함수를 호출한다면 CPU낭비로 이어진다.

세마포에서는 wait함수 호출 시 사용할 자원이 없을 경우, 프로세스를 대기상태로 만들고, 해당 프로세스의 PCB를 세마포를 위한 대기 큐에 넣는다.

다른 프로세스가 임계구역에서 작업이 끝나고 signal함수를 호출하면 대기큐에 들어간 PCB를 제거 한뒤, 프로세스 준비상태로 변경한다.

모니터

임계구역에 대해 매번 signal, wait 함수를 명시하면 불편하고 누락할 수 있는 위험이 있다.

세마포에 비해 사용자가 사용하기 편한 동기화 도구

모니터는 공유자원과 공유자원에 접근하기 위해 인터페이스를 묶어서 관리한다.

프로세스는 인터페이스를 통해서만 접근 가능


  • 예외 전환

    1. 예외를 전환 시 포장하는 exception을 사용하여 불필요한 catch, throw를 제거하는것
      1. JdbcTemplate이 던지는 DataAccessException은 SQLException을 포장해서 던지는 역할
      2. 또한 db layer에서 발생한 예외를 어플리케이션 레벨에서는 신경쓰지 않게 알려줌
    2. 로우레벨의 예외를 좀 더 의미있고 추상화된 예외로 바꿔서 던져주는것
    • 복구할 수 없는 예외는 가능한 빨리 런타임으로 전환하는것이 좋다.

    • 어플리케이션의 로직을 담기 위한 예외는 checked exceptio로 만든다.

    • JDBC의 SQLException은 대부분 복구할 수 없는 예외이므로 런타임 예외로 포장해야한다.

    • SQLException의 에러코드는 DB에 종속되기 떄문에 DB에 독립적인 예외로 전환 될 필요가 있다.

    • DAO를 데이터 액세스 기술에서 독립시키려면 인터페이스 도입과 런타임 예외 전환, 기술에 독립적인 추상화된 예외로 전환이 필요하다.


아래 그림에서 OrderServiceImpl는 MemberRepository , DiscountPolicy 에 의존한다는 것을 바로 알 수 있다. → 정적 의존관계

하지만 각 각 MemberRepository , DiscountPolicy 에 어떤 구현체가 의존되는지 알 수 없다. → 동적 의존관계

동적인 의존관계

어플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계

정적인 의존관계

클래스에 선언된 import문 만으로 의존관계를 파악할 수 있다.

어플리케이션을 실행하지 않아도 어떤 클래스가 의존되는지 알 수 있다.


의존성(Dependency)

프로그래밍에 있어 두 모듈간의 연결을 뜻한다.

일반적으로 둘 중 하나가 다른 하나를 어떤 용도로 사용함을 뜻함.

의존성에 있는 두 관계는 수행 순서 지정이 필요하다.

0개의 댓글