아티클

FameLee

FameLee

비개발자도 노코드로 하루 만에 서비스 런칭합니다 (3)

 그로잉피플의 강의 커리큘럼을 따라 24시간 만에 올인원 링크 관리 솔루션, 브릿지링크라는 서비스를 완성해 배포했습니다. 그로잉피플에서 서비스 기획부터 UI 디자인, 노코드 개발까지 모든 과정을 함께 해보면, 노베이스인 사람도 IT 서비스를 혼자서 만들 수 있습니다.

burnchThumbnial.png

🔥 이번 주 강의 모집이 종료됩니다. (~ 23.08.27)
친구와 함께 수강하면, 페이백을 드려요!

 


목차 
1. 버블로 데이터베이스 구축하기  
2. 서비스 로직과 shortURL 기능 구현하기  
3. 완성된 서비스 배포하기  
4. 총 소요 시간 분석하기  

버블로 데이터베이스 구축하기

1. 데이터 모델링하기

 이전 글에서 프론트엔드 작업을 끝냈으니, 백엔드 작업을 시작했습니다. 프론트엔드 작업을 위해 UI 디자인 작업이 선행됐다면, 백엔드 작업을 위해서 데이터베이스 모델링이 선행돼야 합니다.

 데이터베이스 모델링을 위해 아래의 질문을 던졌습니다.

  • 어떤 개체가 필요한가?

  • 개별 개체의 속성은 무엇인가?

  • 개체 사이의 관계는 어떻게 되는가?

 여기서 개체(entity)는 ‘정의 가능한 사물 또는 개념’으로, 데이터베이스에서 테이블(table)로 대변됩니다. 속성(attribute)은 ‘개체가 갖고 있는 정보의 유형’으로, 테이블의 컬럼(column)으로 대변됩니다.

2. 개체, 속성과 관계수 정의하기

 브릿지링크의 플로우 차트를 참고해 어떤 개체가 필요한지 정의했습니다. 전반적인 서비스 프로세스는 (1) 업무 공간에 여러 팀원을 초대하고 (2) 공간에서 URL과 UTM을 등록하며 (3) 배포 링크를 생성합니다. 이때, 필요한 경우에 (4) ShortURL을 생성하고 썸네일 등을 별도 설정합니다.

설명을 기준으로 도출한 개체와 개체 별 속성은 다음과 같습니다.

 마지막으로 서로 다른 개체가 어떠한 관계 수를 맺고 있는지 생각했습니다. 예를 들어, 1개의 워크스페이스는 N명의 유저와 관계를 맺을 수 있습니다. 반대로, 1명의 유저는 N개의 워크스페이스에 참가할 수 있습니다. 이런 경우에 유저와 워크스페이스는 N:N의 관계를 맺고 있다고 말합니다.

3. 데이터베이스 구현하기

 버블에서 클릭 몇 번으로 데이터베이스를 구현할 수 있습니다. 앞서 도출한 개체와 속성에 맞춰 테이블과 속성을 생성했습니다.

 이렇게 생성한 테이블의 데이터는 버블에서 확인할 수 있습니다.


서비스 로직 구현하기

1. 페이지 이동 로직 구현하기

 데이터베이스를 구현했으니, 이제 서비스 작동 로직을 처리할 차례입니다. 버블의 로직은 워크플로우 형태로 존재합니다. 워크플로우는 (1) 트리거 이벤트와 (2) 액션 이벤트로 구성되며, 트리거 이벤트가 작동되면, 연결된 일련의 액션 이벤트가 작동됩니다. 예를 들어 서비스에서 특정 이미지나 버튼을 클릭하면, 다른 페이지로 이동됩니다. 여기서 트리거 이벤트는 “특정 이미지나 버튼의 클릭”이고, 액션 이벤트는 “지정한 페이지로 이동”이 됩니다.

 로직은 간단한 것부터 작업을 시작하기로 했습니다. 가장 먼저 작업한 기능은 페이지 이동 로직입니다. 해당 로직은 특정 요소를 클릭하면, 페이지를 이동하게끔 설정만 하면 됩니다.

 버튼을 클릭했을 때, 특정 페이지로 이동하는 워크플로우를 만들었습니다. 워크플로우를 생성하고, 트리거 이벤트로 “시작하기 버튼 클릭”를, 액션 이벤트로 “페이지 이동”을 설정하면 페이지 이동 로직이 구현됩니다.

2. 데이터 로직 구현하기

 CRUD는 데이터 로직인 Create, Read, Update, Delete의 줄임말입니다. 이 중에서 데이터 호출 로직(Read)을 먼저 처리했습니다. 그래야 데이터 생성, 수정 및 삭제 로직의 결과를 바로 확인해서 로직에 오류가 있는지 바로 확인할 수 있기 때문입니다.   

  • Create : 데이터를 새로 생성하는 로직

  • Read : 기존 데이터를 호출하는 로직

  • Update : 기존 데이터를 수정하는 로직

  • Delete : 기존 데이터를 삭제하는 로직

 텍스트, 이미지 등의 요소로 데이터베이스에 저장된 데이터를 불러올 때, Dynamic data 기능을 사용합니다. 이는 현재 페이지, 데이터베이스, 유저 정보 등을 변수 값으로 활용할 수 있는 기능으로, 사용한 변수 값은 파란색 글씨로 표기됩니다. 아래에 적힌 Current page’s workspace’name는 현재 페이지와 관련된 워크스페이스 데이터에서 name 값을 불러옴을 뜻합니다. 이런 식으로 모든 요소에 필요한 데이터를 호출했습니다.

 호출 로직을 처리한 후, 데이터의 생성(Create), 수정(Update)과 삭제(Delete) 로직을 구현했으며, 이때 케이스 별 로직 처리를 고려해야 합니다. 예를 들어, URL 데이터를 생성할 때, 무작정 입력한 모든 값을 URL로 등록하면 안 됩니다. 현재 워크스페이스에 이미 등록된 URL이라면, 이를 등록하지 못하게 막아둬야 합니다.

 앞선 예시에서는 동일한 버튼을 클릭했지만, 조건에 따라 다른 결과가 나왔습니다. 바꿔 말해, 트리거 이벤트는 동일하지만, 액션 이벤트만 다릅니다. 이런 경우에 하나의 워크플로우 안에 조건 별 액션 이벤트를 따로 설정하면 됩니다.

3. shortURL 구현하기

 마지막으로 생성한 shortURL로 유저가 접속할 시, 연결된 링크로 리다이렉트를 시키는 로직을 구현했습니다. bitly 같은 단축 URL 서비스의 작동 원리는 아래와 같습니다.   

  • 1. 유저가 Short URL을 클릭해 페이지 접속

  • 2. Short URL과 연결된 Original URL를 데이터베이스에서 확인

  • 3. Original URL 값을 호출

  • 4. 해당 URL로 페이지 리다이렉트

 우선 Short URL을 클릭했을 때 나오는 빈 페이지를 생성했습니다. 그리고, 혹시 인터넷 문제로 리다이렉트가 지연될 경우에 유저에게 로딩 중이란 느낌을 줄 수 있도록, HTML 코드를 활용해 애니메이션 요소를 직접 생성했습니다. 버블의 기본 요소 중에 HTML 요소가 있는데, HTML 코드를 직접 입력해 요소를 생성할 수 있습니다.

 그다음으로 페이지의 Title, Description과 Thumbnail Img를 유저가 설정한 데이터를 불러와 설정되게 만들었습니다. 이제 카카오, 슬랙 등의 채널에서 shortURL 링크를 공유했을 때, 설정한 값이 유저에게 보입니다.

 마지막으로 페이지의 HTML Header에 연결된 링크를 불러온 후, 여기로 리다이렉트 시키는 메타 태그를 입력했습니다. 이제 페이지에 들어오면, 호출된 링크로 리다이렉트가 됩니다.


완성된 서비스 배포하기

1. GA 연결하기

 이제 서비스 제작이 완료됐으니, 배포를 준비할 차례입니다. 유저들이 서비스를 어떻게 사용하는지 파악하기 위해 GA를 연결했습니다. 버블의 설정 페이지에서 현재 서비스를 구성하는 모든 페이지의 <Head>와 <body>에 코드를 삽입할 수 있습니다. 여기에 생성한 GA 계정의 트래킹 코드를 삽입하면 됩니다.

2. 링크 설정

초기에 서비스를 홍보할 때, 커뮤니티나 주변 지인에게 링크를 공유하는 방식을 사용합니다. 이때, 채널에서 자동으로 링크에 저장된 썸네일, 타이틀, 디스크립션 값을 불러와서 보여줍니다. 썸네일 이미지와 문구가 얼마나 매력적인지에 따라서 유저의 클릭율도 달라집니다.

 설정 페이지에서 링크 공유 시 보여주는 기본 값을 설정할 수 있습니다. 썸네일 이미지로 서비스의 핵심 기능을 담은 목업을 설정하고, 타이틀에는 서비스 이름을, 디스크립션에는 서비스의 제공 기능을 요약해서 적었습니다. 

