Playdata 데이터 플랫폼 엔지니어 양성과정 부트캠프 후기

해당 글은 지난 2022년 Playdata 부트캠프에서 진행한 내용을 회고하는 내용입니다.

 

부트캠프 참여하기까지

대학교 3학년 올라갈 때 쯤 주변에서 빅데이터에 관한 얘기가 자주 들려왔습니다. 빅데이터가 뭐길래 이렇게 난리인가 궁금증이 생길 때 마침 전공과목으로 데이터 분석을 수강할 수 있었습니다. 데이터 분석을 배우면서 흥미가 생겼고 더 깊게 알고 싶어져서 따로 *K-MOOC에서 지원해주는 '빅데이터의 세계, 원리와 응용'라는 강의를 들었습니다.

 

대학교 4학년이 되어 AI와 자연어 처리 과목을 수강했습니다. 데이터를 추출 및 분석하는 프로젝트를 진행하면서 데이터를 통해 패턴을 파악하고 새로운 가치를 찾는 과정이 굉장히 매력적으로 느껴졌습니다. 데이터 분야로 취직하기로 마음먹은건 바로 이 시점이였습니다. 저는 제대로 준비하기위해 이론지식과 스펙을 쌓고자 ADsP(데이터분석 준전문가)와 데이터분석기사 자격증을 취득했습니다. 그리고 실무경험을 쌓고 싶어서 공공데이터 인턴에 참여했습니다.

 

이때까지만 해도 내가 빅데이터 분석을 하는 분석가가 되고 싶은건지 아니면 데이터를 다루는 개발자(백엔드, 데이터 엔지니어)가 되고 싶은건지 확신이 안들었습니다. 솔직히 둘다 하고싶었거든요.

 

그렇게 고민을 하고 있다가 인턴 동료를 통해 부트캠프에 대해 알게되면서 데이터 관련 부트캠프를 찾아 보게되었습니다.

 

그 당시만 해도 데이터 엔지니어링 과정이 별로 없었지만 제가 원하던 데이터 분석 & 엔지니어링을 모두 배울 수 있는 과정을 발견했습니다. 바로 Play Data(Encore)에서 주관하는 '프로젝트 기반 빅데이터 엔지니어 양성과정 부트캠프' 입니다. 웹, 데이터 엔지니어링, 데이터 분석 등의 커리큘럼이나 배웠던 내용을 기반으로한 다수의 프로젝트 진행방식도 맘에들었습니다. 여기서 '내가 무슨일을 하고싶은지 확실해지지 않을까?' 라는 기대에 부풀어 부트캠프에 참여하게 됩니다.

 

 

* K-MOOC

K-MOOC은 온라인을 통해서 원하는 강좌를 무료를 들을 수 있는 온라인 공개 강좌 서비스입니다.

개인적으로 대학교 수업보다 K-MOOC에서 배운 빅데이터 과정이 기초를 잡는데 도움이 많이된 것 같습니다.

본인이 관심있는 분야가 있고 해당 분야에 대해 알고싶다면 K-MOOC에서 제공해주는 강의를 들으셔도 좋을것같습니다.

http://www.kmooc.kr

 

 

 

 

부트캠프 입성 후

1) 부트캠프 교육 및 프로젝트 진행 과정

다음과 같은 순서로 진행되었습니다.

  1. CS기초
  2. JAVA 프로그래밍
  3. WEB - HTML, CSS, JS, JSP, Servlet
  4. DB - MySQL
    • 미니 프로젝트1 (5 day) - MVC2 패턴 Web개발
  5. WEB - Spring, Spring Boot
  6. Linux - CentOS
  7. DB - MongoDB
  8. Hadoop - HDFS, MapReduce
    • 미니 프로젝트2 (5 day) - Spring활용한 Web개발 / NoSQL DB 및 비정형 데이터 활용 / Hadoop 분산 저장
  9. Restful API
  10. Hadoop ecosystem - Hive, Flum, Sqoop
  11. Spark - SparkSQL, SparkStream, UDF
    • 미니 프로젝트3 (14 day) - 실시간 데이터 처리 / Rest API 활용한 back-end 서버 구축
  12. Python 프로그래밍
  13. Flask 서버 구축
  14. Data Analysis - 기술통계, ML, DL
  15. Cloud - AWS
    • 파이널 프로젝트 (4 month)- 데이터 분석 플랫폼 구축 
    • 교육 처음부터 멘토님과 함께 진행된 멘토링 프로젝트, 3개월 동안 설계 후 1개월 동안 구현을 진행함

