플레이데이터 부트캠프 데이터 엔지니어링 트랙 15주차 (9.11~.15)

안인균·2023년 9월 17일
0
post-thumbnail

이번 주차로 벌써 15주나 지났습니다. 이제 슬슬 취업 준비도 해야되고 학습의 난이도가 높아진 만큼 더 많은 노력과 복습이 중요하다고 생각되었습니다.

따라서, 이번주차에는 지난 주차에 이어서 Docker(도커)AWS EC2 인스턴스 를 활용해 모델, 백엔드, 프론트 엔드 서버를 각각 만들어보는 활동과 함께 "데이터 엔지니어링" 분야에서 자주 활용되는 "Hadoop(하둡)""Hive(하이브)" 에 관한 학습이 진행되었습니다.

하둡과 하이브를 이용해 다른 활동은 못하고 도커를 이용해 localhost 에 환경을 구성하는 것으로 끝났지만, 기본적인 이론을 학습하면서 다음 주차 수업에 연장선으로 이어갈 수 있도록 각각에 대해 학습하였습니다.


✅ 이 주의 학습 활동 ✍

  • 지난주에 크롤링한 데이터에서 "줄거리" 컬럼 데이터를 Word2vec 을 이용해 벡터 값으로 DB 테이블에 저장하는 것을 실행했습니다.

    1. Twitter 모듈을 이용해 줄거리 내용에서 단어별로 글을 나누고 이를 기본형으로 전환해서
    2. '명사' 또는 '형용사' 형태의 품사 단어들만 모았습니다.
    3. 이렇게 전처리한 줄거리 단어 데이터들을 Word2vec 모듈을 이용해서
    4. 각각의 값들을 numpy 배열의 wordvector 값으로 저장할 수 있었습니다.
    5. 이후 저장된 값들을 해당 줄거리의 총 단어 수로 나눈 뒤 tostring() 을 통해
    6. DB 테이블에 저장하였습니다.
  • 영화 추천 관련 학습을 진행했습니다.

    • 지금까지 이용한 데이터가 줄거리(synopsis) 데이터 이고, 추출한 컬럼 중 별점과 같은 데이터가 없으므로
    • "콘텐츠 기반 필터링" 을 이용해서 선택한 영화와 유사한 줄거리 내용을 담고 있는 영화를 추천하는 방식으로 진행했습니다.
    • 이를 위해 저장된 wordvector 의 문자로 변환된 값들을 가져와
    • numpy.fromstring() 함수를 이용해 다시 원래의 데이터로 전환할 수 있었고,
    • StandardScaler 를 통해 각각의 값들을 정규화하였습니다.
    • 이후 유클리드 거리 계산법을 통해 선택한 영화와 가장 가까운 영화 TOP3를 추천하는 방식으로 진행했습니다.
    • 수행한 영화 추천 학습 에 대한 구현을 Flask 를 통해 웹 서버에서 진행하도록 구현했습니다.
  • Spring boot 프로젝트를 작성하고 AWS 인스턴스에서 실행하고 있는 Flask 웹 서버로부터 영화 추천 학습을 이용해 데이터베이스 내의 영화에 해당되는 추천 영화 3개를 Json 형태의 데이터로 얻는 과정을 진행했습니다.

    • Controller 에서 HttpPost를 통해 가동중인 Flask 서버에 접근했고,
    • Repository 로부터 불러온 영화 Entity 형태의 데이터 중 "title" 값을 넘겨
    • 해당 영화들로부터 가장 거리가 가까운 영화 3개에 해당하는 제목을 넘겨받아
    • 다시 Repository를 통해 각각의 DB의 모든 컬럼 데이터를 JSON 에 담았고,
    • 최종적으로 박스오피스 TOP5 영화와 각 영화로부터 추천되는 영화 3개씩, 총 15개 영화의 컬럼 데이터들을 JSONArray 형태로 웹에 넘겨주는 구동을 완료했습니다.
  • 또한 ReactJS 를 통해 프론트 엔드를 구성하고 이 또한 마찬가지로 AWS를 통해 따로 서버를 열어 배포하였습니다.

  • 최종적으로

1. Flask 으로 구성된 "영화 추천 모델" 이 담긴 "모델 서버"

2. Spring boot 로 구성된 "DB에 접근하여 모델 서버와 통신" 하는 "백엔드 서버"

3. ReactJS 로 구성된 "프론트 엔드 서버"

