본 글은 유튜브 생활코딩의 강의를 배경으로 하는 주관적인 글입니다.

에어테이블

에어 테이블이란

구글 스프레드시트와 비슷한 표의 형태에 추가적인 부가기능을 가지며, 칼럼(열)마다의 타입을 직접 설정할 수 있는 데이터베이스.

실제 백엔드 엔지니어들이 사용하는 데이터베이스보다는 가볍고(쉽고), 구글 스프레드시트보다는 무거운(전문적) 데이터베이스.

라고 할 수 있다.

https://www.airtable.com/

 

에어테이블 구조

추가로, 데이터베이스를 주로 활용하는 방식인 캘린더 / 폼(신청서) 등의 화면(페이지)을 지원한다.

예를 들어 구글의 경우 구글 스프레드시트에 데이터를 쌓게 하기 위해서 구글 폼을 사용하여 응답을 연결하는 방식. 즉 두 개의 앱을 사용하는 방식인 반면, 에어 테이블의 경우 데이터베이스와 폼 모두를 보유하고 있기 때문에 하나의 앱에서 두 가지 기능을 모두 사용 가능하다.

폼은 구글 폼에서도 지원하는 기능으로 큰 이점이 있다고 보기 어렵지만, 캘린더 등의 다른 뷰는 구글 문서에서는 지원하지 않는 기능으로 큰 이점이 있다.

에어테이블에서 지원하는 기본 포멧

 

무료인데 유료다

기본적으로 무료이나, 사용제한이 있으며 실질적인 데이터베이스로 활용하기 위해서는 유료결제가 필요하다.

가격정책은 다음과 같으며, 혼자 사용한다면 가격은 저렴한 편에 속하나, 

여러 명의 협업 목적으로 사용한다면 인당 가격이 부과되기 때문에 비용이 비싸진다.

비용구조

어떤 경우에 쓰나

플러그인이나 앱과의 연동뿐 아니라, 구글 스프레드시트보다 많은 기능을 지원하면서도 '본격적인'데이터 보이스보다는 라이트 하기 때문에 혼자 서비스를 만들거나 간단한 프로덕트를 기획하는 케이스에 많이 사용된다. 

 

기본적인 구조

워크스페이스 Workspace > 베이스 base > 테이블 Table > 뷰 View

구글 스프레드 시트랑 비교하자면

1. 워크스페이스 : 구글 문서 도구 (폴더)

2. 베이스 : 구글 스프레드시트 문서 1개

3. 테이블 : 구글 스프레드시트 문서의 탭 1개

4. 뷰 : - (구글 스프레드시트에서는 지원하지 않는 단계) 

 

워크스페이스>베이스>테이블>뷰

 

구글 스프레드시트를 대체할 수 있나?

구글스프레드시트를 문서도구로 사용하는 경우에는 해당하지 않겠지만, 데이터베이스로 활용한다면

유료임에도, 구글 스프레드 시트보다 상위 기능을 보유하고 있다는 점에서 대체가능하다고 생각한다.

 

  구글스프레드시트 에어테이블
차이 칼럼(열)별로의 타입을 설정할 수 없음
- 서식으로 값들이 "보여지는 방식"을 설정할 수 있으나
- 텍스트, 숫자, URL 등 행의 type을 설정가능해, 다른타입의 값이 들어올 수 없음
칼럼(열)별로의 타입을 설정할 수 있음
- 텍스트, 숫자, URL 등 행의 type을 설정가능해, 다른타입의 값이 들어올 수 없음
비용 무료 무료 + 유료
문서타입으로 사용가능성 O X
데이터베이스에 가까운가 자유도가 높아 상대적으로 가깝지 않음 자유도가 낮고 상대적으로 가까움
차트 기본 기능으로 사용 가능 APP을 연동해서 사용가능
대시보드 미지원 (직접만들어야함) 지원 
심미성 상대적으로 낮음 상대적으로 높음
폼/캘린더 등 부가기능 구글폼으로 연동해 사용 가능 내부툴로 사용가능
외부 툴 연동가능성 확장프로그램들이 있으나 업데이트가 적음 외부 APP과 연동 용이함

 

대시보드 기능

구글스프레드 시트에서는 대시보드를 만들려면 하나의 시트를 새로 만들고 거기에 차트를 몰아넣고, 지금부터 너를 대시보드로 부른다.라는 방식으로 대시보드를 만들 수 있다. 

즉, "대시보드"인 탭을 만드는 방식이다.

 

반면 에어 테이블에서는 자체 기능으로 대시보드 기능을 지원한다.

베이스에서 좌측 상단에 있는 인터페이스를 선택하면, 다양한 인터페이스를 지원하며 이중 대시보드를 선택할 수 있다.

interface

 

 

안전한가?

모든 데이터베이스 프로그램이 보안에 대한 이점을 어필하지만, 자체 데이터베이스를 구축하는 것만큼 보안 안정성이 높다고 하기 어렵다. 따라서, 기밀정보에 해당하는 정보들은 자체 데이터베이스를 활용하고, 에어 테이블 같은 서드파티 프로그램을 활용하는 것은 지양하는 것이 바람직하다.

 

함수 Formula도 지원한다.

구글 스프레드시트보다는 수가 적지만, 기본적인 함수 구조가 비슷하여 큰 어려움 없이 사용 가능하다.

https://support.airtable.com/hc/en-us/articles/203255215-Formula-field-reference

 

API와의 연동도 지원한다.

다양한 API 연동을 적극적으로 지원하여 다양한 자동화 업무가 가능하다. 가능한 API 리스트는 아래의 페이지에서 확인 가능하다. 

https://airtable.com/api

 

기본적인 사용법 링크

https://support.airtable.com/hc/en-us/sections/360009677453

 

생활코딩 강의 링크

https://youtube.com/playlist?list=PLuHgQVnccGMCD1zZNtEfdljrtoZIL4CaA 


(2023.10) 에어테이블을 활용해 노코드 프로덕트를 빠르게 만들어드립니다 👇

꼭 프로덕트가 아니어도, 에어테이블 세팅, 구축도 도와드려요 편하게 문의부탁드립니다

 

노코드로 쉽게 개발없이 웹서비스 뚝딱 만들어드립니다. - 크몽

s1ows1ow 전문가의 IT·프로그래밍 서비스를 만나보세요. 원하시는 페이지/서비스를,노션+우피보다 높은 퀄리티로 제작해드립니다. 제작자 소개1. 노코...

kmong.com

 

에어포스 1 👟

Nike Air Force 1 '07 Low White

나이키 에어포스 1 '07 로우 화이트

Kream 제품 정보 https://kream.co.kr/products/12831

모델번호 315122-111/CW2288-111
출시일 -
컬러 WHITE/WHITE
발매가 129,000원

 

아크네 페리 👟

Acne Studios Perey Lace Up Sneakers White

아크네 스튜디오 페리 레이스업 스니커즈 화이트

Kream 제품 정보 https://kream.co.kr/products/30408

모델번호 BD0113-ANC
출시일 -
컬러 WHITE/WHITE
발매가 €320 (약 426,500원)

 

 

오트리 메달리스트 👟

Autry Medalist Low Leather Sneakers White

오트리 메달리스트 로우 레더 스니커즈 화이트

 

 

Kream 제품 정보  https://kream.co.kr/products/48207

모델번호 AULM-LL15
출시일 -
컬러 WHITE/WHITE
발매가 $186 (약 234,100)

구매 링크 https://link.coupang.com/a/CMCxo

 

이피티 👟

코트 나일론_라이트 그레이

무신사 제품 정보 http://mss.kr/2525671

구매 링크 https://link.coupang.com/a/GHnRZ

 

그냥 제가 찾아본 내용 정리한거긴 한데 ...

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

beyond notion

이런 걸 하고 싶을 때가 있습니다.

노션을 사용하다보면 아래의 첨부 이미지처럼, 표/갤러리/타임라인/보드 등 데이터베이스를 행이 2개로, 연속해서 2줄로 표시하고 싶은 때가 있습니다. (특히 PC 최적화인 페이지를 만들 때 그렇죠)

한 페이지에 데이터베이스가 연속으로 2줄 표시

그런데,

익숙한 방법으로 칼럼을 밀어넣으려고 하면 동작하지 않습니다.

캘린더 밀어넣기

붉은색 박스인 예시 캘린더(1)를 잡고 예시 데이터(1)의 우측에 밀어 넣으려고 하면, 아예 동작하지 않습니다.

이렇게 해결하면 됩니다.

해결방법은 다음과 같습니다.

하나.

병렬로 놓고 싶은 두 개의 데이터의 맨 앞 관리 버튼 [::]을 클릭해 "페이지로 전환"을 클릭합니다.

페이지로 전환시키기

그럼 아래처럼 "표", "캘린더"가 아니라 "페이지"로 전환됩니다.

페이지로 바뀐 데이터

둘.

이제 하나의 데이터를 다른 하나의 데이터 옆으로 끌어서 옮깁니다.
표/캘린더로 되어있던 이전과 달리, 옆으로 이동이 가능합니다.

끌어다 놓기

셋.

이제 각각의 데이터의 [::] 버튼을 클릭해 모두 인라인으로 전환시켜주면 완성입니다.

병렬 배치가 된 데이터
인라인으로 전환


이렇게, 인라인 데이터베이스를 병렬 배치하는 방법을 알아보았습니다.
적용된 템플릿은 여기서 확인할 수 있습니다.

👇 필요한 노션 페이지/사이트가 있다면

 

노션 Oopy로 뚝딱 홈페이지, 서비스 만들어드립니다 - 크몽

s1ows1ow 전문가의 IT·프로그래밍 서비스를 만나보세요. 원하시는 페이지/서비스를,노션+우피 등을 활용해 빠르게 제작해드립니다.제작자 소개1. 노코...

kmong.com

 

이런 경우가 있습니다.

엑셀을 통해서 데이터베이스를 만들다 보면, 각 행마다 고유의 id를 부여해야 하는 경우가 있습니다.

단순히 1,2,3,4로 행마다 숫자를 넣어두면 행의 순서가 바뀌거나 중간에 삭제되거나 할 때마다 혼선이 생깁니다.

 

id 이름 날짜 별점
1 김철수 2021/04/06 5
2 박박사 2021/05/31 4
3 김이박 2022/09/04 3
4 초초초 2022/12/12 5

이렇게 되어있다가 3행을 삭제하게 되는 경우엔

 

id 이름 날짜 별점
1 김철수 2021/04/06 5
2 박박사 2021/05/31 4
4 초초초 2022/12/12 5

id가 1,2,4 가 되어 오류처럼 보이게 됩니다.

또한, 순서대로 숫자가 올라가는 형태이기 때문에 새로운 행을 추가해줄 때마다, 최종 id 값이 몇 번인지 확인하고 넣어줘야 합니다. 

위 예시에서는 3개밖에 안되기 때문에 다음 값으로 5를 넣어주면 되지만, 행이 천 개에서 만개를 넘어가게 되면 다음 행값을 계산하는 것은 굉장히 복잡한 일이 됩니다.

 

이런 대안들이 있습니다.

1. rand()

rand() 사용 예시

id 이름 날짜 별점
0.4131525679 김철수 2021/04/06 5
0.9862289703 박박사 2021/05/31 4
0.3600194268 김이박 2022/09/04 3
0.3096730023 초초초 2022/12/12 5

=rand() 함수를 써서 실수인 난수(소수점)를 생성할 수 있습니다. 

하지만, 중복이 제거되지 않습니다. 매우 작은 확률이지만 같은 숫자가 나올 수 있습니다.

그리고, 커뮤니케이션하기 매우 어렵습니다. 전달할 때

"id값이 0.8723891237곳 확인해주세요"는 어렵겠죠.

 

2. randbetween(시작 값, 끝 값)

randbetween() 사용 예시

id 이름 날짜 별점
3 김철수 2021/04/06 5
9 박박사 2021/05/31 4
3 김이박 2022/09/04 3
4 초초초 2022/12/12 5

=randbetween(시작 값, 끝 값)을 통해서 정수인 난수를 생성할 수 있습니다.

커뮤니케이션은 rand에 비해서 많이 쉽지만,

하지만, 역시 중복이 제거되지 않습니다. 숫자 크기를 키우면 확률이 줄어들지만 역시 같은 숫자가 나올 가능성이 있습니다.

 

 

그런데, 이런 기능이 없습니다.

그래서 각행마다 랜덤 한 문자나 숫자로 unique ID를 만들어 주는 기능이 필요한데,

실제적으로 엑셀, 구글 스프레드시트에서는 해당 기능을 제공하지 않습니다.

 

단, 함수를 조합하고 설정을 통해 동일한 형태를 구현할 수 있습니다.

 

대신 이렇게 하면 됩니다.

=IF(COUNTIF(해당셀의칼럼, 해당셀)=1, 해당셀, RANDBETWEEN(숫자시작값,숫자끝값))

해석 : 랜덤 ID를 넣고자 하는 셀이 포함된 행에 해당 셀과 같은 값이 있다면, randbetween 함수를 돌려라.

 

countif/randbetween 사용 예시

다만, 이렇게 처음 하면 오류가 나는데요.

오류발생

당황하지 않고, 먼저 파일 > 설정으로 들어갑니다. (엑셀도 동일)

설정으로갑니다.

 

설정에서 계산> 반복 계산을 "사용"으로 바꿔주시고, 하단의 설정 저장으로 나와줍니다.

(기본값은 사용 안 함으로 되어있을 겁니다.)

반복계산을 사용으로 설정

 

그럼 이렇게 E열에 모두 다른 값을 가지는 10000~99999 사이의 숫자를 갖게 된 것을 알 수 있습니다.

이렇게 하면, 위의 대안들의 모든 문제를 다 해결합니다.

 

1. 읽기 쉽습니다. ID값이 숫자 5자리로만 되어있으니 팀원에게 공유하기 편합니다. "id값 81345 봐주세요"

2. 중복 값을 가지지 않습니다. 자기자신의 셀과 동일한 값을 가진 셀이 해당 칼럼내에 있는지 확인하고, 있다면 랜덤값을 다시 생성하고 이를 반복하기때문에 해당셀이 중복값을 가질 가능성이 없습니다.

성공!

 


 

[노션 꿀팁] Notion 페이지 타이틀 제목 두줄(여러 줄) 만드는 방법 <노션트릭>

[노션 꿀팁/트릭] 노션 페이지 타이틀 2줄(여러 줄) 만드는 방법 과거 노션은 타이틀을 2줄 이상 작성할 수 있도록 허용하고 있었으나, 최근 언젠가부터 타이틀 의 줄 바꿈 줄 나눔을 지원하

slowslow.tistory.com

 

알려드릴게요

[노션 꿀팁/트릭] 노션 페이지 타이틀 2줄(여러 줄) 만드는 방법

과거 노션은 타이틀을 2줄 이상 작성할 수 있도록 허용하고 있었으나, 최근 언젠가부터 타이틀

의 줄 바꿈 줄 나눔을 지원하지 않고 있습니다. 

두줄 예시

