About me (Detail ver.)

성장해왔고, 앞으로도 성장한다.

초등학교 시절, 우연히 사설 게임 서버를 접하게 되었습니다. 사설 게임 서버를 플레이하던 중 내가 직접 서버를 운영해야겠다고 생각하게 되었고 그렇게 제 인생에서 개발이란 것을 처음 경험하였습니다. 그 뒤로 개발이란 것이 점점 흥미롭게 다가오기 시작했고 초등학교 5학년 때부터 이어진 개발자의 꿈은 지금까지 끝나지 않고 앞을 향해 달려가고 있습니다.

"초등학생 때부터 IT에 상당한 관심을 가져왔으며 실제로 네트워크와 코딩, 리눅스, 데이터베이스 등을 배우며 재능을 키움. 또한 컴퓨터 관련 학생 단체에서 세미나와 워크숍에 참여하면서 활발히 활동을 하고 있고 서버 호스팅 업체를 운영 해 봄으로써 컴퓨터 서버관리자가 되기 위한 역량을 꾸준히 기르고 있음."
(고등학교 생활기록부 일부발췌, 2016)

게임 서버를 운영하며 새로운 기능을 만들어내기 위해 학교를 제외한 시간에는 개발에만 몰두하였습니다. 오죽하면 부모님은 주구장창 게임을 한다 생각해서 부모님과 사이가 좋지 않았던 적도 있었을 정도였습니다. 하지만 개발이 그 무엇보다 재미있었고 내가 해야겠다 다짐한 것은 무조건 해야 했기 때문에 뒤돌아보지 않고 달렸습니다.


개발 첫걸음

제가 개발을 처음 시작한 초등학교 5학년(2011년)에는 지금처럼 개발에 대한 정보를 얻기 쉬운 환경은 아니었습니다. 물론 제 검색 능력이 더 발전한 것일 수도 있지만 그때 당시를 회상해보면 정말 힘들게 배웠던 것 같습니다. 기능을 개발하려면 Java를 알아야 했고 Java 를 하기 위해 C부터 해야 한다는 정보를 얻어 C언어의 포인터까지 습득하는 데 근 1년은 걸린 것 같습니다. 물론 포인터도 제대로 이해하지 못한 채로 중학교에 입학해서 이해했을 정도였고요. 중학교에 입학하고 나서부터는 여러 가지 사건을 마주하고 해결해 나갔습니다.


Dos 공격(UDP Flood)

게임 서버의 특성상 UDP 프로토콜을 개방할 수밖에 없었습니다. 그 취약점을 알고 있고 서버에 불만이 있는 악성 유저들이나 경쟁 서버 운영자들은 게임 서버에 Dos 공격을 하기 시작했습니다. 서버가 마비되고 유저들이 불만을 품기 시작했습니다. 방법을 찾아야 했고 언제나 그래왔듯 검색을 통해 해결법을 찾았습니다. 처음엔 CMD에서 netstat 커맨드를 사용해 공격자의 아이피를 찾아냈습니다. 하지만 더 좋은 방법인 WireShark를 사용해 패킷을 확인하는 법을 찾았고 와이어샤크를 통해 공격자의 프로토콜과 아이피를 손쉽게 찾을 수 있었습니다. 모니터링을 하던 중 공격이 들어오면 와이어샤크에서 얻은 정보를 통해 방화벽에서 인바운드 정책을 수정하여 아이피를 손수 차단하는 방식으로 공격을 방어 하였습니다.


DDos 공격

공격자들의 공격 기법은 날로 발전했고, 어느 순간부터는 DDos 공격이 들어오기 시작했습니다. 공격자(숙주)의 IP는 패킷으로 찾을 수 없고 수많은 좀비 PC의 IP만 와이어샤크에 찍힐 뿐이었습니다. 모니터링을 통해 수많은 좀비 PC IP를 차단할 수도 없는 노릇이었습니다. 또 방법을 생각해내야 했습니다. 이때 저는 좋은 아이디어를 떠올렸습니다. 그때 당시 집에 컴퓨터가 2대가 있었는데, A 컴퓨터에서 서버를 구동 하던 중에 DDos 공격이 들어와서 서버가 마비되면, B 컴퓨터에 있는 서버 구동기를 실행하고 도메인 서버의 대상 IP를 A 컴퓨터에서 B 컴퓨터로 수정해서 서버를 운영하는 방식이었습니다. A 컴퓨터와 B 컴퓨터의 서버 관련 파일은 N드라이브(현 네이버 MYBOX)를 사용해서 실시간 동기화를 했었습니다. (지금이었다면 당연히 서버 데이터를 DB를 사용했겠지만, 그때의 사설 게임서버들은 .txt를 사용해 데이터를 저장하는 것이 일반적이었습니다) 효과는 성공적이었으나 한가지 문제점이 있었다면 효과적으로 B 컴퓨터로 공격을 우회한 뒤에 A 컴퓨터의 물리적인 랜선 분리라든지 공격 IP 차단과 같은 절차를 진행했어야 하는데 그때 당시의 생각으로는 여기서 차단과 같은 행동을 하게 되면 공격자가 다시 B 컴퓨터로 공격을 시도할 것 같았습니다. 그래서 과부하가 지속해서 일어나도 놔뒀었는데 이 결과 아파트 동 전체 인터넷이 끊겼던 적도 있었습니다. (트래픽이 너무 많이 들어와서 ISP에서 차단했었다고 알고 있었습니다) 이때 고안했던 이 방식이 지금의 로드 밸런싱과 같은 맥락이라고 생각하면 참 좋은 경험을 했었던 것 같습니다.


