dev-wiki

󰏢 week-0 [-]

필수 요구사항

코치님 중간 방문 말씀

회의록

1회

[!tdd]

2회

[!tdd]

3회

[!tdd]

[!rf]

some tips from anonymous redit user

프로덕션에서 얻은 조언:

  • 가능하다면, OpenAI 의 스키마를 사용하여 구조화된 출력을 사용하세요.
  • 그렇지 않다면, 응답 내에 포함된 JSON의 쉬운 경우를 포착할 수 있는 파서를 구현하세요 (흔한 실수는 말하다가 JSON을 출력하거나, 따옴표로 감싸는 것 등입니다).
  • 이렇게 하면 파싱 실패의 90%를 커버할 수 있으며, 나머지 9.9%를 커버하기 위해 LLM에 최신 응답을 다시 보내고, 오류를 알리고, 수정하도록 시도하는 작은 메커니즘을 구현할 수 있습니다. 여러 번 반복할 수도 있습니다.
  • 가능하다면 필요한 스키마를 단순화하세요.
  • 더 똑똑한 모델로 업그레이드하세요.
  • 온도 0.0을 사용하세요.
  • 스키마 외에도, 프롬프트에 실제 출력 예시를 넣어주세요.

예상되는 출력의 시작 부분을 어시스턴트 응답에 미리 채워 넣는 것도 시도해볼 수 있습니다. 제 경험상, 이렇게 하면 파싱 실패의 99.9%를 커버할 수 있습니다.

STRUCTURED OUTPUT with llm model

  1. LLM structured model output

[!nt] openai 공식자료 ref

[!nt] how to use text.format?

[!nt] Tips

  1. 라이브러리로 기본적인 json 형태 오류 개선
  1. 최종 결과 파싱 및 검증 후 예외처리

테스트 구현해보기

[!tdd]

cd /home/sy/jg/week-0/structured_output_test && tpl.

4회

(기획발표 후 피드백 받은 상황)

[!lg] Log 2025-09-02

기획발표 후 피드백 받은 상황이다. 우리 팀 뿐만 아니라 전체적으로 도전 레벨이 너무 낮다는 지적이 있었다. 정당한 지적이라는 생각을 했다.

또한 나의 예상과는 달리 아이디어를 구현하는 기술적 고려보다는 유저 입장에서 과연 쓰임이 있는 서비스를 만들었는지 많이 물어보셨다. 일단 그게 충족이 되면, 즉 풀만한 문제가 되면 그 뒤에 기술적 첼린지가 있느냐를 물어보셨다.

[!tdd]

  • 주요 구성 요소

    • 영상 촬영: 스마트폰 카메라로 실시간 또는 저장된 영상을 확보
    • 자세 인식: 영상에서 사람의 관절 위치 추출 (Pose Estimation)
    • 자세 분석: 추출된 관절 데이터를 기반으로 운동 자세 평가
    • 피드백 제공: 실시간 또는 분석 결과를 사용자에게 전달
  • 구현조건 대응

    • 모바일이지만 브라우저 위에서 동작

      -> 브라우저 기반 Pose Estimation

      • WebAssembly(WASM) 또는 WebGL을 활용한 경량 모델 필요
      • 대표적인 라이브러리: TensorFlow.js, MediaPipe (Web 지원), ml5.js
  • 순서도

    1. 휴대폰 카메라로 찍는 영상을 브라우저로 가져오기 -> getUserMedia 브라우저 내장 API

    (클라이언트(모바일)에서 분석)

    1. Pose Estimation 라이브러리로 받아온 영상 분석 후 유저에게 피드백

    (서버(모바일)에서 분석)

    1. 영상 정보를 서버로 보내서 분석만 서버에서 하고(고성능 모델 사용 가능), 웹소켓으로 유저에게 실시간 피드백

==> 일단 클라이언트에서 렌더링하는 것 부터 시도해 보기로.

5회

아키텍쳐 / 소스코드의 (모듈 또는 디렉토리) 구조에 대한 의견 통합이 필요하다.

[!tdc]

6회

코딩

협업을 위한 git command

PR을 fetch해서 로컬에서 변경내역 확인하기

gh pr list
gh pr checkout <name-what-I-want>
# in DiffviewFileHistory --range=origin/dev..HEAD

[!lg] Log 2025-09-03

실행 계획:

  1. gh pr list로 PR 번호를 확인한다.
  2. PR 번호를 사용해 PR의 head를 fetch한다.
  3. 로컬 브랜치로 체크아웃한다.
  4. 원하는 브랜치와 비교한다.

예시: PR 번호가 123이고, 내 로컬 브랜치가 main이라면:

git fetch origin pull/123/head:pr-123
git checkout pr-123
git diff main...pr-123

내가 작업한 브랜치 PR 날리기

  # 현재 브랜치를 원격 저장소로 푸시
  git push origin HEAD

  # GitHub CLI로 PR 생성
  gh pr create --base <target branch>

내 작업 히스토리

branch: feat-ask_exercise_plan_module

[!tdd]

branch: feat-pages_about_plan_feature

아래와 같이 운동 플랜과 관련된 페이지들의 프론트엔드 부분을 담당했다.

tree healthking-tomorrow/app/templates/plan/

├── calendar.html
├── form.html
├── info.html
└── main.html

와이어프레임

branch: feat-calendar_page

월간 플랜 data api를 다 만들어 주셨다. 그래서 나는 그 api가 리턴해주는 데이터를 가지고 달력 페이지를 그려주면 된다.

[!td]

회고

  1. 단순히 어떤 기술을 깊고 정확히 이해했는가 보다는, 고객의 입장을 세심하게 고려했는지가 중요하다. 고객의 입장을 생각해 보는 것이 곧 문제의 발견이고 목표와 방향성을 정하는 것이다. 이 부분이 모호하면 이내 열정도 열심도 무엇을 해야하는지도 모두 와해될 것이다.

코치님들의 리뷰에서 이런 점을 생각해 볼 수 있었다.

2. 끝이 없는 주제겠지만, 소통을 잘 해야한다. 더 잘해야 한다. 대화의 주제가 되는 부분도 잘 해야하지만, 우리가 사람이기 때문에 함께 따라오는 것이 많다.

어디선가 보기를, 상대의 마음 속으로 들어가야 한다했다. 내 머리에서만 이해해보려는게 아니라 정말로 사람의 마음 속으로 들어가 보는 것. 무슨말인지 알것도 같지만 세상에도 내 마음속에도 잡음이 많다.

정글에 있는 동안 마주치는 이 많은 사람들의 마음속에 들어가보려는 노력을 하는것이 맞을까? 아니면 피해를 주지 않기 위해 조심하는것만 해도 만만치 않을까?