위처럼 두줄로 표기하기 위한 여러 가지 방법

1. 컨트롤 ctrl + 엔터 Enter

2. 알트 alt + 엔터 Enter

3. 윈도 window + 엔터 Enter

모두 다 해보아도 아래와 같은 결과만 노출됩니다.

 

두줄 오류 예시

맥북도 윈도우도 동일합니다.

 

하지만, 방법이 없는 것은 아닙니다.

준비물은 "이미 타이틀(제목)이 두 줄로 표시되어있는 템플릿 복제가 가능한 노션 페이지"입니다.

본인 소유의 페이지라면 복제 가능 여부는 없어도 괜찮습니다.

 

타이틀이 두줄인 페이지는 여기 있어요 👇

 

안녕하십니까 변호사 아이유입니다. 국힙원탑입니다 🏅

A new tool for teams & individuals that blends everyday work apps into one.

jolly-english-7f9.notion.site

 

👋 순서대로 따라 하면 돼요


첫 번째.

이미 타이틀(제목)이 두 줄로 표시되어있는 템플릿 복제가 가능한 노션 페이지에 접속한다.

그리고, 복제 버튼을 통해 내 노션으로 해당 템플릿을 가져온다.

복제하기

 

두 번째.

가져온 템플릿에서 타이틀을 쭉 드래그하고 복사한다.

(노션 특성상 해당 타이틀이 아니라 페이지가 복사돼 기도하기 때문에, 컨트롤 + C를 여러 번 누른다.)

복사하기

 

세 번째.

여러 줄의 타이틀을 적용하고 싶은 페이지로 돌아와 타이틀에 붙여 넣기를 한다. 여러 번 붙여 넣기 하면 두줄 세줄도 가능하다.

붙여넣기

네 번째.

원하는 내용으로 타이틀을 수정합니다.

단, 이 역시 타이틀에 여러 줄을 밀어 넣었을 뿐 "줄 바꿈/엔터"는 지원하지 않기 때문에 아래처럼 빈 줄을 만들려면, 해당 줄의 모든 내용을 삭제하면 됩니다.

완성

 

노션 페이지 제작 문의하기 👇

 

노션 Oopy로 뚝딱 홈페이지, 서비스 만들어드립니다 - 크몽

s1ows1ow 전문가의 IT·프로그래밍 서비스를 만나보세요. 원하시는 페이지/서비스를,노션+우피 등을 활용해 빠르게 제작해드립니다.제작자 소개1. 노코...

kmong.com


 

[꿀팁] Notion 노션 학교계정 변환 방법 - 개인 프로 무료 업그레이드

[꿀팁] Notion 노션 학교 계정 변환 방법 - 개인 프로 무료 업그레이드 대학생 2021 파일 업로드 무제한으로 바뀌는 노션의 매달 5달러짜리 개인 프로 요금제가 대학생과 교사 대상으로 무료 사용으

slowslow.tistory.com

 

유튜브에 올라와있는 앱 시트 Appsheet 노코드 강의 <코딩하는 약사>님의 강의를 수강하며 기록한 개인 공부 목적으로 기록한 자료입니다. 

 

 

구글 스프레드시트 데이터입력 > 확장 프로그램 > 앱 시트 > 앱 만들기

 

구글 스프레드시트의 데이터를 바탕으로 껍데기는 만들어짐

 

Data > Colums > 직원 정보에서 데이터 타입을 설정

 

UX 탭으로 옴, + 버튼을 눌러서 데이터를 입력함

 

저장하면, 입력한 데이터가 구글 스프레드시트에 반영되어있음

 

디테일뷰, 목록 뷰로 노출됨

구성은 UX에서 변경할 수 있음

 

(TBD)

nocode

 

노코드를 배우게 된 계기

프로덕트 매니저로 일하면서, 다양한 프로토타입으로 실제 테스트를 해보고 싶은 경우도 있고, 내가 생각한 것을 구현해보고자 하는 욕구가 크다. 그런데 늘 그렇듯 개발자와 디자이너 리소스는 부족하기 때문에, 우선순위에 밀려 못하게 되는 경우가 많다.

그래서, 내가 직접 앱/웹을 만들 수 있다면 어떨까라는 생각을 했고, 노코드 플랫폼을 알게 되었다.

어느 정도 시간만 투자한다면 원한 바 대부분을 얻을 수 있을 것이라고 생각했고, 스스로 하나의 특장점이 될 수 있다고 생각해 강화해보고자 한다.

 

노코드 툴에 관해

노코드 툴은 말 그대로 No code. 코드를 직접 쓰지 않고 앱/웹 등의 서비스를 만드는 툴을 말한다. 2022.03 현재 노코드 툴은 굉장히 많이 있다. 글라이드, 아달로, 앱 시트, 버블 등등. 이에 관해서 사수 캠프에서 다양한 노코드 툴의 사용목적이나 방법에 대해 안내한 글을 참조해 처음에는 글라이드를 공부하려 했다.

 

글라이드를 선택했던 이유

1. 구글 스프레드시트와의 연동을 지원한다.

노코드 툴은 대부분 데이터베이스를 Airtable이라는 툴을 사용하는듯하다.

하지만 노코드 앱/웹 메이킹 툴만 공부하는 데에도 시간이 많이 쓰일 것이라고 예상해, 굳이 DB를 위한 툴 공부에 시간을 쓰고 싶지 않아 구글 스프레드시트와의 연동을 지원하는 글라이드를 선택했다.

 

2. UI가 예쁘다.

아래의 스크린숏은 내가 만들려고 했던 "거래를해보쇼"라는 앱이다.

 

대충 봐도 알 수 있듯이, 글라이드 Glide는 아주 쉬울 뿐 아니라 예쁜 UI의 앱을 만들어주는 막 강한 툴이다.

하지만, 생각보다 글라이드는 쉽고 빠르게 만드는 데에 초점이 되어있을 뿐, 자유도가 생각보다 많이 낮았다.

 

글라이드 Glide로 앱 만들기 후기가 궁금하다면 👇

 

[노코드 입문기] 글라이드 Glide 는 비추천합니다 - 샘플 앱, 거래 플랫폼, 에어비앤비

내가 글라이드로 만든 앱 거래를해보쇼 장르 마켓플레이스(플랫폼) 거래가능일자를 선택할 수 있는 마켓플레이스를 만들고자 했지만 실패했다. 소요시간 기웃거린 시간은 4시간 실제 제작 소요

slowslow.tistory.com

 

⚠️ 글라이드 Glide의 한계

1. 첫 페이지가 무조건 Style에 정해진 8가지 중 하나만 가능하다. 

리스트, 타일, 캘린더, 맵, 체크리스트, 카드, 스와이프, 디테일.

그렇기 때문에 설명이 적힌 랜딩페이지를 만들거나 하는 것은 어렵다.

 

2. 검색이 제한적이다.

타이틀, 부가정보 등으로 검색할 수 있으나, 날짜를 지정해 캘린더로 검색하는 기능은 지원하지 않는 듯했다.

또한, 필터도 하나의 조건만 가능하다. (eg. 총 상품 종류가 신발, 바지, 시계인 경우 세가 가지 중 하나만 선택 가능하며 다른 필터를 함께 적용할 수 없다. )

 

일정과 관련된 마켓플레이스를 만들어 보고 싶었기 때문에 위의 이유 때문에 글라이드 Glide를 사용하지 않게 되었고, 2번의 장점을 포기한 채 1번의 장점을 가진 앱 시트 Appsheet를 배우게 됐고, 앱 시트는 글라이드에 비해 심미적인 UI가 떨어지지만 자유도가 매우 높다. (수많은 노코드 플랫폼 중에서 구글이 앱 시트를 인수했다는 점에서, "쉽고" "파워풀하다"라는 점이 이미 증명됐다고 생각할 수도 있다.)

 

글라이드 Glide를 공부할 때는 제대로 된 가이드 문서가 없다시피 해, 하나하나 눌러가면서 배워야 했지만, 앱 시트는 <코딩하는 약사>라는 블로거/유투버분이 계셔서 강의자료를 참조하려고 한다.

 

코딩하는 약사님 강의 수강 기록 👇

 

[노코드 입문기] 앱시트 시작하기 1~4강 <코딩하는 약사>

유튜브에 올라와있는 앱 시트 Appsheet 노코드 강의 <코딩하는 약사>님의 강의를 수강하며 기록한 개인 공부 목적으로 기록한 자료입니다. 구글 스프레드시트 데이터입력 > 확장 프로그램 > 앱 시

slowslow.tistory.com

 

내가 글라이드로 만든 앱

내가 글라이드로 만든 앱

거래를해보쇼

장르

마켓플레이스(플랫폼)
거래가능일자를 선택할 수 있는 마켓플레이스를 만들고자 했지만 실패했다.

소요시간

기웃거린 시간은 4시간 실제 제작 소요시간은 1시간 내외
사용법을 몰라서 익히는 데에 시간이 많이 들었다. 강의나 자료가 있다면 훨씬 단축됐을 것이다.

링크

https://delicious-request-5699.glideapp.io/
(무료체험판이라 동시접속인원 최대 1명)

목적

날짜 선택이 가능한 마켓플레이스를 만들자!
개발자/디자이너 없이 내가 머릿속으로 생각한 무언가를 구현해보자!

화면 구성

1. 랜딩페이지 = 상품 리스트
검색 가능, 상품 추가 가능

2. 상품 상세페이지
상품정보 노출, 수정 가능, 판매자에게 전화 문의 가능
전화 문의하기 클릭 시 전화 발신됨

3. 상품정보 수정 페이지
상품정보 수정 가능, 삭제 가능

 

후기

1. 글라이드로 만들기 포기한 이유
날짜 선택 관련 기능이 글라이드에서 약해서 중도 포기하였다.

2. 아쉬웠던 점
유저별(이메일 등의 값)로 상품 등록할 수 있는 사람과, 수정/삭제할 수 있는 사람을 정의하는 방법까지 깨우쳤으나 유료 기능인 관계로 구현하진 못했다.

3. 시간 소요
노코드 툴도 고르고 처음부터 배우느라고 시간을 많이 썼다. 꽤 재밌고 미려한 앱이 나왔지만, 글라이드 특유의 자유도가 너무 낮아서 아쉬웠다. 특히 첫 페이지가 꼭 리스트/카드 등의 형식 이어야 하는 점이 아쉬웠다.


다시 글라이드로 돌아올 수도 있지만,
우선은 구글스프레드시트 연동을 기본적으로 제공하면서 자유도가 훨씬 높은, 앱시트를 공부해보려고한다.

 

[노코드/앱시트 입문기] 노코드 플랫폼 선택방법, 글라이드Glide 선택이유, 글라이드Glide 단점, 앱

노코드를 배우게 된 계기 프로덕트 매니저로 일하면서, 다양한 프로토타입으로 실제 테스트를 해보고 싶은 경우도 있고, 내가 생각한 것을 구현해보고자 하는 욕구가 크다. 그런데 늘 그렇듯 개

slowslow.tistory.com

 

 

