플레이데이터 부트캠프 데이터 엔지니어링 트랙 13주차 (8.28~9.1+9.4)

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

이번 주차 월요일을 끝으로 해당 수업은 종료되고, 남은 기간 5일간 미니 팀 프로젝트를 수행했습니다. 따라서, 이번 회고 내용은 프로젝트 관련 회고를 ABCD 기법을 통해 작성하였습니다.

프로젝트 내용 링크


우선, 월요일 수업 내용에 대한 간략한 회고를 우선 진행하겠습니다.

Liked

오늘로서 여태의 학습이 총 정리된 느낌이어서 좋았습니다. 열심히 크롤링하고 DB에 넣은 데이터를 직접 웹에서 REST API 를 통해 접근-활용할 수 있어 좋았습니다.
또한 airflow 를 경험한 점이 좋았고, 앞으로 학습하는 방향에 좋은 경험이 될 것 같습니다.

Lacked

다만, airflow 를 활용하는데 미숙해서 아쉬웠지만, 이렇게라도 경험할 수 있어 좋았습니다. DAG에 쓰이는 코드도 직접 짠 것이 아니라 아쉬웠습니다

Learned

stock 프로젝트를 생성하여 이전 시간에 DB에 저장한 "주식 크롤링 데이터" 를 사용해서 API 를 통해 웹에서 확인하였습니다.
Apache-airflowDAG 파일, get_stock.py 를 작성해 매일 오후 6시 마다 그날의 주식 정보를 가져오고 DB에 저장하는 스케쥴러를 만들었습니다.

Longed for

  • 수업의 내용들을 총 정리해서 이번 프로젝트를 완성할 것 입니다.
  • "네이버 웹툰 사이트"의 웹툰 데이터 크롤링한 것을 DB에 저장 후 Spring boot 를 통해 웹 페이지 구현하는 것을 목표로 프로젝트를 진행할 것 입니다.

이어서 미니 팀 프로젝트 회고를 진행하겠습니다.

Achievements(성과)

  • 파이썬의 requests 모듈을 사용하여 네이버 웹툰 사이트의 웹툰 정보를 담고 있는 GET API 를 통해 해당 데아터를 .csv 파일로 저장할 수 있었습니다. 이후에 공유 MySQL DB 에 저장하여 팀원 모두 공통된 데이터를 사용할 수 있었습니다.

해당 과정에서 웹툰들의 ID 값과 별점 정보를 전달하는 API와 해당 웹툰의 상세 데이터를 담고 있는 API가 달랐기 때문에
우선, 웹툰들의 ID 값과 별점 정보를 크롤링하여 .pickle 파일로 저장한 후 저장된 ID 값들을 반복문을 이용하여 모든 연재 중인 모든 웹툰의 상세 데이터들을 저장할 수 있었습니다.

  • 웹 페이지를 개발하기 이전에 어떻게 구상할 지에 대한 회의를 진행했고, "카카오 오븐"(목업 관련 툴)을 통해 여러 아이디어를 얘기할 수 있었습니다.

  • Spring boot 를 통해 개발을 시작했습니다. 처음에 EntityDB 연결하는 부분에서 팀원 모두 어려움을 겪어 순탄하진 않았지만, 문제점을 파악한 이후 Entity, Repository, Service, DTO, Controller 등이 정상적으로 작동되게 하여 팀원들에게 공유하고 이를 바탕으로 각자 한 웹 페이지씩 개발하거나 뷰의 디자인을 신경쓸 수 있는 환경을 만들어서 진행하였습니다. 매일 회의를 통해 각자의 상황을 공유했습니다.

  • 최종적으로 대략 10개 이상의 웹 페이지들을 개발 완료했고, 그에 해당하는 기능들을 구현했습니다. 또한 구현되는 기능에서의 에러 발생 없이 작동하는 웹을 완성하였습니다.

  • 평가가 있거나 경쟁이 있는 프로젝트는 아니었지만 팀원들 모두 그간의 학습 내용을 담기 위해 노력했고 저 또한 하면서 부족한 점을 느꼈고 개발하면서 실력 향상이 되는 성취감을 느꼈습니다.

Benefits(이익)

웹 크롤링을 하면서 REST API 에 대한 이해도가 높아질 수 있었고, 우리가 흔히 볼 수 있는 웹 페이지에서 어떤 식으로 정보가 전해져 볼 수 있었는 지를 눈으로 확인하고 경험할 수 있었습니다.

Entity, Repository, Service, DTO, Controller 객체를 생성하여 웹 페이지에 데이터를 전달하는 과정에 대해 학습할 수 있었고, 특히, DB 에 저장된 데이터 값을 Service 내에서 변환하여 Controller를 통해 웹 뷰에 전달하는 것을 구현하고 웹 뷰에 뿌려주는 각종 데이터들은 Repository 에서 @Query를 통해 JPQL 문을 작성하거나, 서비스 객체 내에서 전처리 과정을 거쳐서 전달했습니다. 때로는 컨트롤러 객체 에서 @ModelAttribute 를 통해 웹에 작성된 데이터를 받아서 구현하거나 @PathVariable 을 통해 url API 값을 이용해 서비스 객체 내의 함수를 사용했습니다. 이를 통해 Back-end 개념과 스프링 부트 개발 실력 향상을 몸소 느낄 수 있어 매우 만족스러웠습니다.