를 구성하였고, 각각의 환경 설정을 위해 Dockerfile 을 작성했습니다.


  • Hadoop 에 대한 학습이 진행되었습니다.

    • "하둡"은 빅데이터 저장 시스템으로, 큰 데이터를 블럭(block) 단위로 나누어 여러 대의 컴퓨터에 저장하는
    • 분산 파일 시스템 입니다.
    • 이후 하둡 실행을 위해 "HDFS(Hadoop Distributed File System)" 을 사용했고,
    • 한 대의 PC 밖에 사용하지 못하는 상황이여서 '유사 분산 모드'로 한 서버에서 가짜 파일들을 저장하고 삭제하는 기능들을 시험했습니다.
  • Docker 를 통해 미리 구성된 hadoop_dockerfile.txt 을 사용하여 개인 PC에서 하둡을 설치하는 과정을 진행했습니다.

    • 이전과 달리 "도커 데스크탑" 을 설치해 AWS 인스턴스 서버가 아닌 개인, 로컬 호스트에서
    • Ubuntu 를 설정하고 그 안에 "도커 설치-하둡 설치" 등을 한 컨테이너를 구성했습니다.
    • 해당 환경에서 data.zip 파일을 통해 테스트 데이터 파일을 사용했고
    • Gunzip에 –c 옵션을 통해 표준 출력으로 압축 해제하고, hdfs dfs -put 명령어로 파일을 블록으로 분할해서 "DataNode" 에 분산해서 저장하고 어떤 블록을 어떤 "DataNode"에 저장했는지 장부를 /ledger/weblog 디렉토리에 my_log 파일에 저장하는 등의 실습을 진행했습니다.
  • "Hive" 에 대한 학습을 진행했습니다. 하이브 사용을 위해 하둡 또한 환경 설정에 포함되었습니다.

    • 모든 환경은 Ubuntu 운영체제에서 실행되었고, 해당 실행을 위해 Docker를 이용했습니다. 도커 파일은 hadoop_hive_dockerfile.txt 을 사용했습니다.
    • HDFS 를 통해 /data 에 있는 stock.csv 파일과 history_dt.csv 파일을 하둡에 업로드 하였고,
    • Hive shell 을 이용해 해당 데이터 파일들을 이용해 External Table 을 생성했습니다.
    • 이후 DBeaver 을 통해 해당 테이블들의 데이터 조회하는 작업을 실행했습니다.

학습하면서 느낀 점들 😄😭

  • "영화 추천 웹 서버" 구현 실습을 하면서, 이전처럼 정답이 정해져 있는 데이터를 이용한 것이 아닌, 각자 직접 크롤링한 데이터를 이용해 학습하고 추천하는 과정을 만든 것이여서 좋았습니다. 이전처럼 해당 값이 나와야 하고 이런 것이 아니라, 각자 저장된 데이터들을 이용했기 때문에 서로 다를 수 있고, 이로 인해 재밌는 결과들을 볼 수 있어 좋았습니다.

  • 하지만 크롤링한 데이터가 이상한 거 같아 확인해보니 줄거리 컬럼의 데이터 유형이 VARCHAR(100) 으로 설정되어 줄거리의 모든 내용을 담지 못하였고, 이 때문에 Word2vec 진행 시 빠지는 데이터들이 발생하였습니다. 다시 VARCHAR(1000) 으로 전환 후 크롤링을 진행했고 이후에는 유실되는 데이터가 없이 잘 나오는 것을 확인할 수 있었습니다.
    또한 처음 DB에서 테이블을 작성했을 때 포스터 이미지 url이 담기는 컬럼의 데이터 유형을 VARCHAR(100) 으로 설정하는 바람에 크롤링한 데이터 값의 url 이 일부 손실되어 프론트 엔드 구성 시 이미지를 불러오지 못해서 아쉬웠습니다.
    오타와 같은 단순한 실수였지만 이로 인해 최종적인 결과 값이 유실되는 사고를 겪었고, 다음 진행 시에는 이러한 기초 단계부터 꼼꼼히 확인해야할 것 같습니다.

  • 프론트 엔드 서버를 구성할 때 학습한 적은 없어서 강사님이 공유해주신 파일 그대로 ReactJS 를 사용했고 모르는 내용이었지만 이렇게라도 경험할 수 있어 좋았습니다.

  • 반복되는 AWS EC2 인스턴스 사용과 Dockerfile 작성 및 해당 구성을 위한 명령어 입력 등을 하면서 각각의 사용에 익숙해질 수 있었고, 해당 환경에서 적응하는 시간을 가질 수 있어 좋았습니다.

  • 또한 Docker Desktop 프로그램 을 통해 도커에 대한 이해를 높일 수 있었습니다. 이미지 파일과 해당 이미지 파일을 이용한 컨테이너 등의 분리된 상황에 대한 이해가 되어 매우 만족했습니다.

  • 도커를 하면서 아쉬웠던 점은 직접 도커 파일을 작성하진 않고 강사님이 공유해주신 파일을 이용했기 때문에 도커 파일 내부의 세부적인 명령어를 다 파악할 수 없어서 아쉬웠으나 이 점은 반복학습을 통해 조금씩 익숙해져갔습니다.

마무리 ❗🚀

상당히 다양한 "빅데이터 시스템" 관련 학습을 할 수 있게 되어 좋았습니다. 아직 미흡한 점들이 많지만 앞으로 다양한 경험을 할 수 있을 것 같아 앞으로가 기대되고 만족스러운 수업이 될 것 같습니다.

또한 반복적으로 AWS EC2 인스턴스 사용, 리눅스 환경, 도커 사용 등이 반복적으로 이루어지면서 이전과 완전히 다른 환경이었지만 익숙해져가면서 이해도를 높일 수 있었습니다.

학습하면서 몰랐던 내용들과 이전 학습 파일들을 되돌아보며 반복-복습 활동을 진행할 것 이며 취직 준비를 할 예정입니다.

0개의 댓글