[노코드] 노션으로 서비스 만들기 - 교정비용 계산기 (토이프로젝트, 사이드 프로젝트, 구글애널

노코드 대표 솔루션인 노션 Notion, 탈리 Tally 등을 활용해 4시간 만에 간단한 서비스를 만든 경험을 공유합니다. 노션으로도 충분히 간단한 서비스를 만들 수 있고, 가설 검증을 위한 퀵한 프로토

slowslow.tistory.com

 

좋았을것들

나는 이번 3월 SQLD시험을 신청했다가 환불했다.

충분히 공부를 못해서 환불한 것도 맞지만, 예상과 다른 부분이 있어서 굳이 SQLD 자격증을 따지 않아도 되겠다는 생각을 했다.

오히려 이 내용을 신청 전에 알았다면 신청하지 않았을 텐데라는 생각으로, SQLD 자격증을 준비하고자 하는 모든 사람들을 위해 글을 쓴다.

 

응시료(비용)와 환불 💸

- 응시료 :  5만 원

- 신청 후 5일 이내 환불 : 전액 환불 (5만 원)

- 신청 후 5일 이후 환불 : 50% 환불 (2.5만 원)

 

DBMS종류

MS SQL, ORACLE 언어로 되어있음

SQL은 MS SQL, ORACLE, MYSQL 등 다양한 DBMS로 구성되어있고, SQLD 시험은 MS SQL과 ORACLE이 혼재되어 출제됨.

즉, 다른 DBMS를 써봤거나, 다른 DBMS만 쓰는 환경이라면 SQLD 자격 보유 여부는 실질적인 메리트가 적다.

 

인프런 등 국내 SQL강의에서 가장 많이 사용하는 DBMS는 MySQL로 위의 두 가지와 다르기 때문에 실질적으로 MySQL을 다뤄본 사람이 시험 준비를 한다고 해도 이점은 적으며, 오히려 기존에 사용하던 문법과 다르기 때문에 헷갈릴 수도 있다.

 

현업자에게 필요한가?

"자격요건이 없는" 대부분의 자격증이 그렇듯 SQL을 통한 프로젝트 경험이 있어 포트폴리오나 이력사항으로 증명 가능한 경우 본 자격증은 크게 의미가 없다고 볼 수 있다. 즉 현직자에게는 큰 의미가 없다. 

 

데이터 분석가를 제외하면 SQL 사용에 대해서 가장 많이 어필되는 직군은 마케팅, 기획자인듯하다. 실제로 주변의 마케터와 기획자분들을 보면 SQL을 사용하지 못하는 분은 드물다. 운영(사업개발) 직군 분들도 사용하시는 경우가 있을 정도로 대중적인 스킬.

 

하지만 반대로 그분들 중에서 SQLD를 보유한 분 역시 보지 못했다.

물론, 이 부분은 SQLD자격증이 생긴 지 얼마 안 되어서이기도 할 것이지만, 실질적인 매력도와 필요성이 낮은 자격증임을 의미한다.

 

데이터 분석가나 개발자가 아닌 이상, 현업에서는 데이터 구조가 어떻게 생기고 어떤 DMBS가 특성을 가지는지 알 필요가 없다. 그저 유의미한 데이터를, 정확하게 뽑고 잘 활용하는지가 중요하다.

 

정리하자면

즉, MySQL로 SQL을 사용하시는 저와 같은 현직자 분들께는 추천드리지 않습니다.

아직 사용하는 언어가 없는 취업준비생 분들께는 대체 가능한 자격증도 없고, 프로젝트도 어렵기때문에 추천드립니다.

차라리, Coursera와 같은 교육 프로그램을 통해서 SQL certificated를 받는 것을 추천드립니다.

클래스 101 이유미의 카피라이팅 강의

강의 정보

강의명

29CM 헤드 카피라이터 출신 이유미의 팔지 않아도 사게 만드는 카피라이팅

 

강의 링크

https://class101.net/products/pffl5xVYhyP2vJTeowKg

 

강의 수강료

카피라이팅 클래스 수강권 Only 선택 : 158,700원

구성별 가격정보

 

강의 구성(커리큘럼)

상세 커리큘럼

 


 

수강 후기

 

🤔 이 강의를 수강한 이유 - 수강 목적

프로덕트 매니저로서 일하면서, 생각보다 글을 쓸 일이 많았다. 서비스를 소개하는 랜딩페이지(홈)를 만들어야 했고, 특정 정보를 왜 수집하는지 안내 모달을 적어야 했고, 서비스 신청을 유도하는 작은 버튼 문구까지 직접 작성해야 했다.

 

특히 이런 글들의 대부분은 유저에게 특정 행동을 유도하게 하는 후킹 문구인 경우가 많으며, 모바일이라는 작은 화면에 작성해야 하기 때문에 글자 수(글의 길이)에 굉장히 민감하다. 

 

글을 잘 쓰는 것은 마치 예술과 같아서 어느 정도의 재능 기반 영역이라는 것은 알지만 내가 쓰는 서비스를 더 잘 알리고 더 매력적으로 전하기 위해서 카피라이팅 강의를 수강하고자 하였다.

 

여러 카피라이팅 강의 중에 이유미 강사님의 강의를 특한 이유는, "세일즈카피"를 대상으로하는 카피였고, "29CM"의 카피의 팬이었고, 시중에 공개된 카피라이팅 강의중에 가장 "공인된 강사"였기 때문이다. 

 

👍 추천 여부

상/중/하 라면 "중"

별점으로 치면 3.0 정도?

 

🤨 추천 대상

짧은 카피가 아니라 긴 카피를 쓰는 연습을 하고 싶은 분 (최소 14자 이상)

마케팅/UX라이팅이 아니라 감성적인 짧은 문장을 쓰는 연습을 하고싶은 분

프로덕트(서비스)보다는 "상품"에 대한 글을 쓰고 싶은 분

 

즉, 저와 같은 프로덕트 매니저, 프로덕트 오너, 서비스 기획자이신 분들이나, 작은 영역의 광고 계좌를 운영하는 마케터/카피라이터 분들께는 추천하기 어려울 것 같습니다.

 

💬 강의를 듣고 나서 - 수강 후기

 

아! 내가 찾는 강의는 아니었구나

 

프로덕트에 사용되는 카피라이팅은 프로덕트의 강점/특징을 가로 375px의 모바일이라는 작은 공간 안에 핵심적으로 담는 것이 중요하다. 타이틀 사이즈로 사용되는 카피한 줄의 글자 수는 많아도 25자를 넘기기 어렵다.

 

아래의 카카오톡의 무신사 광고가 그 예시이다.

"메종 마르지엘라 최대 57% 할인" (공백 포함 18자)

"무신사에서 10% 특별 할인 쿠폰까지!" (공백포함 21자)

모바일 앱인 카카오톡 채팅방리스트 상단의 광고배너

 

그러나 본 강의의 이유미 카피라이터님의 강의는 기본적으로 "상황을 최대한 구체적을 설명하게 마이크로 타케팅 한 카피"를 작성하는 것에 초점이 맞춰져 있다.

 

(지금은 이유미 카피라이터님이 29CM에서 퇴사하셨지만) 29CM에 노출되어있는 카피를 보면, 위의 카카오톡 광고와 그 길이 차이를 명확하게 느낄 수 있다.

 

 

타이틀의 길이는 비슷할지 몰라도, "서브타이틀"처럼 사용되고 있는 안내문구의 길이가 6줄이다. 

 

꼭 위의 사례가 아니더라도, 29CM를 살짝 둘러보아도 상품/기획전의 소개 문구가 다른 어떤 커머스보다 "명료하지 않고" "비유를 사용해 에둘러 표현하며" "길게 쓰고" "정확한 타깃 소수에게만 어필하려는 경우가 많음"을 알 수 있다.

 

29CM의 팬이었고, 이유미 카피라이터님의 카피를 좋아했기에 이 강의를 수강한 것이었지만, 안타깝게도 위의 극명한 차이를 강의 수강 후에야 알 수 있었다.

 

하여, 프로덕트보다는 커머스의 카피라이팅 또는 블로그용 글에 더 적합할 것 같다고 생각했다. 특히 커머스 중에서도 문구 길이의 제약이 없는 "상세 설명 페이지"가 적합할 것이라고 생각했다.

 

 

음, 아쉽다.

 

나에게 피한 강의가 아니었기에 자연히 만족도가 낮고 아쉬움이 클 수밖에 없지만, 강의를 들으며 내가 느낀 아쉬움들은 다음과 같다.

 

하나. 강의 전반에 걸쳐 "비슷한 내용"이 계속 반복되는 느낌

초반 챕터에서는 쓰는 방식에 대한 접근들, 후반 챕터에서는 실제 사례를 설명하는 구성으로 당연히 비슷한 내용이 반복될 수밖에 없다.

 

다만, 비슷한 내용이 반복됨이 아쉬움으로 느껴진 이유는 이렇게까지 자세히 설명하고, 반복적으로 부연해주지 않아도 될 내용조차 부연되고 있기 때문이었다.

 

 

둘. 강의 비용에 비해 "강의 전체 길이"가 상당히 짧은 점

1. 웰컴 챕터 - 강의 소개 파트 (강의 내용 없음)  약 18분

2. 챕터 1 - 약 60분

3. 챕터 2 - 약 55분

4. 챕터 3 - 약 53분

5. 챕터 4 - 약 64분

6. 아웃트로 챕터 - (강의 내용 없음) 약 3분

 

사실상 의미가 없는 1,6을 제외하고, 챕터 1개당 약 60분으로 치면 총 4시간짜리 강의다.

이 강의의 수강료는 약 15만 원이다. 단순 계산이, 시간당 비용이 현명한 기준은 아니지만, 1시간에 37,500원의 강의인 것인데.. 음.. 

 

 

셋. "저는 이렇게 썼어요"가 많은 점

후반부 챕터에서 직접 쓰셨던 카피의 실제 사례/습작들을 보여주시는데, "이렇게도 써보았습니다. 하하" 이런 느낌의 단순 소개 사례들이 왕왕 등장한다. 이런 카피는 무엇이 좋고 이렇게 쓰려면 뭘 해야 하고 어떤 걸 조심해야 하는지 등이 없이 개인적인 작품을 단순히 쇼잉하는 느낌.

 

 

넷.  (가장 크게 아쉬웠던 점) 세일즈 카피에 대해서 강의해주셨는데, 고객 반응에 대한 언급이 없는 점

어떻게 썼을 때 유저들에게 더 반응이 좋았고, 어떻게 썼을때 전환율이 올라갔는지 등에 대한 내용이 강의 전반에 단 한 번도 나오지 않았다. 즉, 실제로 세일즈에 도움이 되는 카피를 쓰는 방법이 아니라, 세일즈 필드에서 "다르게"써 볼 수 있는 카피를 쓰는 강의였다고 볼 수 있다.

 

카피라이팅이 물론 브랜드 전체의 색에 큰 영향을 주는 요소 이긴 하나, 많은 거래와 매출을 발생시키는 것이 가장 중요한 커머스의 세일즈 카피라이팅이 고객 반응이나 지표가 아니라 단순히 "다르게 씀"정도로 접근되었다는 게 다소 작가주의적인 요소로 느껴져 아쉬웠다. 


 

강의 핵심 내용

더보기

"세일즈 카피 쓰기의 기본"

  • 단어와 단어의 낯선 조합, 멋진 비틀기를 연습하자
    • 알고있고 평범한 단어이지만 서로 잘 연결되지 않는 단어들을 조합함.
    • 영화 사례.
      • 킬러의 보디가드, 8월의 크리스마스 ..
    • 29cm 사례.
      • 한겨울에도 따뜻한 패딩 점퍼 → 온기를 처방받은 점퍼
      • 따뜻한 컬러의 니트 → 상큼한 보온
      • B급 리퍼브 세일 → 쇼핑의 B안
    • 연습방법.
      • 자주쓰는, 자주안쓰는 임의로 단어 20개를 나열한 후. 가장 연관성이 있는 순서대로 나열
      • 그 후, 양끝의 단어들을 이어서 의미를 만들어보기
      • 사례.
        • 발효 + 과학 → 발효과학 딤채
        • 주부 + 자유공화국 → 주부 자유공화국 이노
        • 부엌 + 퍼스트클래스 → 부엌의 퍼스트클래스
    • 유의어와 반의어를 꼭 찾아보는게 좋음.
  • 시선을 멈추게 하는 제목짓기
    • 제목은 사소하고 디테일할수록 좋다. 작성 후에 “나라면 이 타이틀에 눈길이 갈까?”를 판단해보면 좋다.
    • 5가지 방법
      • 좁고 다양한 타깃 설정
        • 모두 공감시키지 않고 특정 타겟만 고려한다.
        • 제목에 정확하게 “누구"를 타겟으로 하는지 명시
        • eg.
          • 해외출장을 자주 가는,
          • 자전거로 출근하는,
      • 공감 사례 제시
        • 당신도 그렇지 않나요?라는 특정 상황에 대한 공감 제안
        • eg.
          • 다림질할 때 허리 많이 아프죠? - 스탠딩 다림대
          • 고기 썰때 아직도 불편하게 칼로 써세요? - 고기용 가위
      • 제품의 정보나 사용 방법 노출
        • 사용방법이나 소재를 직접 노출
        • → 단, 이는 다른 방법 대비해서 가장 평이한 접근으로 보임. 효율이 낮을 수 있음
        • eg.
          • 입안에 직접 뿌리는 스프레이
          • 신고 벗기 편한 로퍼
      • 불안 요소 강조
        • 유저에게 “긍정"을 어필하는 것이 가장 좋음. 이 방법은 공포마케팅에 가깝기때문에 추천하지 않음.
        • eg.
          • 삼켜도 되는 치약 - 유아용 치약
          • 배는 고픈데 문제는 없어요
          • 아직도 OO 없으세요?
      • 구체적인 숫자 제시
        • 수많은 글자 속에 숫자를 넣으면 기억에 더 남음
        • eg.
          • 10만원 안 넘는 원피스만 모았어요
          • 시작하면 3시간은 훌쩍 레고 베스트 10
          • 마음껏 먹어도 6Kcal - 저칼로리 식품
          • 76만이 선택한 가사도우미 - 로봇청소기
      • 기타방법 1 - 비법을 알려준다 “~하는 방법”
        • “~방법”의 카피는 유저들이 클릭할 확률이 높다고 한다.
        • eg.
          • 서늘한 날씨 답답하지 않게 니트 입는 법
          • 빈티지 스웨터 쉽게 스타일링 하는 법
      • 기타방법 2 - 나열하기 “~하는 N 가지”
      • 기타방법 3 - 증거제시
        • 통계자료, 데이터 제시
  • 사람을 관찰하면 힌트가 보인다.
    • “달은 어디에나 있지만 보는 사람에게만 뜬다”
    • 추워지거나 따듯해지거나 비가 오거나 흐려지거나, 날씨 별로 소비자의 행동이 달라지기때문에 미리 확인해두는 것이 좋다.
  • 창조 말고 편집! 모든게 재료, 잘 빌려 쓰기
  • 또렷한 기억보다 희미한 연필자국이 낫다, 메모의 힘!
  • 쉽고 경제적으로 쓴 카피가 똑똑한 카피
    • 고객이 “내 이야기”라고 받아들일 수 있도록, 일반적으로 많이쓰는 표현을 사용하자.
      • 줄임말, 비속어나, 은어나, 어려운 전문용어가 아니라 일상적으로 쓰는 단어의 조합
      • 일반적으로 쓰는 말을 찾을려면 ‘구어체'로 나와있는 인터뷰집을 참조하면 도움됨
    • 동어 반복은 매력도가 떨어질 수 있다. 동의어 사용으로 글을 읽는 재미를 주는 것이 좋다.
    • 고객은 긴 글을 읽어주지 않는다. 짧게 경제적으로 전달하고자 하는 바만 줄여써서, 빠르게 결정할 수 있게
      • 컬러풀한 색감의 데일리웨어 → 컬러풀 데일리 웨어
      • 숏한 기장감 → 짧은 길이
      • 더큰 할인으로 구매하는 프리오더 → 더큰 할인의 프리오더
    • 먼저 소개된 정보에 관심을 기울이기때문에 “상품"에 해당하는 “무엇을"을 맨앞에 써주자.
      • 11,000원에 양말 5묶음 → 양말 5묶음에 11,000원
    • 메인타이틀과 서브타이틀 쓰는 팁
      • 첫째, 내가 공감한 문구를 떠올리기. 내가 어떤 문장에 공감을 받았는가.
      • 둘째, 멋진비틀기를 많이 시도해보기.
      • 셋째, 유의어 / 동의어를 많이 찾아보자.
      • 넷째, 쉽게써진 카피는 패스해야한다. 쓰는이가 쉽게쓰는 글을 고객에게 어려울 가능성이 높다.

"대단한걸 쓰지 말고 사소한 걸 쓰자"

  • 뿌옇게 쓰지 말고 뽀드득 선명하게 쓰자
    • method
      • 모호하게 설명하지 말고, 선명한 이미지를 제공하자. 손에 잡힐 듯 선명한 구체적인 언어.
      • 색다른, 남다른 과 같은 표현은 뿌연 표현에 가깝다. 특별함을 강조하기 어렵다. 왜 특별한지를 보여주는 게 좋다.
        • 색다른 젤리슈즈 → 재활용플라스틱으로 만든 젤리슈즈
      • ‘지금’, ‘요즘’은 조금 위험한 표현이다. 시간에 따라 상황과 환경이 계속 바뀐다. 아주 짧은 시간 쓰는 카피가 아니라면 고객이 겪는 상황과 환경에 따라서 ‘지금', ‘요즘'이라는 시간적 특수성은 misfit을 만들 가능성이 크다. 따라서, 의도한 ‘지금',’요즘’ 이 어떤 시점인지 풀어써주는 것이 좋다.
        • 지금 필요한 쥬얼리 → 청바지에 흰티셔츠를 입은날 잘어울리는 쥬얼리
    • 구체적으로 작성된 글을 마주할때 유저는 자신이 배려받는다고 느끼고 큰 공감을 느낀다. 이 모든 것이 유저의 브랜드 경험으로 이어진다.
    • 팔아야하는 상품이 아니라, 쓰는 사람을 생각해야한다. 이 접근이 구체적으로 상황을 설명하는데에 도움이 된다.
  • 구체적인 카피가 고객에게 줄 수 있는 것
    • 구체적인 카피는 고객에게 많은 고민을 강요하지 않는다.좋은 카피는 고민하지 않게 해야한다.
      • eg.1
        • “적은 예산으로~ “ : 적은 예산은 얼마지? 사람마다 예산이 다름
        • → “10만원 미만으로~” : 정확히 얼마인지 구체적으로 기준을 제시해줌
      • eg.2
        • “00에 기부해주세요”
        • → “00는 어린이들에게 맑은 물을 제공하는 데에 기부금을 쓰고있습니다” : 기부금이 어떻게 쓰이는지를 알려줌
  • 모두에게 팔면 모두 사지 않는다, 타겟은 좁고 촘촘하게 정하자
    • 타겟은 촘촘하게, 꼭 필요한 사람들에게만 판다.
    • 고객은 딱 한사람이라고 생각하라
      • 아마존 _ 4500만명의 소비자가있다면 4500개의 가게를 운영해야한다.
    • 분류는 자세하게
      • 남자, 여자, 아이, 어른 으로 나누지 말고
      • → 20대 워킹맘, 카페에서 일하는 사람, 식당에서 혼밥할 때
    • 읽을 사람이 기분나쁠단어는 제외해야한다. 그들의 삶이 이 상품으로 어떻게 변화할지를 함께 언급
      • eg.
        • 암센터 → 암 치유 센터
        • 중환자실 → 집중 치료실
        • 노인석 → 우선석
  • 최고를 쓰지 않는다
    • 베스트, 최악 등 과장된 표현을 제외한다.
    • 최고를 말하는 카피는 반복적으로 사용될 수 없다. 최고를 말하는 카피가 아니라, 최선의 제품을 제안하고 소개하는 카피가 오래간다.
    • eg.
      • 올 겨울 꼭 필요한 니트 : ‘베스트'라는 표현에 가까움.
  • 실무에서 작업한 결과물로 배워보는 공감 카피 작성 노하우

 

 

비슷한 시도로 이런 강의도 들었었다.

 

[강의후기] 그로스쿨(groschool) ux 라이팅 - 고객경험을 위한 글쓰기, UX 라이팅의 전략과 사례

어떤 강의였는가? 📌 기획자, 마케터를 위한 강의를 주 콘텐츠로 하는 그로 스쿨의 ux writing 강의로, 현시점 대한민국 교육 플랫폼상에 공개된 유일한 ux writing강의 강의 링크 👇 고객을 위한 글

slowslow.tistory.com

 

_

스파르타 코딩클럽의 SQL 강의 수강 후, 조금 더 연습이 필요하다고 생각해 프로그래머스 SQL 고득점 kit를 풀어보게 됐다.

아래의 모든 답은 직접 풀어본 후 적은 답입니다. SQL 특성상 query가 다르더라도 같은 결과에 도출됐다면 모든 query는 정답이 될 수 있습니다.


문제 링크 👇

 

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

프로그래머스 문제 키트 👇

6개의 세트


SELECT

  • 모든 레코드 조회하기

동물 보호소에 들어온 모든 동물의 정보를 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요. SQL을 실행하면 다음과 같이 출력되어야 합니다.

SELECT * 
from animal_ins
order by animal_id

 

  • 역순 정렬하기

동물 보호소에 들어온 모든 동물의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 ANIMAL_ID 역순으로 보여주세요. 

SELECT name, datetime
from animal_ins
order by animal_id desc

 

  • 아픈 동물 찾기

동물 보호소에 들어온 동물 중 아픈 동물1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

select animal_id, name
from animal_ins
where intake_condition = 'sick'
order by animal_id
  • 어린 동물 찾기

동물 보호소에 들어온 동물 중 젊은 동물 1의 아이디와 이름을 조회하는 SQL 문을 작성해주세요. 이때 결과는 아이디 순으로 조회해주세요.

* INTAKE_CONDITION이 Sick 인 경우를 뜻함

select animal_id, name
from animal_ins
where intake_condition = 'sick'
order by animal_id

 

  • 동물의 아이디와 이름

동물 보호소에 들어온 모든 동물의 아이디와 이름을 ANIMAL_ID순으로 조회하는 SQL문을 작성해주세요.

select animal_id, name
from animal_ins

 

  • 여러 기준으로 정렬하기

동물 보호소에 들어온 모든 동물의 아이디와 이름, 보호 시작일을 이름 순으로 조회하는 SQL문을 작성해주세요. 단, 이름이 같은 동물 중에서는 보호를 나중에 시작한 동물을 먼저 보여줘야 합니다.

select animal_id, name, datetime
from animal_ins
order by name,datetime desc

 

  • 상위 n개 레코드

동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

select name
from animal_ins
order by datetime
limit 1

SUM, MAX, MIN

  • 최댓값 구하기

가장 최근에 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

select datetime
from animal_ins
order by datetime desc
limit 1

 

  • 최솟값 구하기

동물 보호소에 가장 먼저 들어온 동물은 언제 들어왔는지 조회하는 SQL 문을 작성해주세요.

select datetime
from animal_ins
order by datetime
limit 1

 

  • 동물 수 구하기

동물 보호소에 동물이 몇 마리 들어왔는지 조회하는 SQL 문을 작성해주세요.

select count(*)
from animal_ins

 

  • 중복 제거하기

동물 보호소에 들어온 동물의 이름은 몇 개인지 조회하는 SQL 문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.

select count(distinct(name))
from animal_ins
where name is not null

 

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

동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

select animal_type, count(*)
from animal_ins
group by animal_type
order by animal_type

"고양이를 개보다 먼저 조회해주세요"때문에 order by 조건이 있어야만 정답으로 처리된다.

아래처럼 order by 조건이 없어도 결과상의 차이는 없다.

select animal_type, count(*)
from animal_ins
group by animal_type

 


 

4주차 강의 기록 (2) - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - subquery, with, substring_index, substring, 문

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 4주차 - 수강일자 211003 With subquery 를 각각 써주는 게 아니라 table로 명명시켜서 쿼리문 작성 편의 및 가시성을 높인다. 구조 예시 ( subquery )를 하나의

slowslow.tistory.com

 

thumbnail

 

강의 수강 후기에서 이어지는 글입니다.

 

그로스쿨(groschool) ux 라이팅 강의 후기 - 고객경험을 위한 글쓰기, UX 라이팅의 전략과 사례

어떤 강의였는가? 📌 기획자, 마케터를 위한 강의를 주 콘텐츠로 하는 그로 스쿨의 ux writing 강의로, 현시점 대한민국 교육 플랫폼상에 공개된 유일한 ux writing강의 강의 링크 고객을 위한 글쓰기

slowslow.tistory.com

 

주요 내용

📌 Copy writing vs Ux writing

copy writing ux writing
- 판매 중심
- 사용자를 후킹하는 매력적인 어휘
- 자주 노출 (기억에 남게끔)
- 익숙함을 파괴하여 브랜드, 상품, 서비스의 특성을 개성있게 드러냄
- 사용자에게 일방적으로 이야기
- 제품 중심
- 제품을 설명하는 단순하고 명확한 어휘
- 필요한 순간에 적절하게 쓰여야 함 (한번이라도 제대로)
- 오히려 익숙한 문구를 사용하여 브랜드, 상품, 서비스 이용에 오해와 불편이 없게끔
- 사용자와 함께 대화를 나눔

+ micro copy는 ux writing에 포함된 개념 (짧은 길이의 문구)

 

📌 UX writer의 역할

1) 고객 입장으로 생각하기