3. 자체 도메인 연결

 버블은 작업한 서비스에 bubbleapps.io라는 도메인을 기본 제공합니다. 예를 들어, 서비스 이름이 bridgelink라면, 서비스 URL은 bridgelink.bubbleapps.io이 됩니다. 기본 도메인이 마음에 들지 않는다면, 직접 구매한 도메인을 연결할 수도 있습니다. ShortURL 기능에서 bubbleapps.io 도메인은 길이가 길다고 판단해, 별도로 도메인을 구매해 사용하기로 했습니다. 어떤 도메인을 사용할까 고민하다, “Cloud”라는 도메인이 “링크를 공유한다”는 컨셉에 부합해 이를 구매해서 연결했습니다.

 모든 세팅을 완료하고, 최종적으로 서비스를 배포했습니다. 버블은 유료 플랜에서 Dev와 Live 버전 서비스를 지원합니다. 이 둘은 독립적으로 존재하며, Dev는 개발용이고 Live는 유저용 서비스라 보면 됩니다. 버블에서 작업한 부분은 실시간으로 Dev에 반영됩니다. 작업을 완료한 Dev 버전을 배포하면, 그제야 Live 버전에 적용됩니다.


총 소요 시간 분석하기

 약 24시간 만에 브릿지링크 서비스를 만들면서, 어떤 업무에서 시간이 많이 소요됐는지를 체크해 봤습니다. UI 디자인에서 가장 오랜 시간이 걸렸고, 그다음으로 프론트엔드 작업과 로직 설정에서  걸렸습니다. 로직 설정에서 시간이 걸린 이유는 케이스에 따른 로직을 고려해야 했기 때문입니다.

 노코드로 방법론의 가장 큰 장점은 ‘가장 많은 걸 알고 있는 사람’이 모든 것을 다 결정하고 행동할 수 있다는 점입니다. 기획자, 디자이너, 개발자가 서로 협업하는 경우, 각자가 알고 있는 정보를 동기화하는 데 시간이 소요되고, 잘못된 정보 동기화로 이상한 결과물이 나올 수 있습니다. 하지만, 노코드 개발 방법은 기획부터 디자인과 개발까지 혼자서 처리할 수 있기에, 커뮤니케이션 오류와 비효율성이 전혀 발생하지 않습니다. 결과적으로, 일관적인 방향으로 서비스를 디벨롭할 수 있습니다. 

🔥 이번 주 강의 모집이 종료됩니다. (~ 23.08.27)
친구와 함께 수강하면, 페이백을 드려요!

 

버블로 만든 서비스, 브릿지 링크를 아래서 확인할 수 있습니다.

 

그로잉피플

노코드로 만드는 나만의 IT 서비스

17
4
윤현묵

윤현묵

[230822] 모두의연구소가 전하는 "모두를 위한 AI 뉴스"

안녕하세요~ 오늘도 유익한 AI뉴스 공유드립니다 :)

모두의연구소는 함께 공유하고 성장하는 국내 최대 AI 커뮤니티입니다.
그럼, 오늘의 AI 뉴스 시작해 볼게요! 😀

1️⃣BentoML을 활용한 DeepFloyd IF 모델 배포하는 방법!
허깅 페이스에서는 모델의 업로드, 공유, 배포를 도와주는 플랫폼인 반면, BentoML은 머신 러닝 모델을 제공하고 서비스로 배포하기 위한 오픈 소스 플랫폼이에요. 프로덕션 준비 AI 애플리케이션을 만드는 통합 프레임워크를 제공한다는 점에서 저도 유용하게 사용하고 있는데요. BentoML 사용 방법은 간단합니다! 1) 모델 정의 2) 모델 저장 3) BentoML 서비스 생성 4) 벤토 패키징 5) Bento 배포. 오늘 소개해드리는 블로그에는 DeepFloyd IF와 BentoML를 통합해서 배포하는 방법을 소개하고 있습니다. 비교적 따라하기 쉽게 핸즈온으로 되어 있으니 직접 한번 경험해보시는 걸 추천합니다!

2️⃣구글 리서치의 "CHITA" 방법론: 더 빠르고 효과적인 신경망 가지치기
최신 신경망은 다양한 애플리케이션에서 뛰어난 성능을 보이지만, GPU와 같은 하드웨어가 많이 필요하죠. 이때문에 GPU가 없는 환경에서는 딥러닝을 사용하기 어렵습니다. 해결하기 위해서는 네트워크의 가중치를 제거하는 '프루닝' 기법이 사용되곤 하는데요. 프루닝은 훈련 전, 중, 후에 진행할 수 있습니다. 오늘 소개하는 프루닝 기법은 훈련 후 진행하는 것을 목표로 합니다. 프루닝에는 영향력이 작은 것을 없애는 기법과 최적화를 진행할 때마다 영향력이 작은 것들을 업애는 기법이 있습니다. 그러나 둘의 관계에서 트레이드오프가 존재한다고 해요. 이에 구글 리서치에서 발표한"CHITA" 방법을 소개해 드릴게요. 트레이드오프를 해결하며, 기존 방법보다 빠르게 네트워크를 프루닝하면서 정확도를 향상시키는 것을 보여 준다는 점에서 흥미롭네요!

3️⃣"STUDY" 추천 시스템: 학생들을 위한 개인화된 오디오북 콘텐츠 제안
학생들에게 독서는 단순 지식 정보 향상을 기반으로 학업과도 긴밀하게 연관되죠. 다양한 책과 읽을거리 중 시선을 사로잡고, 흥미와 재미를 끄는 콘텐츠를 찾는 것은 중요할 수 밖에 없습니다. 이에 머신 러닝(ML)을 활용한 추천 시스템이 도움을 줄 수 있을 것 같은데요! 머신러닝은 사용자의 선호도와 참여도를 기반으로 개인화된 콘텐츠를 추천하는 데 활용되며, 사용자의 경험을 향상시키는 데 중요한 역할을 합니다. "STUDY" 추천 시스템은 교육 환경의 오디오북 콘텐츠 추천에 중점을 두고 있습니다. Learning Ally와의 협력으로 학생들에게 적합한 오디오북을 추천하기 위한 알고리즘이 개발되었으며, 교실 내 친구들과의 독서 기록을 공유하며 인기 있는 책을 추천하는 방식을 채택하였다고 합니다. 평소 독서나 독서 모임을 즐기거나, 자녀가 있다면 활용해보면 좋을 것 같아요~!

📍Llama 2, SDXL 이미 알고 있다면?
AI학교 아이펠 리서치 과정 모집 중 → https://bit.ly/3OX29fF

4
0
박종한

박종한

[오늘 마감] "창업 4년동안 한푼도 못 벌다가 일주일만에 천만원 번 썰 푼다!" at 대장간 화덕 파티

ezgif-1-c202aba780.gif

안녕하세요, 창업가 8명이 모여 사는 집, 대장간의 박종한입니다. 몇 주 전, @신가인이 월 천만원을 달성한 소식을 디스콰이엇 커뮤니티에 공유하며 자신의 인사이트를 공유하는 피자 파티에 올 사람을 모집하는 글을 올렸습니다.

그런데 저희 예상보다 정말 많은 분들이 신청해주셨고, 대장간에 모든 분들을 모시기에는 장소가 너무 협소할 것 같아 성수동의 넓은 스튜디오를 대관했습니다. 그리고 신나서 DJ로 @오상훈(OHROK) 과 또 다른 업계 사람 지민(DDING)을, 바텐더로는 @박도연 을 초대했어요.

이제 독립한 지 한 달이 넘어가는 저도 디스콰이엇 밖에서는 처음 열어보는 네트워킹 파티인지라 긴장도 되고 기대도 되는데요, 그만큼 열심히 준비했습니다. 스타트업에 있거나, 각자의 삶을 열심히 살아가는 사람들이 모입니다. 여러분이 아실만한 신청자로는...

Naly.ai 의 파운더 @marc zen

Screenshot 2023-08-22 at 10.59.39.png

Skrr의 파운더 @김현준

Screenshot 2023-08-22 at 11.02.08.png

등등 평소 정말 바빠서 뵙기 어려운 분들이 시간을 내주셨어요! 대장간 멤버들도 만나실 수 있고요:)

신청이 오늘 까지이니 많은 신청 부탁드립니다!

행사 정보

일시: 8월 23일 수요일 오후 7시

장소: 성수동 광나루로 8길 11, B1 (오두막스튜디오)

참가비: 1만원(사전 신청 시 입금)

제공: 피자 및 맥주, 칵테일 제공 (논알콜 음료 있음)

신청 방법

아래 링크에서 8/22 화요일 자정까지 신청

6
6
이상선

이상선

4개의 스타트업 도움

최근에 여러 미팅을 하면서 스타트업 시작하는 사람들과 연결이 되고 있습니다. 오랜 시간 개발을 해 오던 저에게 지난 몇 년 동안 새로운 기쁨이 생긴 것 같습니다. 스타트업을 발굴하고 주로 개발이지만 사업을 진행하는 여러 분야에 대한 멘토링을 하는 것이죠.

주 4일 근무를 원칙으로 해서 한 요일에 하나의 회사씩 섬기려고 하는데 지금 3개의 회사를 섬기고 있습니다. 마지막 한 자리 혹시 필요하시면 연락 주세요.

고맙습니다.

9
4
그룹바이

그룹바이

이젠 그룹바이에서 PM/PO, 마케터, 디자이너도 채용하실 수 있어요.

안녕하세요!

초기 스타트업을 위한 채용 플랫폼 "그룹바이"를 만드는 임진하 입니다.

그룹바이가 채용 직군을 확장하였습니다!

이젠 PM/PO, 마케터, 디자이너도 채용하실 수 있어요.

현재 채용 가능 인원 (23.08.21 기준)

✍️ PM/PO : 126명 

📈 마케터 : 81명

🎨 디자이너 : 49명 

Q. 왜 개발자에서 직군 확장을 했나요?