작성해 보니 6개월 동안 정말 다양한 내용을 배웠던것 같네요. 그만큼 기술을 빨리 습득하고 적용시키는 능력을 키울 수 있었던 것 같습니다. 교육을 들으면서 프로젝트를 진행할 때 마다 퀄리티가 올라가는게 느껴져서 뿌듯했던 기억이 새록새록하네요.

 

2) 알고리즘 Study

교육과 프로젝트 이외에도 꾸준히 알고리즘 공부를 진행했습니다. 학원 측에서 강의와 문제를 제공해주었고 2번의 모의고사를 통해 그 동안 공부한 실력을 확인 할 수 있었습니다.

그리고 알고리즘 Study를 만들고 주마다 문제를 풀고 코드리뷰를 하는 시간을 가졌습니다. 내가 짠 코드를 설명하는게 왜 그렇게 어렵던지... 스터디를 참여하면서 내가 한 코딩에 자세하게 주석을 다는 습관을 가지게 되었습니다.

 

 

팀 프로젝트

총 4번의 프로젝트를 진행했어요.

 

1) 중고거래 E-Commerce 웹사이트 (21.12.20 ~ 22)

(https://github.com/ih-tjpark/Playdata_E-Commerce_website)

  • 주제: 회원들 간 중고상품 거래 웹사이트
  • 목표
    • MVC패턴2 방식을 적용해 웹서비스 구현
    • Model - View - Controller 역할을 각자 담당해 개발하기
  • 내 역할
    • Front-end: JSP를 활용해 배너 페이지, 메인 페이지, 상세 정보 페이지, 로그인 페이지 구현, 게시글 페이징 기능 구현
  • 후기
    더보기
    처음 배운 웹개발로 처음보는 팀원들과 처음 진행한 프로젝트라 의미가 더 깊네요. 이게 3일 만에 구현한거라면 믿어지시나요??
    팀원들과 밤새도록 고생해서 만들었는데, 지금도 어떻게 할 수 있었는지 신기하네요.

    MVC를 확실히 나눠서 역할을 맡고 저는 모두가 하기 싫어했던 View 즉, Front end를 해보기로 했습니다. DB, Back-end는 경험이 조금 있었지만 front-end는 안해봤기 때문이죠. 왜 기피하는지 찍어 먹어봐야 직성이 풀렸던 저는 자청해서 front-end를 맡게됩니다. 그것이 고통의 시작이 될 줄은...

    저희 웹사이트는 게시판 CRUD, 회원가입, 파일 등록 등의 간단한 기능이 있는 웹사이트 였습니다. 상단의 nav bar와 검색창을 인클루드로 계속 표시하게 했고 게시글, 게시글 상세, 로그인 페이지 그리고 게시글 페이징 기능을 구현했습니다.

    조금이라도 front 요소가 틀어지면 불편해지는 성격때문인지 심적으로 힘들었던 기억이 있습니다. 경험에 비해 하고 싶은것이 많아 이것저것 적용을 해보면서 내 마음처럼 한번에 되는게 없었습니다 😭

    그래도 해당 프로젝트를 통해 JSP, JSTL을 활용해 데이터를 다루는법과 Controller와 Servlet그리고 Model을 활용해 데이터를 주고받는 과정을 이해할 수 있었습니다. 아 물론 front-end 요소를 구성하고 컨트롤하는 방법도 말이죠 😂

 

2) IT취업 정보 대시보드 (22.02.01 ~ 07)