2) 창의적으로 브랜딩 녹여내기

3) 원하는 행위를 이끌어내기

4) 프로덕트를 빠짐없이 이해하기

 

📌 What is UX writing

디지털 기술의 발달, 정보량 증가 → 사용자의 읽는 행위 변화 → 유용한 정보를 명확하고 간결하게 제공 → 고객과의 관계를 위해 문구로 소통

 

📌 Ux writing의 4가지 조건

1) 고객 지향성

- 고객과 오프라인에서 대화하듯이

- 고객을 명확하게 설정하고 지칭

- 높은 공감력과 감수성

 

2) 일관성

- 하나의 디지털 제품에 들어가는 문구는 동일한 보이스 톤, 용어 유지

- 헷갈림 없게 작성하기. 헷갈림은 불편으로 불편은 이탈로 이어진다.

 

3) 명확성

- 필수적인 사항만 전달하여 핵심 메시지가 흐려지지 않게 하기

- 한 문장에 한 가지 목표에 집중하기

- 어떤 과정인지를 명확히 알려서 현재 상태와 해야 할 행동을 알리기

 

4) 효율성

- 한정된 인터페이스 내에서 정보 전달하려면

- 짧고 가독성 좋게 쓰기

- 불필요한 단어, 문장 부호 생략하기

 

📌 Ux writing의 6가지 전략

1) 명확하고 올바르게 쓰기

- 한자식 표현 자제

- 번역투 표현 자제

- 과도한 외래어 사용 자제

- 올바른 숫자, 기호 표기 사용

- 맞춤법 검사는 필수

- 헷갈림, 불편함 없게

 

2) 간결하게 쓰기

- 모바일에서 가장 중요한 전략

- 불필요한 단어와 조사는 모두 제거

- 중복되는 내용 제거

- 두괄식으로 쓴다.

 

3) 쉽게 쓰기

- 성별, 나이 상관없이 이해가 가능하게 작성

- 유저는 서비스, 브랜드를 전혀 모른다는 가정

- 업계 외계어(전문용어) 사용을 주의

+ if, 꼭 필요한 경우, 안내 모달을 사용

 

4) 고객과 대화하듯 쓰기

- 고객의 입장에서 출발하자

- 오프라인에서 실제로 대화한다고 생각

- 적절한 구어체의 사용 ( 했습니다 → 했어요 )

- 대상의 목적과 상황, 수준 등을 고려

- 부정적인 표현을 최소화

+ if, 부정 표현의 반복은 더더욱 최소화

 

5) 폰트 ,색상, 글꼴, 이모지 활용

- 가독성 좋은 폰트 사용

- 강조해야 할 부분은 크기와 색상을 바꾸거나, 볼드체 활용

- 적절한 이모지 활용

 

6) 사용자 피드백과 데이터 활용하기

- 문의가 많은 부분, 이탈이 많은 부분은 텍스트를 수정하거나 추가 (장바구니, 뒤로 가기)

- 상품이 아니라 텍스트만 바꿔도 매출이 오를 수 있다.

- CTA라면 더더욱, A/B 테스트를 통해 전환율이 높은 텍스트를 선택

 

📌 우리 브랜드에 UX writing 도입하기

1. UX writing 규칙 정하기

- 최대한 규칙에 따라 쓴다.

- 기획안 단계부터 반영할 수 있어 효율적

 

2. 테스트하기

- 기획한 의도에 맞게 사용자가 이해하는지 관찰

- 필요시 지속적으로 수정

 

3. 잘 된 사례를 벤치마킹하고 적용

- 평소에 사용하는 서비스에서 벤치마킹

- 스스로가 테스터라고 생각하기 ( 내가 왜 클릭했지? 어떤 지점인지 고민)

 


 

[책 후기] 기획에서 마케팅까지 디자인에 집중하라 - 팀브라운

브랜드 디자인을 공부하는 사람이라면, 서비스 디자인을 공부하는 사람이라면, 마케팅을 공부하는 마자이너라면, 한 번쯤은 제목만 보고도 혹했을 바로 그 책. 팀 브라운 저, <기획에서 마케팅

slowslow.tistory.com

 

thumbnail

어떤 강의였는가? 

📌 기획자, 마케터를 위한 강의를 주 콘텐츠로 하는 그로 스쿨의 ux writing 강의로, 현시점 대한민국 교육 플랫폼상에 공개된 유일한 ux writing강의 

 

강의 링크 👇

 

고객을 위한 글쓰기, UX 라이팅의 전략과 사례

UX Writing, 여기저기 정보는 많은데 막상 잘된 사례가 무엇인지, 라이팅을 잘 하려면 어떻게 해야 하는지 찾기가 힘들죠. 어피티 공동창업자 강지인님이 수많은 머니레터를 보내며 깨달은 고객을

groschool.kr

 

출처 : 강의 상세 페이지

연사분은, 현재 그로 스쿨의 CBO분이다. 해당 교육 플랫폼의 재직자가 강의를 찍는다는 것 자체가 신뢰를 갖는 형태는 아니라고 생각한다. 다른 연사분들에 비해 허들이 낮았을 것이기에 전문성에 대한 의구심을 갖게 한다. 

 

게다가 연사님의 이력이 '마케터'와 '에디터'에 가깝지, UX writier에 가까운 이력은 아니라서 강의 수강 전부터 많이 망설이게 됐다.

 

 

강의 정보

강의 시수는 2시간 정도에 가격은 77,000원으로 강의 시수 대비 가격은 상당히 비싼 편에 속했다. 만약 이 정도 구성이 인프런과 같은 조금 더 open market에 가까운 강의 플랫폼에 올라왔다면, 혹은 경쟁 강의가 있다면 조금 더 저렴한 3~5만 원대에 가격이 형성됐을 것이다. 아직은 one & only 강의라는 이점을 누리는 듯하다.

 

물론 강의 시수와 가격이 항상 비례해야 하는 것은 아니다. 양질의 내용을 포함한다면 다를 것이다. 하지만 이 강의는...

 

누구를 위한 강의인가?

출처 : 강의 상세페이지

위와 같이 서비스 기획자, 마케터, UI/UX 디자이너를 위한 강의였지만, '어떤 수준'의 사람을 위한 강의인지는 명시되지 않았고, 실제 수강 결과 '입문'레벨의 강의로 볼 수 있다.

 

왜 수강했는가?

나는 PM을 꿈꾸고 있다. 좋은 product manager가 되기 위해서는 화면 설계에 대한 전문성을 갖춰야 할 것이며, 화면 설계 시 유저 향 문구에 대해서 고민이 많았다.

 

예를 들어, 버튼의 이름을 '다음'으로 할지 '다음 단계'로 할지 '다음으로'로 할지 그냥 화살표'→'로 할지...

생각보다 화면의 문구를 결정하는 것은 어려운 일이었고, 매번의 고민을 줄이기 위해서는 학습이 필요했다.

 

그러던 중 같은 문구도 조금 더 쉽고 간결하게 쓰는 토스 사례를 보면서 UX writing에 관심을 갖게 되었고, 관련 자료를 찾아보던 중 해당 강의가 도움이 될 수 있을 것이라 생각해 수강하게 됐다.

 

무엇을 배웠는가?

크게는 다음과 같이 나눌 수 있다.

- ux writing이 왜 필요한지와 같은 기본개념

- ux writing의 좋은/나쁜 사례

 

기본개념을 설명해주시고, 사례들을 계속 보여주시면서 120분 중 80분 가까운 시간이 지나간다.

 

🔥 배운점 요약

 

[강의요약] 그로스쿨(groschool) ux 라이팅 - 고객경험을 위한 글쓰기, UX 라이팅의 전략과 사례

강의 수강 후기에서 이어지는 글입니다. 그로스쿨(groschool) ux 라이팅 강의 후기 - 고객경험을 위한 글쓰기, UX 라이팅의 전략과 사례 어떤 강의였는가? 📌 기획자, 마케터를 위한 강의를 주 콘텐

slowslow.tistory.com

 

positive point & lesson learned

- ux writing에 대한 개략적인 이해를 할 수 있었다. 왜 탄생하게 되었고, 주요 특징점은 무엇인지 가이드를 얻을 수 있었다.

- 여러가지 사례를 통해서 어떤 문구가 잘된 문구고 어떻게 개선해나가야 하는지 볼 수 있었다.

