평소에 함수형 언어 매니아들이 주장하는만큼 이펙트를 엄격하게 구분하는게 중요하다곤 생각안했는데, local first 앱을 만들다가 네트워크 요청을 포함한 IO와 그렇지 않은 IO를 구분해야하는 이유를 찾았다. 앱의 초기화 로직에 네트워크 요청이 숨어있으면 API 서버 장애시 앱이 아예 안켜지는 문제가 있다. 방금 이거랑 관련된 버그 찾느라 시간을 많이 썼다.
If you have a fediverse account, you can reply to this note from your own instance. Search https://hackers.pub/ap/notes/019749ff-d890-7560-8eea-5326695a4f64 on your instance and reply to it.
@bglbgl gwyng 사이드 이펙트에 자비를 베풀면 안 됩니다.
@bglbgl gwyng 그들은 함수형 언어의 "유저"가 아니라 "매니아"였군요 ㅋㅋㅋ 저는 "매니아"에서 빼주세요. 그냥 저는 "유저" 그것도 아니면 "장기 모범수" 정도인 것 같습니다.
좀더 부연설명을 하자면, 앱 실행시에 API 서버에 네트워크 요청을 보내는건 괜찮다. 하지만 그 요청에 대한 응답을 기다리도록 하면 안된다. API 서버에 장애가 났을때도 앱이 켜지긴 해야하니까 말이다. 그럼 이때, 요청을 보내는 것과 응답을 기다리는걸 구분을 해야하는데, 이건 평범하게 이펙트를 분리하는걸론 달성 못할것이다. 우리가 effectful하다고 하는 것도 결국 함수에 대한 설명으로, 함수는 인자를 주는것과 결과를 받는것이 결합되어 있다. 이 둘을 송신과 수신으로 분리해놓은 세션 타입을 사용해야 내가 원하는 바를 정확히 기술할수 있을거 같다.