문제 상황 if (this._audio.dataset.src === src) { if (Math.abs(clipStart - this._audio.currentTime) >= 0.3) { this._audio.currentTime = clipStart; } this.play(); return; } 현재 우리 mp3 재생은 버튼을 클릭시 서버에서 미리 받아온 clipStart 값을 통해 현재 audio 객체에 currentTime 설정해서 원하는 위치에 오디오를 재생시키도록 되어있다. 크롬에서는 문제가 없었지만 Safari 브라우저나 ios에서는 오디오 재생이 밀리는 문제가 발생했었다. 현재 서버에서 받아오는 mp3 파일이 135kb/s에 VBR..
AI를 이용해서 Railway에 내 로컬에 존재하는 table을 등록하고 싶었는데 제대로 알려주지 않아 헤맸었다. 이를 위해 약간의 고민과 공식문서를 보고 알아낸 방법에 대한 글이다. 일단 내가 생성해서 배포하고자 하는 DB를 선택해준다. 필자의 경우 MySQL을 사용했다. 생성 후 tab에 Variables와 Settings를 이용하려고 한다. 일단 우리 로컬 터미널에 mysqldump -u root -p memo_app > memo_app.sql 위에 명령어를 입력해 로컬에 존재하는 table의 백업 파일 즉 덤프 파일을 만든다. mysql -h 프록시주소 -P 포트번호 -u 유저이름 -p비밀번호 DB이름 위에 명령어를 입력해줘서 Railway에 배포한 DB에 우리 로컬 table을 올려줘야..
문제 상황 브라우저에서 복사를 하게 되면 클립보드라는 저장소에 임시로 데이터가 저장된다. 클립보드 메서드중 copy 메서드를 이용해 데이터를 저장하는데 사파리에서 클립보드에 복사되지 않는 이슈가 있었다. button.onclick = () => { setTimeout(() => { copyToClipboard(); }, 100);}; 위와 같이 사용자의 상호작용에 대한 클립보드의 상호작용내에 비동기 호출후 클립보드를 복사하는 동작은 제대로 동작하지 않는다. 사파리내에 보안정책 때문에 사용자의 이벤트로 바로 클립보드를 호출하는게 아니면 동작하지 않게 막고있다. 해결책button.onclick = () => { copyToClipboard(); }; 해결책은 생각보다 간단하다 사용자 이벤트에 ..
이게 뭔데?const uri = "https://example.com/search?query=안녕하세요";const encoded = encodeURI(uri);console.log(encoded); // https://example.com/search?query=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94 직접 코드를 보는게 이해가 빠를꺼다. encodeURI는 : / ? & = 등의 특수기호는 변환하지 않고 나머지 문자들을 변환한다고 보면된다. 근데 여기서 특이한 점은 앞에 주소나 path는 인코딩 시켜주지 않는다는 점이다. 아마 이건 내부적으로 경로로 인정한 값을 제외한 값만 인코딩해준다encodeURI("https://example.com/search?..