스타트업을 사랑하는 사람들은 개발자만 있는게 아니더라고요. 최근 스타트업 합류를 희망하는 PM/PO, 디자이너, 마케터 분들을 많이 만났습니다. 또한 많은 초기 스타트업이 똑똑하고 열정있는 PM/PO, 디자이너, 마케터를 찾고 계시는 것을 알게 되어 직군 확장을 점차 시도하고 있습니다.

Q. 그럼 어떻게 채용할 수 있나요? 

그룹바이에 등록된 디자이너, 마케터, PM/PO 프로필 250명을 확인하고, 제안을 보내실 수 있어요. 또한 신규 직군에 대한 채용공고를 올리시면, 앞으로는 지원자가 많이 발생하실거에요.

image.png

Q. 앞으로 디자이너, 마케터, PM/PO 인재 모집계획은?

지금 그룹바이 풀에는 주로 스타트업을 가고 싶은 대학생이 많이 등록 되어있어요.앞으로도 해커톤에 적극 후원하면서, 스타트업을 너무 가고 싶어하는 열정넘치는 대학생과 주니어를 열심히 모집할 계획이에요. 그러나 현재도 경력직 PM이나 경력직 디자이너가 종종 유입되고 있어요. 경력직 타겟으로 마케팅 캠페인을 추후에 크게 진행할 계획입니다.

그룹바이는 더욱 초기 스타트업에 특화되어
채용문제를 해결하고자 합니다.

초기 스타트업인 진정으로 원하는 것에 집중하여 서비스를 고도화시켜 나가겠습니다. 그룹바이의 발전에 많은 관심과 응원 부탁드립니다. 

PM/PO, 마케터, 디자이너 250명 프로필 보기👇

그룹바이 기업 서비스

스타트업의 채용을 위한 4가지 채용 솔루션

10
1
Hongbeom

Hongbeom

밸러 스튜디오 시작한 썰

2023년 초에, 여동생과 함께 한국 스타일리스트를 찾는 사이트 looksmax.kr를 만들기 시작했어요. 갤러리를 만들려고 했는데, 도움이 필요해서 업워크에 프로젝트를 올렸죠. 그래서 Ash라는 사람이 5분만에 바로 답변을 보내오면서 본인이 쓴 Next.js로 갤러리를 만드는 블로그 포스트들을 보내줬어요.

image.png

2-3일 같이 일해보니까 즐겁고 신뢰가 갔어요. 그래서 looksmax에 참여하면 7% 주식을 줄게라고 제안했는데, Ash는 바로 동의했어요. 그렇게 3일만에 내 사이드 프로젝트에 공동 창업자가 생겼어요.

당시에 Tweetbase에서 풀타임 엔지니어가 필요했어요. 그래서 Ash에게 또 같이 할까 물었죠 : ) 몇 달 동안 함께 일하니까, 진짜 잘 맞았어요. 주식을 제안했지만 다른 스타트업에서 더 나은 제안을 받았다고 해서, 헤어지곤 주기적으로 연락하며 지냈어요.

그런데 looksmax 클라이언트가 한 프로젝트를 제안했어요. 한국 남자와 러시아 여성을 매칭하는 앱을 만들어달라고요. 그래서 Ash에게 연락했고, 이게 valor.sh의 첫 프로젝트가 되었어요. 클라이언트는 이미 YouTube에 100K 이상의 러시아 구독자가 있습니다. 마케팅도 안 했는데 사용자들이 링크들 어떻게 찾아서 어제만 새로운 가입자가 147명이 생겼어요. 처음으로 유튜버들의 힘을 느꼈네요.

밸러는 지금 월에 4천 달러 이상 매출을 내고 있고, 연말까지 2만 달러 목표로 하고 있어요. 마케팅 채널은 있는데 소프트웨어나 프로젝트 관리 기술이 부족한 사람들과만 파트너십을 맺으려고 해요. 이게 윈윈일 거라고 생각해요, 고객도 처음부터 이익을 내게 되서 밸러는 장기 고객 확보가 쉬워지고 고객은 프로덕트를 완전히 아웃소싱하게 되어 고객들이 잘하는 유저 유입에만 집중할 수 있거든요. 이 방향이 valor.sh에 큰 기회가 될 것 같아요.

갑자기 왜 이 사이드 프로젝트를 하고 있는지 궁금해할 수도 있을 텐데, 몇 가지 이유가 있어요. Tweetbase는 아직 프리 PMF이고 런웨이도 떨어져가서 밸러에서 나오는 수익을 재투자할 계획입니다. 또 밸러를 운영 하면서 B2B 프로젝트 아이디어를 얻을 수 있을 것 같아요. 어제 에이전시들이 사용할만한 자동화 툴 아이디어도 생각해봤고, 몇 주 안에 출시할 예정이에요!

앞으로도 계속 진행 상황을 공유할게요.

읽어주셔서 감사해요.

2weeksMVP

MVP in 2 weeks

8
4
Byungchae Ryan Son

Byungchae Ryan Son

브레인스토밍으로는 부족하다

웹사이트 트래픽 분석 서비스를 제공하는 시밀러웹에 따르면 챗GPT로 세상을 흔든 오픈 AI의 트래픽이 지난 5월부터 매달 10.35%씩 줄어들고 있음이 확인된다. 처음에는 신기하고 재미있어 전 세계인들의 관심과 시간을 끌어당겼으나 삶에서 받아들여지는 필수적인 역할이 확실해지지 않는 한 빠르게 잊힐 수도 있는 가능성이 있음을 확인케 하는 현상이다. 물론 기존의 18억이라는 거대한 트래픽 수치로부터의 감소, 생성 AI라는 시대적 패러다임의 흐름 등을 고려하면 이는 앞으로도 큰 이슈가 아닐 수 있다. 하지만, 아무리 뛰어난 서비스라 하더라도 사용자 삶과의 관련성(Relevance)이 성공을 좌우한다는 사실에는 변함이 없음은 확인할 필요가 있다.

우리가 바라보는 누군가의 사업은 해당 창업자에게는 지극히 사적인 영역에서의 선택과 헌신의 영역에 있다. 일례로 최근 트위터의 사명을 X로 변경한 일론 머스크는 이유를 설명할 수 없으나 자신은 X라는 글자가 맘에 든다는 글을 공개하며 트위터의 상징인 파란 새를 새장 밖으로 날려버리는 결정을 내렸다. 1999년 그가 창업한 X.com에서 시작된 그의 X에 대한 사랑은 본격적인 성공을 안겨준 페이팔로의 합병 과정에서도 X페이팔이라는 사명에의 주장으로 이어졌고, 이후의 스페이스 X, 테슬라에 이어 슈퍼앱 X로의 비전에까지 닿아있다. 

중요한 건 창업자와 마찬가지로 사용자들의 서비스 사용 경험의 시작 또한 지극히 개인적인 관심과 필요에 기반한다는 사실이다. 어머니들의 장보기와 요리는 가족을 위한 헌신과 사랑의 실천이자 표현이며, 가정 내 다양한 스마트 기기 중 고기를 구울 때 사용하는 가장 작고 저렴한 스마트 온도계를 최고로 꼽는 초보 가장의 선택은 주변 사람들과의 따뜻한 관계와 닿아있다.

하지만 이 같은 제품 및 서비스와 사용자 간의 상호 관련 여부에 대한 기업의 관심은 매우 제한적이며 지속적이지 못하다. 초반 제품 기획 단계에서부터 이후의 마케팅 활동을 위한 회의에까지 이어지는 질문은 대부분 ‘어떤 아이디어가 적절한가’에 맞춰진다. 한때 스낵 컨텐츠가 온라인을 점령한 시기가 있었다. 2000년대에 들어서며 페이스북이라는 전 세계인들이 온라인으로 관계를 맺을 수 있는 플랫폼이 등장했고 이를 통해 가볍게 소비 및 배포되는 콘텐츠들이 제작되기 시작했다. 해외의 버즈피드부터 국내의 피키캐스트에 이르기까지 얕고 흥미로운 소재의 콘텐츠들이 인기를 끌며 기업의 확장을 견인했지만, 현재는 축소되거나 아예 사라졌다. 가벼운 콘텐츠가 대중에게 주던 영향력은 옅어졌고 대중은 틱톡 및 인스타그램의 등장 이후 미디어 콘텐츠의 호스트가 되어버렸기 때문이다. 

‘Look’의 저자 크리스티안 마두스베르그는 20년의 컨설팅 경력을 통틀어 매번 클라이언트 기업들의 혁신을 이끌고 위기를 극복하게 한 건 아이디어가 아닌 통찰력이었음을 명확히 했다. 그리고 이 통찰력은 우리 앞에 보이는 전경(foreground)과 그 뒤에서 작용하는 배경(background) 모두를 관찰해야 파악할 수 있다고 밝혔다. 그는 각 분야에서 고도로 숙련된 전문가들이 모인 기업들이 실제로 의미 있는 변화를 만들어내지 못하는 이유는 '무엇이 중요한지 분별하는 방법을 모르기 때문'이며 관찰은 자신과 다른 사람들에게 진정으로 중요한 것이 무엇인지 파악하는 유일하고 느린 기술이라 주장한다.

빅데이터와 수많은 통계가 쏟아져 나오며 우리는 소비자가 무엇을 하고 있는지 듣게 된다. 기업의 리더들은 수많은 미시적, 거시적 의사 결정을 내리기 위해 밖에서 무슨 일이 일어나고 있는지 기록된 대규모 데이터 세트를 확인하지만, 그 안에 기록되지 않는 것에는 얼마나 관심을 기울이는지 아무도 질문하지 않는다. 누가 참석했는지 확인할 때 오지 않은 이가 누구이고 그 이유가 무엇인지, 한 사람이 발언할 때 다른 이들이 왜 침묵을 지키기로 결정했는지, 새로운 트렌드에 대해 이야기하는 상황에서 사람들이 이야기하지 않는 것은 무엇인지 질문하지 않는다. 

