대외 활동/SK네트웍스 Family AI 캠프

[플레이데이터 SK네트웍스 Family AI 캠프 19기] 3주차 회고

ansui 2025. 9. 7. 23:26

2025.09.01-2025.09.05 3주차 회고

 

이번주는 1차 프로젝트를 진행하는 주차였다.

먼저 우리 팀이 진행한 프로젝트를 소개하고 회고를 작성하려 한다.


Project

타이어 매장 예비 점주를 위한 정보 제공 플랫폼

전국 자동차 등록 현황 및 기존 타이어 매장 현황 분석을 통한 타이어 매장 개점에 최적화된 입지 정보 제공

 

프로젝트 필요성

  1. 자동차 보급률 증가 및 유지보수 수요 확대: 차량 증가 → 정기적인 정비·소모품(특히 타이어) 교체 수요 증가 → 타이어 매장 수요 확대
  2. 국내 자동차 등록 대수의 지속적 증가에 따라 개인 차량 보유 일상화
  3. 타이어 매장 입지의 중요성→ 데이터 기반 입지 선정의 필요성
  4. 기존 매장이 과밀한 지역에 신규 매장 개설 시, 경쟁 심화 → 수익성 저하
  5. 경험 부족 보완→ 가시적인 데이터를 활용해 객관적 근거 제공, 의사결정 도구로서의 역할
  6. 업계 경험이 부족한 예비 창업자들의 인사이트 제공

기술 스택

WEB Streamlit
라이브러리 Pandas
데이터베이스 MySQL
개발 환경 및 협업 도구 Git,  VSCode,  Notion

 

ERD


회고

1. ERD 작성 & DB 설계

처음에는 population, car, supplier 테이블에 각각 지역이름과 시군구 이름을 함께 넣었었다. 하지만 중복현상이 발생할 우려가 있었고 지역 이름, 시군구 이름은 본질적 키(REG_ID)에만 종속되므로 별도 테이블로 분리하였다. 또한, 지역 관련 속성이 다른 엔터티(population, car, supplier)와 의미상 관계가 없으므로 region 테이블로 분리하였다.

 

ERD를 작성해보는 것은 처음이었는데 테이블명, 데이터명을 정하는 것부터 데이터 타입이나 Null 여부, 엔티티간의 관계를 정하는 것이 생각보다 어려웠다. 또한 데이터를 작업하고 다른 팀원분이 크롤링해주신 데이터를 저장하면서 데이터 타입이 중간에 변경되기도 하였다. 처음 정한 DB를 계속 수정해가며 우리 팀의 데이터셋에 더 적절한 테이블을 만들게 된 것 같다. 이번 경험을 통해 다음에 작성할 때는 더 쉽게 작성할 수 있을 것 같다.

 

참고) 제3정규형 (3NF)

- 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되는 걸 제거하는 단계

- 이행적 종속성(Transitive Dependency)을 제거하고 일반속성 간에 종속관계가 없도록 처리

 

2. 데이터 정제 및 DB INSERT

연도별&지역별 자동차 등록 대수 현황, 연도별&지역별 인구 통계 현황 데이터를 엑셀 파일로 수집한 후 설계한 DB에 맞게 넣기 위해 필요한 열을 남기고 AVG, SUM을 이용하여 데이터를 1차로 정제하였다. 3개의 데이터셋을 가져와서 사용했기 때문에 각각 지역을 표기하는 단어가 달라 이를 통일하며 2차로 정제하였다. region 테이블의 표기와 같은 지역은 먼저 아이디를 부과하고 아이디가 NULL인 파일은 직접 보며 UPDATE, LIKE를 사용해서 region 테이블과 같은 단어로 수정해주었다. 이후 최종 파일을 .csv 파일로 저장하고 json으로 변환하여 DB에 INSERT 하는 코드를 파이썬으로 작성하였다.

 

데이터를 정제하며 엑셀이나 MYSQL이 익숙하지 않아 처음에는 잘못된 데이터를 가져와 문제가 생기기도 했다. 지역별 차량 등록 현황 데이터가 3억개가 넘기도 했다… 데이터를 다시 받아 문제를 보니 정제하는 과정에서 월별 평균을 구해야 하는데 월별 합을 구해서 문제가 생긴것이 원인이이었다. 처음 정제할때보다 더 속도가 빨라져 금방 완성할 수 있었다.

 

