알파피플 앱

이재철, Backend at Alphapeople ✨ 정산금액은 추정치만 가능 — 1. 구매자가 어떤 화폐, 금액을 사용했는지는 알수 있음. 2. 하지만 해당 화폐 -> KRW 환율은 비밀이고, 각 구매건에 대해서 알려주지 않음. 글로벌 고객에 대해선 몇달 운영해보기 전까지는 환차 손해를 어느 정도 알파피플의 수익 안에서 감당해야 할듯. (환차손을 미리 너무 크게 잡으면 셀럽이 불만이기 때문에) [CleanShot 2025-11-20 at 18.07.11@2x.jpg]
이재철, Backend at Alphapeople ✨ 지난 주에 한 일 (feat. 보안 취약점) — <예정되어 있던 할 일> • 구글 결제 연동 <실제 한 일: 보안 취약점 해결(4일)> • 자신의 결제 내역만 보여야 하는데, 타인의 결제 내역도 보이는 현상 발생.• 방치하면 남의 대화 내역까지 보일수 있는 심각한 현상. • (1일 소요) 제가 작성한 코드 문제로 의심해서 계속 여러 방법을 시도함 -> 아무리 봐도 제 코드는 멀쩡함 (보통은 제 코드에 문제가 있을 확률이 99.99%) • (3일 소요) 프레임워크에 보안 취약점이 있는게 아닌가 해서 프레임워크 분석 시작...• 보안 취약점으로 의심되는 코드 발견 • 프...
김기범, Flutter at Alphapeople 일반 유저 > 허용된 메시지 타입 — 현재 createMsg에서 일반유저에게 허용된 메시지 타입으로 text만 있는데, image 및 voice도 지원이 되어야 할 것 같아서 문의드립니다. 혹시 기획상으로 스펙아웃된 기능이라면 알려주세요! 4
이재철, Backend at Alphapeople ✨ 지난 주에 한 일 & 이번 주에 할 일 — 제가 내일 개인 사정으로 회의 참석이 어려워서 글로 남깁니다. (재현님께는 이미 말씀 드렸습니다.) <지난주에 한 일> 1. 구글 결제 테스트용 안드로이드 앱 만들기 - 백엔드를 만들기 전에 백엔드를 호출할 앱이 필요해서 만들었습니다. 결제 테스트용 앱의 스펙이 딱 정해져 있으면 기범님께 요청 드렸을텐데, 저도 제가 뭐가 필요한지 만들어 봐야 알수 있어서 따로 만들게 됐습니다. 굳이 필요하시진 않겠지만, 호기심에 써보시려면 갤럭시 유저라면 아래에서 다운로드 받을수 있습니다. (알파피플 진짜 앱을 덮어 씁니다) https:/...
이재철, Backend at Alphapeople 📢 apollo 도 ci 껄 써주세요. — 김기범  어제 논의한대로 apollo 도 ci 껄 써주세요. https://studio.apollographql.com/graph/corki/variant/ci/explorer 1
이재철, Backend at Alphapeople 📢 답장하기 API — 김기범 CreateMsg 할때 replyToId 를 넣을수 있게 했습니다. (주의: Msg 가 아니라 ChatMsg 의 ID 입니다) [CleanShot 2025-09-13 at 08.55.49@2x.jpg] 메시지를 조회할때 replyTo 까지 조회하면 어느 메시지에 대한 댓글인지 알수 있습니다. [CleanShot 2025-09-13 at 08.53.58@2x.jpg] 웹 데모에서 아래처럼 나타납니다. https://demo.alphapeople.me (alphapeople/corki) [CleanShot ... 4
이재철, Backend at Alphapeople 📢 @fan 으로 보내기 — 셀럽 화면 [CleanShot 2025-09-11 at 18.59.29@2x.jpg] [CleanShot 2025-09-11 at 18.59.49@2x.jpg] ps. `@fan` 그대로 표시하면 인식 여부가 확실치 않아서 {fan} 로 변환하여 확인할수 있도록 했습니다. 팬 화면 [CleanShot 2025-09-11 at 19.00.20@2x.jpg] `@fan` 자리에 팬의 채팅명이 들어갑니다. 김기범 서버에서 처리하니, 클라이언트는 신경 안 써도 됩니다.
이재철, Backend at Alphapeople ✨ 채팅 텍스트/보이스/이미지 가능 여부 — [CleanShot 2025-09-11 at 18.50.23@2x.jpg] 김기범  1. 셀럽은 DM에 한해 첫 메시지가 voice로 강제되고, 2. 팬은 항상 텍스트만 보낼수 있습니다. 조재현 확인이 필요합니다. 만약 규칙을 어기고 전송하려고 하면 위와 같이 에러가 납니다. 이런 규칙을 클라이언트가 가지고 있으면 안되기 때문에, Chat.nextMsgTypes 에 넣어 뒀습니다. [CleanShot 2025-09-11 at 18.53.46@2x.jpg]
이재철, Backend at Alphapeople ✨ 채팅 변경 사항 — 1. nonce 사용 Msg 생성시 Chat.nextNonce 값을 읽어서 넣어줘야 합니다. 중복된 메시지 방지를 위해 필요합니다. 2. 이미지 업로드는 File 이 아닌 Image 로. 기존에는 이미지, 보이스 모두 File 을 사용했는데, 이미지를 매거진과 동일하게 Image 를 사용하도록 했습니다. (리사이즈된 URL 사용)
이재철, Backend at Alphapeople ❤️ 알파챗 개발하다 오픈소스에 연240만원 기부하게 된 사연 — 개발자가 컴퓨터 앞에서 하는 일이 무엇인지 2화입니다. 배경: 알파챗은 생각보다 어려운 기능이었다. 이미 버블 같은 유사 앱이 있으니 알파챗을 쉽게 생각했습니다. 근데 버블의 스토어 평점이 2점대를 못 벗어나는 이유 중에 채팅 기능의 오류가 한 자리를 차지하고 있습니다. (채팅이 메인인 서비스인데!) [버블 for JYP] [버블 for STARS] 어려운 이유는 여러가지가 있지만, 셀럽과 팬이 보는 메시지가 서로 다르니 논리적으로는 별개의 채팅방인데, UX적으로는 하나의 채팅방이라는 경험을 줘야 하는 점에서 SQL 쿼리... 2
이재철, Backend at Alphapeople 채팅 phoenix socket protocol guide — 김기범  Claude로 생성한 문서입니다. https://gist.github.com/jechol/59482629c4ee44f01e22418a6fdfc4af 1
이재철, Backend at Alphapeople 📢 채팅 phoenix socket protocol v0.9 — [CleanShot 2025-08-17 at 22.19.17@2x.jpg] https://demo.alphapeople.me/ (ID: alphapeople / PW: corki) 일단 위 화면 정도를 만들어서 검증해봤습니다. GraphQL 은 schema 파일을 읽으시면 되는데, phoenix socket 은 그런 규격이 없어서 여기에 정리합니다. Chrome inspector 를 캡쳐했습니다. 아래에서 2번은 channel 이름, 3번은 event이름, 4번이 payload 입니다. # 조인할 채널 user:<us... 5
이재철, Backend at Alphapeople 📢 채팅 데모 — • URL: https://demo.alphapeople.me/chat • ID : alphapeople • PW : corki 제가 검증하느라 만든거라 허접합니다. 안된 부분이 많습니다. 창 2개 열어놓고, 하나는 팬, 하나는 셀럽으로 들어가시면 테스트 가능... [CleanShot 2025-08-14 at 17.19.07@2x.jpg] 3
이재철, Backend at Alphapeople 📢 채팅 websocket 진행 사항 — 김기범  <웹소켓 접속 방법> 주소: wss://demo.alphapeople.me/ws/user 아규먼트: token (GraphQL 호출시 보내는 토큰과 동일) <새 메시지 알림> topic: "chat:#{chat_id}" event: "msg_created" payload: :id, :user_id, :type, :content, :sent_at, :sent_by_me 포함 <안 읽은 메시지 카운트> 구현중 1
이재철, Backend at Alphapeople 📢 채팅 뼈대 완료... — [CleanShot 2025-08-04 at 13.42.24@2x.jpg] 김기범  팬/셀럽 모두 사용 가능하고, 알파챗/DM 모두 사용 가능하도록  만들었습니다. fan@gmail.com 유저로 로그인 하면, 10명과 DM 중이고, 10명과 알파챗 중인걸로 셋업해놨습니다. <구현 안된 기능> 1. 메시지 알림1. 메시지를 받아도 phoenix socket 으로 알려주지 않습니다. 2. 멤버십1. 멤버십에 따른 권한 체크가 없습니다. 3. 보이스1. 텍스트만 가능합니다. ------------------------... 2
김기범, Flutter at Alphapeople 유저 닉네임 — 이재철 님 일반 유저가 채팅에서 사용하는 닉네임은 User 모델의 stageName을 참조하면 될까요? 2
이재철, Backend at Alphapeople 📢 사진/보이스 업로드 완료 — [CleanShot 2025-07-24 at 19.18.48@2x.jpg] <사진> generateImageUploadUrl -> 업로드(http put) -> createImageFromUploadUrl <보이스> generateFileUploadUrl -> 업로드(http put) -> createFileFromUploadUrl 사용해보시고 이상 있으면 알려주세요. 3
이재철, Backend at Alphapeople ✨ Gender 필터링 방법 변경 — [CleanShot 2025-07-22 at 12.54.00@2x.jpg] 원래 위처럼 자동생성되는 filter 를 사용했으나, 이것은  attribute에 gender 가 있는 user 에만 적용 가능하고, magazine 처럼 자체적으로 gender attribute 가 없는 경우에는 적용이 되질 않는 문제로 아래 2번처럼 argument 로 받도록 바꿨습니다. 김기범  1
김기범, Flutter at Alphapeople User > SNS 아이디 필드 — 이재철  님 User 모델의 SNS 필드는 아래와 같이 ID 값이 들어가는데요, ID 대신 URL로 넣어주실 수 있을까요? fbId, igId, ttId... 클라이언트에서 ID 값으로 각 SNS 마다 URL을 합성하는 것보다, 직접 URL을 받아오면 하드코딩을 최소화 할 수 있을 것 같습니다. 1
이재철, Backend at Alphapeople 📢 magazines 추가, token reset. — [CleanShot 2025-07-15 at 18.24.28@2x.jpg] 김기범  1) 매거진 리스트가 추가됐습니다.  2) 환경설정의 fanAuth 가 제가 수정해도 기범님에게 반영되진 않는것 같습니다. token 이 리셋됐을 듯 하니, 새로 발급하시길...
이재철, Backend at Alphapeople 📢 GraphQL 배포는 새벽 6시에 1번만 할께요. — 하루동안은 API 가 고정되어야 할것 같아서... 필요한 경우에는 채팅창에 공지하고 할께요. 김기범  ps. 새벽 6시 배포는 자동으로 하는 겁니다.
이재철, Backend at Alphapeople 📢 User mutation 수정 사항. — • updateMe : 아래 2개로 분리• updateMyAgreement • updateMyInfo • updateProfile : updateMyProfile 아폴로에 예제 수정해뒀습니다.
이재철, Backend at Alphapeople 📢 지역화, 현재 유저에게 선택된 지역화 convention — 예시) LcProfile 셀럽이 자신의 언어별 프로필을 모두 리스팅 하는 화면 user.lcProfiles • 현재 로그인 유저의 국적 설정과 무관하게 en, ko 등을 포함한 모든 리스트 팬이 셀럽의 프로필을 보는 경우 user.curLcProfile • 현재 로그인한 유저의 국적 설정과 일치하는 프로필 1개 • 일치하는게 없는 경우, en 프로필이 리턴됨. ps. • 인터뷰의 경우 글이 들어가므로 지역화가 필요하지만, • 매거진은 사진만 있으므로 지역화가 필요없을 듯 합니다. • 조재현 매거진에는 지역화가 없는...
이재철, Backend at Alphapeople 📢 지역화, 복수필드 convention 변경 — 김기범  아까 회의에 나와서 더 늦기 전에 빨리 정리해야 할것 같아서 정리를 좀 했습니다. • XxxL10n -> XxxLc • l10n, viewL10n -> lc • XxxList -> Xxxs (ex. countryList -> countries) Apollo 예제에는 반영해 뒀습니다.
이재철, Backend at Alphapeople 📢 AVIF/HEIC 업로드는 허용되지 않습니다. — 김기범  정다희  https://chatgpt.com/share/686642a8-df80-8003-9a97-462430da92be 덱스 사진 올리려다가 발견했는데, AVIF 파일을 업로드 할수 없군요. HEIC 도 안된다는걸 발견했습니다. JPEG, WebP 로만 업로드 한다고 가정해야 할것 같습니다. 다운로드 할때는 WebP 로만 하구요.
이재철, Backend at Alphapeople 👋 매거진 샘플 요청 — 1) 커버 이미지 [CleanShot 2025-07-03 at 09.24.41@2x.jpg] 2) 실제 매거진 내용 덱스와 아무 상관 없는 사람들로 채워도 되면 필요없구요, 현실감 있게 하시려면 덱스 이미지로 주시면 반영할께요. 조재현  4
이재철, Backend at Alphapeople 👋 프로필 관심사 백그라운드 이미지 — 1) 관심사 뒤에 덱스의 얼굴이 있는데, 이건 탐색에 들어가는 작은 사진과 같은걸 쓰는건가요? 조재현 [CleanShot 2025-07-03 at 09.23.46@2x.jpg] [CleanShot 2025-07-03 at 09.22.19@2x.jpg] 2
이재철, Backend at Alphapeople 👋 인터뷰 샘플 이미지 요청 — 1) 인터뷰 길게 1개로 되어 있는 이미지 [CleanShot 2025-07-03 at 09.20.28@2x.jpg] 2) 인터뷰 커버 이미지 [CleanShot 2025-07-03 at 09.20.43@2x.jpg] 조재현 요청드립니다. 6
이재철, Backend at Alphapeople 📢 NEW, ON-AIR, DAILY BEST 조회 방법 — 김기범 [CleanShot 2025-06-30 at 17.42.37@2x.jpg] 1. chartId : "NEW", "ON_AIR", "DAILY_BEST" 중 선택 2. filter.gender : "MALE", "FEMALE" 중 선택 하시면 됩니다. 몇개를 표시할지 앱에서 fix하지 말고, displayCount 값을 반영해주세요. (그래야 운영이 편합니다.) 2
김기범, Flutter at Alphapeople Flutter Web 배포 (feat. 애플로그인) — 이재철 님  Flutter Web을 테스트 서버 등에 미리 배포해서 웹 환경 이슈들을 체크해보았으면 합니다. 혹시 별도로 고려 중이신 배포 방식이 있을까요? (ex. fly.io) 17
이재철, Backend at Alphapeople 📢 Image Upload URL / GET URL — 김기범  1. Image upload url 생성 [CleanShot 2025-06-27 at 12.39.28@2x.jpg] 2. Upload url 에 사진 업로드  curl 을 예로 들면, curl -X POST \ -F file=@$HOME/Downloads/photo-1535713875002-d1d0cf377fde.jpeg \ "https://upload.imagedelivery.net/PHmpevNYRpAUROuBhZptSA/60822fcb-57f1-4b7c-56b4-8ed604de79... 2
이재철, Backend at Alphapeople 👋 사용되는 이미지의 가로세로 크기... — 정다희 김기범  셀럽의 사진이 사용되는 곳의 사이즈를 알아야 합니다. 예를 들어 원 형태로 나오는 곳의 사이즈가 100x100 이라면, 제가 128x128로 리사이즈한걸 쓰는것보다는 처음부터 100x100 으로 리사이즈 해두는게 화질 손해가 없을테니까요. 종류가 많아도 상관 없습니다. 두분 중에 누가 더 잘 아실지 몰라서 두분 모두 태그했어요. 사용 목적도 알려주세요. (ex. 프로필, NEW 등) 1
이재철, Backend at Alphapeople 📢 유저 프로필 조회/수정 API 90% 완료. — 김기범   사진 업로드를 제외한  1. (언어 무관한 필드들만 있는) 내 정보 조회/수정 2. (언어별로 작성해야 하는) 프로필 조회/수정 이 완료되어, 예제를 Apollo Studio 에 올려 놨습니다. [CleanShot 2025-06-23 at 17.24.29@2x.jpg] 예를 들어, myProfiles query 를 실행하면, 아래와 같이 결과가 나옵니다. [CleanShot 2025-06-23 at 17.25.33@2x.jpg] 피그마로는 아래 화면들을 위해 만들어졌다고 생각하시면 됩니다. (중간에 국... 6
이재철, Backend at Alphapeople 👋 동영상이 사용되는 곳 확인 — 조재현  동영상은 크게 2가지로 분류되고, 앱/백엔드가 많이 달라집니다. 1) 고정된 화질 : 다운로드후 재생.. ex. 알파피플 앱 로그인 화면 배경 동영상 2) 네트워크 상황에 따른 최적 화질 : 스트리밍.. ex. 유튜브 영상 질문1. 고정된 화질의 영상이 필요한 부분이 더 있을까요? 질문2. 셀럽이 올리는 컨텐츠 중에 동영상이 있나요? 컨텐츠는 대부분 이미지인 것 같은데,  제가 기획을 보고 포악하는 것보다는 질문 하는게 빠르고 명확할 것 같아서 질문 드립니다. 1
이재철, Backend at Alphapeople ✨ 기획과 관련된 GraphQL API 기록 방법 — [CleanShot 2025-06-18 at 09.48.23@2x.jpg] 위와 같이 해당 기능 옆에 GraphQL API 를 두도록 할께요.
이재철, Backend at Alphapeople 📢 Apollo Studio setup — [CleanShot 2025-06-17 at 15.42.51@2x.jpg] 김기범  기존에 https://demo.alphapeople.me/gql/playground 대신 GraphQL 예제 공유를 쉽게 하기 위해 Apollo Studio 에 초대 드렸습니다. 현재 로그인 유저를 조회할수 있도록 하는 예제를 스크린샷에 포함했습니다. 써보시고 알려주세요. ps. corki 는 백엔드 프로젝트 코드네임입니다. CI에서 자동화 이슈로 alphapeople를 쓸수가 없네요. 2
이재철, Backend at Alphapeople ✨ Relay pagination 으로 변경했습니다. — [CleanShot 2025-06-16 at 17.18.57@2x.jpg] 김기범  리스트에 대한 pagination 을 좀 더 표준화된 GraphQL Relay 규격으로 변경했습니다. 이전/다음 페이지가 존재하는지 미리 알수 있습니다.
이재철, Backend at Alphapeople ✨ id 가 랜덤처럼 보이는 이유 — <유저ID : 52bits> [CleanShot 2025-06-16 at 08.21.37@2x.jpg] <국가ID : 10bits> [CleanShot 2025-06-16 at 08.20.08@2x.jpg] <Feistel cipher> https://www.youtube.com/watch?v=FGhj3CGxl8I&ab_channel=Computerphile 김기범 ID가 1,2,3,4,.... 이렇게 되지 않는 이유에 대해서 미리 말씀드리면, 비지니스 규모를 예측할수 있는 ID를 쓰지 않기 위해 feisel ciph... 1
이재철, Backend at Alphapeople ✨ Keyset pagination 예제 (국가 목록) — 첫페이지 (first) [CleanShot 2025-06-15 at 16.40.01@2x.jpg] 다음 페이지 (first + after: 현재 페이지의 endKeyset) [CleanShot 2025-06-15 at 16.41.32@2x.jpg] 이전 페이지 (last + before: 현재 페이지의 startKeyset) [CleanShot 2025-06-15 at 16.47.39@2x.jpg] 사실 국가 목록은 다해도 200개 정도라 한번에 다 불러오는게 맞지만, keyset pagination 데모겸 공유합니다.
이재철, Backend at Alphapeople ✨ 국기 이미지 cdn — https://flagcdn.com/ 김기범 국기 이미지는 위 cdn 쓰는게 좋을것 같네요.  제가 하게 되면 저기서 받아서 저희 cdn에 올릴 뿐일것 같은데, 할 필요가 없는 작업이라... 별로면 알려주세요. 8
이재철, Backend at Alphapeople 👋 8.12, 8.13 ZenDesk, 채널톡 --> 내부 시스템 — [CleanShot 2025-06-14 at 22.00.18@2x.jpg] ZenDesk, 카카오톡 채널톡(이게 뭔지 모르겠네요.) 등 외부 시스템을을 연동하는게 더 힘들 것 같은데, 어차피 채팅을 구현하는 앱이라  앱내 채팅을 활용하면 굳이 앱을 벗어나서 외부 시스템을 연동할 필요가 안 느껴지는데 어떻게 생각하시나요? 조재현  2
이재철, Backend at Alphapeople 👋 유저는 셀럽 또는 팬 중 1개로 고정되는지? — 조재현  셀럽이 알파피플을 팬 입장에서 쓰는 경우를 고려해야 할까요? (1개 계정으로) 지금 대화 화면 등에서는 유저가 팬인 경우, 셀럽인 경우 화면 자체가 다른걸로 봐서 그런 경우를 고려 안해도 될것 같긴 하지만 혹~~시나 해서... DB에서 많이 달라져서요. 예를 들어, 인스타그램에서는 셀럽과 팬이 동일한 유저인데, 알파피플에서는 셀럽은 셀럽이고, 팬은 팬이어서 역할이 바뀌는 경우는 고려하지 않아도 되는건지.. 단적인 예로, 셀럽이 이성 셀럽에게 말 거는게 가능한지 궁금합니다. 2
이재철, Backend at Alphapeople 👋 5-6 알파피플 운영팀 메시지 기능 — 조재현  알파피플 운영팀 메시지라는게,  1) 전체 공지를 의미하나요? (대화 불가) 2) 아니면 고객센터처럼 서로 대화 가능한 기능인가요? 1
이재철, Backend at Alphapeople ✨ GraphQL schema 주소 — 김기범  https://demo.alphapeople.me/gql/schema 위 schema 파일로  graphql_codegen 같은 코드 제너레이터가  제대로 작동하는지 확인 요청 드립니다~ 5
이재철, Backend at Alphapeople ✨ Phoenix Channel 을 사용한 채팅 데모 — <데모> https://demo.alphapeople.me/chat 브라우저 2개 이상 띄워서 위 URL에 접속해서 사용해 보시면 됩니다. 저장되는건 아니고, 그때 접속한 사람들에게만 전송 됩니다. <Elixir, JavaScript code> https://gist.github.com/jechol/1a6b2a49c1b1b67855c12ab121def0d0 김기범 JS 예제긴 한데, 참고해 주세요. 1
이재철, Backend at Alphapeople ✨ API endpoint — 김기범  plumbing 작업부터 하셔야 할것 같아서,  GraphQL endpoint를 배포했습니다. <GraphQL> https://demo.alphapeople.me/gql <GraphQL Playground> https://demo.alphapeople.me/gql/playground 현재 getTime  이라는 query 와 [CleanShot 2025-06-09 at 21.45.49@2x.jpg] addCnt 라는 mutation 이 있습니다. [CleanShot 2025-06-09 at 21.45.22@... 11