아이디어가 쏟아져 나오는 상황에서 드러나고 확인 가능한 변화만을 논의하는 건 그래서 단기적인 성과를 향할 뿐 '관련성'과의 거리를 벌어지게 한다. 때문에 이 아이디어 어때요?라는 질문은 종종 답하기 어렵다. 인류학 분야에서 논의되는 인간 창의력의 존재 이유는 사람이 다른 사람을 자신이 원하는 방향으로 이끌기 위해서이다. 당신이라는 사람이 현재 제품, 서비스에 대한 아이디어를 논하고 있다면, 그 너머에 있는 다른 사람들의 배경에까지 지속적인 관심을 가져보는 걸 제언해 본다.


*이 글은 23년 8월 21일 자 전자신문 기명칼럼에 게재된 내용의 원본입니다.


References

openai.com Traffic and Engagement Analysis

Twitter is now X. Here's what that means.

일론 머스크는 왜 X에 집착하나

436 – HOW TO SEE THINGS AS THEY REALLY ARE.

Look: How to Pay Attention in a Distracted World

6
2
임세진

임세진

LLM 스터디 #1

  1. 휴튼에 대한 간략한 소개

휴튼은 보다 많은 사람들이 '내적 글쓰기'라는 수단을 통해 내면에 집중하고, 궁극적으로 자신을 더 깊이 이해하여 명확한 목적의식을 가진 삶을 살 수 있도록 도와주는 서비스입니다.

  1. LLM 스터디를 시작하게 된 배경

휴튼에서는 최근 생성AI를 기반으로 한 기능을 오픈하려고 합니다. 이 과정에서 배우고 있는 것을 공유하고자 합니다.

  1. LLM이란..?

LLM은 large language model의 약어로, 전통적인 RNN 기반이 아니라, 최근에 성능이 잘 나오던 transformer-based architecture을 기반으로 제작되었다고 합니다.

LLM은 이름에 걸맞게, 엄청난 언어 데이터를 학습해서 생성한 모델이구요, self-supervised learning을 해서 문맥 안에서, 그리고 문장 안에 필요한 다음에 올 토큰(*)을 예측한다고 해요.

LLM이 학습하는 과정은 다음과 같다고 해요.

1) 문자열 데이터를 tokenize(*)하여 각 문자들에게 고유한 숫자 값 부여

2) 문장에 다음에 올 단어를 예측하는 모델을 생성

3) 모델 파라미터를 랜덤하게 할당

4) tokenize된 문자열 token들을 모델에 Feed Forward(**)

5) 문장에 다음에 올 단어를 예측하고, 실제 다음에 오는 단어 사이에 loss(***)를 계산

6) loss를 최소화 하는 방식으로 모델 파라미터를 재 조정

7) 모델의 정확도가 높아질 때 까지 1) ~ 6)의 과정을 반복


< (*) 부연 설명 >

여기서 토큰이라는 용어가 생소하신 분들을 위해 간략하게만 설명을 드리면, NLP에서 모든 언어의 낱말들은 컴퓨터에서 학습을 하기 편하게 tokenize라는 과정을 거쳐요. tokenize 과정을 통해 각 낱말은 고유의 ID 값을 지니게 되어요.

< (**) 부연 설명 >

Feed Forward는 단순하게 설명하면, 딥러닝 모델에서 데이터를 모델에 넣어서 예측하게 하는 과정을 의미해요. 딥러닝 모델은 크게 데이터 전처리, 모델 생성 및 초기 파라미터 설정, Feed Forward, Back Propagation의 과정들이 있어요. 보통은 모델이 정확해질 때까지 Feed Forward와 Back Propagation 과정을 반복해요. Back Propagation을 진행하면, 모델이 넣어준 데이터에 맞춰서 정교하게 수정된다고 이해를 하시면 돼요.

< (***) 부연 설명 >
loss는 Back Propagation이나, 모델의 파라미터를 재 조정할 때 계산되는 값이에요. 예측 값이랑 실제 값이랑 얼마나 다른 지를 수치적으로 나타내죠. loss를 계산하는 방식은 여러가지가 있어요. 보통 모델이나 데이터에 따라 loss를 계산하는 방법이 달라져요.


< 참고 자료 >

8
2
장영운

장영운

이미지를 넣으면 이야기를 만들어주는 AI

허깅페이스에는 신기한 AI들이 많이 올라옵니다.
저같은 비개발자도 간단히 체험해 볼 수 있는 재미있는 AI를 발견해서 공유합니다.

이미지를 입력하면 그에 어울리는 이야기를 만들어주는 AI 인데요.

제가 생성한 귀여운 고양이 이미지를 입력해보겠습니다.

스크린샷 2023-08-22 오전 9.33.43.png

고양이가 주인공인 아이들을 위한 짧은 동화를 만들어줬네요.

🔗여기에서 경험해볼 수 있습니다.

10
12
Henry

Henry

팀원이 주 100시간 글 있다해서 왔는데 어디갔나요. 비밀비법이라 사라졌나요?

3
0
아시아비전

아시아비전

[오늘의 1PX] 못하는건 정신 승리고, 안 하는 건 멋이다

안녕하세요. 1PX입니다. 오늘은 유튜버 장사의 신, 은현장님이 쓰신 ‘나는 장사의 신 은현장이다’ 에서 나온 몇 구절을 소개해드리려고 합니다.

  1. 누군가가 ‘그럼 적당히 일하고, 적당히 벌어서 사는게 낫지 않나요? 그렇게 몸이 상할 정도로 일을 해야 하나요?’ 라고 묻는다면, 나는 이렇게 말하고 싶다.

“일단 돈을 진짜 많이 벌어봐라. 세상이 달라진다.”

  1. 못하는건 정신 승리고, 안 하는 건 멋이다.나 역시 지금 당장이라도 골프를 치러 다닐 수 있고, 좋은 차를 뽑고, 몇품 옷을 입고 다니면서 비싼 음식점에 갈 수 있다. 하지만 그런 건 나와 안맞다. 아직도 나는 추리닝을 입는 게 좋고, 차보다는 오토바이를 타고 다니며, 여전히 몸을 쓰면서 장사하는게 편하다. 그리고 열정있고 성실하지만 장사 스킬이 없는 사람들을 도와줄때 행복하다.

  1. 장사가 잘 안되는 집의 공통점은 고집과 신념을 구분하지 못하는 것이다. ‘이건 이래서 안돼’, ‘쓸데없는 소리야’라고 생각하면서 ‘상황이 나아지면 괜찮아지겠지’. ‘고객들이 내 음식 맛의 가치를 몰라주는 거야’라고 믿어버린다. 자기는 신념이라고 생각하겠지만, 사실 그건 고집일 뿐이다.

  1. 그 당시 전단지 1천장을 뿌려봤자 들어오는 주문은 2~3건에 불과했다. 이후 나는 방법을 달리해 고객에게 배달 음식을 줄 떄 집 문 안쪽에 전단지를 붙였다. 그로부터 3개월이 지나자 거짓말같이 주문이 엄청나게 들어오기 시작했다. 내 방법이 들어맞은 것이다. 똑같은 전단지 1천장이라도 그냥 붙였을 떄 주문율이 0.2%에 불과했지만, 집안에 붙였을 떄는 10%로 주문율이 높아졌다.

  1. 살아있는 사람은 자기 삶에 최선을 다해야 한다.

  1. 프로와 아마추어의 차이는 태도라고 본다. 흔히 전문성이라고 생각할 수도 있는데 전문성은 배움과 경험을 통해서 갖출 수 있다. 포기하고 싶은 생각이나 ‘오늘 하루 건너뛰면 어떄?’라는 유혹을 참는 것. 이런 태도가 그 사람을 특별하게 만드는 것이다. 프로는 무슨 일이 있든 간에 끝까지 해내고야 마는 정신을 갖고 있다.

위 구절에서 저는 특히 전단지 관련 문구가 와닿았습니다. 같은 제품이라도 어떻게 시장에 내놓고 표현하고 보여주느냐에 따라 결과는 천차만별 이라는 것을 잊지 않아야겠네요. 

은현장이라는 사람은 유튜브 쇼츠에서 가끔 보게 된 분인데 책에서 봐도 정말 치열하게 살아왔음이 느껴집니다. 

그럼 오늘 하루도 모두 잘 보내시길 바랍니다!

-
1PX CLUB 소개

어제보다 1픽셀 더 나아가는 자기계발 모임. 

하루에 한번, 오픈톡에서 각자 배운 것을 공유하며 성장하고 있습니다.

*1PX 오픈톡 정보(코드 : 1111)

5
0
김정래

김정래

10분 내로 끝낼 수 있는 AI 커버곡 만들기

최근 유튜브에 보시면 AI 커버곡들이 많아졌죠?

몇 달전 경량화된 모델이 나오면서 누구나 쉽게 커버곡을 만들 수 있게 되었기 때문이죠.

모델 설명이나 이론 이런 것보다 일반인들에게 필요한 것은 어떻게 사용하냐죠.

그래서 정말 쉽게 AI 커버곡 만드는 과정을 입문자 관점에서 설명드릴게요.

딱 속는 셈 치고 10분만 투자해 보세요.

사실 무슨 노래로 만들어 볼까 하는 고민이 가장 오래 걸리고 나머지 과정들은 금방 끝납니다.