(https://github.com/ih-tjpark/Playdata_IT_Recruiting_Visualizing)

  • 주제: IT시장을 기반으로 직군별 기술, 우대사항, 자격조건, 요구경력등에 대한 데이터 ETL 및 파이프라인 구축과 대시보드 웹사이트 구현
  • 목표:
    • Python을 이용한 Data ETL Pipeline 구축
    • Hadoop을 이용한 데이터 분산 저장 및 MapReduce를 활용한 WordCount기능 구현
    • Spring - MongoDB 연동 및 데이터 조회 기능 구현
    • Bootstrap template활용 및 Morris.js 차트 시각화 구현
  • 내 역할
    • Back-end: Spring Data를 활용한 Spring-MongoDB연동 및 검색 기능 구현
    • Front-end: Bootstrap template 적용 및 커스터마이징, 차트 데이터 연동 및 시각화 구현
  • 후기
    더보기
    Spring, MongoDB, Hadoop 등을 배우면서 비정형 데이터를 수집, 처리, 저장하고 서비스를 구현해보는 Project를 진행했습니다.

    이번 프로젝트는 데이터ETL과 Hadoop 분산 저장, NoSQL DB사용, Spring Web이 핵심포인트입니다.

    Programmers의 채용공고를 Selenium을 사용해 Crawling 후 hadoop에 분산저장을 해 data lake를 구축했습니다.
    data를 수집하는 과정에서 저희 팀은 Hadoop의 필요성에 대해 많이 고민했습니다. data의 크기가 크지 않기 때문에 분산저장이 굳이 필요하지 않았기 때문입니다. 하지만 사용 경험을 우선으로 생각했고 하둡의 Mapreduce기능을 활용해보고자 했습니다. 

    그래서 저희는 hadoop에 저장 시 Mapreduce를 활용한 wordcount를 진행하고 해당 데이터를 MongoDB에 적재하는 작업을 구현했습니다. 그리고 IT공고관련 텍스트 데이터를 전 처리 후 MongoDB에 적재하고 관리했습니다.
    
    저희팀은 회의끝에 위와 같이 데이터 파이프라인을 설계했고 저는 그렇게 적재된 MongoDB의 데이터를 Web에서 활용할 수 있도록 Back-end 기능을 구현했습니다. Spring Data JPA를 사용해 MongoDB와 데이터를 조회 및 aggregation을 했습니다. View와 명령과 데이터를 주고받을 수 있도록 Controller와 business logic을 구현했습니다.


    그리고 1차 프로젝트에서 말안듣는 front에 호되게 당했던 저는 프론트엔드 개발을 빠르고 쉽게 할 수 있는 Bootstrap 프레임워크를 적용했습니다. bootstrap을 사용하면서 구석기 시대의 원시인에서 한 단계 진화한 기분이랄까.. 암튼 입맛에 따라 재사용할 요소를 제공해줘서 편하게 front를 구현할 수 있었습니다.

    이번 프로젝트는 데이터 파이프라인 설계 시 데이터의 특성과 양에 따라 사용해야하는 기술 스택에 대해 깊게 고민해보는 시간이 되었습니다. 그리고 Spring을 통해 web을 구현하면서 IoC(제어반전), DI(의존성 주입), AOP(관점 지향적 프로그래밍)등의 다양한 개념을 학습하고 적용해볼 수 있었습니다.

 

3) 2022 대선 실시간 감성 분석 웹사이트 (2022.02.14 ~ 28)

