Project/Voice Pocket

문제 상황과 원인 누군가 팔로우 신청을 걸면 팔로우 신청을 받은 사용자에게 push 알림을 보내야하는 상황이 있었다. 기존의 방식은 팔로우를 거는 메인 로직과 알림을 보내는 로직이 결합되어있어 여러 문제가 있었다. @Transactional public FriendResponseDto requestFriend(FriendRequestDto friendRequestDto, String accessToken) { /* 팔로우 신청 메인 로직 */ Authentication authentication = getAuthByAccessToken(accessToken); User to_user = userRepository.findByEmail(friendRequestDto.getEmail()) .orElseThr..
솔직히 동시성 이슈 이런건 남 일이라고 생각했습니다. 동일한 자원에 짧은 시간 간격으로 들어오는 요청 같은 건 솔직히 사용자가 아주 많은 상황에서나 발생할 거라고 생각했었다. 근데, 데모 버전 발표회 당일날 발표장에서 그런 이슈를 맞이할 거라고는 예상하지 못했다.. 더블 클릭 이슈 아주 짧은 시간 간격으로 동일한 요청이 오는 상황에서는 동시성 문제가 터질 수 있다. 다만, 간과한건 이런 문제는 사용자가 많은 상황뿐만 아니라 한 사용자가 같은 요청을 짧은 시간에 여러 번 할 때도 발생할 수 있다. 더블 클릭 이슈가 이런 예시이다. 팔로우 신청 기능에서 발생한 문제..! 발표 행사장에 네트워크 환경이 좋지 않아, 사용자들이 버튼을 연타하는 상황이 빈번했다. 사용자들끼리 팔로우 신청하는 기능이 있었는데, 이 ..
Message Queue 뒷 단에서 수행되는 task에 대해서 서버에서 어떻게 확인할 수 있을까..? 음성 합성을 위한 작업은 python 컨테이너에서 수행되므로 spring boot 서버에서 컨테이너 쪽으로 작업 메시지를 넘기면 그 작업 결과에 대해 클라이언트가 알 수가 없었다. 하지만 wav 파일 생성을 마치면 해당 wav파일을 gcs 버킷에 업로드하기 때문에, 클라이언트에서 gcs로부터 다운로드 받기 위해서는 해당 작업이 끝난 시점을 알아야만 했다. 따라서, 며칠 동안 머리를 싸맨 결과 나름의 해결책을 고안했다. 끝났는지 계속 물어보기(Polling 방식) 당최 해결법이 떠오르지 않다가, 문득 하나의 생각이 머리를 스쳤다. celery backend가 있구나? celery는 작업의 결과를 backe..
음성 합성을 위한 과정 사용자의 요청에 따라 음성 파일을 합성하는 전반적인 과정은 다음과 같다. 1) 클라이언트 요청 2) 해당 음성 모델로부터 Systhesizer object initialize synthesizer = Synthesizer( tts_checkpoint = f"{tts_model_file_path}", tts_config_path = f"{tts_config_path}" ) 3) 2에서 만든 Synthesizer object로부터 tts 함수 호출(wav 파일 생성) symbol = synthesizer.tts_config.characters.characters # symbol set text = normalize_text(text, symbol) # text normalize wav..
굳이 django를 써야할까..? 한이음 멘토님과 프로젝트 관련 이야기를 하다가, 이런 이야기가 나왔다. 나: 음성 합성 관련 라이브러리가 python으로 쓰여서 백엔드 서버도 django를 사용하고 있습니다 ㅠㅠ 멘토님: 음.. 서버가 요청을 rabbitMQ 같은 message queue에 publish하면, python으로 받아서 처리하면 되니 굳이 서버까지 python으로 만들 필요는 없지요 나: (생각해보니 그렇네…!) 서버 개발 언어에 굳이 제약을 걸 필요가 없겠구나! 아무래도 이제는 django보단 spring boot가 더 익숙하기도 하고, 요즘 적극적으로 공부하고 있는 프레임워크이기 때문에 굳이 python을 사용해야하는 상황이 아니라면 django를 고집하고 있을 이유도 없겠다는 생각에 ..
개요 이전에 진행했던 Team_ForV의 프로젝트가 끝나고 못내 아쉬운 부분들이 있었다. 사람의 목소리를 학습시켜 TTS 서비스를 만들 수 있다는 것은 꽤 흥미로운 주제라고 생각했고, 이 주제를 좀 더 완성도 있는 프로젝트로 발전시키고 싶다는 생각을 했다. 따라서, 기존의 문제점들을 좀 더 보완하고, 기능들을 추가하여 새로운 프로젝트를 구상하게 되었다. Voice Pocket..! 개인적으로 요즘 웹 서비스보다는 앱 서비스를 더 많이 이용하기도 하고, 해당 주제도 웹 보다는 앱 서비스가 더 알맞을 것이라 생각하여 새로운 프로젝트는 `Flutter`로 진행하게 되었다. 예전에 유튜브를 보다가 돌아가신 아버지의 목소리를 복원하여 가족들에게 추억을 선물해주었던 스토리를 본 적이 있다. 사람 목소리의 특성 자체..
hi-june
'Project/Voice Pocket' 카테고리의 글 목록