1. 커버곡 선택하기(선택에 따라 2~10분)

음원사이트를 통해서 노래를 구합니다. 저 같은 경우는 유튜브 음원을 추출해서 사용합니다.

- 코러스나 에코가 없는 노래일수록 결과물이 좋습니다. 랩은 추천하지 않습니다.

2. MR과 목소리 나누기(컴퓨터 사양에 따라 1~5분)

무료로 목소리와 MR을 나눠주는 "Ultimate Vocal Remover v5"를 사용해서 목소리와 MR을 나눠줍니다.

Input 파일과 결과물 저장할 폴더 그리고 Method를 선택해 줍니다.

- AI 커버곡 퀄리티에 가장 큰 영향을 미치는 것이 이 부분입니다. 깔끔하게 목소리만 추출해야 결과물이 정말 좋게 나옵니다. 하지만 우리는 입문자기 때문에 이 부분은 넘어갑니다.

image.png

3. 목소리 모델 찾기(선택에 따라 1~10분)

여기까지 끝내면 정말 8부 능선은 넘어간 겁니다. 아래 디스코드 채널에 접속하여 voice-models를 클릭합니다. 그리고 원하는 목소리를 찾습니다. RVC v2 태그가 된 모델만 사용하세요. 모델을 클릭하면 이미지처럼 오른 편에 글이 뜨는데 여기서 Model link 부분만 복사합니다.

https://discord.gg/aihub

image.png

4. 코랩을 사용합니다. (2분)

영어가 엄청 나와 어지럽지만 매우 쉽습니다. 재생 버튼 3개만 순차적으로 눌러주세요. 아래 이미지처럼 재생 버튼이 안 보여도 저기 표시된 부분을 클릭하시면 됩니다.

https://colab.research.google.com/drive/1Gj6UTf2gicndUW_tVheVhTXIIYpFTYc7?usp=sharing

image.png

5. WebUI를 실행(0분)

3번 째 재생 버튼을 클릭하면 아래 이미지처럼 URL이 하나 나옵니다. 이 URL을 클릭하시면 새 창이 뜨면서 AI 노래를 만들 수 있는 페이지로 넘어가집니다.

image.png

6. 목소리 모델 다운받기(30초)

3번에서 복사한 model link 부분을 입력하고, 모델 이름을 적당히 적습니다.

image.png

7. 이제 추론 합시다.(1분)

모델을 다운 받았으면,

1) model을 선택

2) 2번에서 만든 목소리 파일을 업로드한 후 선택. 모델과 음성 파일이 보이지 않으면 refresh 버튼을 누릅니다.

3) 음성파일까지 업로드가 되었다면, Convert를 누릅니다.

image.pngimage.png

8. AI 커버곡 생성 끝!!!!(30초)

이제 AI 결과물을 MR과 합쳐봅니다. 생성된 AI 결과물을 다운받습니다. 음성 합칠 수 있는 서비스(저는 주로 bandlab을 이용합니다)에 들어가서 AI 목소리와 MR을 합친 후 파일을 저장합니다. (bandlab에서는 오른 쪽상단의 Publish를 누른 후에 설정 탭에서 Project->Download->Mixdown As를 클릭하세요.)

https://www.bandlab.com/studio

이렇게 하면 멋진 노래가 뙇하고 나오게 됩니다.!!!

image.png

저작권이나 뭐 이런 문제가 있을 거 같아서 파일은 업로드하지 못하지만 생각보다 노래가 정말 잘 나온답니다.

이러한 입문 과정이 익숙해지면

2번 과정에서 목소리 파일을 더 깔금하게 깎는 걸 연습하게 되고,

3번 과정에서 본인이 직접 원하는 인물의 목소리 모델을 만들게 되고,

8번 과정에서 보다 정교한 후처리를 통해 더 깔끔한 노래를 만들게 됩니다.

19
14
이홍열

이홍열

종료된 서비스가 월 2,000건 이상의 검색

image.png

우선 이전의 이야기들인, 콜롬북스 관련 기록은 아래에 정리합니다.

  1. 콜롬북스 로그 01

  2. 콜롬북스 로그 02

  3. 콜롬북스 로그 03

  4. 콜롬북스 로그 04

  5. 콜롬북스 로그 05

  6. 콜롬북스 서비스 종료 후

종료시킨 서비스에 이렇게 미련이 남아도 싶은가라는 생각이 듭니다. 이미 떠나 보낸 지, 1년이 넘은 서비스인데, 아직까지 애착이 있습니다. 사실 저는 이 서비스를 언젠가는 다시 부활시키겠다는 생각은 계속하고 있습니다. 저한테는 콜롬북스가 사업 이상의 가치를 가진 "평생의 과제"이기 때문입니다.

아무튼 사실 요즘 콜롬북스 2.0 을 기획하고 있습니다. 단순한 콜롬북스 부활이 아닌, 저의 경험은 살리되, Product 는 처음부터 다시 만드는 것입니다. 다행인지(?) 콜롬북스 기능이 그렇게 막 어렵지는 않습니다. 핵심 기능이 mp3 player와 동영상 player 이고, 사실 이미 있는 라이브러리를 사용해서 만들었기 때문에 난이도가 높지는 않습니다.

그리고 가장 문제였던 수익모델도 마련했습니다. 사실 수익모델을 마련한 거는 매우 오래되었지만, 실행할 수 있는 능력(=개발팀)이 없었습니다. 콜롬북스가 아예 돈을 못 번 것은 아니고, 몇 억 벌기는 했는데...지속적인 성장을 보장하는 수익모델이 아니라서 중간에 관뒀었습니다. 수익모델 관련해서는 콜롬북스 로그 05를 읽어보시면 나옵니다.

요즘 콜롬북스에 관심이 있으신 몇몇 외주개발사팀 대표님들과 미팅중입니다. 부활을 어떻게 시키면 좋을지, 콜롬북스 2.0 개발을 해주실지 등등이요. 그러다가 오늘 모대표님과도 1시간정도 회의를 했는데, 아래와 같은 자료를 주셨습니다. 살짝 충격이었습니다. 뭐 콜롬북스가 책에 서비스가 인쇄되어 있으니, 당연히 아직 검색은 좀 하겠지라는 생각은 했지만, 이렇게 많이 하리라고는 생각 못 했습니다. 클릭수는 없습니다. 서비스를 종료해서 클릭할 링크가 사라졌으니까요 ㅎㅎ

<Naver에서 콜롬북스 검색어 조회 결과>

image.png

<Google 에서 콜롬북스 검색어 조회 결과>

image.png

아니 무슨 종료한 지 1년도 더 된 서비스를 사람들이 이렇게 많이 찾고 있다는 사실에 저도 놀랐습니다. 참고로 콜롬북스 고객은 이런 검색사이트에서의 검색보다는 오히려 앱스토어와 구글스토어에서 검색을 훨씬 더 많이 합니다. 이유는...이렇게....도서에 안내되어 있기 때문입니다.

콜롬북스 고객의 여정

  1. 출판사가 새책을 낸다.

  2. 관련된 동영상 강의, mp3 파일, 각종 자료 파일들을 콜롬북스에 등록한다.

  3. 도서에 콜롬북스 서비스 안내를 인쇄해서 출고한다.

  4. 독자가 책을 구매한다.

  5. 책속의 동영상강의, mp3 를 이용하려고 한다.

  6. 책표지나 책속의 콜롬북스 안내문구를 보고 콜롬북스를 인지한다.

  7. 구글플레이 혹은 앱스토어에 가서 "콜롬북스"라고 검색한다.

  8. 콜롬북스를 설치한다.

  9. 회원가입을 한다.

  10. 구매한 도서명으로 검색한다.

  11. 필요한 동영상강의와 mp3 파일, 부가자료를 다운로드 받는다.

  12. 동영상강의나 mp3 를 play 한다.

  13. 밖에서는 콜롬북스 APP으로 집에서는 PC로 학습한다. (반복한다)

1444638620343.png

돈을 버는 것도 중요하지만, 사람들한테 이렇게까지 필요한 서비스라면 다시 살리는 게 맞을 듯 싶습니다.

그래서 나름 열심히 콜롬북스 2.0을 준비중이기는 합니다. 개발팀과 자금이 없다라는 매우매우 열악한 상황이죠.

스타트업에게 있어서 가난은 축복입니다. 가난하기 때문에 머리를 쥐어짜고 있고, 주변의 네트워크를 통해서 협상중입니다.

혹시라도 콜롬북스 2.0에 관심이 있으신 투자자나 개발자, 기획자, 디자이너분들은 언제든지 제게 커피챗 신청 주세요. 전세계 수 천 만부의 도서에 콜롬북스를 인쇄하고, 도서를 서포트하는 서비스를 하실 분들을 찾습니다. 

언젠가....전 세계 모든 도서에 콜롬북스를 인쇄하는 그 날까지....아마도 제 도전은 계속될 겁니다.

커피챗하기

17
3
Scarlett Son

Scarlett Son

클라우드플레어 Startup plan 수요 확인

안녕하세요, 어플리케이션/웹 서비스에 대한 보안 그리고 성능 향상 솔루션을 제공하고 있는 클라우드플레어에서 B2B 영업을 담당하고 있는 스칼렛이라고 합니다.

자사에서 진행하는 initative 중,

혹시 앱/웹 서비스에 대한 기본적인 CDN/WAF/DNS/DDoS protection 및 제로 트러스트 보안 솔루션 그리고 Workers 솔루션 (Serverless 앱 개발) 등을 제한된 기능 내에서 무료로 사용하실 수 있는 startup plan 에 관심이 있으신 국내 스타트업 담당자 분들이 있으실지 궁금하여 이렇게 글을 올립니다.