(https://github.com/ih-tjpark/Playdata_Real-Time_Sentiment_Analysis)

  • 주제: 대선관련 실시간 트윗을 키워드 추출 및 감성분석 후 시각화를 하는 웹페이지
  • 목표
    • Spark를 활용한 실시간 데이터 수집, 분석, 저장 Pipeline 구축
    • Hadoop을 활용한 분산 저장 및 datalake구축
    • Web - Spark Server Rest API 기능 구현
    • Rest API를 활용해 비동기 Web Front-end 구현
  • 내 역할
    • 데이터 수집: tweepy(Twitter API)와 TCP를 이용해 실시간 데이터 수집
    • 데이터 처리: 텍스트 클렌징 및 형태소 분석 등 텍스트 전처리 진행
    • 데이터 저장: 분석 결과 Mysql에 저장, Structured Streaming을 활용해 배치로 Hadoop 저장 구현
    • Back-end: Spark 실시간 분석 기능 on/off기능 Rest api로 구현 
  • 후기
    더보기
    개인적으로 가장 재밌었던 프로젝트로, 당시 2022년 대선이 얼마 안남았기에 저희 팀은 대선 후보별로 사람들이 어떻게 생각하고 있는지 알 수 있는 웹페이지가 있으면 좋겠다 생각했습니다.

    그렇게 저희 팀은 실시간으로 수집한 데이터를 처리하고 분석해 web에 시각화하는 프로젝트를 설계했습니다.

    Twitter API(tweepy)를 활용해 무료로 실시간으로 데이터를 받아올 수 있었습니다. (tweepy 현재 유료)

    Spark를 활용해 수집, 처리, 분석하는 역할을 맡아 진행하면서 당시에 자료가 많이 없어 고생을 많이 했었습니다. 구글링과 공식문서를 보면서 차근차근 진행했지만 저희 팀이 하려고 했던 방식의 방식이나 예시를 설명해주는 곳은 없었습니다. 결국 공식문서에서 spark structured streaming상태에서 복잡한 데이터 처리와 분석을 지원해주지 않다는 걸 찾았고 좌절했었지요🥲

    결국 저희는 python library를 사용해 처리/분석했고, spark의 이점인 분산 처리를 사용하지 못했습니다. 그나마 저장 방식을 spark 스트리밍 배치로 저장해 디스크 i/o를 줄이는 작업으로 spark를 사용할 수 있었습니다. 

    하지만 대선관련 트윗을 k-means 군집분석을 통해 어떤 키워드들이 언급되고 있는지 시각화 하고 각 대선후보에 대한 트윗을 감정분석을 통해 시각화를 해보면서 기능적으로 의미있는 프로젝트를 진행할 수 있었습니다.

    아쉽기도하고 나름 만족하기도 한 이번 프로젝트는 기술스택의 원리와 이점을 제대로 파악하고 적용하는것의 중요성을 알게되는 좋은 계기가 되었습니다.

4) 키워드 기반 제주 관광지 추천 웹사이트 (2022.01 ~ 2022.04)

