1. MVC만들기 미션 3단계를 완성해서 제출했다.
https://github.com/woowacourse/jwp-dashboard-mvc/pull/612
📍 레오에게 답변한 내용
DispatchServletInitializer을 mvc 모듈로 옮길 수 없는 이유?
(DispatcherSerlvetInitializer 가 구현하고 있는) WebApplicationInitializer인터페이스 관련해서 좀 알아보았는데요!
해당 인터페이스를 구현하는 클래스를 작성해두면, 웹 어플리케이션을 시작할 때 서블릿 컨테이너(ex. Tomcat)가 자동으로 해당 클래스를 찾아 onStartUp메서드를 호출한다고 하네요..!
제 뇌피셜로는 현재 Tomcat관련 설정(TomcatStarter)이 app모듈에 위치한 상태라
DispatcherServletInitializer를 mvc모듈로 옮기게 되면 tomcat이 DispatcherServletInitializer를 못 찾는거 아닐까..?라고 생각합니다.
2. Block vs Non-Block & Sync vs Async 테코톡을 싹 봤다
📍 Block vs Non-Block
제어권 반환
제어할 수 없는 대상의 처리 방법
다른 주체가 작업할 때 자신의 제어권이 있는지 없는지
다른 작업의 실행이 현재 작업의 실행을 막는가?
- Block
- 제어권을 한 번 넘기면 끝날 때까지 호출자는 기다려야함
- 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것
- 예) 상사에게 서류 가져다 주고, 상사가 다 읽을 때까지 기다림
- 다른 작업의 실행이 현재 작업의 실행을 막는다 (멈춰있는다)
- 대상이 제어권(실행 흐름)을 빼앗는다
- Non-Block
- 제어권을 한 번 넘기면 바로 다시 호출자에게로 반환
- 다른 주체의 작업에 관련없이 자신의 작업을 하는 것
- 예) 상사에게 서류 가져다 주고, 자기 할 일
- 다른 작업의 실행이 현재 작업의 실행을 막지 않는다 (멈춰있지 않는다)
- 대상이 별도의 제어권(실행 흐름)을 얻는다
📍 Sync vs Async
대상들의 시간이 맞춰지는가?
결과를 돌려주었을 때 순서와 결과에 관심이 있는지 없는지
작업들이 같이 시작해 같이 끝나는가?
동기화의 종류
- 함수A가 끝난 다음에 함수B 실행 (함수A의 끝과 함수B의 시작을 맞춤)
- 제어권의 반환과 결과값 전달 시간을 맞춤
- Synchronous
- 작업을 동시에 수행하거나
- 동시에 끝나거나
- 끝나는 동시에 시작함
- 예) 상사에게 서류 가져다 주고, 자기는 기다림 or 자기 할 일 -> 상사가 결과를 돌려주면, 바로 처리
- 작업들이 같이 시작해 같이 끝난다
- 목적 : 작업들이 같이 시작해 같이 끝나도록 하기 위해. 작업 중에 다른 작업이 끼어들지 못하게 하기 위해.
- Aynchronous
- 시작, 종료가 일치하지 않으며
- 끝나는 동시에 시작을 하지 않음
- 예) 상사에게 서류 가져다 주고, 자기는 기다림 or 자기 할 일 -> 상사가 결과를 돌려주면, 언젠가 처리
- 작업들의 시작과 끝이 다르다
- 목적 : 시작, 종료 시기를 신경쓰지 않기 위해 (작업 중에 끼어들어도 괜찮다)
- 일을 시작 시키고, 작업이 끝날 때까지 안 기다린다
📍 Block & Non-Block vs Sync vs Async
block
- 제어권을 호출한 함수가 들고 있다가 결과값 반환할 때 같이 준다
- 제어권
- 제어의 관점
sync
- 제어권을 반환하는 시간 = 결과값을 전달하는 시간
- 제어권을 반환하는 "시간" (즉, 타이밍)
- 순서와 결과(처리)의 관점
같은거 아닌가?
일부 같을 때가 있다.
보는 관점이 다른 것
Block의 관점은 제어권!
Sync의 관점은 결과의 처리!
📍 4가지 조합의 경우
1) Blocking/Sync
- block : 다른 작업이 진행되는 동안 동작x
- sync : 결과 받으면 바로 처리
사용예시 : 자바의 입력요청
제어권이 넘어갔기 때문에 아래 코드 실행 x
-> 입력하면 제어권과 결과를 같이 받아서 처리
2) Non-Block/Sync
- non-block : 다른 작업이 진행되어도 자신의 제어권을 가지고 자기 할 일 함
- sync : 결과에 관심
- 중간중간 물어봄. 결과 나왔나요?
- 결과를 받을 수 있으면 해당 결과를 가지고 와서 업무 처리
- 제어권이 Kernel에게 감
- 안 끝났는데 제어권 반환
- 결과값 전달 안 했는데 했다
- 함수의 완료된 상태뿐 아니라 완료되지 않음이라는 상태도 결과값으로 본다
- '끝나지 않았음'이라는 결과를 준다
- 제어권의 반환과 결과값의 전달이 동시에 이루어졌다! => 동기
- 하지만 아직 안 끝났는데 반환했다! => 논블럭
3) Blocking / Async
block : 자신의 작업에 대한 제어권이 없다 (기다려야한다)
async : 결과를 바로 처리하지 않아도 된다
굳이 비동기인데 블로킹으로 써야할까?
보통 non-block과 async로 하려다 개발자의 실수로 혹은 기타 이유로 이렇게 동작
4) Non-Blocking / Async
non-block : 다른 작업이 시작되어도 자신이 하던 작업 멈추지 x
async : 결과 바로 처리 x
-> 자신의 일이 끝나면 그떄서야 처리
감정 회고
- 오늘부터 다시 선릉 캠퍼스! 난 잠실이 좋은데.. 흑흑
- 펀잇 오픈 이벤트 당첨자를 정하고 공지했다
- 폭풍같은 5차 데모가 지나서 그런가 꽤나 평화로웠던 날..?!
- 동기비동기 어렵네..