기술/웹 개발 13

[react] Google Cloud text-to-speech API 이용해서 frontend에서 영어단어별 발음 재생 구현하기

외주로 작업하고있는 개발 프로젝트에서영어 문단이 있으면그 문단의 단어별로 녹음파일을재생해야하는 기능이 있었다 처음에는 모든 녹음파일들을Google Cloud text-to-speech기능을 사용해서front쪽 public 폴더에넣어놓고 재생해달라고 요청을 받았지만 https://console.cloud.google.com/vertex-ai/studio/speech/text-to-speech?project=gen-lang-client-0237974714&inv=1&invt=AbeTjg Google 클라우드 플랫폼로그인 Google 클라우드 플랫폼으로 이동accounts.google.com그렇게하면단어별로 하나하나 녹음파일을다운받아야한다는 수작업이 발생하고..나중에 영어 문단이 바뀌었을 때새로 작업하기가 꽤..

기술/웹 개발 2024.10.10

[react/tailwind css] 자체적으로 audio player 구현하기

이번에 맡게된 외주 개발 작업에서1. 사용자가 mediaRecorder로 녹음한거 재생2. mp3 파일 재생을 할 오디오 플레이어를 구현해야했다 Figma상 디자인은 이랬다  따라서 대충 슥 봤을 때크게 구현해야하는 기능은 1. audioURL 생성해서 audio component에서 재생가능하게하기2. play, pause 할 때마다 아이콘 바뀌고audio 재생했다가 멈췄다가해주기3. audio 전체 길이와 현재 재생 중인 시간계산해서 progress bar 만들어주기 였다   처음에는 audioBlob이나 URL을생성하지 않고바로 audioRef를 넣어서재생하게 해줬는데이유는 모르겠지만 재생에 필요한셋업을 하는 시간이 너무 오래 걸려서.. audioRef -> audioBlob -> URL로 변경한 ..

기술/웹 개발 2024.10.06

[react] client단에서 마이크를 이용해 녹음한 파일 API로 전송하기(multipart 전송)

현재 작업 중인 외주 개발 프로젝트에서user가 영어 문장을 컴퓨터 마이크를 통해 녹음하면해당 녹음 파일을 발음평가 API로 전송해user의 발음 점수를 받아오는 기능을구현해야했다. 따라서 유저가 녹음한 파일을 API를 통해백엔드 서버에 보낸 뒤,백엔드에서 발음평가 API로 다시 전송해서점수를 받아오고 이를 다시 프론트에서 받아와서화면에 뿌려줘야했다 정말 이 기능 구현하면서삽질을 너무너무너무너무너무 많이해서시간낭비를 제대로 했지만 ^^; 이 부분에서 삽질을 한 건 아니라서이 것도 까먹기 전에 얼른 기록으로 남겨두려한다1. recording 상태 확인 할 useState정의우선 record 기능을 컨트롤할버튼을 한 개 구현해줬다 recording이 아닐 때는Button의 텍스트가"Start Recordin..

기술/웹 개발 2024.09.05

[FastAPI/python] 파이썬 FastAPI로 정말 간단하게 API 만들기(CORS)

이번에 외주 작업하고 있는 프로젝트에서사이드 개발을 FastAPI로 하고있는걸 봤다 FastAPI는 들어봤었는데정확히 뭔지도 몰랐고파이썬으로 하는건지도 몰랐는데이번에 작업을 진행하면서정말 이렇게 간단하게도백엔드 작업을 할 수가 있구나 싶었서글을 작성해보려한다 백엔드 입문을spring으로 한 나에게는정말 신세계 그 자체,, https://fastapi.tiangolo.com/ko/#typer-fastapi-cli FastAPIFastAPI framework, high performance, easy to learn, fast to code, ready for productionfastapi.tiangolo.com 공식문서에도 굉장히 설명이 잘돼있어서참고하면 좋을 것 같다FastAPI 설치pip3 insta..

기술/웹 개발 2024.08.31

[PortOne/react] 통합 결제 연동 솔루션 포트원 react 프로젝트에 이식하기

이번애 배정받은 업무는개발하고 있는 웹 사이트의 결제 기능 개발이었다 결제를 위해서는 PortOne API연동을 알아봐달라고 요청받아서이번에 기능을 구현해보면서티스토리에도 남겨보려고 한다PortOne이란?포트원은 여러 가지 결제대행사들을연동해서 결제를 도와주는서비스이다https://portone.io/korea/ko 포트원 | 온라인 비즈니스 성장을 돕는 기업포트원이 제공하는 단 한 줄의 코드로 세상의 모든 결제를 손쉽게 연동해보세요. PG사 통합결제 연동, 해외결제, 파트너 정산 관리, 결제 애널리틱스, 수수료 혜택까지, 포트원의 맞춤 컨설팅을portone.io 설명에 따르면신용카드, 간편결제, 해외결제까지 모두손쉽게 연동이 가능하다고 한다PortOne 회원가입회원가입이 되어있지 않다면당연히 회원가입부..

