개발공부/SK Networks Family AI bootcamp 강의노트

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

HyunJung_Jo 2025. 1. 24. 20:26

배운 내용

  • github (clone, branch, merge)
  • DML 심화
  • streamlit 과 mysql 연동
  • streamlit 구현
  • web crawling
  • 첫 단위 프로젝트: 전국 자동차 등록 현황 및 기업 FAQ 조회 시스템
  • 토이 프로젝트 

1. github

  • github에 new repo 생성시 readme.md 포함, 멤버 초대
  • git clone (local folder > github repo url copy > git clone [url]
  • branch : main < develop < feature
    • feature별로 개발, develop에서 merge 및 확인 , 최종 main에서 반영
    • feature별 개발시 develop을 git pull, push 하면서 하기
  • create feature branch(local) > publish branch (local git) > commit > push (github) > merge to (develop branch)

2. DML

2-1. select문 실행 순서

  1. select / from   (데이터 추출)
  2. where 1=1 and col =value (필터링)
  3. group by value (결과 통계 정보 조회)
  4. having (결과 통계 필터링)
  5. order by desc/asc ( 정렬 / 오름차순,내림차순)

2-2. 연습해보기

# 제일 잘팔리는 차종의 수입을 내림차순으로 보이기
select p.productLine, 
sum(od.quantityOrdered*od.priceEach) as revenue
FROM 
orderdetails od 
left join products p 
on od.productCode = p.productCode
where 1=1 
group by p.productLine
order by revenue desc;

# 제일 잘 팔리는 물건의 이름과 그 이름이 19로 시작할 것, 총 매출이 10만이 넘을 것
select p.productName,
sum(od.quantityOrdered*od.priceEach) as revenue
from
orderdetails od
left join products p 
on od.productCode  = p.productCode 
where 1=1
and p.productName like '19%'
group by p.productName
having revenue > 100000

2-3. where vs having

SELECT department, COUNT(*) AS employee_count 
FROM employees 
WHERE status = 'active'  -- 상태가 'active'인 직원만 고려
GROUP BY department 
HAVING employee_count > 5;  -- 각 부서의 active 직원 수가 5명 초과인 경우만 선택
  • where : table row 직접 filtering
  • having: group by로 그룹화 후 집계 결과 필터링

3. MySQL & python

  • 설치 라이브러리:
    • PyMySQL(python과 MySQL 연결,관리)
    • SQLAlchemy(python ORM)
    • mysqlclient (C library에 의존하는 MySQL 드라이버)
  • connection 정보를 connection 객체에 전달, 커서를 생성 sql 문 전달
  • streamlit에서는 .streamlit/.secrets.toml 만들어서 그 안에 계정 정보 저장해서 쓰기

4. streamlit

  • 마크다운, 노션과 비슷하게 돌아간다고 생각하면 쉬움. 위젯같은 건 공식 다큐먼트 보면서 찾아서 갖다 쓰면 된다.
    • st.titlle(), st.header(), st.subheader(), st.caption(), st.code(), st.markdown(), st.latex(공식)
    • st.dataframe(df)
    • st.checkbox('checkbox str',value=False, key='use_container_width') : 자동으로 넓어짐
    • st.button() , if st.button('hey'):st.write('hello') , st.download_button()
    • st.form() 외부에서 input 받음 -> st.text_input(), st.form_submit_button(), st.link_button()
    • pages 폴더 안에 페이지 생성하여 multipages 가능
    • st.checkbox(), st.toggle(), st.radio()
    • st.area_chart(), st.bar_chart(),st.line_chart()

5. web crawling

  • header에 user-agent, refer  꼭 등록해야 크롤링 가능, f12 로 개발자 도구 불러서 network > headers로 확인 가능
  • header={'User-Agent':"...", "Referer":"..url.."}, response = requests.get(url=url, header=header)
  • beautiful_text = bs(response.text, "html.parser") 로 response를 예쁘게 보는 것 가능
  • reply_list = beautiful_text.find_all("dd",class_"usertxt") :html에서 dd 태그 중 css의 user_txt 클래스 가져오기
  • reply_list_edited = [reply.get_text().replace('\n','').strip() for replay in reply_list]

6 . 단위 프로젝트 [전국 자동차 등록 현황 및 기업 FAQ 조회 시스템]

  • 내가 DB와 프론트엔드를 할 줄 몰라서 좀 많이 헤맸다. 다행히 지피티와 팀원들 도움으로 어느정도 할 순 있었던 것 같다.
  • 이전에 일했던 짬밥이 좀 남아있어서 인지 파일 트리라던가, 클린 코드, 프로젝트 결과물 완성도를 조금씩 신경 써서 팀원들에게 요구할 수 있었다. 조금 더 코드를 깔끔하게 하고 싶은 욕심이 있었는데 내가 깃에 대한 경험이 부족하여 작업에 속도가 붙지 못했다.
  • 깃헙을 잘 몰라 피쳐 브랜치에서 머지하고 풀,푸쉬를 잘 하지 못하여 상당히 버벅였다. 좀 익숙해질 필요가 있는 것 같으나, 요즘은 liveshare도 있어서 이게 꼭 필요한가하는 의구심도 살짝 든다. 하지만 내가 모르는 것도 있을 거 같아 그냥 계속 써보면서 익혀보도록 한다.
  • 디버깅을 할 때 어디다 써놓는 버릇을 계속 들여야겠다. 자꾸 디버깅하고 프로젝트 개발이 급해 그냥 넘어가게 된다. 그냥 메모장에라도 써놓고 나중에 블로그에 기록하자. 

7. TODO (이번 설날 연휴 동안)

  • 이번 단위 프로젝트 혼자서 3번은 만들어보기.
    • 화면설계서, ERD / DB, crawling, streamlit/github, readme
    • 다른 팀 깃헙 코드도 참고해보기.
  • Toy project todo list 실행
    • django안에서 upbit api로 받은 json 데이터 받고 표현
    • backtesting library 아무거나 깔아서 quick start 돌려보기
    • Design reference (blue)
    • 매매 전략 구현하는 방법
    • 고객별 API 키 암호화하는 방법
    • 로그인 기능 구현
    • React, Django 사용해보기
정말 알찬 시간이었다. 회사에서 제대로 써보지 못한 깃헙도 써보고, 디비도 직접 써보고, 프론트엔드도 해봤다. 사실 인공지능만 하면 되는 거 아닌가 했는데, 나중에 내 스스로 서비스를 만들어 팔 수도 있겠단 생각도 든다. 나중에 많은 회사들이 물어봤던 aws도 공부하게 되면 정말 완전체가 될 것만 같다. 후하후하 화이팅!