교내 Wifi

그때 당시 저는 데이터가 무제한이었습니다. (물론 400kbps..) 친구들은 데이터가 없어서 매일매일 저한테 핫스팟을 켜달라고 했었습니다. 그때 문득 또 생각을 하나 하게 됐습니다.

집에서 와이파이 공유기로 와이파이를 사용하는데, 학교에서도 똑같이 하면 되잖아

그렇게 와이파이 공유기를 가져와서 무작정 교실 랜선을 WAN 포트에 꽂았습니다. 와이파이가 터졌습니다. 근데 인터넷이 연결되지 않았습니다. 그래서 또 방법을 찾았습니다. 찾고 또 찾아보니 공인 IP와 서브넷 마스크, IP 할당이라는 개념을 찾게 되었고, 교내 IP대역을 찾아낸 다음 공유기 설정에 네트워크 대역을 설정하고 호스트 대역은 무작정 대입해보면서 인터넷이 터질 때까지 대입하였습니다 (학교의 서브넷 마스크는 255.255.255.0 이었고 난 .0 부분에서 현재 사용되지 않는 번호만 찾으면 됐었다.) 결국에 wifi 동작에 성공했고 며칠간 우리 반 친구들은 와이파이를 쓸 수 있게 되었다. 그것도 잠시, 며칠 뒤에 정보 선생님이 날 호출했고 보안 감사 이야기를 하면서 내가 징계를 받을 수도 있다는 말씀을 하셨다. 그래도 다행히 공유기를 자신에게 반납하는 조건으로 무마했다.. (근데 그 공유기 정보 선생님이 가져가서 자기 수업 때마다 애들 와이파이 터트려줬다.. 허가 받은 건가)


서버 호스팅 운영

점차 게임 서버에서 관심은 서버 쪽으로 더 깊어지게 되었고, 게임 서버를 운영하는 것이 아닌 게임 서버 구동 프로그램을 위한 서버 호스팅을 직접 운영해보자는 생각까지 하게 되었습니다. 물론, 지금 보면 주먹구구식으로 하찮게 운영한 건 분명하지만 그때는 누구보다 열심히 운영했다고 생각합니다. 호스트 플래닛이라는 간이 사업자 신고를 하게 되고 MS Azure 에서 비즈니스 구독인 Bizspark 구독을 받아 VPS 를 만들 수 있게 되었고 여러 개의 VPS를 통해 여러 게임 서버들을 호스팅 해주었습니다. (그때 당시는 이러한 사람을 돌리미 라고 칭했습니다.) 호스트 플래닛을 운영하면서도 여러 가지를 배우게 되었습니다. 서비스 운영을 위해 홈페이지를 구축(물론.. 부트스트랩 + PHP 였지만요..) 해보고 클라우드 서비스의 개념, 네트워크, DB 등 게임 서버를 운영할 때보다 한층 더 깊은 내용들을 몸소 배울 수 있는 경험이었습니다. 아쉽게도 대학교 1학년 군대 가기 전 폐업했습니다. (수익을 기대하고 했던 사업이 아니라 순전히 재미와 경험을 위해 했던 것이었습니다)

.
.
.

이런 경험을 기반으로 컴퓨터소프트웨어공학과를 전공으로 해서 아직도 성장해나가고 있습니다. 저는 제가 잘한다고는 절대 생각하지 않습니다. 그래도 누구보다 값진 경험을 많이 해왔다고는 자부할 수 있습니다. 단순히 경험에서 끝나는 것이 아닌 이것들을 접목할 수 있는 실력을 키워 성장해나가는 개발자가 되기 위해 오늘도 한 걸음 앞으로 나아갈 것입니다.