→ ux writing은 아는 것보다 직접 작성하는 연습이 더 중요한 분야라서 강의에서 문제를 보여주고, 직접 수강생이 개선해보는 과제들을 할 수 있었다면 훨씬 배우는게 많은 강의가 됐을 것같다.

 

negative point

- 위 밖에도 ux writer를 위한 툴 추천과 같은 내용도 있었으나, 관련도가 상당히 낮다고 느껴지는 내용이어서 그저 강의 시수를 채우고자 넣으신 게 아닐까 생각했다. ux writer를 위한 툴이라면 같은 단어도 쉽게/짧게 표현할 수 있는 방법, 유저에게 익숙한 표현들을 모아둔 무언가 툴을 생각했는데, 블로그 마케팅에서 사용할 법한 키워드 서칭 사이트를 알려주셔서 실망감이 컸다.

 

기대와 같았는가?

전혀 달랐다. 예상보다 ux writing에 대한 전문성/인사이트가 부족해 보였다. ux writing에 대한 개념은 <microcopy> 책이나 brunch를 통해 얻을 수 있는 수준이었고, ux writing의 좋은/나쁜 사례는 그저 좋다 나쁘다 소개해주는 것으로 끝났다. 왜 좋은 문구고 왜 안 좋은 문구인지 자세하게 파고들어 가지 않고 showing 해주는 데에 그쳤다.

 

또 한 가지 아쉬웠던 점은, 강의 자료가 존재하나 제공하지 않는다는 점이다. 수강 화면에서 web을 통해 강의 자료를 눈으로 확인할 수 있지만, 다운로드할 수 없어 강의 자료에 필기를 한다거나 하는 액션은 불가능해 불편했다.

 

강의 내용도 만족스럽지 못했는데, 강의자료 또한 다운로드할 수 없어서 강의 자체에 대한 불만이 증폭됐다.

 

추천하는가?

- 만족도 : 별점 1개 ⭐️

- 추천 여부 : 비추천 🔥

- 체감 효용(가격) : 1만 원 이하

 


 

1주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - 기본 문법, where, 같다 다르다, 중복 데

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 1주차 - 수강일자 210920 기본 쿼리문 : 데이터베이스에 명령을 내리는것 CRUD 네가지 메인 액션이있지만 DB관련 직종이 아닌이상 R(read)만 제대로 하면

slowslow.tistory.com

 

(아카이브) 자! 좋은 프로덕트 매니저가 되어보자

PM 직무 이해 1. 인프런 - 데이먼 강의 https://www.inflearn.com/course/%EC%A0%9C%ED%92%88-%EA%B4%80%EB%A6%AC%EC%9E%90-%EC%8B%A4%EC%A0%84-%EB%85%B8%ED%95%98%EC%9A%B0 , <서비스 기획자>를 위한 실전 노하..

slowslow.tistory.com

 

피엠이 되다!

PM 직무 이해

 

1. 인프런 - 데이먼 강의

https://www.inflearn.com/course/%EC%A0%9C%ED%92%88-%EA%B4%80%EB%A6%AC%EC%9E%90-%EC%8B%A4%EC%A0%84-%EB%85%B8%ED%95%98%EC%9A%B0

 

[무료] 제품 관리자와 서비스 기획자를 위한 실전 노하우 - 아낌없이 드립니다! - 인프런 | 강의

오늘도 현장에서 고군분투하는 <제품 관리자>, <서비스 기획자>를 위한 실전 노하우를 소개합니다., 현업 기획자가 알려주는P.O. / P.M. / 서비스 기획자 업무스킬 대공개 ✨ 강의 소개 Part 1. 제품

www.inflearn.com

 

2. 유투브 - 붐바 다이어리

https://www.youtube.com/channel/UCGTIjwquc7_JvWdskWbVJQQ

 

Boombar Diary

 

www.youtube.com

 

이론적인 성장

 

1. 커리어리 PM 필독도서, 아티클

https://blog.careerly.co.kr/pm-books-and-articles/

 

프로덕트 매니저 필독 도서 & 아티클

커리어리 사내 '프로덕트 매니저' 필독 도서 & 아티클 모음

blog.careerly.co.kr

 

스킬적인 성장 - 기획/디자인

 

1. 리메인 서비스 기획 강의

https://remain.co.kr/shop/item.php?it_id=1622786853 

 

리메인

[ 수업 내용 및 목표 ] 프로젝트 이해: NFT 시장과 경매에 재미를 주는 요소 벤치마킹 리서치 : 다양한 NFT 사이트 분석, 검색, 구매, 카테고리, 장바구니, 구매하기 화면 분석 재밌을만한 요소를 넣

remain.co.kr

 

2. 리메인 UI/UX 강의

https://remain.co.kr/shop/item.php?it_id=1616312786 

 

리메인

신한카드 2-6개월 무이자 할부 (5만원 이상) KB국민 2-6개월 무이자 할부 (5만원 이상) 비씨(페이북) 2-6개월 무이자 할부 (5만원 이상) 삼성카드 2-6개월 무이자 할부 (5만원 이상) NH농협 2-6개월 무이

remain.co.kr

 

3. 그로스쿨 - UX writing

https://groschool.kr/category/business/course/ux_writing

 

고객을 위한 글쓰기, UX 라이팅의 전략과 사례

UX Writing, 여기저기 정보는 많은데 막상 잘된 사례가 무엇인지, 라이팅을 잘 하려면 어떻게 해야 하는지 찾기가 힘들죠. 어피티 공동창업자 강지인님이 수많은 머니레터를 보내며 깨달은 고객을

groschool.kr

 

4. 브런치 - 김강령님 브런치

https://brunch.co.kr/@thinkaboutlove#works

 

김강령의 브런치

디자이너 | 토스 UX writer, 디독 Editor / 어려운 정보를 쉽게 가공하는 일에 관심이 많습니다.

brunch.co.kr

 

 

스킬적인 성장 - 데이터/개발

 

1. 스파르타 코딩클럽 SQL

https://spartacodingclub.kr/online/sql

 

스파르타코딩클럽 [엑셀보다 쉬운 SQL]

실무에 꼭 필요한 SQL만 쏙쏙! 왕초보 대상

spartacodingclub.kr:443

 

2. 프로그래머스 SQL 고득점 kit

https://programmers.co.kr/learn/challenges?tab=sql_practice_kit 

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

 

.

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기

4주차 - 수강일자 211003

 

With

subquery 를 각각 써주는 게 아니라 table로 명명시켜서 쿼리문 작성 편의 및 가시성을 높인다.

 

구조 예시

( subquery )를 하나의 column처럼 사용

with table1 as ( subquery ) t1,
       table2 as ( subquery ) t2
select * from table

주의 점🔥

( subquery ) 마다 약어를 다 지정해줘야 한다.

 

적용 예시 - 4주 차 1번째 기록에 있는 예시

 

* 적용 전

select * from ( subquery ) s1
inner join ( subquery ) s2
on s1.column = s2.column

* 적용 후

with table1 as ( subquery ) s1,
	table2 as ( subquery ) s2
select * from s1
inner join s2
on s1.column = s2.column

서브 쿼리가 많아지고 복잡해질수록 with 구문을 쓰는 것이 훨씬 가독성이 좋아진다.

 

Substringindex

특정 기준으로 문자를 잘라서 원하는 부분만 출력하기

- python의 split과 동일

- SQL은 python과 달리 0,1,2,3으로 세는 게 아니라 1,2,3,4로 센다. 다만 -1이 마지막을 뜻하는 것은 동일하다.

 

구조 예시

SUBSTRING_INDEX( 자를 칼럼명, '기준 문자', 자른 후 출력할 위치)

 

적용 예시

email 칼럼에 들어있는 spartacodingclub@naver.com와 같은 이메일들을 @단위로 쪼개서 naver.com 만 보고 싶을 때

 

방법 1

SUBSTRING_INDEX(email, '@', 2) 

해석 : email을 @을 기준으로 잘라서 2번째에 있는 걸 출력해라

출력 값 : naver.com

 

방법 2

SUBSTRING_INDEX(email, '@', -1)

해석 : email을 @을 기준으로 잘라서 끝에 있는 걸 출력해라

출력 값 : naver.com

 

Substring

문자열을 특정 시점부터 특정 지점까지만 출력해라

 

구조 예시

SUBSTRING( 자를 칼럼명, 시점 위치 숫자로, 마지막 위치 숫자로)

 

적용 예시

created_at 칼럼에 들어있는 2020-07-07 15:00:22와 같은 일자-시간에서 날짜만 보고 싶을 때

 

SUBSTRING(created_at,1,10)

해석 : created_at에서 1번째 인 '2'부터 10번째에 위치한 '7'까지 출력해라

출력 값 : 2020-07-07

 

CASE

특정 조건에 따라 데이터를 구분할 때

- python의 if문과 비슷하다고 보면 편하다.

 

구조 예시 - case를 두 가지로 나눌 때

select column1, column2,
	case when column3 > ( 값 ) then '출력문구'
    	else '출력문구2' end
from table

 

구조 예시 - case를 세 가지 이상으로 나눌 때

select column1, column2,
	case when column3 > ( 값 ) then '출력문구'
    	when column3 > ( 값2 ) then '출력문구2'
    	else '출력문구3' end
from table

 

구조 예시 - 깔끔하게 정리할 때 / 실제 사용할 때

select column1, column2,
	(case when column3 > ( 값 ) then '출력문구'
    		when column3 > ( 값2 ) then '출력문구2'
    		else '출력문구3' end) as Partition
from table

case 구문을 하나로 () 묶어주고 as로 alias 별칭을 만들어준다.

 

주의 점🔥

조건을 걸 때마다 when을 써준다. when 절이 끝난다고 해서 콤마를 붙이거나 하지 않는다. (파이썬과 다름)


강의 기록

 

4주차 강의 기록 (1) - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - 서브쿼리 select, where, from, subquery, 구

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 4주차 - 수강일자 211003 Subquery "쿼리안의 쿼리" 쿼리 여러 개가 포함관계로 구성되어 있다고 보면 편하다. subquery는 select, from, where 모두에 들어갈 수.

slowslow.tistory.com

 

3주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - union all, left join, inner join, 쿼리 실행 순

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 3주차 - 수강일자 211002 join 두가지 테이블의 key 칼럼을 기준으로 테이블을 연결해서 하나의 테이블로 표기하는 것 - 두 테이블을 실제로 합치는 게

slowslow.tistory.com

 

2주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - 묶기 그루핑하기 group by, 정렬하기 order

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 2주차 - 수강일자 210921 통계 최대 max () 최소 min () 평균 avg () 갯수세기 count () 묶기 기준 만들기 칼럼(필드) 내 항목으로 그루핑하기 group by 칼럼명 gr.

slowslow.tistory.com

 

1주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - 기본 문법, where, 같다 다르다, 중복 데

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 1주차 - 수강일자 210920 기본 쿼리문 : 데이터베이스에 명령을 내리는것 CRUD 네가지 메인 액션이있지만 DB관련 직종이 아닌이상 R(read)만 제대로 하면

slowslow.tistory.com

 

.

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기

4주차 - 수강일자 211003

 

Subquery

"쿼리안의 쿼리" 쿼리 여러 개가 포함관계로 구성되어 있다고 보면 편하다.

subquery는 select, from, where 모두에 들어갈 수 있다.

 

 

Select subquery

구조 예시

( subquery )를 하나의 column 처럼 사용

select column1, column2, ( subquery ) 
from table

주의 점🔥

( subquery ) 내의 where 절을 통해서 바깥 query와 ( subquery ) 간의 연결지점을 꼭 명시해야 한다.

스파르타 코딩클럽 select subquery 문 예시 요약

 

From subquery

구조 예시

( subquery )를 하나의 table처럼 사용

select * from table t1
inner join ( subquery ) s1
on t1.column = s1.column
select * from ( subquery ) s1
inner join ( subquery ) s2
on s1.column = s2.column

주의 점🔥

( subquery ) 사용할 때마다, table 약어를 지정해줘야 한다!

스파르타 코딩클럽 from subquery 문 예시 요약

Where subquery

구조 예시

where 칼럼명 in (subquery)

select * from table
where column in ( subquery )

주의 점🔥

( subquery )의 select 된 column과, 바깥 query의 column명을 동일하게 잡아줘야 연결이 된다.

스파르타 코딩클럽 where subquery 문 예시 요약

 

 

강의 기록

 

3주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - union all, left join, inner join, 쿼리 실행 순

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 3주차 - 수강일자 211002 join 두가지 테이블의 key 칼럼을 기준으로 테이블을 연결해서 하나의 테이블로 표기하는 것 - 두 테이블을 실제로 합치는 게

slowslow.tistory.com

 

2주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - 묶기 그루핑하기 group by, 정렬하기 order

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 2주차 - 수강일자 210921 통계 최대 max () 최소 min () 평균 avg () 갯수세기 count () 묶기 기준 만들기 칼럼(필드) 내 항목으로 그루핑하기 group by 칼럼명 gr.

slowslow.tistory.com

 

1주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - 기본 문법, where, 같다 다르다, 중복 데

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 1주차 - 수강일자 210920 기본 쿼리문 : 데이터베이스에 명령을 내리는것 CRUD 네가지 메인 액션이있지만 DB관련 직종이 아닌이상 R(read)만 제대로 하면

slowslow.tistory.com

 

.

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기

3주차 - 수강일자 211002

 

join

두가지 테이블의 key 칼럼을 기준으로 테이블을 연결해서 하나의 테이블로 표기하는 것

- 두 테이블을 실제로 합치는 게 아니라 그렇게 showing 하는 방식

- 중등수학의 '교집합' 개념과 연관

- SQL의 join 개념은 엑셀에 vlookup과 유사

- 대표적으로 많이 사용하는 방식은 left join, inner join 두 가지

 

left join

select * from A a

left join B b on a.coulmn = b.coulmn

: A에 B를 column을 기준으로 left join 한다.

 

- left join은 A에 맞는 B만 가져오기 때문에 B에 null 값이 나올 수 있다.

- 순서가 정해져 있기 때문에 "~에 ~를 붙인다"라는 구문의 순서에 주의해야 한다.

 

inner join

select * from A a

inner join B b on a.coulmn = b.coulmn

: A에 B를 column을 기준으로 inner join 한다.

 

- inner join은 A, B의 교집합만 가져오기 때문에 null 값이 나타나지 않는다.

- 순서가 정해져 있지 않기 때문에 "~에 ~를 붙인다"라는 구문의 순서와 무관하다.

 

SQL 쿼리의 실행 순서

from → join → select

- from 데이터를 가져오고, join 데이터를 연결하고, select 연결된 데이터를 출력한다.

 

from → join → where → group by → select

- from 데이터를 가져오고, join 데이터를 연결하고, where 데이터를 필터링하고, group by 특정 column을 기준으로 그루핑 하고, select 연결된 데이터를 출력한다.

 

left join으로 null 값이 생겼을 때

where coulmn is NULL

where coulmn is not NULL

위 두 가지 방법으로 NULL을 선택하거나, 필터링할 수 있다.

 

NULL과 전체를 세는 방법

count는 NULL을 세지 않는다. 즉, 값이 있는 열만 센다.