처음하는 백엔드 개발이었지만 이번 프로젝트를 하면서 백엔드가 하는 일이 무엇이고 데이터를 처리해서 웹에 전달하는 과정 등을 깨달을 수 있는 좋은 기회였고, 백엔드의 재미를 느껴 많은 도움이 되어 좋은 경험이었습니다.

Concerns(우려사항)

"프로젝트에서 발생한 문제, 의사소통 장애, 리소스 부족 등의 내용."

프로젝트 시작 전에 여러가지 사항들에 대해 회의를 진행했었으나 지켜지지 않은 점들이 아쉬웠습니다. 구두로 얘기만하고 이를 확실하게 정하지 않은 점들이 개발이 진행되면 될수록 후회가 되었습니다.
DB 설계를 명확하게 하지 않았고 웹 페이지를 구상하는 과정에서 더 필요한 데이터를 위해 크롤링을 진행한 점이 아쉬웠습니다. 프로젝트 진행 순서를 처음에 전부 다 기획했어야 하는 것들인데 "크롤링 먼저 하고", "웹 개발하고" 이 두 가지를 따로의 일 처럼 생각하여 파생된 문제점이라고 생각되었습니다. 또한 스프링 부트를 시작하면서 EntityMySQL DB 에 저장된 테이블이 연결되지 않아 팀원 모두 어려움을 겪었는데 이것은 엔티티 에 선언한 변수명과 테이블의 Column 명이 완전히 일치하지 않아 발생된 문제였고, 이로 인해 테이블의 컬럼명을 바꿔야 할 것 같았습니다.
왜냐하면 기존의 컬럼명은 WebtoonId 와 같이 "대문자 시작-카멜 표기 기법" 을 이용했는데 이를 엔티티에서 받기 위해선 변수명을 대문자 시작으로 작성해야만 했기 때문입니다. 따라서 webtoon_id 와 같이 "소문자 시작-스네이크 표기 기법" 으로 바꿨습니다.

스네이크 표기 기법으로 작성한 컬럼명은 JPA 에 의해 스프링 부트에서 카멜 표기 기법으로 받기 때문에 webtoonId 와 같이 변수명을 지을 수 있었습니다.

표기법 참고

카멜(Camel) 표기 기법 : '첫 글자를 대문자로 적되, 맨 앞에 오는 글자는 소문자로 표기' ex) webtoonId
스네이크(Snake) 표기 기법 : '단어 사이에 언더바를 넣어서 표기' ex) webtoon_id

이외에도 다양한 표기 기법이 있지만,
파이썬에서는 스네이크 표기 기법, 자바에서는 카멜 표기 기법을 주로 사용하여 두 가지를 소개하였습니다.

이외에도 검색 기능을 구현할 때 검색 텍스트에 / 기호가 들어가 에러가 났고, / -> & 기호로 바꿔 이 문제점을 해결할 수 있었습니다. 검색 단어의 의미상 / 는 &를 나타냈기 때문에 이처럼 처리를 했습니다.

또한 "SQL 문과 JPQL 문의 차이", "기존의 게시판 내용 변경 기능" 등을 구현하는데 에러가 났었지만 각각 학습을 통해 해결할 수 있었습니다. 특히 게시판 내용 수정은 @ModelAttribute 을 통해 웹에 쓰여진 새로운 내용을 가져와 이를 기존에 저장된 내용과 비교하여 새로운 정보값으로 덮어 씌우는 함수를 작성해 완료할 수 있었습니다.

팀원들 각자의 배경 지식이 다르고 개발 실력이 전부 다르기 때문에 이를 조율하는데 어려움을 겪었습니다. 저 또한 스프링 부트를 처음 다뤄보았기 때문에 수업 때 구현한 코드들을 보며 재학습하고, 개발을 이어갈 수 있었습니다. 처음 막혔던 부분을 겪으면서 개발 이전에 구상했던 웹 페이지들은 불가능이라고 생각되었지만, 고비를 넘기고 점점 스프링 부트에 대한 이해가 높아지면서 구상했던 웹 페이지와 기능들을 구현할 수 있었고, 프로젝트 완성에 이를 수 있어 좋았습니다.

Do Next (다음 할 일)

  • 다음 팀 프로젝트가 어떻게 될 지 모르겠지만, 다음에 시작할 때는 확실한 규칙과 구조 설계를 하고 이를 지키는 방향으로 진행할 것 입니다.

  • 이번 프로젝트 내용에 덧붙여서 웹 페이지를 구현하기 보다는 다음 프로젝트나 웹 페이지를 개발할 일이 생기면 스프링 부트 프레임워크를 활용할 것 입니다. (이번에 구현한 웹 페이지에서 할 수 있는 페이지들은 대부분 다 구현한 것 같습니다.)

  • 자바, 파이썬 등의 학습을 꾸준히 해야겠다는 생각이 들었습니다.

0개의 댓글