(https://github.com/ih-tjpark/Playdata_JEJU_Tour_Recommend)

  • 주제: SNS, Blog 데이터를 활용해 키워드 및 챗봇 기반의 제주 관광지 추천 플랫폼
  • 목표
    • 주기적인 SNS, Blog 데이터 ETL Pipeline, Data Lake, Data Warehouse 구축
    • 관광지 관련 키워드 추출, 키워드와 관광지 연관 분석, 챗봇을 활용해 관광지 추천 시스템 구현
    • 사용자의 Web사용 로그 저장 및 시각화
    • React로 비동기적 Web Front-end 구현
  • 내 역할
    • Cloud: AWS EC2환경 구축 (Hadoop, MongoDB, Elasticseach)
    • 데이터 수집: 관광지관련 SNS글, 공공데이터 및 관광지관련 웹사이트 Scrapping
    • 데이터 처리: 텍스트 데이터 전처리 (불용어 처리, data join)
    • 데이터 분석: 형태소 분석(여러 형태소 분석기 성능비교 진행), 텍스트 키워드 추출 및 연관 분석(BERT, Word2Vec), 중요 키워드 추출 알고리즘 구현, 키워드 추천 시스템 구현
    • 데이터 저장: Web Service에 필요한 관광지 Meta Data를 MongoDB에 저장 및 관리
    • 사용자 로그 활용: Spring to Elasticsearch log저장 방식 구현, 실시간 클릭 순위 back-end 기능 개발, Kibana를 활용한 log 데이터 시각화
  • 후기
    더보기
    이번 프로젝트는 부트캠프에 참여한지 약 한달뒤 부터 시작한 멘토링을 기반으로 총 4달 동안 진행된 프로젝트입니다.

    저희 멘토님은 설계와 산출물 관리를 굉장히 중요하게 생각하셔서 요구사항정의서, 유스케이스, 목업, 시스템 흐름도, 아키텍처 등의 설계 산출물을 꼼꼼히 작성하는 법을 가르쳐주셨고 그것을 토대로 멘토링이 진행되었습니다. 약 3달간 주에 한번씩 온라인으로 만나 설계를 마치고 마지막 1달은 구현과 테스트를 진행했습니다.

    프로젝트 주제를 선정하는 것에 시간이 가장 많이 소요되었고 주제가 선정된 후 빠르게 진도를 나아갔습니다. 

    저희팀은 제주도 관광지를 키워드와 챗봇 기반으로 추천해주는 웹사이트를 주제로 선정했습니다.

    처음부터 키워드와 챗봇 기반으로 추천을 생각했던것은 아니었습니다. 사용자의 행동을 기반으로한 협업 필터링을 통해 사용자의 관광 패턴이나 평점을 기반으로 다른 사용자에게 콘텐츠를 추천해 주고 싶었지만, 저희에겐 가장 중요한 관광지 평가 데이터를 쉽게 구할 수 없었습니다.

    이제 만들어진 사이트는 당연히 사용자가 없었고 그렇기에 데이터도 없었습니다. 그러면 어떤식으로 추천을 해줄 수 있을까 고민을 하다가 사용자에게 관심있는 관광지에 대한 정보를 받아 그 것을 토대로 추천을 하는 방법뿐이었습니다. 마치 넷플릭스에 처음 가입하면 어떤 영상에 관심이 있는지 평가받는것 처럼 말이죠.

    하지만 그런 서비스와 차별화를 원했고 관광지와 관련된 키워드를 줘서 선택할 수 있으면 좀 더 선택폭이 넓어지지 않을까 생각했습니다. 그래서 사용자에게 관광지 관련 키워드를 선택할 수 있도록 했고, 선택된 키워드를 통해 관광지를 추천하고자 했습니다. 그리고 원하는 키워드가 없을 수 있어 챗봇을 통해 관광지를 추천받을 수 있도록 했습니다.

    그렇게 저희 프로젝트의 추천시스템은 키워드가 키포인트가 되었습니다. 저는 이런 키워드 기반 추천 시스템을 구현하는 역할을 맡게되었고 다양한 blog와 SNS에 관광지 관련 데이터를 수집 후 처리 분석을 진행했습니다.

    BERT를 활용해 텍스트 임베딩을 진행하고 유사도 분석과 다양한 키워드를 추출할 수 있는 알고리즘을 적용해 관광지 관련 의미있는 키워드를 추출했습니다. 그리고 해당 키워드들이 관광지와 얼마나 관련있는지 연관분석을 진행했습니다. 해당 과정에서 관광지와 관련있는 키워드에 더 가중치를 주는 알고리즘을 구현하는 등 정확도있는 결과를 위해 노력을 많이 했습니다.

    그리고 저는 추후에 사용자 행동기반 추천을 생각해 사용자 로그를 수집 저장하는 elasticsearch를 도입하고자 했고, 교육과정에 없던 elasticsearch를 따로 학습하고 시스템에 도입했습니다. 처음에는 수집 저장 후 시각화까지 생각했지만 조금 더 욕심이 생겨 어쩌다보니 사용자들이 많이 클릭한 관광지 또는 검색어를 보여주는 랭킹 기능까지 구현했습니다.

    오랜기간 준비한 만큼 원하는 내용으로 원하는 기술을 사용해 볼 수 있었던 프로젝트였습니다. 오랜기간 준비한 설계를 토대로한 산출물로 어려움 없이 구현할 수 있었고, 좀 더 욕심을 부릴 여유가 생겨 ELK, Airflow등의 기술 스택을 배우고 적용해볼 수 있었습니다.

    산출물 관리에 대한 중요성과 추천 시스템에 대한 이해를 높일 수 있었고 elasticsearch의 활용 방법과 색인 등의 이점을 알 수 있었습니다. 추후에 주기적으로 데이터를 수집, 처리 후 모델을 학습시키는 pipeline을 추가하고 시스템에 적용시키는 작업을 자동화하는 MLops를 진행해보려고 합니다. 

 

후기

6개월 간 Web개발, 데이터 처리/ 분석, 시스템 운영등을 학습하고 프로젝트를 통해 적용시켜보면서 다양한 기술을 경험해 보았습니다.

 

전반적인 강의는 만족하지만, 데이터 엔지니어링 기술 스택의 강의는 미흡

강의에 대한 평가를 해보자면 Java, Web개발, DB는 정말 잘 가르쳐 주셨습니다. 하지만 Hadoop, Spark등의 기술에서는 실습을 진행하면서 막히는 곳이 많아 강의 시간 중 디버그와 해결방법을 찾는 시간이 더 많았습니다😂.

그 당시 타 부트캠프에서 Hadoop이나 Spark같은 기술스택을 다루지 않았었어요. 그래서 이 부트캠프를 선택했고 데이터 엔지니어링과 관련한 기술 스택을 배우길 기대했지만 강사님이 잘 모르시니 좀 당황스러웠어요. 시간이 좀 지나서 원할히 진행이 되었지만 아쉬운건 어쩔 수 없는것 같습니다.

하지만 강의 중 안되는 부분을 같이 찾아가는 재미(!?)가 있었고 방법을 찾고 해결해 보면서 더 기억에 오래 기억되더라구요 ㅎㅎ

그 외에는 알고리즘 학습자료와 다양한 주제의 특강, 수료 후 컨설팅 등 다양한 지원을 받을 수 있어서 좋았습니다.

 

 

팀원이 중요!!

부트캠프에서 가장 만족했던건 팀 프로젝트였습니다.

저는 감사하게도 팀원들은 비슷한 나이였고 신기하게 모두 같은 대학을 나왔었어요. 그래서 쉽게 친해졌고 모두 열정이 있던 팀원들이어서 서로 의지하며 프로젝트를 진행했습니다.

하지만 몇몇 팀은 부트캠프에 집중하지않고 다른걸 하는 사람, 학습에 의욕이 없는 사람들이 있었고 그런 팀은 프로젝트 결과물에서 부터 아쉬움이 보였습니다. 프로젝트 결과물이 별로면 부트캠프의 전반적인 만족도도 당연히 떨어질거구요. 그래서 무엇보다 같이하는 팀원이 중요하다고 생각합니다. 특히 이런 다수의 프로젝트를 기반으로 한 부트캠프면 더더욱!

 

 

수료 후

마지막 프로젝트를 끝내고 수료증을 받으면서 교육을 수료했습니다. 그 후 약 1개월 넘게 취업 컨설팅을 받았습니다. 전문 컨설턴트가 도움을 주셨고 제게 도움을 주신 컨설턴트는 친절하고 정성스럽게 이력서와 면접준비를 도와주셔서 다행히 2개월 내로 취직을 할 수 있었습니다.

 

 

이상으로 아득해지는 기억을 붙잡아 작성한 Playdata 데이터 플랫폼 엔지니어 양성과정 부트캠프 후기를 마무리 하겠습니다.