따라서, NULL값이 들어가 있는 column을 기준으로 세게 되면 not NULL 인 raw의 개수만 센다.

 

전체를 세는 방법 : 모든 행에 NULL값이 없는 column을 따로 세준다.

ex. count(key column) : key column은 null 값이 없으므로 key column을 세주면 전체 행을 세준 것과 같은 결과를 낳는다.

 

union

두 가지 데이터를 key column을 기준으로 연결하는 게 아니라, 병렬적으로 나열해 이어진 것처럼 표기하는 것

- 작성방법

	(
	data 1...
	)
union all
	(
	data 2...
	)

- 주의할 점

union을 사용하면 order by 가 적용되지 않는다. 이는 subquery를 통해 대체할 수 있다.

 


강의 기록

 

2주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 2주차 - 수강일자 210921 통계 최대 max () 최소 min () 평균 avg () 갯수세기 count () 묶기 기준 만들기 칼럼(필드) 내 항목으로 그루핑하기 group by 칼럼명 gr.

slowslow.tistory.com

 

1주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 1주차 - 수강일자 210920 기본 쿼리문 : 데이터베이스에 명령을 내리는것 CRUD 네가지 메인 액션이있지만 DB관련 직종이 아닌이상 R(read)만 제대로 하면

slowslow.tistory.com

 

.

파이썬 혼자놀기 패키지 (무료 강의)

3일 차 - 수강 일자 210930

 

from wordcloud import WordCloud

