작성 일자 : 2026-02-18

기획

기존에 제작한 가사 검색기의 화면이다. 1차로 곡 제목을 검색하고 그에 맞는 가사가 나오면 송폼을 직접 입력하고 가사 또한 직접 옮겨 넣어야한다.

하지만 실제 현장의 작업 방식에는 비효율적인 부분이 있기 때문에 다른 방식도 가능할 것 같아서 기획을 진행하였다.

현장의 작업 방식

  • 인도자로부터 악보를 제공받음
    • 악보는 34곡 정도가 들어있음. (34 페이지)
      • 예외 상황 ) 곡하나가 두페이지로 되어있는 경우 있음.
    • 악보 상단에는 송폼이 작성되어 있음.
    • 송폼은 A, B, C 와 같은 형태로 작성되어 있음.
      • 예외 상황 ) 종종 C’, A1, A2 등도 나오는 경우가 있음.
    • 가사 제작팀은 이 악보를 참고하여 한곡 씩 작업 중임.

AS-IS TO-BE

악보를 켜두고 한 곡씩 작업하는 방식

  • PDF, JPG를 넣으면 송폼과 그에 맞는 가사를 직접 옮겨주는 방식

설계

화면 설계

페이지 내 최상단에 파일 선택 버튼 하나 추가. 파일은 pdf, jpg, png 형식으로 제한을 둠.

파싱을 진행하면 곡 개수에 따라 박스를 생성.

  • 곡 개수는 1~5개로 둘 예정

파싱해서 나와야하는 정보.

  1. 곡 제목
  2. 송폼
  3. (자동) 송폼에 들어가는 파트
  4. 송폼에 들어가는 파트별 가사 앞 10글자

필요 기술

  • openai api 사용 예정.

핵심

이미지를 파싱해서 나와야하는 정보를 어떤 형태로 담아서 옮길 것인가? json? 중간중간 디버깅이 되려나? langgraph? 현재 상태, 송폼 파트 이런거로 나눠서?

랭그래프를 쓴다면 내가 사용할 분기들

  • 곡 개수가 몇개인지? 1~5개? 그런데 랭그래프 쓰기엔 프로젝트가 너무 가볍다.

JSON으로 조금 정리하면서 진행을 해야할 듯함.

UI는 페이지 페이지에 몰아 넣고 service 내부 function에서 기능들을 다듬어서 넣어야할 것으로 생각됨.

구현 로드맵

  • 1. 파일 선택 기능을 통한 PDF, JPG, PNG 파일 업로드
  • 2. 업로드된 파일을 바탕으로 OPENAI API 사용
    • 2-1. 어떤 형식으로 답변을 받을 것인가? JSON이라고 임시로 정함
      • 2-1-1. JSON으로 답변 형태를 고정
      • 2-1-2. JSON 형태 구상
      • 2-1-3. 목적에 맞는 정확한 프롬프트 --- 여기까지 st.write로 JSON 형태가 안정적으로 나오는지 확인 ---
  • 3. 곡 개수에 맞는 박스 세팅.
  • 4. 박스별로 JSON 결과가 들어가도록 구현
  • 5. 박스를 클릭, 선택하면 하단에 기존 제작된 가사 제작기가 나오도록 마이그레이션
    • 5-1. 곡 이름에 박스에 담긴 정보로 값이 들어가도록
    • 5-2. 사람이 좌측에 곡들을 눌러서 마음에 드는 것을 고르고 ‘변환’ 을 누른다면 우측에 송폼 생성. --- LLM 호출 --- (박스 내부에 있는 송폼 별 가사 앞글자 10개와 사용자가 방금 선택한 전체 가사 비교 후 파트 삽입)
      • 5-2-1. (자동) 송폼 전체 순서 입력
      • 5-2-2. (자동) 파트별 가사 전체 입력
  • 6. 사용자가 눈으로 훑어보고 추출 누를 수 있도록 제작

시행착오

  • pdf2image

    • poppler 설치
      brew install poppler
      

한계점

개선점