0309 | SQL 5주차, PM개론 1-2

Hyeryung Choi·2026년 3월 9일

PM 부트캠프

목록 보기
1/29
post-thumbnail

// TIL 요약

// Morning / Daily Insight

https://www.mindtheproduct.com/being-the-only-one-lessons-in-leadership-integrity-and-resilience/

https://www.lennysnewsletter.com/p/everyone-should-be-using-claude-code

// Day / SQL_5주차

[ 데이터가 유효하지 않을 때 OMG~]

1. 유효 데이터에서 제외

  • if() - 대상 선택 - null 로 치환
    i.e. if(rating <> 'Not given', rating, null) new_rating
  • where문을 활용한 제외
    i.e. where 칼럼명 is not null

null : 데이터로 취급하지 않겠다는 선언

  • 집계 함수에서의 제외: SUM, AVG, COUNT 같은 함수를 쓸 때 NULL은 계산 대상에서 제외
    • 예: [10, 20, NULL]의 평균을 구하면 (10+20)/3이 아니라 (10+20)/2로 계산됩니다.

  • 개념정의
    0숫자가 0이라는 '값'이 있음.
    공백' '비어있는 문자열이라는 '값'이 있음.
    Null모르는 데이터

  • Nullification 예시조치이유
    설문조사 미응답null0점으로 처리하면 평균 점수가 깎여서 데이터가 왜곡됨
    측정기기 오류값null잘못된 수치가 포함되면 전체 합계나 추세가 틀어짐
    탈퇴한 회원 이름null개인정보를 지우되, 활동 기록은 남겨야 할 때

2. 다른 값으로 대체

  • if(조건, true값, false값)
    • 딱 하나의 컬럼이 NULL인지 아닌지만 체크할 때
if (age >= 10, age, 10) // 10 미만의 나이 데이터 값을 모두 10으로 대체해줘
if (phone IS NULL, '없음', phone) // 휴대폰 번호가 없으면(NULL) '없음'이라고 표시해
  • coalesce(값1, 값2, 값3 ···) -> 앞에서부터 검사해서 NULL이 아닌 녀석이 나오면 바로 반환
    • 여러 컬럼을 조회 할 수 있다 -> 여러가지 대안
coalesce(home_phone, cell_phone, '연락처 없음')
//집 전화번호가 없으면 휴대폰 번호를 쓰고, 그것도 없으면 '연락처 없음'이라고 해줘.
  • coalesce(컬럼, 0) : 데이터가 없을 때 기본값(0이나 빈 문자열)을 채워 넣는 용도
    • null 값은 coalesce 문의 가장 마지막 값으로 대체 됨.

[Query Example]

select a.order_id,
       a.customer_id,
       a.restaurant_name,
       a.price,
       b.name,
       b.age,
       coalesce(b.age, 20) "null 제거",
       b.gender
from food_orders a left join customers b on a.customer_id=b.customer_id
where b.age is null

[데이터가 상식적이지 않을 때 Dammn~]

데이터를 상식적인 범위내에서 재 정의

  • remap 노드 처럼 상식적인 범위 밖에 있는 데이터를 min혹은 max 값으로 반환
  • case when 사용
select 	case when age < 10 then 10
			 when age > 90 then 90 end "new_age"
from customers

[Pivot Table]

  • 주어진 데이터를 활용해 행열을 재구성
B1B2B3
A1
A2
A3
  • A1,A2,A3··· : 행 축 데이터 (ROW)
  • B1,B2,B3··· : 열 축 데이터 (COLUMN)

Pivot Table 만드는 쿼리

select 	행 데이터 컬럼
		max(if(조건, true, false)) "축 컬럼명"
  • true 값에는 보통 count(1) 반환 값을 사용하고, false 는 0

[예제1] 음식점별 시간별 주문건수 Pivot Table 뷰 만들기 (15~20시 사이, 20시 주문건수 기준 내림차순)

  • select + 행 축 데이터가 있는 칼럼 호출 + max(if())
  • max 구문 줄 바꿀 때 마다 , 로 구분!!

[예제2] 성별, 연령별 주문건수 Pivot Table 뷰 만들기 (나이는 10~59세 사이, 연령 순으로 내림차순)

  • 칼럼의 이름을 호출 할 땐 '' 사용
  • max() sum() 구문 사용시 group by 필수!

[Window Function]

1. Rank 함수

  • N 번째까지의 대상을 조회하고 싶을 때, Rank
  • Rank 는 이름에서 유추할 수 있듯이 ‘특정 기준으로 순위를 매겨주는’ 기능입니다.
    • 예를 들어, 주문 건수별 순위 매기기, 결제 시간이 빠른 순으로 순위 매기기 등이 가능합니다.
rank() over(partition by 분류기준 order by 정렬기준) "칼럼별명"

[예제] 음식 타입별로 주문 건수가 가장 많은 상점 3개씩 조회하기!

rank() over(partition by cuisine_type // 퀴진 타입 별로 랭크를 매겨줘 
			order by cnt_order desc) // 주문 건수가 많은 순(내림차)으로 랭크를 매겨
            ranking // 해당 칼럼 명칭을 ranking으로 지정해

2. SUM 함수