text = ''
with open("kakaotalk.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines:
        text += line

wc = WordCloud(font_path='/System/Library/Fonts/AppleSDGothicNeo.ttc', background_color="white", width=600, height=400)
wc.generate(text)
wc.to_file("result.png")

 

코드 설명

from wordcloud import WordCloud

워드클라우드 라이브러리를 사용한다.

 

text = ''
with open("kakaotalk.txt", "r", encoding="utf-8") as f:

    lines = f.readlines()
    for line in lines:
    text += line

text를 공란으로 만들어주고, kakaotalk.txt라는 파일을 오픈한다. (txt파일이라면 어떤 파일도 무방하다. 카카오톡 톡 내보내기를 통해 사용하는 것을 강의에서 권하고 있으나, 그럴 경우 csv파일로 export되어 적용이 안된다.)

kakaotalk.txt파일의 모든 줄들을 읽어서 한줄한줄을 text에 채워준다.

 

wc = WordCloud(font_path='/System/Library/Fonts/AppleSDGothicNeo.ttc', background_color="white", width=600, height=400)
wc.generate(text)
wc.to_file("result.png")

text에 워드클라우드 함수를 적용한다.

폰트를 설정하고, 백그라운드 컬러와 가로 세로 크기를 결정한다.

저장할 파일 명을 결정한다. result.png

 

🔥 이때 폰트 경로 설정이 중요하다.

아래의 코드를 통해 폰트들의 링크를 가져올 수 있다. 왜인지 모르게 ttf type의 폰트는 적용이 안돼서, ttc파일을 적용시켰다.

 

폰트 경로 가져오기

import matplotlib.font_manager as fm

for font in fm.fontManager.ttflist:
    if 'Gothic' in font.name:
        print(font.name, font.fname)

폰트 경로 출력 결과

Apple SD Gothic Neo /System/Library/Fonts/AppleSDGothicNeo.ttc
Hiragino Maru Gothic Pro /System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc
Noto Sans Gothic /System/Library/Fonts/Supplemental/NotoSansGothic-Regular.ttf
AppleGothic /System/Library/Fonts/Supplemental/AppleGothic.ttf

위의 링크에서 /로 시작하는 폰트 링크를 복사해 위의 내용을 font_path에 넣으면 된다.

 

if, 혹시 폰트 경로만 출력하고싶다면 아래의 코드를 입력하면 된다.

import matplotlib.font_manager as fm

for font in fm.fontManager.ttflist:
    if 'Gothic' in font.name:
        print(font.fname)

 

출력 결과

.

결과를 보면 무의미한 내용이 엄청 많이 들어있다. ㅋㅋㅋ, hk 이런내용들이다.

여기서 무의미한 데이터들을 필터링해주는 데이터클리닝 과정을 진행한다.

 

데이터 클리닝

text = ''
with open("kakaotalk.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines[5:]: 
        if '] [' in line: 
        text += line.split('] ')[2].replace('ㅋ','').replace('ㅜ','').replace('이모티콘\n','').replace('삭제된 메시지입니다','')

for line in lines[5:]:

5번째 줄부터 출력 (초반에 불필요한 메시지들 제외)

 

if '] [' in line:

사람들이 말한 경우만 포함하기 = 시스템 명령어 제거하기

파일 구조에 시스템 명령어들은 ] [를 포함하고 있지 않고, 사람이 말한 경우 "[말한사람이름] [시간] 말한 내용 "이렇게 돼서 위의 트릭으로 사람이 말한 경우만 포함 할 수 있다.

 

line.split('] ')[2]

파일 구조가 "ex. [정훈hk] [오후 5:10] 왜 우울한지 고르시오"이런식으로 생겨서 '] '를 기준으로 짜르면 text부분이 2순서에 위치함. 일종의 트릭

 

.replace('ㅋ','').replace('ㅜ','').replace('이모티콘\n','').replace('삭제된 메시지입니','')

위와 같은 이유와 목적으로 여러가지 무의미한 내용들을 삭제한다.

 

 

다시 워드클라우드

이렇게 클리닝된 내용을 기반으로 워드클라우드를 다시 해보자

from wordcloud import WordCloud

text = ''
with open("kakaotalk.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines[5:]:
        if '] [' in line:
        text += line.split('] ')[2].replace('ㅋ','').replace('ㅜ','').replace('이모티콘\n','').replace('삭제된 메시지입니다','').replace('저두','').replace('저도','').replace('근데','').replace('나','').replace('아','')

wc = WordCloud(font_path='/System/Library/Fonts/AppleSDGothicNeo.ttc', background_color="white", width=600, height=400)
wc.generate(text)
wc.to_file("result4.png")

 

출력 결과

.

전보다는 훨씬 유의미한 내용들만 남은것을 볼 수 있다.

 

원하는 모양으로 워드클라우드

원하는 형태의 이미지를 import 해서 워드클라우드를 만들자

from wordcloud import WordCloud
from PIL import Image
import numpy as np

text = ''
with open("kakaotalk.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    for line in lines[5:]:
        if '] [' in line:
        text += line.split('] ')[2].replace('ㅋ','').replace('ㅜ','').replace('이모티콘\n','').replace('삭제된 메시지입니','').replace('저두','').replace('저도','').replace('근데','').replace('나','').replace('아','')

mask = np.array(Image.open('cloud.png'))
wc = WordCloud(font_path='/System/Library/Fonts/AppleSDGothicNeo.ttc', background_color="white", mask=mask)
wc.generate(text)
wc.to_file("result_masked.png")

 

적용시킨 이미지 (cloud.png)

.

 

출력 결과

.

wordcloud 함수는 이미지상의 '검은색영역'에 워드클라우드를 만드는 것을 볼 수 있다.

 

다른 이미지

다른 이미지 출처 

 

위처럼 형태가 다른 이미지를 넣어서 적용할 경우

.

역시 검정 영역에 채워지는 결과를 볼 수 있다.

검정과 흰색의 대비가 애매한 이미지를 사용하면 위의 사각형과 동일한 결과를 낸다.

 

.


 

강의 회고록으로 이어집니다. 👇

(회고록 링크 추가예정)


스파르타 코딩클럽 5만 원 할인 쿠폰 링크 💵

아래 링크를 통해 가입하시면, 즉시 5만원 할인 쿠폰이 발급됩니다!

 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

 

.

파이썬 혼자놀기 패키지 (무료 강의)

2일 차 - 수강 일자 210926-29

 

 

(1) 기사 크롤링

목표 : 네이버에서 '추석' 뉴스 검색결과의 기사 제목, URL, 언론사 명을 크롤링한다.

 

전체코드

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome('./chromedriver')

url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=추석"

driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

articles = soup.select('#main_pack > section.sc_new.sp_nnews._prs_nws > div > div.group_news > ul > li')

for article in articles:
    title = article.select_one('div.news_wrap.api_ani_send > div >  a').text 
    url = article.select_one('div.news_wrap.api_ani_send > div >  a')['href'] 
    press = article.select_one('a.info.press').text.split(' ')[0].replace('언론사','') 
    print(title, url, press)

driver.quit()

코드 설명

from bs4 import BeautifulSoup
from selenium import webdriver

library 로 beautifulsoup4, selnium을 사용한다.

사용에 앞서 chrome webdriver를 다운로드 해야한다. (다운로드 방법은 아래의 글 참조)

 

파이썬 파이참 웹 크롤링용 크롬 웹드라이버 chromedriver 설치 - 인강이랑 버전 안맞을 때

문제 현재 스파르타 코딩클럽 파이썬 혼자 놀기 강의 같은 경우, chrome 85 버전으로 진행되어서 chrome 버전이 지금 버전이랑 차이가 있습니다. 1일차 강의 기록 - 파이썬 문법 기초, 웹 크롤링, 뷰티

slowslow.tistory.com

 

url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=추석"
네이버에서 "추석"을 검색한 뉴스 결과를 url 로 삽입한다.

 

driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

driver에 url을 입력하고, 그안에 소스를 가져와 req에 넣고 beautifulsoup에 적용시킨다.

 

articles = soup.select('#main_pack > section.sc_new.sp_nnews._prs_nws > div > div.group_news > ul > li')

네이버 검색결과는 구조가
sp_news 1 > ....
sp_news 5 > ...
이렇게되어있음.
그래서 앞에서 이미지 크롤링 한 것처럼 {i}반복구문을 사용할 수 없음
다른 방법은, 해당 기사 위에 위에 있는 ul 의 selector를 copy 해서 그 안의 li를 출력해라 라고 구문을 써주면됨 위 처럼

 

🔥 검색 포털, 사이트마다의 url 구조가 모두 달라서, 각 페이지마다의 상황을 고려해가면서 코드를 작성해주어야한다. 위 코드로 구글, 다음 등에서 진행하면 error 가 발생한다.

 

for article in articles:
title = article.select_one('div.news_wrap.api_ani_send > div > a').text 
url = article.select_one('div.news_wrap.api_ani_send > div > a')['href'
press = article.select_one('a.info.press').text.split(' ')[0].replace('언론사',''
print(title, url, press)

 

- title 내용 : 나온 내용중에서 text만 필요해서 .text를 붙였다 .text는 여기 안붙이고 아래에 title.text로 해도 된다.

- url 내용 : url을 추가했음. url은 dictionary형태로 되어있어서(?) key값인 href를 넣어주니 value값인 url을 뱉어냄. copy selector 해서 붙여넣기

- press 내용 : 서, 가장 낮은단위로 a.info.press를 해보고 안되면 다른거 하려고 했는데 이걸로 돼서 진행함. 안되면 여러가지 시도해야됨. 그리고 .text를 붙여서 텍스트만 가져오고, 띄어쓰기를 기준으로 '선정'이라는 내용이 뒤에 붙어있어서 그부분 split으로 제거하고 앞에만 가져온다음에, replace로 '언론사'를 삭제

 

driver.quit()

driver 종료함! end.

 

출력 결과

추석 이후 서울 외곽지역 집값 상승 주도…강북·구로 높은 상승률 http://www.newsis.com/view/?id=NISX20211001_0001600454&cID=10401&pID=10400 뉴시스
반도체의 힘…수출, 추석 휴무에도 65년 만 최대치 https://www.joongang.co.kr/article/25011561 중앙일보
반도체·추석연휴에 현대차 판매 22.3%↓..생산일정 조정 http://news.mt.co.kr/mtview.php?no=2021100115384196008 머니투데이
나주시, 추석 연휴 이후 24명 신규확진...코로나 방역관리 촉각 http://www.sportsseoul.com/news/read/1065993?ref=naver 스포츠서울
추석 후폭풍에 거리두기 유지 ... 결혼식, 돌잔치 등만 인원 추가 허용 https://hankookilbo.com/News/Read/A2021100111130003341?did=NA 한국일보
추석 후 감염 확산세…충북 거리두기 3단계 2주 연장 https://www.news1.kr/articles/?4449640 뉴스1
전국 아파트값 상승폭 주춤 “추석 및 금리 인상 영향” http://www.fnnews.com/news/202109301159398552 파이낸셜뉴스
추석 연휴·대출규제, 아파트 매매·전셋값 상승세 꺾여 http://www.inews24.com/view/1408105 아이뉴스24
서울 일주일째 '요일 최다'…추석 감염확산 현실로(종합) http://www.edaily.co.kr/news/newspath.asp?newsid=02279606629185368 이데일리
'추석후 1주일 만에' 학생 1828명 확진…하루 261명꼴 http://www.newsis.com/view/?id=NISX20210930_0001598924&cID=10201&pID=10200 뉴시스

 

(2) 크롤링 결과 excel에 저장하기

목표 : 네이버에서 '추석' 뉴스 검색결과의 기사 제목, URL, 언론사 명을 크롤링한 결과물을 엑셀에 저장한다.

 

전체 코드

from bs4 import BeautifulSoup
from selenium import webdriver
from openpyxl import Workbook

driver = webdriver.Chrome('./chromedriver')

url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=추석"

driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

articles = soup.select('#main_pack > section.sc_new.sp_nnews._prs_nws > div > div.group_news > ul > li') #copy selector

wb = Workbook()
ws1 = wb.active
ws1.title = "articles"
ws1.append(["제목", "링크", "신문사"])

for article in articles:
    title = article.select_one('div.news_wrap.api_ani_send > div >  a').text 
    url = article.select_one('div.news_wrap.api_ani_send > div >  a')['href']
    press = article.select_one('a.info.press').text.split(' ')[0].replace('언론사','')

    ws1.append([title, url, press])

driver.quit()
wb.save(filename='articles.xlsx')

코드 설명

(1)의 내용을 기반으로 한다.

 

from openpyxl import Workbook

openpyxl 이라는 library를 사용한다. (설치방법은 아래의 링크 참조)

 

파이참 패키지 import 하는법 - 셀레니움(selenium), dload, 뷰티풀숩 (beautifulsoup) (m1 맥북 ver)

파이썬 패키지 import 하는 법 (m1 맥북 ver) 1. pycharm 파이참을 실행 후, 상단의 Pycharm 클릭 2. Pycharm 클릭시 나오는 버튼 중 Preferences 클릭 단축키 : command + , 3. 왼쪽 탭에서, 작업중인 Project..

slowslow.tistory.com

 

wb = Workbook()
ws1 = wb.active
ws1.title = "articles"
ws1.append(["제목", "링크", "신문사"])

wb라는 workbook을 만든다.

ws1의 title은 articles이고, 첫행에 제목, 링크, 신문사 열을 추가한다.

 

ws1.append([title, url, press])

ws1에 title, url, press에 값을 넣어준다. 

 

wb.save(filename='articles.xlsx')

file을 저장한다. 파일명은 'articles.xlsx'

 

출력 결과

출력결과

 

(3) 기사의 썸네일까지 가져와서 엑셀에 저장하기

목표 : 네이버에서 '추석' 뉴스 검색결과의 기사 제목, URL, 언론사 명, 썸네일주소를 크롤링한다.

 

전체코드

from bs4 import BeautifulSoup
from selenium import webdriver
from openpyxl import Workbook

driver = webdriver.Chrome('./chromedriver')

url = "https://search.naver.com/search.naver?&where=news&query=추석"

driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')

articles = soup.select('#main_pack > section.sc_new.sp_nnews._prs_nws > div > div.group_news > ul > li')

wb = Workbook()
ws1 = wb.active
ws1.title = "articles"
ws1.append(["제목", "링크", "신문사", "썸네일"])

for article in articles:
    title = article.select_one('div.news_wrap.api_ani_send > div >  a').text
    url = article.select_one('div.news_wrap.api_ani_send > div >  a')['href']
    press = article.select_one('a.info.press').text.split(' ')[0].replace('언론사','')
    #thumb = article.select_one('div.news_wrap.api_ani_send > div >  a> img')['src']
    thumb = article.select_one('div.news_wrap.api_ani_send > a >img')['src']

    ws1.append([title, url, press, thumb])

driver.quit()
wb.save(filename='articles.xlsx')

다른 내용은 다맞는데 이상하게 thumb내용이 오류가 난다. (해결법 찾아서 수정 추가예정)

#thumb = articles.select_one ~ 에서 div 를 제거하니 정상 실행된다.

 

출력 결과

.


스파르타 코딩클럽 5만 원 할인 쿠폰 링크 💵

아래 링크를 통해 가입하시면, 즉시 5만원 할인 쿠폰이 발급됩니다!

 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

 

.

문제

현재 스파르타 코딩클럽 파이썬 혼자 놀기 강의 같은 경우, chrome 85 버전으로 진행되어서 chrome 버전이 지금 버전이랑 차이가 있습니다.

 

1일차 강의 기록 - 파이썬 문법 기초, 웹 크롤링, 뷰티풀 숩, 셀레니움, 웹 스크래핑, 이미지 자동

파이썬 혼자놀기 패키지 (무료 강의) 1일 차 - 수강 일자 210925 스파르타 코딩 클럽에서 단기적으로 진행중인 [힙한 취미 코딩 이벤트]의 무료강의중 하나인 파이썬 웹크롤링 강의를 수강중이다.

slowslow.tistory.com

 

크롬 버전

저의 경우 93.0.4577.82 버전인데 강의에서 안내해주는 크롬 드라이버 링크

https://chromedriver.storage.googleapis.com/index.html?path=85.0.4183.87/

에는 정확하게 93.0.4577.82버전에 맞는 크롬 드라이버가 안내되어있지 않습니다.

 

링크 화면

93 버전은 있지만, 4577 이후 버전이 다른 것을 확인할 수 있는데요 

 

 

해결

크롬드라이버 원본 페이지 링크를 활용하면 됩니다.

https://chromedriver.chromium.org/downloads

 

chrome driver

크롬 드라이버 페이지를 참조해보면, 

If you are using Chrome version 93, please download Chromedriver 93.0.4577.63

이라는 안내가 있습니다. 

 

따라서, 저처럼 버전이 조금 안 맞는 경우에도 93으로 시작하는 버전이면 93.0.4577.63 버전을 다운로드하면 됩니다.

 

스파르타코딩클럽에서 준 링크에는 없지만, 본 페이지에서는 크롬 상위 버전 단위로 드라이버 선택 가이드가 있습니다.

위 내용들 참조해서 다운로드 하시면 되겠습니다.


스파르타 코딩클럽 5만 원 할인 쿠폰 링크 💵

아래 링크를 통해 가입하시면, 즉시 5만 원 할인 쿠폰이 발급됩니다!

 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

 

.

파이썬 패키지 import 하는 법 (m1 맥북 ver)

 

1. pycharm 파이참을 실행 후, 상단의 Pycharm 클릭

pycharm 클릭

 

2. Pycharm 클릭시 나오는 버튼 중 Preferences 클릭 

단축키 : command + , 

Preferences 클릭

 

3. 왼쪽 탭에서, 작업중인 Project* 하단에 Python Interpreter 클릭 > 우측에 + 플러스 버튼** 클릭

 

* 저는 sparta_python 이라는 폴더에 작업 중이라 project 명이 sparta_python으로 나와있습니다.

** pycharm 버전에 따라 + 버튼 위치가 다를 수 있습니다.

 

interpreter > +

4. import 해야하는 package 검색 > install Package 클릭 > 기다림 > 완료

sparta python 웹 크롤링 강의를 위해서는 아래의 3가지 package를 다운로드해야 합니다.

- selenium

- bs4
- dload 

install

 


스파르타 코딩클럽 5만 원 할인 쿠폰 링크 💵

아래 링크를 통해 가입하시면, 즉시 5만 원 할인 쿠폰이 발급됩니다!

 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

 

.

파이썬 혼자놀기 패키지 (무료 강의)

1일 차 - 수강 일자 210925

 

스파르타 코딩 클럽에서 단기적으로 진행중인 [힙한 취미 코딩 이벤트]의 무료강의중 하나인 파이썬 웹크롤링 강의를 수강중이다. 일전에 유투브를 통해서 셀레니움, 뷰티풀숩 등으로 크롤링을 시도했지만 파이썬 기본문법에 대한 기본적인 이해가 부족해 매번 실패했다. 그래서 이번 기회에 제대로 배우고자 크롤링 강의를 무료로 수강하게 됐다.

 

대학교에서 business programming 과목을 통해 python 기본 문법을 배웠지만, 충분한 이해를 하지 못해 이번 기회를 통해 python에 대한 복습을 하고자 했다.

 

 

스파르타 코딩클럽 5만 원 할인 쿠폰 링크 💵

아래 링크를 통해 가입하시면, 즉시 5만원 할인 쿠폰이 발급됩니다!

 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

 

* 아래의 모든 코드는 m1 맥북을 기준으로 합니다.

 

python 기본 문법

 

## 1-2 파이썬 시작하기

print ('hello sparta')

 

기본 연산

## 1-3강 파이썬 기초 공부
a = 2 # 프로그래밍에서 a = 3 의 의미는 a에 3을 넣어라
b = 3
a+b # 숫자 연산시키면 값이 연산된다.

 

문자와 숫자

first_name = 'kimkim' # 문자열은 '' 따옴표를 써줘야 한다. 숫자 / 변수는 그냥 써주면 된다.
last_name = 'hoho'

print(first_name + last_name) # 문자열 더하기 문자열은 단순히 붙어서(연결돼서) 나온다

print(str(3)+'kikkik') # 문자열과 숫자열은 더할 수 없다. 문자와 숫자를 더하려면 숫자를 문자로 바꿔줘야 함

변수명 지정 스타일 (코드 컨벤션)

# 회사마다 변수명 쓰는 방법 (코드 컨벤션)이 있다.
# lastName : 카멜
# last_name : 스네이크

 

리스트

# 파이썬에서 숫자는 0,1,2,3 순서로 센다
a_list = ['사과', '감', '배'] # 여기서 사과, 감, 배는 각각 0,1,2번째 위치이다.
print(a_list [1]) #리스트 내의 1번 위치인 감을 출력한다.

b_list = ['영희', '철수', ['사과', '감']]
print(b_list [0]) # 리스트 내의 0번째인 영희를 출력한다.
print(b_list [2][0]) # 리스트 내의 리스트의 위치는 [][]를 연결해서 작성해서 표기한다. 사과가 출력된다.

a_list.append('김치') # list에 요소를 추가하고 싶을 때 append 함수를 연결해서 써주면 된다.
print(a_list)

 

딕셔너리

# dictionary 형태 - 구조 {키 : 벨류, 키 : 벨류,... }
a_dict = {'name' : 'bob', 'age':24}
print(a_dict ['name']) # dictionary 형에서는, key값을 입력하면 value를 출력한다.

a_dict['height']=189 #dictionary에 값 추가하기 - 구조 : [key값] = value 값
print(a_dict)

a_dict = {'name':'bob','age':24}
a_list = ['수박','참외', '배']

a_dict['fruits'] = a_list #dictionary에 리스트 추가하기 - key값은 fruits, value값은 list
print(a_dict) # dictionary value 값에는 리스트를 넣을 수 있다. key값에는 못넣는다.

a_dict['fruits'] # 딕셔너리 내에 리스트를 출력하기 = 딕셔너리 내에 리스트를 벨류값으로 갖고있는 키값을 출력요청
a_dict['fruits'][0] # 딕셔너리 내에 리스트내에 수박을 출력하기

 

조건문 if

age = 24

if age > 20:
     print('성인입니다')
else:
     print('청소년입니다')

반복문 (for 문)

# 반복문 : 리스트에서 하나씩 빼서 쓰는것이다.
fruits = ['사과','배','배','감','수박','귤','딸기','사과','배','수박']
for fruit in fruits: # fruits 안에있는 요소들을 fruit라고 할거야. 그리고 요소들을 순서대로(0,1,2,3...) 꺼낼거야
print(fruit) # 꺼낸 요소 fruit 을 출력해

 

# 리스트를 쭉돌리는데, 내부변수가 '사과'와 같을때 그 변수를 출력해라
for fff in fruits: # 이번엔 fruits리스트 안의 요소를 fruit 라고하지않고 fff라고 할거야, 변수명은 정하기 나름이다
     if fff == '사과' :
print(fff)

# count 가 0으로 시작하는데, 리스트내의 변수가 '사과'와 동일할때마다 count를 1씩올려줘. 그리고 그 count를 출력해줘
count = 0
for fruit in fruits :
if fruit == '사과' :
count += 1
print(count)

# dictionary 를 포함한 리스트 형태에서 for문 돌리기
people = [{'name': 'bob', 'age': 20},
{'name': 'carry', 'age': 38},
{'name': 'john', 'age': 7},
{'name': 'smith', 'age': 17},
{'name': 'ben', 'age': 27}]

for x in people: # 모든 사람의 이름과 나이를 출력해봅시다.
print(x['name'],x['age']) # people이라는 리스트 속의 요소를 x라고 했는데, 그 요소의 key 값이 name 일때와 age일때의 vlaue값을 순서대로 출력해라


# dictionary 를 포함한 리스트형태에서 for문과 if문 돌리기

people = [{'name''bob', 'age'20},
{'name''carry', 'age'38},
{'name''john', 'age'7},
{'name''smith', 'age'17},
{'name''ben', 'age'27}]

 

for x in people: # 20세 보다 많은 사람만 출력하기
if x['age'] > 20:
print(x['name'],x['age'])

 

파이썬 내장함수

# split : 쪼개기

# 이메일주소에서 domain만 남기기
myemail = 'sparta@naver.com'
result = myemail.split('@') # @를 기준으로 쪼개라
print(result) # 쪼갠걸 출력해라, 리스트로 나옴
print(result[1]) # 쪼갠 결과값에서 두번째에 해당하는 애만 출력해라

# 이메일남긴거에서 naver만 남기기
print(result[1].split('.')[0]) # 쪼갠 결과값에서 두번째에 해당하는 애(naver.com)만 출력한다음에 걔를 다시 .을 기준으로 쪼개고 앞에있는 naver만 출력해라

# replace : 대체하기, 바꾸기

# 네이버를 gmail로 바꾸기
result = myemail.replace('naver','gmail')
result

 

이미지 다운로드 (단일) dload

# dload : 이미지 주소를 입력하면 자동으로 다운로드 해주는 library

 

import dload # dload 패키지를 import시키고
dload.save("이미지주소url""저장시킬 이미지 파일명")

# 이미지 주소 예시 : https://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Jeju_Island.jpg/1200px-Jeju_Island.jpg

# 이미지 파일명 예시 img.jpg 

 

이미지 다운로드/크롤링 (복수) 

import dload
from bs4 import BeautifulSoup
from selenium import webdriver
import time

driver = webdriver.Chrome('./chromedriver')
driver.get("이미지 검색 url")
time.sleep(5)

req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')


thumbnails = soup.select("#imgList > div > a > img")
i=1
for thumbnail in thumbnails:
    src = thumbnail["src"]
    dload.save(src, f'#폴더명/{i}.jpg')
    i+=1

driver.quit()


# 이미지 검색 url 예시 : https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0

# 이미지 검색 url 적용 예시 

driver.get("http://search.daum.net/f.... ") <- url은 문자입력값이므로 ""가 필요함

 

# 폴더명 예시 : homework <- 코드 실행전에 미리 이미지를 저장시켜둘 폴더를 만들어야함

# 폴더명 적용 예시

dload.save(src, f'homework/{i}.jpg') <- 폴더명도 문자값이나 양쪽에 ''따옴표가 있기 때문에 적용가능


 

스파르타코딩클럽

왕초보 8주 완성! 웹/앱/게임 빠르게 배우고 내것을 만드세요!

spartacodingclub.kr

.

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기

2주차 - 수강일자 210921

 

통계

  • 최대 max ()
  • 최소 min ()
  • 평균 avg ()
  • 갯수세기 count ()

묶기 기준 만들기

  • 칼럼(필드) 내 항목으로 그루핑하기 group by 칼럼명
    • group by를 써준다음에는 꼭 select 에 출력하고자 하는 칼럼명을 표기해줘야한다
    • ex. select name, count(name) from users group by name

정렬하기

  • order by 칼럼명 : 오름차순 정렬
  • order by 칼럼명 asc : 오름차순 정렬
  • order by 칼럼명 desc : 내림차순 정렬
  • => where 다음절에 사용. 가장 마지막에

별칭 alias

  • 테이블에 별칭
    • orders 라는 테이블이 있을때 orders o 라고 쓰면 orders 에 o라는 별칭이 생긴거,
    • 따라서, name 이라는 칼럼이 orders 내에 있다면, o.name 이라고 하면 oders의 name을 선택한게 됨 
    • 보통은 별칭은 이니셜 한개에서 두개정도로 작성함
  • 출력된 칼럼(필드)에 별칭
    • select count(*) 를 출력시 필드에 count(*)라고 나오면 무슨 내용인지 출력값을 보고 판단하기 어려움
    • 따라서 이름을 지어준다. select count(*) as cnt -> 이렇게 해주면 출력값에 cnt로 표기된다.

 

2주차 완료 !


 

3주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL - union all, left join, inner join, 쿼리 실행 순

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 3주차 - 수강일자 211002 join 두가지 테이블의 key 칼럼을 기준으로 테이블을 연결해서 하나의 테이블로 표기하는 것 - 두 테이블을 실제로 합치는 게

slowslow.tistory.com

 

.

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기

1주차 - 수강일자 210920

 

기본

  • 쿼리문 : 데이터베이스에 명령을 내리는것
    • CRUD 네가지 메인 액션이있지만 DB관련 직종이 아닌이상 R(read)만 제대로 하면 된다. 
    • 이번 강의에서는 R만 배우기로 한다.
  • 테이블 : 시트
  • 필드 : 컬럼
  • 문자에는 '' 따옴표가 필수 / 또는 ""도 무방
  • 숫자에는 '' 따옴표 미사용
  • SQL은 대소문자를 가리지 않는다. 어떻게 써도 동일하게 인식

where절

  • 같다 : =
  • 다르다 : !=
  • 초과 미만 : > <
  • 이상 이하 : >= <=

조건

  • 포함 : where 컬럼명 in (조건1, 조건2, ... )
  • 범위 : where 칼럼명 between '조건1' and '조건2'
    • ex. between '2021-08-02' and '2021-08-08'
      => 08-02 ~ 08-07 출력. 이상 and 미만
  • 패턴 : where 컬럼명 like '%naver.com'
    • '%d' d로 끝나는 
    • 'd%' d로 시작하는
    • '%d%' d가 가운데 들어가는
    • 'a%b' a로시작하고 b로 끝나는

기타

  • limit # : #개만 출력하기 (where 절 이후에 사용)
  • distinct(칼럼명) : 칼럼명의 중복데이터는 제외하고 (select 절에 사용)
  • count(칼럼명) : 칼러명의 갯수세기 (select count(disntinct(칼럼명)) 으로 주로 사용)

수강시작!


 

2주차 강의 기록 - [스파르타코딩클럽] 엑셀보다 쉬운 SQL

스파르타코딩클럽 엑셀보다쉬운 SQL (4주) 33기 2주차 - 수강일자 210921 통계 최대 max () 최소 min () 평균 avg () 갯수세기 count () 묶기 기준 만들기 칼럼(필드) 내 항목으로 그루핑하기 group by 칼럼명 gr.

slowslow.tistory.com

 

애자일 조직 제품 관리자의 고객중심 문서 작성 가이드! (에픽, 유저스토리)

https://youtu.be/Z6tgjS3cMcA

 

case 1 - 기획자

  • 비즈니스 관계자 or 고객으로부터 요구사항 수집
  • → 기획자가 분석, 설계
    • 이때 설계된 문서를 "스토리보드"라고 부름 (국내에만 있음)
    • 스토리보드에는 ui, 정책, 기능 명세 등이 담기게 됨
  • → 이를 바탕으로 디자이너, 개발자가 작업
    • 디자이너와 개발자는 주로 제작 단계에 참여

# 스토리보드

좌) ui 우) desc

 

case 2 - pm, po

  • 비즈니스 관계자 or 고객으로부터 요구사항 수집
  • → po, pm도 분석을 함. 하지만 설계를 하진 않고 고객의 목적과 행동을 정의 (왜 쓰고 뭘 불 편해하고 뭘 원하는지, 니즈) = 니즈를 중심으로 정의
    • 이때 작성된 내용을 Epic, User story라고 함
  • → 이 내용을 바탕으로 디자이너, 개발자가 소통해가면서 설계를 함께 진행하고 제작에도 모두 함께

# epic, userstory

문서로 구성

 

  • 테마가 최상단에 가장 크게
    • 에픽
    • (flow chart)
      • 유저 스토리
        • 누가 무엇을 위해서 어떤 기능을 원한다. (유저의 관점에서 작성)
        • acceptance criteria (인수기준)
          • 제품이 최종 사용자 혹은 시스템이 제시하고 있는 요구사항을 만족하고 있는지를 판별하기 위한 기준
          • 인수조건의 가장 큰 특징은 철저하게 사용자의 관점에서 제품의 기능을 정의한다는 것입니다
            • 테스트

→ pm 은 ui 가아니라 위와 같은 문서를 주로 작성한다.

→ 스토리보드는 ppt로 제작해 검색이 어려운데 이런 건 위키로 되어있어서 검색이 용이하다.

→ 유저 스토리는 고객 입장에서 고객이 원하는 것을 고민하는 것으로 서비스 기획과 view(관점)이 많이 다르다.

제품 관리자(PO,PM)의 Product 일정관리 노하우!

https://youtu.be/gg56Z_LlXvE

 

워터폴 : 프로세스에따라 단계적으로 구현

애자일 : 최소단위제품MVP를 빠르게 출시해 개선하는 방식

->  프로젝트 성격에따라서 워터폴/애자일 둘 중 하나가 잘 맞을 수 있음

 

금융 플랫폼, 운영체제와 같이 한번에 완제품을 출시해야 하는 경우에는 워터폴이 적합

고객을 사로잡아야 사업의 성패가 결정되는 프로덕트의 경우 애자일 방식이 적합

 

backlog에 1) 로드맵 2) 내부 이슈, 기술 부채 3) 고객 요구사항 기록

- 고객 → 사용성 개선, 신규기능 추가, 버그

- 개발 → 우리만 아는 내부 이슈, 기술 부채

- 경영진 → 비즈니스 관련 task

 

* 기술부채 : 현 시점에서 더 오래 소요될 수 있는 더 나은 접근방식을 사용하는 대신 쉬운(제한된) 솔루션을 채택함으로써 발생되는 추가적인 재작업의 비용을 반영 / 기술적으로 해결되어야할 문제들을 뒤로 미루고 비즈니스 문제를 해결하는 것을 앞당기는 것

 

backlog page

Inbox → pending (요구사항 정리, 분류, 그룹화 → new sprint 형성) → ready (정리된 task 모아둠)

 

weekly page

  • goal - 모든 task는 목표를 기준으로 함
  • in progress
    • backlog를 고르게 분배해 In progress를 잘 만들어야 한다.
    • 담당자 배정, 업무 진행 시 pm이 우선순위를 결정하기 때문에 1) 로드맵 2) 내부 이슈, 기술 분배 3) 고객 요구사항 세 가지의 밸런스를 잘 맞춰야 한다. 단, 회사와 협의한 goal 또한 하나의 기준이 되어야 한다.
    • → 중간에 끼어서 스트레스받는 경우가 많긴 하다.. 단, pm이 잘못 결정하면 프로덕트가 산으로 가는 경우가 많다.
    • 기재 시 각 과업마다 사용하는 이유를 함께 기재
  • 여러 개의 sprint를 만들고, 운영단에서 발생하는 문제를 위한 sprint( ops )를 별도로 운영하며 비율은 80% 20%로 유지함

