day in the life of a software engineer | 7+ hour productivity | building a new chatbot for fitness

Phil Choi builds a fitness chatbot from scratch, walking through Express middleware setup, token storage in localStorage, and splitting chat and conversation services. He shares moments of imposter syndrome and gym sparring between the technical work.
Questions this video answers
January 28, 2025
10,000 (만 명)
MongoDB
Chapters
이건 아무도 알지 못했지만 어제 체육관에 갔는데 그 친구가 좀 경험이 없어서 스파링을 갔는데..
아침부터 진짜 힘들게 퍼뜨렸어요. 이거 봐봐.
뭔가 영화 캐릭터 같지 않아? 잠시만, 잠시만. 안녕하세요. 안녕하세요.
뭐 다른 일 하시는 거예요? 네.
아, 저 유튜버예요.
아, 진짜요?
네.
어머, 링크 하나 보내주세요.
네. 알겠어요. 만 명. 네.
뭐라고요?
만 명, 만 명. 6개월 안에 만 명 됐어요.
아, 그래요?
네.
링크 하나 보내주세요.
네, 알겠습니다.
네. 하, 시작해봅시다.
형님, 전 절대 말 안 했어요. 형님, 전 절대 말 안 했어요. 아뇨 링크로 보내주지 못해요 왜요?
바보야... 룬앤앨프가 망할거같은데?
룬앤앨프가 망할거같은데? 엄마들 다 망할거같은데?
룬앤앨프가 망할거같은데?
엄마들 다 망할거같은데?
엄마들 다 망할거같은데?
내가 너무 피곤해... 내가 너무 피곤해... 그 카시노는 록게임 프로젝트야? 넌 나한테 너무 많이 흥분했잖아 내가 드래곤드랍 슬롯 마신을 만들거야.
진짜? ㅇㅇ ㅇㅇ ㅈㄴ 쩐다 이 수업이 개쩐다고?
내가 슬롯 마신을 내려 놓을거야 ㅇㅇ ㅇㅇ.
ㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ.
내가 뭔가 생각할 수 있을까? 그래, 다른 방법으로 해보자. 해보자. 틀린 답이 없잖아. 안녕하세요. 커피 두 개요. 작은 거. 오늘이 무슨 날이야, 민희야? 월요일이야? 월요일이야. 이건 아무도 알지 못했네. 어제 체육관에 갔는데, 그 사람은 조금 경험이 없어서 스파링을 갔는데, 사고로 진짜 세게 때렸어요. 그리고 그는 뮤지컬 아티스트였어 내가 내려가서 너의 얼굴을 볼 수 있을까? 라고 생각했어 그리고 그의 앞머리에 큰 구멍을 보았어 그래서 나는 괜찮다고 생각했고, 더 나쁘다고 생각했지.
오 마이 갓!
근데 그는 나를 보여주려고 했지 다른 레벨이 있었어 경험과 실험 그리고 그의 타이밍이었어 그는 그냥 짭을 던졌어 나는 괜찮다고 생각했지 근데 그냥 오른손으로 던졌어요. 모르겠어요. 그냥 연결되었죠. 기분이 나쁘긴 했어요.
그녀를 끌어내려고 했죠?
네, 끌어내려고 했죠. 경기장에 나가면 이런 행동을 해야죠. 약간 이런 느낌이에요. 좋은 방법을 찾는 것은 불교적입니다. 그리고 하나는... 저는 항상 경험한 사람들과 함께 살고 있었습니다. 모든 것들을 가져온 스펀지였기를 바랍니다. 농담을 하고, 마음 속에서 고통을 받는다. 그런 것들을 겪는다. 그리고 그 부분을 이겨내면, 내가 그 부분을 이겨낼 것 같다. 임포스터 신드롬은 현실이 아니다. 당신의 머릿속에 있는 것이다. 모든 사람이 당신을 나아가고 싶다. 하지만 너는 너무 힘든 일을 하고 있어. 그래서 너무 진지하게 생각하지 마. 계속 움직여. 꾸준히 살고. 그리고... 내가 할 수 있으면 너도 할 수 있어.
이걸 어떻게 생각해?
대단한 UI 맞지? 성?
응.
좋았어. 확인해봐. 젠장! 이거 좀 확인해봐. 뭐였지? 렛소셜, 왜냐면 우리가 어디에 있는지 보고싶어, 왜냐면 이 개새끼들이 뭐라고 말하고싶지 않아. 오, 넌 텐엑스 할 수 있어. 슬래시 채팅이 안 돼, 맞지? 뭔가 해보고싶어.
라인 7이 포스트 리퀘스트인 건가?
아, 맞아. 아마도. 확실히.
그래서 앱을 사용한다는 건, 베이스를 슬래시 API로 설정한다는 거잖아?
네, 앱.use는 많이 사용되죠? 엑스프레스.json에 사용하는 것 같아요. 엑스프레스.json에 사용하는 objects에 사용하는 것 같아요. 앱.use를 사용하는 것 같아요. 앱.use를 사용하는 것 같아요. 앱 레버를 위한 미들웨어를 사용하는 것 같아요. 지금 제가 생각하고 있는 것은... 제가 미들웨어를 넣는 방법을 기억하시나요? 예전에는 서버.ts에 따라서 중간에 이런 걸 넣었죠. 실제 루트 속에, GET 요청 속에.
루트에서 API 루트를 입력하는 건가요? 보통 입력할 때는 루트의 품질이나 파일인가요?
네.
그럼 API 루트의 이름이 파일이나 품질과 같은 게 아닐까요?
오, 왜냐하면 Default을 Export하면, Index.ts에 봐보세요 Default을 Export하는 게 보이시나요? 라인 13에서요? 그래서 제가 입려했을 때, 지금처럼, 예를 드리겠습니다. ChatRoutes.ts에 보면, Default을 Export합니다. index.ts로 가세요. 라인 4에 브라켓이 있는지 보이시나요? 이건 명령어 입니다. 그런데 라인 5에 브라켓이 없는지 보이시나요?
네.
이건 Export Default 입니다. 이걸 뭐든지 명령할 수 있습니다. default exported, so actually try naming it CR.
I'm going to eat some bananas, okay? You don't want any of this, right? No, that's all you. All right, cool.
Now, can you go to your front end? And you see how the user ID is in there, and all that kind of stuff? That's the user ID you stored in, right? 몽고 데이터베이스에 있어요. 몽고 DB 보이시나요? 네. 자, 이제 그 유저 아이디를 사용할 수 있어요.
그렇죠? 네.
자, 만약 데코드가 실패한다면, 만약 데코드가 실패한다면, 네, 여기요. 네, 제가 원하는 것입니다. 그냥 탭을 누르세요. 네, 좋아요. 자, 이제 보호가 되었습니다. 이제 로직을 넣을 수 있습니다. 그리고 이제... 요청을... 이제 REQ에 접속이 되었죠? 이제 엔터 버튼을 누르세요. 그리고 REQ. 메타, M-E-T-A, .user? 메타가 있어요. 네, 메타가 있어요. 메타가 있어요. 메타가 있어요. 메타가 메타가 있어요. 메타가 있어요.
메타가.
그리고 채팅 서비스에서는... 앞뒤로는... 이제 채팅과 대화 루트를 바꿨으니까 제가 채팅 루트를 만들고 대화 루트를 만들겠습니다. 아니, 서비스입니다. 채팅 서비스와 대화 서비스. 앞뒤로는... 제 생각에는 이 두 가지를 분리했습니다. 서비스는 api.ts, chatservice.ts, 그리고 conversation.ts. conversation.service.ts. 이렇게 나누는 건가요? 네, 나눕니다. 채팅에 있는 대화는 나눕니다. 저는 이렇게 나눕니다.
그렇습니다.
그렇지만 큰 일은 아닙니다. 네, 그래서... 첫 번째로, 미들웨어를 설정했죠. 백엔드에서. 이게 제가 처음으로 했죠. 왜냐면 제가 원하는 곳이 있었기 때문에, 요청을 받기 전에 무언가가 일어났다는 걸 알게 됐죠. 그러나 우리는 루트를 분리했죠. 루트를 분리하기로 결정하고 싶었죠. 주요 목표는 미들웨어를 설정할 수 있도록 하고, 서버를 보호하고 싶었죠. 그게 오늘 제가 하고 싶었던 것 중 하나였죠. 그리고... 그 토큰을 앞뒤로 받았죠. 왜냐하면 아웃 아이디에서 받을 수 있었기 때문이죠. 그래서 앞뒤로 받았을 때, 아웃 스테이지에서 변화가 일어났을 때, 로컬 스토리지에 있는 토큰을 설치했죠. 설치 아이템을 받기 위해서요. 앱 루트 같은 곳에서요. 라인 22 로컬 스토리지 설치 아이템을 받았을 때, 유저를 통해 토큰을 받았죠. E, Y, E라든지 좋은 토큰을 주었습니다. 토큰을 얻었을 때, 저장한 토큰을 설치했습니다. 그리고 Interceptor를 설치했습니다. API.ts로 설치했습니다. 이것은 요청을 만들 때 사용하는 Middleware입니다. api-client-interceptors.request.use입니다. 뒷부분과 비슷합니다. 요청을 해결하기 전에, Middleware가 있습니다. 요청을 보내기 전에, Middleware가 설치 됩니다. 동일한 생각입니다. 여기서, 라인 14에서 콘스 토큰에서 아이템 토큰을 얻어봐요. 누군가가 입력할 때까지 설정됩니다. 라인 15에서는 iftoken.config.headers.authorization="bare-token", 이라고 설정됩니다. 그래서 헤더를 bare-token으로 설정합니다. 우리 네트워크 안에서 봤죠. 지금요. 그리고 컴핑트가 돌아옵니다. API 클라이언트, 베이스 URL, 헤더, 이 모든 것이 컴핑트죠? 그래서 저희는 이번에 배열 토큰을 추가했습니다. 그리고 이제 우리가 알게 된 건, 이 컨픽 헤더에서 토큰을 보내는 요청을 받을 때마다, 저희가 토큰이라고 불리는 로컬 스토리지 아이템이 있습니다. 그래서 이제 그 토큰과 함께, 저희는 미들웨어를 사용해서 토큰을 데코레이션하고 그 가치를 얻습니다. 왜냐하면, 지금 우리는 어떻게 될지 모르잖아요. 그래서 아마도 미니와 저는 디자인이 완성될 때에 돈을 좀 벌거에요. 정말 진지하게 생각하면. 그리고 우리 팀이 잘하니까요. 디자인이 완성될 때에 몇 백만 달러를 벌거에요. 와이어프레임으로 말하자면. 어떤 방향으로 들어가는지. 지금 저는 코드베이스를 설치할거에요. 배경 설치, 모바일 설치, 애드민 설치. 전부 준비되어 있어요. 버그프리. 그리고... 우리 모두가 할 수 있는 상태가 되길 바랍니다. 그동안은... 도와주십시오. 그리고... FizzMe에서 작업을 해보겠습니다.
알겠습니다.
알겠습니다.
알겠습니다. 알겠습니다. 알겠습니다. 알겠습니다.
알겠습니다.
알겠습니다. 알겠습니다.
알겠습니다.
알겠습니다.
알겠습니다. 알겠습니다. 알겠습니다. 알겠습니다. 알겠어, 알겠어, 나중에.
알겠어, 고맙다. 바이바이. 아, 젠장.
오늘 수업은 길었다. 아, 알겠어. 때때로 계획들이 망가진다. 그러나 다른 일을 할 있는 기회가 수 있어. 그리고 나는 정말 내 시간을 이 사람에게 보내고 싶어. 그는 정말 사랑하는 사람이 될 것입니다. 그래서 저는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고.
사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는.
사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을 존경하고 사랑하는 사람을.
More from Phil

day in the life of a software engineer | 5 hour productivity | building my dev agency 🔥

day in the life of a software engineer | 3 hour productivity | coding my 6-figure community startup

day in the life of a software engineer | 5 hour productivity | coding our sns startup app LFG

day in the life of a software engineer | 5 hour productivity | creating apps that makes big money






