Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

12주차 - 6.33 시간적 결합 깨트리기 #31

Open
DaehunGwak opened this issue Feb 18, 2023 · 3 comments
Open

12주차 - 6.33 시간적 결합 깨트리기 #31

DaehunGwak opened this issue Feb 18, 2023 · 3 comments

Comments

@DaehunGwak
Copy link
Owner

진도

  • 6.33 시간적 결합 깨트리기

일시

  • 2023.02.19.(일) 21:00
@DaehunGwak
Copy link
Owner Author

  • 신경써야 할 측면 두 가지

    • 동시성 (동시에 일어나는 일들)
    • 순서 (시간의 흐름 속에서 일들의 상대적인 위치)
  • 위 두가지를 고려하여 시간적 결합을 항상 끊도록 노력해야 함 (메서드 A는 메서드 B 보다 먼저 호출해야 한다.)

  • 동시성을 찾아내는 좋은 방법 중 하나는 액티비티 다이어그램을 그리면서 작업 흐름을 기록하는 것이 한 방법

    • 예시 보면서 오 파악하기 편하네 싶긴 했음
  • 동시성과 병렬성 (복습 타임!)

    • 동시성: 동시에 실행중인 것 처럼!
      • 소프트웨어 동작 방식
      • 하나의 cpu 코어에 컨텍스트 스위칭 발생
    • 병렬성: 실제로 동시 수행
      • 하드웨어 동작 방식
      • 여러 cpu 코어에서 동시 동작
  • 안전하게 동시성, 병렬성을 안전하게 구현할 수 있는 방법은 다음 장부터…

  • 도전해 볼 것

    • 일어나기 → 이불정리 → 토스트 굽기 (기다림 시간 제거) → 샤워 (샴푸 → 양치질 → 샴푸 행구기 → ....
    • 현자타임….

@minkukjo
Copy link
Collaborator

끄적 끄적

  • 학생 개발자와 실무 개발자의 가장 큰 차이가 무엇이냐고 물어본다면, 나는 얼마나 동시성에 대한 고려를 하는가로 판가름이 난다고 생각함.
  • 그만큼 동시성 문제는 실제 서비스에서 중요하게 다루어져야하는 문제이기도 하다. ( 특히나 돈과 관련된 서비스를 할 때는... )
  • 예약에서도 동시성 문제를 많이 고민하고 있으나 많은 부분들이 Locking을 구현하는 방식으로 해결을 하고 있음.
  • 액터 모델이라는게 나오는데, 얼랭에서 사용하는 방식이라고 한다. ( 나중에 엘릭서 공부를 해보는 것도 좋아보임 )
  • 데이터를 공유하지 않고 채널을 통해 메시지를 전달하여 프로그래밍을 전개해나가는 방식.
  • 얼핏보면 객체지향과 비슷한게 아닌가? ( 객체, 행위(메시지), 협업, ... ) 라는 생각이 들 수 있으나, 액터 모델은 서로 독립적이고 메모리를 공유하지 않는다고 한다.
  • 모든 액터는 다른 액터가 직접적으로 변경할 수 없는 상태를 갖고 있다고 한다.
  • 시간적 결합이란 시간에 신경써야할 측면에 대한 이야기이다. 동시성과 순서가 그 예임.
  • A 동작 이후 B 동작이 수행되어야한다 ( 이러한 순서로 인해 대부분 Blocking 방식의 코드 개발을 유도함 )
  • 이러한 시간적 결함을 깸으로써 유연성을 얻을 수 있다는데에는 공감하지만, 이는 소프트웨어 전체적인 플로우를 바꿔야하는 경우가 존재한다. ( 네이버 예약에서 이러한 문제가 있고 이는 스터디 때 썰을 좀 풀어보겠습니다 )
  • 동시성 => 소프트웨어, 병렬성 => 하드웨어라는 점이 흥미로웠다.

@donghoon-song
Copy link
Collaborator

donghoon-song commented Feb 19, 2023

  • 동시성 : 둘 이상의 코드 조각이 실행될 때 동시에 실행 중인 것처럼 행동하는 것 (소프트웨어)
  • 병렬성 : 실제로 동시에 실행되는 것 (하드웨어)

시간이나 순서에 의존하는 시간적 결합을 끊는 방법을 생각해 내야 한다. 동시성을 확보해야 한다. 작업 흐름 분석과 아키텍처, 설계, 배포와 같은 개발의 여러 측면에서 시간과 관련된 의존성도 함께 줄일 수 있다.

작업 흐름 분석으로 동시성을 개선할 것

가끔 코드를 짜다보면 순서를 안 지켜도 되는데 의식의 흐름대로 순서대로 짜는 경우가 있음

이걸 사용하면 pr올렸을 때 action들이 다 끝나면 자동 머지 가능.
https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue

초기 로딩속도를 빠르게 하기 위해, 어떤 요소에 마우스가 올라와야 관련 코드를 가져온다든가 하는 기법들이 소개되고 있는데 공부할게 많네요,,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants