3일차

Suhyeon Lee·2024년 10월 2일
0

Time Table

시간내용
09:00-10:00코드가타
10:00-10:30오전 스크럼
10:30-12:00코드가타 진행하며
궁금했던 부분 찾아보고 정리
12:00-13:00점심식사
13:00-14:00ADsP 1주차 강의 수강
14:00-15:00SQL 라이브 세션
15:00-16:00아티클 스터디
16:00-17:00직무 조사 결과 공유
17:00-18:00발표 PPT 만들기
18:00-19:00저녁식사
19:00-20:00튜터 직무 세션
20:00-20:30저녁 스크럼
20:30-21:00TIL 작성
21:00-23:00부족한 부분 보충



Code kata

SQL 코드가타

38. 조건별로 분류하여 주문상태 출력하기

프로그래머스 코딩테스트 연습

  • 작성한 코드
SELECT  order_id
        , product_id
        , DATE_FORMAT(out_date, '%Y-%m-%d') out_date
        , CASE
            WHEN out_date IS NULL THEN '출고미정'
            WHEN out_date > '2022-05-01' THEN '출고대기'
            ELSE '출고완료'
          END "출고여부" 
FROM food_order
ORDER BY 1 ASC;
  • WITH문과 Subquery를 이용해서도 풀 수 있다
    • WITH문

      • 이름을 가진 임시 테이블을 정의한 후 사용하는 구문
      • Query의 전체적인 가독성을 높이고, 재사용할 수 있는 장점이 있음
      • 대부분의 DBMS에서 지원
      • 계층형쿼리를 구현할 수 있음
      /*WITH으로 풀기*/
      WITH fo AS (
      SELECT  order_id
              , product_id
              , DATE_FORMAT(out_date, '%Y-%m-%d') out_date
      FROM food_order
      ) 
      SELECT  fo.*
              , CASE
                  WHEN out_date <= '2022-05-01' THEN '출고완료'
                  WHEN out_date > '2022-05-01' THEN '출고대기'
                  ELSE '출고미정'
              END "출고여부"
      FROM fo
      ORDER BY order_id;
      
      /*서브쿼리로 풀기*/
      SELECT  fo.*
              , CASE
                  WHEN out_date <= '2022-05-01' THEN '출고완료'
                  WHEN out_date > '2022-05-01' THEN '출고대기'
                  ELSE '출고미정'
              END "출고여부"
      FROM (
          SELECT  order_id
                  , product_id
                  , DATE_FORMAT(out_date, '%Y-%m-%d') out_date
          FROM food_order
          ) fo
      ORDER BY order_id;

24. 카테고리별 상품 개수 구하기

프로그래머스 코딩테스트 연습

  • 작성한 코드
SELECT  SUBSTRING(product_code,1,2) category
        , COUNT(*) products
FROM product
GROUP BY 1
ORDER BY 1 ASC;
  • 추가
    • LEFT를 이용해도 된다!
      SELECT	LEFT(PRODUCT_CODE, 2) CATEGORY
              , COUNT(*) PRODUCTS
      FROM PRODUCT
      GROUP BY CATEGORY
      ORDER BY 1;

25. 고양이와 개는 몇 마리 있을까

프로그래머스 코딩테스트 연습

  • 작성한 코드
SELECT  animal_type
        , COUNT(*) AS 'count'
FROM animal_ins
GROUP BY 1
HAVING animal_type = 'Cat' OR animal_type = 'Dog'
ORDER BY 1 ASC;
  • 생각의 흐름

    • 개나 고양이가 아닌 경우가 있을 수 있으니 조건을 걸어두기
  • IN을 사용해 HAVING절을 더 간단하게 표현할 수 있음: HAVING ANIMAL_TYPE IN ('Cat', 'Dog')

26. 입양 시각 구하기(1)

프로그래머스 코딩테스트 연습

  • 작성한 코드
SELECT  CONVERT(SUBSTRING(datetime, 12, 2), SIGNED) 'HOUR'
        , COUNT(*) 'COUNT'
FROM animal_outs
GROUP BY 1
HAVING HOUR BETWEEN 9 AND 19
ORDER BY 1;
  • 생각의 흐름

    • 처음 떠오른 생각은 CASE WHEN이었는데, 이건 너무 길게 써야 해서 싫었음
    • 전체 데이터는 새벽 1시부터 있는데 확인하려는 시간대는 09:00부터 19:59까지니까 조건절 꼭 넣어야 함
    • 일단 datetime이 YYYY-MM-DD hh:mm:ss 형식이라 시간만 따로 빼야 하고, 시간에서 앞자리 2개만 골라서 그룹화하면 될 것 같았음
    • 결과 화면에서는 09가 아닌 9로 표시되니 데이터 타입 변환도 필요
  • 추가

  • 참고하면 좋을 다른 풀이

    • 1
      select 	cast(HOUR as decimal) HOUR
              ,count(*) COUNT
      from (
          SELECT	*
                  , substr(datetime, 12, 2) HOUR
          from animal_outs
          ) a
      where HOUR >= 9 and HOUR <= 19
      group by 1
      order by 1
    • 2
      SELECT	case
                  when substr(DATETIME, 12, 13) = 09 then 9
                  when substr(DATETIME, 12, 13) = 10 then 10
                  when substr(DATETIME, 12, 13) = 11 then 11
                  when substr(DATETIME, 12, 13) = 12 then 12
                  when substr(DATETIME, 12, 13) = 13 then 13
                  when substr(DATETIME, 12, 13) = 14 then 14
                  when substr(DATETIME, 12, 13) = 15 then 15
                  when substr(DATETIME, 12, 13) = 16 then 16
                  when substr(DATETIME, 12, 13) = 17 then 17
                  when substr(DATETIME, 12, 13) = 18 then 18
                  when substr(DATETIME, 12, 13) = 19 then 19 
              end HOUR
              , count(*) COUNT
      from ANIMAL_OUTS
      group by 1
      having HOUR between 9 and 19
      order by 1



강의 수강

ADsP 자격증 챌린지 1주차



SQL 라이브 세션

예제로 익히는 SQL - 2회차



아티클 스터디

SQL 가독성을 높이는 다섯 가지 사소한 습관

아티클 요약 및 주요 내용

  • 요약 : 아티클의 핵심 내용을 요약
    • 가독성 있는 SQL 코드를 쓰는 습관을 들이자
      1. 예약어 대문자로 쓰기
      2. 행 자주 갈기 → 주석 처리 할 때 편함
      3. 주석을 쓰자: 코드를 쓴 의도 적기
      4. Alias 잘 쓰기
      5. 같이 일하는 사람들과 합의된 규칙 꼭 지키기
  • 주요 포인트 : 아티클에서 강조하는 주요 포인트 파악
    • SQL 문법에서 강제하지 않더라도 가독성이 좋은 쿼리를 작성하면 좋다.
      • 가독성이 없으면 쿼리 읽는 데 시간이 많이 소요되고, 유지보수하기도 어려움
      • 가독성이 좋은 코드는 간결하게 작성하고 불필요한 코드가 제거되어 있으므로 더 효율적이고 성능도 좋음
      • 가독성이 좋아야 여러 사람이 함께 작업할 때 편함 → 다른 사람이 작성한 코드를 빠르게 이해하고 수정할 수 있음
    • 좋은 쿼리문을 쓰는 습관 들이기
      • 코드를 나 말고 누군가가 볼 것이라 생각하며 작성하고 정리하는 것이 중요

핵심 개념 및 용어 정리

  • 핵심 개념: 아티클에서 언급된 중요한 개념 정리
    • 가독성
      • 코드를 쉽게 작성하여 읽기 쉽게 유지하는 것
      • 눈에 잘 읽히게 쿼리를 작성하는 것
    • 명시적인 표현: 암묵적(Implicit)인 표현보단 명시적으로 확실한(Explicit) 표현 사용
      • 예1: 변수나 테이블 이름에 별칭 지정할 경우 AS를 생략하지 않는 편이 명시적으로 읽기 좋음
      • 예2: GROUP BY나 ORDER BY 뒤에 1, 2, 3 등이 아닌 컬럼 이름 작성해야 명시적
  • 용어 정리: 생소하거나 중요한 용어 정의 확인
    • Alias(별칭)
      • 컬럼, 테이블, 함수, 서브쿼리의 이름을 다른 이름(별칭)으로 표시하는 것
    • Code Conventions(코드 작성 규칙)
      • 읽고 관리하기 쉬운 코드를 작성하기 위한 코딩 스타일 규약

실무 적용 사례

  • 아티클에서 다룬 분석 방법을 실제 업무에서 어떻게 적용할 수 있을까?
    (관련 사례를 찾아보거나, 가상의 시나리오 만들기)
    • 실무 적용 : 조직에서 협업을 진행할 때 SQL 스타일 가이드 합의하기
    • 관련 사례 : Mozilla의 SQL Style Guide, Simon Holywell의 SQL Style Guide, Gitlab의 SQL Style Guide
    • 가상 시나리오
      • SELECT 문에서 컬럼을 선택할 때, 쉼표를 뒤에 두느냐(Trailing Comma) vs 앞에 두느냐(Leading Comma)로 매번 수정 요청 → 조직 차원에서 시간이 아까울 수 있음
      • 별칭을 의미 없이 a, b, c로 작성

추가 조사 내용

코드 가독성과 작성 규칙



직무 조사 자료 공유

느낀 점

  • 데이터 직군(데이터 분석가, 데이터 과학자, 데이터 엔지니어, BA, PM, Growth Hacker,...) 하는 일이 다 비슷한 것 같은데

    • 전문성을 강조하여 분리하는 것이라는 생각
    • 특화된 필드가 있음!
  • 퍼포먼스 마케터

    • 디지털 마케팅 4대 매체(Facebook, Google ,Naver, Kakao(Daum))에 광고를 직접적으로 올리는 쪽과 연관
    • '외부에 우리를 알리는' 일과 관련된 데이터 분석
  • growth hacker

    • 회사 내부 서비스/우리 서비스에 뜨는 광고에서 도출된 데이터를 분석하고 관리
    • 우리 일을 깊게 파고들어 분석한다는 느낌
  • 데이터 엔지니어

    • 백엔드 쪽에서 넘어오는 경우가 많다!(백엔드 지식 있으면 좋다고 함)
  • 퍼포먼스 마케터

    • 데이터를 다루는 마케터! → 어디에 더 중점을 두나요? 둘 다 잘해야 합니다.
    • 성과중심(광고 성과 최적화)
    • GA(Google Analytics), 각 광고매체에서 제공하는 광고관리자 시스템(홈페이지)에서 csv로 데이터 받아 SQL로 분석
      • 예: 픽셀(데이터 수집툴. front-end쪽에서 많이 활용한다고 함.)
    • 효율적인 광고 만들기
      • 예산 효율적으로 쓰기(예산 관리)
      • 어떻게 하면 광고를 더 쓸까? → 기존과는 전혀 다른 접근법 필요할 때도 있음
    • 클릭 당 예산
    • adblock
    • "수렴"하도록 설계된 부분을 비틀어야 할 때도 있다.
    • 트랙킹 어떻게 할 것인지 프론트엔드와 논의
    • AB testing
    • 마케팅 지식 vs. 데이터 분석 지식: 어느 게 더 필요할까?
      • 둘 다...
    • 배너 광고, 검색어 광고



직무 라이브 세션 (1)

목표

  • 기업 내 데이터 관련 직무에 대한 포괄적 이해
  • 실제 사례를 통한 직무 종류와 주요 업무 확인

데이터 직무 소개: Value chain 관점

  • 데이터 직무 종류
  • 공통점
    • 데이터를 활용한 인사이트 도출 및 의사 결정
    • 기업이 가지고 있는 데이터 활용
    • 데이터 소스 → 가공 → 인사이트 →
    • 회사마다 성숙도 다를 수 있음
      • 소규모 회사는 백엔드 개발자가 분석까지 담당하는 경우도 있음
      • 글로벌
    • 직무들을

토스

Data Tribes 사례

조직도

쿠팡



직무 라이브 세션 (2)

Health Care 산업

  • 최근 떠오르는 산업
  • 신생 기업이 많고 창업 및 스타트업에서 수요가 많음
  • 고령화, 코로나로 인해 헬스케어 산업 수요 증가
  • 기업별 자격 요건이 천차만별
    • (예) 넛지헬스케어, 롯데이노베이트, 리팅랩스 채용공고

주로 다루는 데이터

  • 전자 의무 기록(EHR, Electronic Health Records)
  • 의료 이미지 데이터: MRI, CT 데이터
  • 생체 신호 데이터: 갤럭시 워치, 애플 워치 → ECG
    • 이미 많이 익숙해져 있는 데이터이기도 함

튜터님이 진행한 프로젝트

  • 생체 신호 관련 프로젝트
    • EEG(뇌파 신호)
      • 다양한 신호 처리 기법(e.g. Wevelet Kernel)을 통해 시그널 데이터 분석
      • 특정 frequency의 의미 있는 데이터 수집 & 딥러닝 분석
      • 감정, 질병 등 예측 가능하다고 함
    • 당뇨병 예측 모델링(데이터 분석 2기 프로젝트)
      • 개인 맞춤형 당뇨병 예방 방안 제시를 위한 대조학습기반 딥러닝

Smart Factory

  • 인구 감소 & 숙련자 은퇴 → 스마트 팩토리에 대한 수요 증가
  • 제조업 기반 회사가 많은데 해당 기업들이 모두 해당 분야 투자 중

대학원

다양한 대학원 제도 존재

  1. 계약학과 → 가장 추천
  • 장점: 등록금 및 생활비 지원, 프로젝트 경험, 공백기 X, 경력으로 인정(석사 2년, 박사 8년), 낮은 경쟝률, 별도의 수시채용 진행(연구장학생) + 기업 소속
  • 단점: (대학원 중에선) 높은 경쟁률, 교수님을 잘 못 만나면 고생이지만 기업 소속이니 교수님 영향 덜 받음
  1. 학연산협동과정
  • 대학원 with 한국과학기술연구원, 정보통신연구원 등의 정부출연연구소
  • 장점: 등록금 및 생활비 지원, 프로젝트 경험, 공백기 X, 경력으로 인정(석사 2년, 박사 8년), 낮은 경쟝률, 별도의 수시채용 진행(연구장학생) + 연구원 신분, 4대보험가입
  • 단점: 정보 부족
  1. 교과석사
  • 장점: 프로젝트 경험, 공백기 X, 낮은 경쟝률, 별도의 수시채용 진행(연구장학생), 수업만 잘 들으면 석사학위 취득 가능
  • 단점: 등록금 및 생활비 지원 X
profile
2 B R 0 2 B

0개의 댓글