2015년 4월 19일 일요일

네트워크에서 블러킹 방식과 넌블러킹 방식

소켓의 동작모드에는 블러킹, 넌블러킹 그리고 비동기(asynchronous) 모드 세 가지가 있다.

블러킹 모드의 소켓이란 이 소켓에 어떤 소켓 관련 시스템 콜을 호툴하였을 때 네트워크 시스템(즉, TCP/IP)이 동작을 완료할 때까지 응용 프로세스가 멈추어 있게(block) 되는 소켓을 말한다.

넌블러킹 모드의 소켓이란, 소켓 관련 시스템 콜에 대하여 네트워크 시스템이 일단 결과를 바로 리턴하여 응용 프로그램이 블록(block)되지 않게 하는 소켓을 말한다. 그렇게 되면 프로그램은 네트워크 작업 이후로 흘러가 버리게 되고, 실제로 서버에서 특정 데이터가 도작되었을 때 지정해 둔 'CallBack' 메소드가 호출되어 처리하는 방식으로 수행된다.

자바 언어에서 지원되는 네트워크는 어느 방식의 프로토콜이든 블러킹 방식이다. 이 경우에는 연결(connection)이 형성되면 서버에서 데이터를 보내거나 받거나 하는 동안에 블러킹 메소드가 호출되면 그 작업이 마무리 되거나 다음 단계로 진행된 때까지 계속 동작을 수행한다. 자바에서 이러한 방식으로 지원이 가능한 것은 언어적 차원에서 멀티스레딩을 지원하기 때문에 새로운 스레드를 생성하고 여기에 이러한 네트워크 작업을 수행시키는 방식이 손쉽게 사용될 수 있다.

C 기반의 모바일 플랫폼에서 단일 스레드로 처리해야 하는 경우가 있으며 이 때는 넌블러킹 방식이 채택된다. 브루 플랫폼이 이에 해당된다.

한편 비동기 모드는 넌 블러킹 모드에서처럼 블럭될 수 있었던 소켓 시스템 콜에 대해서 일단 리턴을 하고 시스템 콜의 해당 동작이 완료되면 비동기적으로(asynchronously) 그 결과를 응용 프로그램에게 알려주는 소켓의 동작 모드이다.

Reentrancy Attack: 블록체인 스마트 컨트랙트의 치명적인 취약점

블록체인 기술이 전 세계적으로 주목받으면서 스마트 컨트랙트(Smart Contract)의 사용이 급격히 증가하고 있습니다. 하지만 그만큼 보안 취약점도 함께 늘어나고 있는데, 그 중에서도 Reentrancy Attack(재진입 공격)은 매우 치명적이고...