혹시 해당 plan 관련한 설명회에 참여 의사가 있으신 분은 간단한 댓글 또는 아래와 같이 전구 이모지 남겨주시면 감사하겠습니다! (문제시 삭제하겠습니다)

4
0
최현종

최현종

[PARD 롱커톤] 대학생 4명이서 EO급 영상 만들기

안녕하세요, 실시간 트렌딩 프로덕트에 올라온 IT연합 동아리 플레이북을 만든 PARD동아리의 최현종입니다.

그동안 열심히 여러 후원/협력사 분들의 도움을 받고 또 좋으신 멘토/심사위원님들을 통해 퀄리티 높은 프로그램 진행이 가능했다고 밝힌 바 있는데요.

롱커톤이 도대체 뭐길래 그렇게까지 열심히 했는지 소개가 다소 부족한거 같아, 많은 시간과 노력을 기울여 롱커톤 소개 영상을 만들었습니다.

커뮤니케이션학부(언론영상전공) 4명과 PARD 멤버 2명을 주축으로 서울에서 장비까지 빌려와 열심히 촬영하고 또 편집했어요. 비수도권에서 IT연합의 장을 꾸준히 만들기 위해 각잡고 투자를 많이 했습니다ㅎㅎ 그렇다면 즐겁게 봐주세요!!

구독 좋아요 알림설정! 부탁드릴게요:)

PARD

Pay it forward를 실천하는 대학생 IT협업 동아리

17
6
Shawny Kwon

Shawny Kwon

🐋 1036명의 고객의 이야기를 들어보니...

image.png

이 게시글은 무니스 팀과 함께 수면 경험을 혁신하실 오퍼레이터를 찾기 위해 올리는 글입니다.


오늘은 무니스가 자랑스럽게 우리는 "고객 중심의 팀"이라고 말할 수 있는 컬쳐를 갖기까지 어떤 과정을 거쳤는지 그 여정을 기록해보려고 한다.

33시간 회의하던 우리

MVP 성공 기준을 처음으로 통과하는 프로덕트가 생겼다. 바로 고농축 슬립샷 미라클나잇. 사전 예약했던 고객들은 엄청난 속도로 결제/재결제 하기 시작했고 본인 SNS에 자발적으로 우리의 프로덕트를 홍보하기 시작했다. 우리는 그동안의 실패를 바탕으로 고객의 목소리가 얼마나 중요한지 머리로는 알았기 때문에 바로 유저 인터뷰를 진행하며 고객의 일상, 수면 환경을 이해하고 자신의 언어로 설명하는 장점과 단점을 받아 적었다. 그리고 열심히 분석했다. (아래 이미지는 우리가 진행했던 인터뷰를 분석 회의 때 사용한 Figjam이다)

image.png

하지만 분석하면 할수록 미궁으로 빠져 들어갔다. 우리가 직면한 질문들은 다양했다:

  1. 어떤 고객의 목소리를 먼저 들어야 할까?

  2. 어떤 기능을 먼저 개발할까?

  3. 앱 버그는 어디까지 고쳐야 할까?

  4. 고객의 목소리를 다 들어야 할까?

  5. 우리 프로덕트는 앞으로 어떻게 성장해야 할까?

우리는 MVP 통과 후 더 치열하게 회의하기 시작했다. 다양한 프레임워크를 도입하며 고객을 이해하려고 했지만 계속해서 명쾌한 답이 나오지 않았다. 그렇게 회의는 길어졌고, 우리는 33시간이라는 엄청난 회의 시간을 기록했다.

회의.png그렇게 우리는 우리만의 원칙을 세웠다.

  1. 미라클나잇의 장기 목표

    세계 최고 수준의 수면 경험을 제공한다

  2. 미라클나잇 타겟군(=고객)

    고효율 수면에 높은 관심이 있는 갓생러들

  3. OMTM

    Net Disappointment Score

그리고 원칙 위에 스프린트 프레임워크를 도입했다. (지금은 다른 프레임워크로 하고 있지만) 그리고 고객과 다시 대화했다. 많은 것들이 달라져 있었다. 우리가 누구를 위해, 어떤 방향으로, 왜 개발해야 하는지 알고 나니 해야 하는 액션들이 명확했다.

고객의 목소리를 듣고 싶어

미라클나잇은 계속 성장했다. 고객 베이스는 늘었고, 고객의 이야기도 더 다양해지고 많아졌다. OMTM은 바뀌었고 지금도 다양한 고군분투 속에서 프로덕트를 발전시키고 있다. 이런 지속적인 성장에서 고객과 함께하기 위해 우리는 2가지를 도입했다.

  1. 모든 서비스 고객에게 피드백을 받는 것

    우리 앱에서 특정 액션을 하면 피드백을 보낼 수 있는 팝업을 띄워줬다. 그 팝업의 CTA는 피드백 폼으로 연결되었는데 사람들은 이곳에서 다양한 이야기를 해줬다. 많은 이야기를 해주신다. 정말 감사하다는 이야기. 하루가 바뀌었다는 이야기. 덕분에 너무나 행복해졌다는 이야기.

    image.png하지만 우리를 놀라게 한 것은 그들의 솔직한 피드백이었다. 서비스 경험이 만족스럽지 못하다고 이야기하는 사람들이 열정적으로 우리의 서비스를 비판했다. 미라클나잇을 친구 누구에게도 추천할 의사가 전혀 없다고 한다. 그렇지만 엄청나게 상세한 이유들을 적어주신다. 한 번은 인터뷰에서 그런 고객에게 질문을 했다. 그럼에도 불구하고 왜 인터뷰를 해주시나요? 그의 대답이 아직도 기억난다. 본인의 수면 문제를 해결해 줄 수 있는 곳이 여기 밖에 없을 것 같고, 이 서비스는 본인이 이야기하면 바뀔 것 같아서 한다고. 우리는 누군가에게 대체 불가능한 서비스로 자리 잡고 있었다.

  2. 이를 모든 팀원이 볼 수 있게 하는 것

    이렇게 다양한 피드백을 나 혼자 보는 것은 전혀 의미가 없다. 우리 팀원들도 봤으면 좋겠는 마음에 슬랙으로 연동해 모든 팀원이 볼 수 있게 했다. 이러한 가벼운 마음에서 시작된 슬랙 연동은 이후 우리 팀에 큰 영향을 주었다.

    모두가 고객의 목소리를 있는 그대로 읽고 보기 때문에 지금 우리가 어떤 액션을 왜 해야 하는지를 서로 설득하거나 정당화해야 하는 과정이 생략된다. 어디서 문제가 있는지 모두 알고 있기 때문이다.

    혹시나 고객의 목소리를 놓칠 수 있기 때문에 주기적으로 VoC Syncing 시간을 갖는다. 각자 시간을 가지고 천천히 하나하나 다 읽어본다. (다 읽으면 이렇게 각자 스티커를 표기한다. 귀엽다)

    image.png뿐만 아니라, 각자의 자리에서 각자가 한 액션에 따라 고객의 목소리가 어떻게 바뀌는지 바로바로 확인할 수 있다는 것도 엄청난 장점이다. (고객이 제시한 문제를 빠르게 해결하여 드리니 감사하다고 장편의 문자를 받은 오퍼레이터 다봄의 행복한 순간)

    image.png

고객과 더 가까워지고 싶어

우리 팀은 어느 수면 서비스보다 고객과 가장 친밀하게 소통하고 있다고 생각한다. 실제 휴대폰으로 수면 유도 소리가 들리지 않는다는 분께 블루투스 스피커를 선물하기도 했고, 14일 동안 수면한 모든 고객에게 하나하나 직접 포장한 선물을 드리기도 했으며, 우리 덕에 수면제를 끊으신 고객님의 병원에서 우리 팜플렛을 배치시키기도 했다.

image.pngimage.pngimage.png그 결과 우리 고객은 엄청난 리텐션을 보인다. 우리와 진정으로 소통하고 이야기하며 우리의 본질을 이해해 주시는 분들은 계속 앱에 남는다. 떠난 사람도 돌아온다.

image.png

우리는 한 발자국 더 다가가고 싶다. 고객을 더 감동시키고 싶고, 우리를 통해 최고의 숙면을 경험케 하고 싶다. 그래서 그들의 문제를 해결하고 더 나은 내일을 살아갈 수 있는 힘이 되어주고 싶다.

1036명의 고객의 이야기를 들어보니 서비스가 성장하더라

YC의 마이클 세이벨은 이런 이야기를 했다. 고객을 진심으로 사랑하는 경쟁사를 이기기 힘들다고. 우리는 다른 그 어떤 수면 서비스보다 고객을 사랑하고 있고, 사랑할 자신이 있다. 그런 사랑에 힘입어 더 열심히 듣고 노력하니 어느 순간 서비스는 성장하고 있었다. 우리의 구독자 수는 매달 24%씩 성장한다. 그리고 이 성장세는 더 빨라지고 있다.

이야기를 맺으며, 이러한 고객 경험 설계와 실현은 초기 서비스 단계에서 밖에 할 수 없는 것이라는 생각 때문에 오히려 나중에 이 시간이 아쉽다는 이야기를 팀원들과 많이 주고받는다. 지금밖에 할 수 없는 이 놀라운 일을 함께 할 새로운 오퍼레이터 팀원을 찾고 있다.


무니스와 함께 할 오퍼레이터는 바로 당신

