대학교 4학년 1학기 재학 중 머리도 안 감고 모자 꾹 눌러쓴 날 갑작스럽게 인턴의 기회가 찾아 왔다.

덥석 물어 잡아 그해 여름 방학부터 인턴을 시작하게 되었다.

힘들지는 않았지만, 날 좌절에 빠지게 만든건.. 

큰 실력 차이, 점점 작아지는 기분, 성적만 좋은 멍청이가 된 느낌.

슬퍼2

고교시절 수능을 본 후 다시는 후회할 짓 하지 말자던 굳은 다짐을 하고, 매 학기 시작마다 직전 학기를 뒤돌아보며 ‘잘했다.’, ‘수고했다.’며 스스로 머리를 쓰담쓰담하며 지내온 대학 생활 3년 반이 ‘좀 더 열심히 할껄..’이란 문장 하나로 다 와르르 무너져 내렸다.

하지만! 초 긍정 마인드로 곧 극복!

슈퍼맨

홀로 속앓이 많았던 인턴 생활동안 어떤 일을 했는지 적어보고자 한다.



난 아직 대학교를 졸업도 안한 새내기이기 때문에 주니어 개발자로서 Big Data관련하여 일명 ‘Storm기반의 Real-Time Stream Processing Prototype’이라는 Storm관련 프로젝트 중 일부분을 맡았다.

그림1 Project Architecture


정확히 말하자면 ‘Storm기반의 Real-Time Stream Processing Prototype’시스템의 성능 테스트를 위한 도구인 Data ThrowerData Receiver 개발을 했다.

이 성능 테스트를 위한 도구를 개발하는 과정이 어땠는지 살펴보려 한다.

과정은 총 4단계로 1)Task 분류, 2)요구사항 작성, 3)설계, 4)구현 순으로 진행했다.



1. Task 분류


1) 일의 전,후 관계를 명확

2) 일의 할당 용이

3) 프로젝트의 총 개발 기간 예상

하기 위해 Task를 분류했다.





그림2 Task Level


분류는 쪼개고 쪼개서 한 사람이 충분히 해낼 수 있는 가장 작은 일을 기준으로 했다.

먼저 상화 차장님을 도와 Task를 분류 했다.

가장 큰 틀로 쪼개니 6개의 제목이 나왔다. 그 각각의 제목들을 한번 더 쪼개니 제목 안에 프로젝트 기간동안 해야할 항목들이 나열되었다. 그 항목들을 바탕으로 Task를 적고 항목들에 대한 목적과 목표를 적었다.


분류를 했으니 프로젝트의 총 개발 기간을 예상하기 위해 하나의 Task를 해결하는데 걸리는 시간을 적어보았다. 큰 프로젝트 개발 경험이 많이 없어서 Task를 해결하는데 걸리는 시간을 예상하기가 쉽지 않았다. 내 나름의 기준을 세우고 예상 시간을 적어야 하는데 해본 것이 많지 않으니 기준을 세우는 것부터 어려웠다.

일단 내가 먼저 적고 부족한 부분은 상화차장님께서 수정해 주셨다.



2. 요구사항 작성


프로그램을 구현할 때 고객이 원하는 바와 다르게 가지 않도록 실수를 줄이고, 고객이 원하는 프로그램을 만들기 위한 고려 사항은 무엇인지 명확히 하기 위해 요구사항을 작성했다.


그림3 Data Thrower 요구사항


요구사항이라는 말 그대로 이 프로그램이 요구하는 것을 생각하며 적었다. 지금 보면 Data Thrower의 기능이 제대로 잘 수행될 경우인 Happy Path에 대한 사항만 적은 것이 좀 아쉽다.



3. 설계


앞서 작성한 요구사항을 바탕으로 프로그램을 어떻게 만들 것인지 구상하며 설계를 했다.


 

그림4 Data Thrower 설계


위의 설계에서는

1) Data ThrowerArchitecture

2) Data Thrower의 기능

3) ,출력 Data 형태

등을 기술했다.


구현 전 위와 같은 작업(Task분류, 요구사항 작성, 설계)을 거치며 처음보다 ‘내가 만들어야할 것이 무엇인가’에 대해 명확하게 머릿속에 정리가 되었다.



4. 구현


다음으로 전 작업에서 만든 요구사항 및 설계를 바탕으로 구현작업에 들어갔다.

먼저 Data Thrower를 개발했다.

그림5 Project Architecture_Data Thrower


그림6 Data Thrower 구조


Data Thrower

1) Data Thrower는 사용자 설정에 따라 일정한 양의 Log Message를 생성

2) 생성된 Log MessageInput Queue에 전송

하는 두가지 기능을 가지고 있다.


1) 앞서 요구사항과 설계를 했다 하여도 막상 이 두 가지의 기능을 구현하자니 많은 기능이 있는 것도 아닌데 막막했다. ‘사용자 설정에 따라’라는데 이건 어떤 식으로 구현해야 하는건지, 일정한 양의 Message는 어떻게 조절하도록 해야할지 고민스러웠다. 그때 주현 팀장님께서 ‘javaProperties라는 Class가 있다’라고 알려주셨다.

Properties Class를 이용하여 Configuration을 만드는 과정은 의외로 간단했다.

(참고 자료 : http://www.okjsp.net/bbs?seq=38761)

잘 알아두면 앞으로도 유용하게 쓰일 것 같다.


2) 사용자 설정에 맞게 Log Message를 생성했으니, Input Queue에 넣어볼 차례이다.

QueueMessage를 넣는 방법은 RabbitMQ 홈페이지 Tutorials1. Hello World!(Java)에 잘 설명되어 있어 참고해서 구현했다.

(http://www.rabbitmq.com/tutorials/tutorial-one-java.html)



그림7 Queue로 데이터 전송하는 예제



막상 구현을 끝내고나니 처음 겁먹었던 것보다 크게 어렵지 않았다고 느꼈다.

이렇게 Data Thrower를 마무리 짓고 다음으로 Data Receiver를 개발했다.



그림8 Project Architecture_Data Receiver


그림9 Data Receiver 구조


Data Receiver

1) Output Queue에 있는 Log Message를 가져옴

2) 가져온 Log Message를 출력

하는 두가지 기능을 가지고 있다.

Data Thrower를 개발한 후라서 Receiver는 어려움 없이 개발 할 수 있었다.

1) Queue에 있는 Message를 가져와서 출력하는 부분도 Data Thrower와 마찬가지로 RabbitMQ 홈페이지 Tutorials1. Hello World!(Java)에 잘 설명되어있다.


(http://www.rabbitmq.com/tutorials/tutorial-one-java.html)



그림10 Queue에서 데이터 받아오는 예제


2) 처음에는 Queue에서 가져온 Message를 파일로 저장했지만 메모리 및 반응 속도가 느려지는 문제 등으로 인해 에코 출력으로 변경하였다.


그림11 Data Receiver Message 출력


-참고 자료-


1. RabbitMQ Homepage

http://www.rabbitmq.com/


2. RabbitMQ Tutorials

http://www.rabbitmq.com/getstarted.html


3. RabbitMQ “Hello World!”

http://www.rabbitmq.com/getstarted.html


4. Properties Class

http://www.rabbitmq.com/getstarted.html

Posted by minji7