IT한 것/Vert.X

Event Driven 방식 서버와 Socket

lovian 2021. 3. 29. 22:38

Windows Message 등의 방식이나 Javascript의 DOM Event 방식을 이미 알고 있었기 때문에, vert.x가 이벤트 방식이라는 것을 알았을때, 그냥 그러러니 했다.

 

그런데 특별한 생각없이 하던데로 Socket 코드를 짜다보니, 뭔가 이상한 증상이 발생했다.

분명히 하나의 Request를 보냈는데, 서버에는 여러개의 Request가 들어가고 데이터가 잘리는 현상이 발생한 것이다.

 

뭐지? 뭐지?

 

한동안 고민했는데, 답은 아주 단순했다.

 

Socket에서 Event Driven이란 Socket Descriptor에 Read, Write 이벤트가 발생하는 것이다.

 

내가 시험했던 클라이언트에서 여러번의 Write를 수행하면서, 서버는 각 Write를 하나의 이벤트로 감지해서, 적절하게 동작한 것.

 

기존의 소켓 개발을 할때는 일종의 Stream 처럼 버퍼를 아끼는 방식으로 개발 하는것이 당연했는데, 오히려 모든 데이터를 묶어서 한번에 보내야하는 방법은 선택해야하는 구조라니 뭔가 돌고 돌아온 느낌이다.

(보통 소켓 개발을 처음 하는 사람들이 하는 방법으로 보내야 할 데이터를 하나의 큰 데이터 버퍼에 담아 송수신 한다. 나만 그런건 아니겠지..??)

 

어쨋든, 꽤 흥미로운 편이다.