기술/웹 개발 2024.08.30

[node.js/express/react] 새로운 endpoint로 새로운 화면 띄우기

요즘에 나는 대학원 생활과 동시에한 스타트업의 웹 사이트 개발의외주를 맡고있는데이 작업은node.js/express를 사용한 backend와react를 사용한 frontend 작업이다 아무튼 새로운 pricing 관련 페이지를만들어달라고해서react로 간단한 UI와js 파일을 작업해놓은 상태 이제 node.js에서 react를 사용해서새로운 endpoint에새로운 화면을 띄우는 법을 작성해보도록 하겠당 방법은 초특급 간단하다기존에 이미 기본 페이지가 구현되어있다면App.js에이렇게 구현이 작성이 되어있을 것이다  그럼 새로운 endpoint로 새로운 페이지를 띄우려면root페이지를 불러온 것과 동일하게React의 Route에서} /> 내가 설정해주고싶은 endpoint를 path에화면에 띄워주고싶은 컴포..

기술/웹 개발 2024.08.29

[next.js/개인홈페이지] 개인홈페이지 프로젝트 개발 및 배포 완료

옛날부터 정말 해봐야겠다고마음먹었던 것 중 하나인개인 홈페이지 개발 및 배포 프로젝트 .. 초반에는 UI/UX부터Html, css까지 싹다 내 마음대로만들려고 했다가 시간 너무 오래 걸림 issue로방향을 조금 바꿔보기로 결정했었다 그래서 start bootstrap을 이용해무료 html, css 템플릿을 참고하였고각종 색상이나 디자인, 구성은내가 필요한대로 변경하여 완성한나의 웹페이지 프로젝트... https://my-app-jiyous-projects.vercel.app/ Welcome to GU's HomeSkills & Studies Programming Languages & Tools htmlcssjavascriptreactnode.jsspringc++javapythonkotliniOS/swif..

기술/웹 개발 2024.08.12

[next.js] Synchronous scripts should not be used 에러 해결

개인 웹페이지 만들기 프로젝트를개발 완성하고build를 해보려구npm run build를 하자error가 떴다 에러 내용은Synchronous scripts should not be used에러였고구글링해보니 이는nextjs는 서버사이드에서 렌더링하는데화면이 뜨기 전에 script를불러오려고해서 발생하는 문제였다 해결방법은 2가지가 있는데 1. script뒤에 defer 붙여주기 이렇게 불러오는 script 뒤에 defer를 붙여주면 된다 2. next.js의 script 사용하기next.js에서 제공하는 next/script 컴포넌트를사용하면 된다위와 같은 방식으로 사용하면 된다 strategy 속성의 값으로는beforeInteractive: 페이지가 인터랙티브해지기 전에 스크립트를 로드afterInt..

기술/웹 개발 2024.08.12

[typescript/react] component 함수형으로 정의해 파라미터 여러개 넘겨주기

typescript를 거의 처음 다뤄보는 도중에지금 만들고있는 Box()라는 component에서사용할 image src url을 파라미터형으로넘겨주고 싶어졌다 그래서 옛날에 react에서 다뤄보던 방식대로funtion Box(url: string, oneLine: string, name: string, introduction:string) { return ();};const url1 = './img/1.jpg';const box1 = Box(url, oneLine, name, introduction);이런식으로 불러와서 호출해줬더니Warning: React.jsx: type is invalid -- expected a string (for built-in components) or a class/fun..

기술/웹 개발 2024.08.11

[next.js/typescript] bootstrap에서 scrollSpy 적용시키기

내가 선택한 개인 웹사이트 디자인에는 scrollSpy 기능이 적용되어있는 디자인이었다 https://getbootstrap.kr/docs/5.0/components/scrollspy/ 스크롤스파이스크롤 위치에 따라 Bootstrap 내비게이션 또는 목록 그룹 컴포넌트를 자동으로 갱신하여 뷰포트 내에서 현재 어떤 링크가 활성화 된지를 나타냅니다.getbootstrap.kr 간단하게 설명하자면 웹사이트를 들어갔을 때 내가 스크롤을 내릴때마다 옆에 있는 sideBar의 메뉴들이 내 스크롤 위치에 따라 변경되는 그런 웹 사이트들을 많이 봤을 것이다 그런 기능을 하는 것이 scrollSpy다 물론 직접 코드로 구현할 수도 있지만 bootstrap에서 아주 간단하게 제공하고 있기 때문에 그 친구를 써주기로 했다n..

기술/웹 개발 2024.08.06