데이터 정제가 끝난 후에 데이터를 한 폴더에 모아놓고 파이썬으로 MYSQL에 연결하여 각 줄마다 파싱하고 만들어놓은 테이블에 넣는 코드를 작성하였다. 수업시간에 배운 mysql.connector, json 라이브러리를 이용하였고 인구 파일의 경우 년도별로 나눠져 있어 for문을 사용하였다. for문을 사용하여 filename을 설정하는 부분은 구글링을 하여 나온 코드를 참고하였다. 데이터가 이런식으로 여러개가 있을 때 이름을 fstring을 이용하여 넣는 점이 효율적이라고 느꼈고 다음에도 활용할 수 있을 것 같다.

 

3. 아쉬운 점

첫 프로젝트이다보니 계획이 잘 세워지지 않은 채 체계 없이 시작된 것 같아 아쉬웠다. 각자 맡은 역할을 시작하기 전에 깃허브에 프로젝트를 생성하고 각자 브랜치를 나눠서 작업하지 못해 아쉬웠다. DB와 관련해서 처음에 DB 유저 정보를 하나로 통일하지 않아서 프로젝트가 끝나갈 즈음에 문제가 생겼다. 다음부터는 DB 정보나 .env 파일에 들어갈 정보들을 사전에 미리 정해두고 시작하면 좋을 것 같다. 일의 순서나 계획, 데이터 셋, 라이브러리. 깃허브 같은 것들도 미리 정해두고 노션에서 서로 소통해야 한다고 느꼈다.

또한 DB 설계 역할을 맡아 streamlit을 많이 사용해보지 못해 아쉬웠다. streamlit은 혼자 복습해보며 이번 주말에 실습해 볼 예정이다.

 

4. 잘한 점

맡은 역할을 시간 내에 완성할 수 있었고 ERD 작성이나 DB 설계를 적절히 구현하였다. 구현하면서 MYSQL 사용이 익숙해졌고 쿼리 작성이나 파이썬으로 연결하는 코드를 복습할 수 있었다. 또한 다음 팀 프로젝트에서는 어떻게 진행해야 할 지 개선점을 찾아낼 수 있었다. 

 

+) 주말에 개인 토이 프로젝트를 진행하며 1차 프로젝트에서 아쉬웠던 점을 다시 돌아보았다.

시간이 여유로워서 할 수 있을 때 토이 프로젝트를 해야할 것 같아 주말에 '지역 간 의료 격차 시각화 플랫폼'을 주제로 작은 프로젝트를 만들었다. 아마 나중에는 할 시간이 정말 없을 것 같다...ㅎ

한번 팀프로젝트로 해보았던 것을 다시 혼자하니 시간이 더욱 단축될 수 있었고 웹 크롤링과 파이썬, sql 전반을 복습할 수 있었다.

Selenium을 이용한 동적 웹 크롤링과 Streamlit을 사용해보며 부족하다고 생각했던 부분을 채울 수 있었다.

자주 사용하는 DB 연결이나 Selenium 설정은 모듈로 만들어 사용하며 코드를 더 보기 좋게 짜기 위해 노력했다.

ERD부터 DB 설계, 웹 크롤링, 시각화까지 혼자 전과정을 진행해보니 효율적인 프로젝트 진행 과정을 생각해 볼 수 있었다.

 

- 내가 생각하는 효율적인 프로젝트 진행 과정

프로젝트 기획&데이터 찾기 → 페이지 및 화면 구성 ERD 작성 깃허브에서 README 작성하고 폴더 구조 정리

→ 각자 맡은 파트 개발(브랜치 나눠서) → (필요한 경우 개발 중 ERD / 기획 / 폴더 구조 등 수정) merge 최종 테스트

 

팀 프로젝트 깃허브 링크

https://github.com/SKNETWORKS-FAMILY-AICAMP/SKN19-1st-1Team

 

개인 토이 프로젝트 깃허브 링크

https://github.com/ahnsui/medi-gap


Keep

  • 매일 강의 내용을 노션에 정리하였다.
  • 프로젝트에 열심히 참여하였다.
  • 주말에 개인 토이 프로젝트를 진행하며 복습을 하였다.

Problem

  • 피곤한 상태에서 수업을 듣다 보니, 집중력이 떨어지는 순간이 있었다.
  • 지각을 했다.

Try

  • 강의 내용을 단순히 정리하는 것에서 끝내지 않고 매일 예습, 복습하기
  • 예복습 스터디 열심히 참여하기
  • 코테 문제 수 정해서 꾸준히 풀기