갑자기 존댓말로 돌아와 다시 정식으로 팀원을 찾아봅니다. 저희는 현재 오퍼레이터 인턴을 찾고 있습니다. 팀에 들어오시면 저와 함께 팀을 이뤄 고객 경험을 혁신하는 액션을 함께 하게 됩니다. 고객에게 새로운, 그리고 놀라운 경험을 주고 싶은 당신. 그리고 그 경험을 통해 팀과 본인의 성장을 이끌어내실 당신. 주저하지 말고 연락주세요!

채용 공고: https://munice.notion.site/cc2d457d84ef477d90f822b3ab225ac8?pvs=4

회사 소개:

좋은 밤이 당연한 세상을 믿으시나요? 이미 수천 명의 사람들에게 그러한 세상을 만들어주고 있는 무니스와 함께해요.😊

41
28
이희정

이희정

intro. 어느새 1년 반이 지나가고 있는 사이드 프로젝트를 돌아보며

안녕하세요, 저는 밤길 안심 통화 앱 <랜턴>을 만들고 있는 기획자 이희정입니다.

작년 5월에 기획자들끼리 모여 팀을 결성하고... 아이디어를 내고... 차근차근 디자이너와 개발자를 모집했네요.

팀원들이 나갔다가 다시 들어오고, 나갔다가 다시 들어오고.

그 과정에서 기획 역시 한 번 엎어져서 다 만들어둔 화면 설계서를 엎기도 하고...🥲

그렇게 1년이 지나가고, 1년 반을 향해 달리고 있는 사이드 프로젝트입니다.

저희는 처음에는 대학생들끼리 모여 진행했고, 이젠 저와 몇몇 팀원들은 졸업을 했네요.

한 번도 이런 앱 개발 프로젝트를 진행해 본 적도, 완벽하게 리더를 맡아본 적도 없는 제가 얼떨결에 PM을 맡아 고군분투 하고 있습니다.

비전공생이던 제가, 첫 사이드 프로젝트를 1년 동안 끌고 가게 되면서 어느 지점이 어려웠는지 적어보려고 해요.


  1. 기획 산출물, 대체 뭐가 뭔지 모르겠다! 처음에는 IA와 화면설계서와 기능명세서 등등...

    • 이 문서들이 각각 왜 필요한지 알지 못했다. 그래서 중복적으로 하게 된 경우도 있다. (왜 필요한지도 모르고 문서부터 작성하면 안 되는 예)

  2. 매니징, PM의 중요성을 몰랐고, (아마 이게 프로젝트를 길게 끈 요인인 거 같다) 어떻게 해야하는지도 몰랐다.

    • 특히 디자인 팀과 개발 팀 각각 어떤 프로세스로 진행하는지도 몰라 아직도 공부 중이다...

  3. 팀원을 구할 때 가장 중요한 개발 언어조차 모르고 있었다!!!

    • 알게 된 후에도 리액트 네이티브 -> IOS로 개발 언어가 바뀌게 되면서 개발자 분들과 아쉽게 헤어지게 되기도 해야했다... (다행히 프론트 분들은 작업 전이었다)

    • 이런 개발 언어의 차이 정도는 알아둬야 한다 정말ㅠ

  4. 조직문화에 정말 많은 고민을 했다! 회의나 회의록 시스템도 바뀌고.

    • 처음에는 Slack을 이용했다가 discord로 바꾸면서 협업툴도 바뀌고 했다. 이런 협업 툴이나 조직문화의 종류에 대해서도 알아두면 좋다.


등등... 지금 생각나는 것들만 적었는데, 이건 새발의 피입니다...ㅠㅠ 아직도 고민거리가 가득 넘쳐요.

이런 초보의 고군분투기도 누군가에게 도움이 되길 바라면서, 하나하나씩 적어가보겠습니다!

저랑 같이 초보 기획자, 첫 사이드 프로젝트로 고군분투 하는 분들과도 소통하고 싶어요.

댓글로 조언 등 도움 주시는 것도 너무 환영합니다! 앞으로 열심히 회고 해보겠습니다!

6
7
Cailyn Yong

Cailyn Yong

[Part 3] 2시간 안에 업무 자동화 AI Agent 만들기: 구글 검색 기능

AI Agent 만들기의 마지막 파트입니다.

Part 1: 전체 프로그램 셋업, OpenAI API 연결, Vector Store 연결

Part 2: 커스텀 LLM 체인 직접 만들고나서 실행하기

Part 3: Agent가 나 대신 실제 구글 검색하는 기능 만들기

SerpAPI key 받아오기

저번 파트에서 성공적으로 코드를 수행했다면 이제 AI 에이전트가 업무를 하기 위해 먼저 to-do list를 만들고 태스크 중 중요도가 높은 태스크부터 진행할 것입니다.

하지만 실제 구글 검색을 통해서 모은 자료가 아니기 때문에 정보가 정확하지 않고 hallucination 결과값들을 내뱉을 수 있습니다.

이번 파트에서는 이를 방지하고자 Google SerpAPI라는 것을 써서 에이전트가 실제 웹과 연결되어 구글링을 할 수 있도록 할 것입니다.

웹 검색을 하기 위해서는 Part 1에서 OpenAI를 쓰기 위해 OpenAI API secret key를 받은것처럼 SerpAPI key를 받아야합니다.

https://serpapi.com/ 여기로 가서 계정을 만든 다음, 옆에 API Dashboard라는 곳에서 Api key 버튼을 누르고 API key를 만드세요. OpenAI API key와 마찬가지로 이걸 복사해서 코드에 붙여넣을 겁니다.

import os
os.environ["OPENAI_API_KEY"] = " "
os.environ["SERPAPI_API_KEY"] = " "

기존 코드의 두번째 줄 바로 밑에 os.environ[”SERPAPI_API_KEY”] = “” 를 복붙하고 “ “ 사이에 방금 만든 SerpAPI key를 붙여넣으세요.

Part 1에서 나왔듯이 저희는 구글 검색을 가능하게 하려면 알맞는 모듈들을 불러와야합니다.

from collections import deque
from typing import Dict, List, Optional, Any

from langchain import LLMChain, OpenAI, PromptTemplate
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import BaseLLM
from langchain.vectorstores.base import VectorStore
from pydantic import BaseModel, Field
from langchain.chains.base import Chain

from langchain.vectorstores import FAISS
from langchain.docstore import InMemoryDocstore

기존의 모듈 코드(위 코드) 밑에 아래 코드를 붙여넣습니다.

from langchain.agents import ZeroShotAgent, Tool, AgentExecutor
from langchain import OpenAI, SerpAPIWrapper, LLMChain

이제 구글 검색이 가능한 LLM 체인을 만들겁니다.

Part 2에서 세번째 체인인 class ExecutionChain(LLMChain)은 현재 구글 검색이 불가능합니다. (아래 코드)

class ExecutionChain(LLMChain):
    """Chain to execute tasks."""

    @classmethod
    def from_llm(cls, llm: BaseLLM, verbose: bool = True) -> LLMChain:
        """Get the response parser."""
        execution_template = (
            "You are an AI who performs one task based on the following objective: {objective}."
            " Take into account these previously completed tasks: {context}."
            " Your task: {task}."
            " Response:"
        )
        prompt = PromptTemplate(
            template=execution_template,
            input_variables=["objective", "context", "task"],
        )
        return cls(prompt=prompt, llm=llm, verbose=verbose)

그래서 이 코드를 아래 코드로 대체할 것입니다.

todo_prompt = PromptTemplate.from_template(
    "You are a planner who is an expert at coming up with a todo list for a given objective. Come up with a todo list for this objective: {objective}"
)
todo_chain = LLMChain(llm=OpenAI(temperature=0), prompt=todo_prompt)
search = SerpAPIWrapper()
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="useful for when you need to answer questions about current events",
    ),
    Tool(
        name="TODO",
        func=todo_chain.run,
        description="useful for when you need to come up with todo lists. Input: an objective to create a todo list for. Output: a todo list for that objective. Please be very clear what the objective is!",
    ),
]

prefix = """You are an AI who performs one task based on the following objective: {objective}. Take into account these previously completed tasks: {context}."""
suffix = """Question: {task}
{agent_scratchpad}"""
prompt = ZeroShotAgent.create_prompt(
    tools,
    prefix=prefix,
    suffix=suffix,
    input_variables=["objective", "task", "context", "agent_scratchpad"],
)

이 코드로 대체할 건데요, 기존의 코드와 이 새로운 코드랑 비교를 해봅시다.

가장 먼저 코드의 첫줄을 보면 todo_prompt가 있습니다. 이건 기존 코드의 프롬프트 템플릿과 똑같은 기능을 해주고 있습니다. 하지만 prompt의 내용이 바꼈는데요, 기존에는 그저 ‘태스크를 컨텍스트에 맞게 실행해라’였다면 이번에는 조금 더 구체적으로 먼저 todo list을 만들으라고 하네요.

이 템플릿을 기반으로 저희는 todo_chain을 다음 줄에서 만듭니다.

세번째 줄에 있는 search = SerpAPIWrapper()는 저희가 처음에 불러온 SerpAPI 검색 기능을 쓰기 위해 셋업을 해놓는 것입니다.

재미있게도 저희는 todo_chain이 쓰면 좋을만한 툴들을 만들어주고 이걸 적절한 상황에서 각 툴을 알맞게 쓸 수 있도록 할 수 있습니다.

tools = [ … ] 코드 블록을 보면 저희는 크게 두가지 툴, “Search” tool과 “TODO” tool을 만든 것을 볼 수 있습니다.