회고

  • 스프린트 종료 후 각자 잘한점/개선할 점 각자 정리
  • 개선할점 미안해서 안 쓰는 경우도 있는데 무조건 적게 해야 함
  • 회고 진행 → 회고 미팅 → 최종 정리(by pm) → 다음 스프린트에 반영
    • ex. 000 프로세스 개편 ~

 

애자일의 핵심은 고객의 피드백을 듣고 원하는 제품을 만드는 것

수행주체는 사람이기에 팀 세팅이 가장 중요

소모되고 있다는 느낌보다는 의미 있는 일을 하고 있다는 동기부여

정체되어있기보다는 함께 성장하고 발전하는 과정

서로 신뢰하는 팀을 만들어야 한다.

→ 좋은 팀에서 좋은 프로덕트가 나온다.

잘하는 기획자의 기준은 무엇인가?

https://youtu.be/A5yHcKrgTHk

 

1. 기획을 잘한다는 것 = 업무 스타일이 맞는다는 것

  • 넓게 트인 시야로 구체화
  • 정리의 신
  • 체계적인 위계 정리
  • 일정관리의 신

2. 기획을 못한다는 것 = 쟤랑은 일 못하겠어

 

그게 아니라면, 어느 정도 기획을 하는 범주에 들어오는 것 → 그렇게 되면 업무 스타일이 생기게 된다.

 

ex. 잘하는 기획자 = 자신과 손발이 잘 맞는 기획자

ㄴ 여러 역량 중에, 동료들과 손발이 잘 맞느냐로 동료들에게 평가받을 수 있다.

ㄴ 기획을 잘한다는 객관적 지표는 없다. 누구와 손발이 잘 맞는가가 잘한다의 기준을 판단하는 것이고 그것은 개인마다 차이가 있을 수 있다.

 

if 내가 기획을 못하는 거 아닐까란 생각이 들 때

  1. 정말 자질이 없을 때
  2. 지금 이 팀이 안 맞을 때. 자신의 기획자로서의 성향과 안맞을때 → 조직 또는 팀을 바꿔보자

PO : 프로덕트를 이끄는 전문가

기획자 : 프로덕트의 완성도를 높여주고 현실화해주는 전문가

 

 

Con. 잘하는 기획자?

  1. 객관적인 기준은 없다.
  2. 주변 동료에 의해 평가된다.
  3. 나와 손발이 잘 맞는 동료들을 주변에 두면 자연스럽게 잘하는 기획자가 된다.

디자이너와 개발자가 뽑은, 내 인생 최고의 Product Manager!

https://youtu.be/U3JhQlTFxWw

 

내 인생 최고의 프로덕트 매니저

  • 콘텍스트/데이터/리서치 기반으로 커뮤니케이션
  • 팀원들과 동등한 위치
  • 개발자와 논쟁할 수 있는 지식을 갖춘 pm 이 좋은 pm이다.
  • 로드맵을 지속적으로 리뉴얼하는 것이 좋다.
  • 마감일보다는 해결책에 초점을 맞춘다 → 마감일도 중요하지만 해결책에 초점을 맞추는 게 중요하다. 마감일을 조금 유연하게 조절했다.
  • 고객 중심으로 최고의 제품을 위해 C레벨과 마찰을 이겨냄
  • 다양한 이해관계자들과의 커뮤니케이션 ← 디자인과 엔지니어링에 대한 이 해이 필요. 직접 개발/디자인 하진 않더라도 문제를 직접적으로 집어내는 역할은 필요
  • 해결책보다는 문제를 찾아내고 소통하는데 더 많은 시간을 사용
  • 디자이너와 개발자를 파트너로 대우. 보상보다는 제품 출시에 더 많은 신경을 쓴다.

BEST PM requirement

  • 목표와 비전 설정
    • 왜 이 일을 해야 하는지 비전과 목표를 제대로 설명할 수 있다.
    • 지속해서 사용자, 경쟁사, 시장조사를 진행하고 이를 제품에 반영
    • 해결책보다는 문제를 더 깊게 고민
  • 의사결정
    • 본인이 아닌 소비자, 비즈니스, 팀을 위한 결정을 내림
    • 중요한 것에 집중하고 불필요한 것들은 걸러낸다
    • 데이터에 기반한 의사결정을 내릴 줄 안다
  • 업무지식
    • 해당 산업의 도메인에 대해 깊게 이해
    • 디자인과 엔지니어링을 이해함
    • 데이터를 제대로 사용할 줄 알고, 데이터를 이해하는 사람과 협업할 수 있다.
  • 커뮤니케이션
    • 팀원 의견을 경청하고 올바른 실행방안을 만든다.
    • 이해관계자에 따라 상황에 맞는 모자를 쓰고 커뮤니케이션
    • 커뮤니케이션 메시지가 잘 되어있고 일관적이고 명확하다
    • 언더 커뮤니케이션보다는 오버가 낫다.
  • 협업
    • 동료를 도구가 아닌 중요한 파트너로 대한다
    • 동료의 업무방식을 존중하고 효율적으로 일할 수 있도록 돕는다 → 마이크로 매니징보다는 역할을 위임함
    • 팀원의 질문 및 요구사항에 제때 답변을 해준다.
  • 태도/자세
    • 제품을 더 좋게 만들기 위해 경영진에 의의를 제기할 수 있다.
    • 피드백을 감정적으로 받아들이지 x
    • 자기 아이디어와 사랑에 빠지지 x


프로젝트 매니저와 프로덕트 매니저의 역할
https://youtu.be/pSwnHgh1NzI

 

프로젝트 매니저와 프로덕트 매니저

프로젝트 매니저 \ 프로덕트 매니저

  • 시작과 끝이 있음 \ 제품(지속적인 개선)
  • 브랜드 사이트 구축, 시스템 통합(에이전시, SI기업) \ 페이스북 - 타임라인, 채팅 유튜브 - 큐레이션, 검색 (서비스 기업) → 시간이 지날 수록 고도화, 서비스 다양화
  • Project \ Product
  • 일정내 효율적으로 프로젝트 런칭 → 요구사항(의사결정자의 니즈) 분석이 제일 중요 \ 고객이 원하는 제품 만들기 → 고객의 니즈 발견을 위해 설문, 인터뷰, AB테스트
  • 의사결정자에게 보고하고 컨펌하는 과정의 반복 \ 가설 → 실험 → 분석 → 가설의 반복
  • pm의 역할 - 매니징(제 시간내에 원활히 런칭될 수 있도록) \ 매니징보다는 협업에 가까움 - 실무 기획에도 참여

 

>

서비스 기획이더라도, 프로젝트 매니저가 필요한 경우가 있음

초기 제품 출시단계에서도 프로젝트 매니저가 필요한 경우가 있다.

둘다 소화할 수 있는 역량을 갖추자!

강의명 : 제품 관리자와 서비스 기획자를 위한 실전 노하우 - 아낌없이 드립니다!

링크 : https://www.inflearn.com/course/%EC%A0%9C%ED%92%88-%EA%B4%80%EB%A6%AC%EC%9E%90-%EC%8B%A4%EC%A0%84-%EB%85%B8%ED%95%98%EC%9A%B0#curriculum

 

B2C 프로덕트 기획 & B2B 프로덕트 기획

https://youtu.be/KTGHPAe26CI

 

B2C : 개인이 사용하는 프로덕트

B2B : 비즈니스 목적, 사업자가 사용하는 프로덕트

  1. o2o] b2c : 배민 / b2b : 배민사장님
  2. 채팅] b2c : 카카오 / b2b : 슬랙
  3. 호텔] b2c : 데일리호텔 / b2b : 온다
  4. 자산] b2c : 뱅샐 / b2b : 더존

[중요포인트]

c : 고객이 가치를 느끼는 제품인가? - 고객만족

b : 사업활동에 도움이 되는 제품인가? - 매출증대, 비용절감

[기획할때의 차이]

c : 고객여정journey를 기준으로. 고객 경험을 최적화하는데 포커스 / 고객들의 숨은 니즈를 발견

b : 새로운것을 제공하면 오히려 혼란을 야기 → 프로세스를 직접익혀서 제대로된 기획을 해야함 → "전문용어사용" / "사용성이 불편해도 꼭 필요한 기능 구현" → 사용성보다는 기능 존재가 더 중요

[데이터 분석]

c : 데이터분석으로 a/b테스트 등등

b : 사업자분석만해도 ok 5명정도

[pm 사용여부]

c : pm이 직접사용하는 제품이기때문에 좀더 흥미를 갖고할수있음

b : pm이 직접사용하지 않는 제품이기때문에 흥미는 낮을 수 있음

[성장성]

c : 고객 니즈를 충족하면 j 커브 성장을 기대할 수 있음

b : j커브 성장은 어렵지만 유료화가 용이해서 꾸준한 성장이 가능함

[고객확보]

c : 마케팅이 주력방법 → 돈을 태움

b : 마케팅으로는 어려움, 홍보나 영업으로 고객확보

+ Recent posts