들어가기 전 이 글은 핵심 이론부터 프로그래밍 실습까지 분산 컴퓨팅을 읽고 정리한 글입니다. 요약 분산된 서버들끼리 네트워크 상에서 메세지를 주고 받으며 작업하는 것을 분산 컴퓨팅이라고 함. 비동기 통신은 네트워크를 통해서 보내진 메세지가 정해진 시간 내에 상대 서버에 전달되는 것을 보장할 수 없음을 의미함. 비동기 통신으로 메세지를 주고 받는 두 서버는 완전한 합의에 이를 수 없음. (무한히 상대방의 응답을 기다림) 두 장군 이야기 실생활에서 일어날 법한 분산 컴퓨팅 관련 예시를 공부해보자. A장군 / B 장군 / 적이 존재함 A장군 / B 장군은 협공해야 적을 섬멸시킬 수 있음. A장군 / B장군은 적을 섬멸하기 위해 반드시 협공을 해야한다. 전화 같은 것이 없기 때문에 사람을 보내 '협공 요청'을 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item40 요약 파이썬에서는 부모 클래스가 자동으로 초기화 되지 않는다. 다중 상속보다는 믹스인 클래스로 합성해라. 다중 상속을 사용할 경우, 메서드의 실행 순서는 mro를 따른다. (Class.mro() 호출한 순서대로 메서드가 호출됨). [부모 클래스].__init__()를 이용해 직접 부모 클래스를 초기화 할 수 있다. mro 순서와는 다르게 부모 클래스가 초기화 됨. (개발자에게 혼란을 가져옴) 이렇게 할 경우, 다이아몬드 상속에서 부모 클래스가 여러 번 초기화 된다. (개발자에게 혼란을 가져옴) 부모 ..
들어가기 전 이 글은 이펙티브 파이썬을 공부하며 작성한 글입니다. 코드 : https://github.com/chickenchickenlove/effective-python/tree/master/item66 요약 contextlib.contextmanager 데코레이터를 이용하면 __enter__, __exit__ 구현없이 with 절에서 사용할 수 있음. with 절은 with절 블록 안과 밖을 격리시키는 역할을 함. 다음 의미를 가짐. With절 안쪽은 특별한 Context를 가지고 실행됨을 의미함. With절 안 / 밖은 서로 다른 Context에서 실행됨. contextmanager 데코레이터를 사용한다면, try ~ finally와 yield를 함께 사용해줘야 함. contextmanager를 ..
요약 중첩 Case 문을 사용하는 것은 코드를 읽기 어렵게 만듦. 중첩 Case 문의 컨텍스트를 유지할 필요가 없다면, Case문에 Case를 중첩하지 말고 메서드로 빼서 Flat한 Case를 만드는 것이 좋을 것으로 판단됨. 함수로 풀어내기 이 코드는 리트코드 72번 문제를 풀면서 작성한 코드다. sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-> {abs(I2-I1), DP}; sol(W1, W2, I1, I2, DP) -> {NewT1, NewDP} = case get(I1, I2, DP) of none -> case maps:get(I1, W1) =:= maps:get(I2, W2) of true -> sol(W1, W2, I1-1, I2-1, DP); _..
1. 가드 절에는 다양한 함수가 올 순 없음 가드 절에서는 사용자 정의 함수를 사용할 수는 없다. 가드 절에서 사용할 수 있도록 정의된 몇몇 함수만 호출할 수 있다. 2. If 절에서 마지막 부분은 항상 true로 처리 case ... of 문을 이용할 때, '아무거나 와도 상관없음'을 '_'로 표현했지만, If절은 'true'로 처리한다. If절은 패턴 매칭이 아니라 true / false를 판단하기 때문인 듯. 3. 함수와 클로저 handle_regular_file(Name, Queue) -> case filename:extension(Name) of ".erl" -> {continue, Name, fun() -> dequeue_and_run(Queue) end}; _NonErl -> dequeue_..