Search tool은 실제 구글 검색을 하면서 정확한 정보를 불러와야할때 쓰는 툴이 되는거고, TODO tool은 todo list을 만들어야 할때 쓰이는 툴이 되는 것입니다.

마지막으로 기존의 코드와 비슷한 코드 부분은 prefix = “…” 부터 prompt = ZeroShotAgent까지의 코드입니다. 여기서는 이제 만든 todo list을 기반으로 태스크를 하나씩 실행하게끔 하는 Agent을 만든겁니다.

거의 다 왔습니다.

기존 코드에서 바꿔야 할 부분이 몇가지 더 있습니다.

@classmethod
    def from_llm(
        cls, llm: BaseLLM, vectorstore: VectorStore, verbose: bool = False, **kwargs
    ) -> "BabyAGI":
        """Initialize the BabyAGI Controller."""
        task_creation_chain = TaskCreationChain.from_llm(llm, verbose=verbose)
        task_prioritization_chain = TaskPrioritizationChain.from_llm(
            llm, verbose=verbose
        )
        execution_chain = ExecutionChain.from_llm(llm, verbose=verbose)
        return cls(
            task_creation_chain=task_creation_chain,
            task_prioritization_chain=task_prioritization_chain,
            execution_chain=execution_chain,
            vectorstore=vectorstore,
            **kwargs,
        )

위 코드를 아래 코드와 같이 대체합니다.

@classmethod
    def from_llm(
        cls, llm: BaseLLM, vectorstore: VectorStore, verbose: bool = False, **kwargs
    ) -> "BabyAGI":
        """Initialize the BabyAGI Controller."""
        task_creation_chain = TaskCreationChain.from_llm(llm, verbose=verbose)
        task_prioritization_chain = TaskPrioritizationChain.from_llm(
            llm, verbose=verbose
        )
        llm_chain = LLMChain(llm=llm, prompt=prompt)
        tool_names = [tool.name for tool in tools]
        agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names)
        agent_executor = AgentExecutor.from_agent_and_tools(
            agent=agent, tools=tools, verbose=True
        )
        return cls(
            task_creation_chain=task_creation_chain,
            task_prioritization_chain=task_prioritization_chain,
            execution_chain=agent_executor,
            vectorstore=vectorstore,
            **kwargs,
        )

기존 코드에서 만들었던 세번째 체인, execution_chain = ExecutionChain.from_llm(llm, verbose=verbose) 코드 대신 저희가 만든 구글 검색 기능이 가능한 ZeroShotAgent으로 바꿔줘야합니다.

return cls (…) 부분에서 execution_chain=execution_chain도 execution_chain=agent_executor로 대체합니다.

llm_chain = LLMChain(llm=llm, prompt=prompt)
tool_names = [tool.name for tool in tools]
agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names)
agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent, tools=tools, verbose=True
)

새롭게 추가된 코드를 좀 더 자세히 들여다보면, tool_names에서 저희가 만든 두가지 툴들, Search tool과 TODO tool을 둘다 쓸 수 있도록 루프를 돌고 있습니다.

agent = ZeroShotAgent(llm_chain=llm_chain, allowed_tools=tool_names) 이 코드에서는 llm_chain 기반, 저희가 만든 두개의 툴 기반으로 ZeroShotAgent를 만든다는 것입니다.

그러고 다음 줄, agent_executor 에서는 이 agent를 실행한다는 코드입니다.

마지막으로 Part 2에서 만들었던 BabyAGI Controller 부분에서 아래 코드를 찾으세요.

class BabyAGI(Chain, BaseModel):
    """Controller model for the BabyAGI agent."""

    task_list: deque = Field(default_factory=deque)
    task_creation_chain: TaskCreationChain = Field(...)
    task_prioritization_chain: TaskPrioritizationChain = Field(...)
    execution_chain: ExecutionChain = Field(...)
    task_id_counter: int = Field(1)
    vectorstore: VectorStore = Field(init=False)
    max_iterations: Optional[int] = None

여기서도 저희가 처음에 만들었던 세번째 execution 체인 대신 새롭게 만든 구글 검색 기능 체인으로 대체해줘야합니다. 그래서 execution_chain: ExecutionChain = Field(...) 코드를 execution_chain: AgentExecutor = Field(...) 코드로 바꿔주세요.

그럼 아래 코드와 같이 생겼습니다.

class BabyAGI(Chain, BaseModel):
    """Controller model for the BabyAGI agent."""

    task_list: deque = Field(default_factory=deque)
    task_creation_chain: TaskCreationChain = Field(...)
    task_prioritization_chain: TaskPrioritizationChain = Field(...)
    execution_chain: AgentExecutor = Field(...)
    task_id_counter: int = Field(1)
    vectorstore: VectorStore = Field(init=False)
    max_iterations: Optional[int] = None

테스트해보기!

이제 실제로 구글 검색 기능이 되는지 테스트 해보겠습니다.

파일을 돌리기 위해서는 Part 1에서 만든 가상환경 안에 들어가 있어야합니다.

가상 환경 안에 들어와있다면 아래 사진처럼 뜹니다. 만약 들어와있지 않다면 터미널에서 source venv/bin/activate을 입력하고 엔터를 누르세요.

Screenshot 2023-08-21 at 4.32.23 PM.png다음 저희는 serpAPI를 쓰기 위해 다운로드해야하는 패키지가 있습니다. 터미널에 pip install google-search-results를 입력해주세요.

이제 python agent.py 를 입력하면 코드가 돌려집니다.

첫번째 결과값으로 오늘 서울의 날씨를 구글에서 검색을 했고, 결과값으로 ”오늘의 날씨는 화창하며 최저 기온은 16도, 최고 기온은 24도입니다. 바람은 약하고 대기질 지수가 낮습니다.”가 나왔습니다.

Screenshot 2023-08-21 at 4.35.36 PM.png두번째 태스크를 돌리면 8월달에 서울의 평균 기온이 -6도에서 30도 사이라는 결과값이 나왔는데, 별로 정확하진 않네요. 아무래도 hallucination이 발생한 것 같습니다.

Screenshot 2023-08-21 at 4.35.48 PM.png마지막 태스크로 서울의 현재 습도를 검색한 결곽로 83% 정도의 습도, extremely humid라는 결과값이 나왔습니다.

Screenshot 2023-08-21 at 4.35.59 PM.png

Part 3 마무리

이로써 Part 3가 마무리되었습니다!

SerpAPI에서는 구글 검색 뿐만 아니라 네이버 검색, 구글 지도, 유투브 검색 기능 등 정말 다양한 API를 제공하고 있으니 SerpAPI 사이트에서 documentation을 확인하면서 써보세요 :)

오늘 저희가 만들었던 agent와 같이 비슷한 구조로 만드시면 됩니다.

"Write a weather report for Seoul today”라는 프롬트 대신 “conduct Facebook market analysis”라는 프롬트도 해보면서 코드를 돌려보세요! 생각보다 재미있는 결과값들이 나옵니다. ㅎㅎ

오늘도 긴 글 읽어주셔서 감사합니다. 문제가 생기거나 코드가 잘 이해되지 않는 부분이 있으면 언제든지 포스트에 댓글로 달아주시거나 저한테 커피챗으로 연락주세요.

15
3
박예호

박예호

스타트업 축제 Try Everything 2023에서 3일간 부스 운영을 하게 되었습니다!

0003300133_001_20230811100101100.jpg

프로젝트 기반 실무형 대외활동 플랫폼 <클러비티>가

9월 13일부터 15일까지 총 3일간 동대문디자인플라자(DDP)에서 열리는 Try Everything 2023에서 오프라인 부스 운영을 하게 되었습니다!

수많은 창업 생태계 관계자 분들과 투자자 분들을 직접 뵐 수 있다는 생각에 가슴이 두근두근합니다🙌

디스콰이엇에서도 Try Everything 2023 참가 기업 있으시면 알려주세요!

당일에 얼굴 뵙고 인사 나눌 수 있으면 좋겠습니다🙂

클러비티

기업 프로젝트 연계 실무형 대외활동 플랫폼

6
0
심은광

심은광

오픈채팅봇으로 공부방을 만들어봤어요 :D

약 6개월간 모두CBT를 운영하면서,  서비스 발전에 큰 도움이 됐던 것중 하나가 오픈채팅방이었던 것 같아요.

오픈채팅방을 통해 유저들의 피드백을 수용하고, 소통했던게 정말 큰 도움이 됐던 것 같습니다.

오픈채팅방을 좀 더 발전 시켜보고 싶어서, 어떻게 하면 유저분들께 좀 더 특별한 경험을 제공해드릴 수 있을까 고민한 끝에 오픈채팅봇을 제작하게 됐습니다 !!

제가 운영하는 오픈채팅방은 기사시험을 준비하시는 분들이 모여서 정보 공유를 하는 방인데, 랜덤으로 문제를 내주고, 정답을 알려주는 봇이 있으면 유용하겠다는 생각이 들어서 바로 개발에 돌입해봤습니다 !!

현재는 단순하게 문제를 내주고, 정답을 알려주는 2가지 기능 밖에 없지만 이것저것 추가해서 더 발전시켜볼 계획입니다 !

생각보다 유저분들 반응이 너무 좋아서 뿌듯하고 재밌네요 ㅎㅎ

스크린샷 2023-08-21 오후 3.42.26.png

저처럼 오픈채팅방을 운영하시는 분이 계시다면, 커스텀 오픈채팅봇을 만들어서 활용해보시는 것을 추천드립니다 !! 

7
2