sum() -> group by vs sum() over()

  • GROUP BY (데이터 압축)
    지정한 칼럼을 기준으로 데이터를 뭉친다.
    그 과정에서 개별 데이터(Row)는 사라지고 그룹당 딱 한 줄씩만 남는다.

    • 특징: 전체 행 수가 줄어듭니다.
    • 용도: 부서별 총 급여, 날짜별 매출액 등 요약 보고서를 만들 때 사용합니다.
SELECT 부서, SUM(급여)
FROM 직원
GROUP BY 부서;
// 결과: 부서가 3개라면 딱 3줄만 출력
  • WINDOW FUNCTION (데이터 유지)
    sum() over()를 사용하면 원본 데이터의 모든 행이 그대로 유지
    각 행 옆에 해당 그룹의 합계가 추가로 붙는 식

    • 특징: 전체 행 수 변화 X
    • 용도: "내 급여가 부서 전체 급여에서 차지하는 비중은?" 처럼 개별 데이터와 전체 통계를 동시에 비교할 때 사용
SELECT 이름, 부서, 급여, 
       SUM(급여) OVER(PARTITION BY 부서) as 부서총급여
FROM 직원;
// 결과: 직원이 100명이면 100줄이 다 출력되고, 옆에 부서 합계가 붙는다

[예제] 각 음식점의 주문건이 해당 음식 타입에서 차지하는 비율을 구하고, 주문건이 낮은 순으로 정렬했을 때 누적 합 구하기

  • over(partition by cuisine_type order by cnt_order)
    -> 퀴진 타입별로 합계를 구하는데, 주문 수량 순으로 정렬한 다음 누적 연산
  • "cum_cuisine" 값이 9로 시작하는 이유는 cnt_order로 정렬했을 때 값이 1인 식당 간의 우위를 정할 수 없어서 한번에 계산이 적용됐기 때문.

[Date Format]

  • 같은 내용이더라도 데이터 타입에 따라 활용도가 다름
  • 컬럼명 좌측 시계 아이콘 = 날짜 형식의 데이터
  • yyyy-mm-dd 형식 -> date()날짜 데이터화 가능

[예제1]년도별 3월의 주문건수 구하기

  • '%Y' '%m%d' --> 날짜 포맷은 ''
  • date_format으로 리포맷 된 데이터는 숫자X 문자로써의 숫자임.
    • 따라서 '03' 과 같이 적어야함.
  • where문에서 별명으로 호출 안됨. date_format 함수 그대로 부르기.
  • 일요일 = '0' ··· 토요일 = '6'



// Evening /

  • 프로덕트 매니지먼트 개론 1-1, 1-2 수강

[PM 개론] PM의 정의와 역할, 그리고 조직 구조의 이해

1. PM(Product Manager)의 본질

PM은 단순히 기능을 만드는 사람이 아니라 전략과 실행을 통해 가치를 창출하는 역할임.

  • 핵심 공식: 전략 + 실행 -> 사용자의 편의 + 비즈니스 가치 창출
  • 기능: 사용자 관점과 비즈니스적 관점의 균형을 유지하며 프로젝트의 성장을 도모함

2. PM / 서비스기획자 / PO 역할 비교

현업에서 혼용되기도 하지만, 각 직무가 집중하는 핵심 영역은 다음과 같음.

구분핵심 역할주요 특징
PM프로젝트 성장사용자 및 비즈니스 관점의 균형
서비스기획자UX/UI 설계사용자 경험 집중 및 서비스 환경 구축
PO프로덕트의 탄생"0->1" 프로덕트의 태동기 담당

3. PM 역할의 세부 종류

프로덕트를 운영하는 조직의 성격에 따라 PM의 업무 범위와 목적이 달라짐.

  1. 인하우스 vs 에이전시
  • 인하우스: 자체적으로 제품·서비스를 개발하고 운영함
  • 에이전시: 외부 클라이언트를 위한 프로젝트를 수주하여 수행함

대기업 산하 SI(System Integration) 회사란?

그룹사 전담 SI는 에이전시와 인하우스의 성격이 섞여 있으나, 실질적으로는 에이전시에 가까움.

  • 인하우스
    • 예산을 쓰는 부서
    • 서비스의 성과(매출, DAU 등)가 곧 평가지표
  • SI 에이전시
    • 이익을 남겨야하는 회사
    • '오너십'보다는 '계약'과 '납기' 중심.
    • 정해진 기간 내 시스템을 사고 없이 구축하는 것이 최우선
    • 존재 이유: 그룹 내 IT 보안 및 리스크 관리, 전문 인력 관리의 효율성, 대외 사업 확장을 위해 별도 법인으로 운영됨.
  1. 스타트업 vs 대기업
  2. 내부 프로덕트 vs 외부 프로덕트
  • 내부: 사용자가 사내 동료이며 사내 시스템(ERP, 메신저 등) 개발 담당
  • 외부: 일반 사용자를 대상으로 시장 가치 창출
  1. 프론트 PM vs 백엔드 PM
  • 프론트: UX/UI Focus, 사용자 접점 담당
  • 백엔드: 눈에 보이지 않는 조직·시스템·로직 담당

0개의 댓글