
[졸업 프로젝트] #2 OpenPose로 keypoints 검출하기
2023. 4. 28. 20:30
Project/졸업프로젝트 - Running Coach
OpenPose 인간 자세 예측의 한 분야로, 오로지 카메라 한 대로만 가지고 사람의 몸, 얼굴, 손가락 마디를 정확하게 예측 하는 것 신체의 관절을 추론 후, 관절들을 이어주는 방식 BODY-25 출력 관절이 25개 COCO 출력 관절이 18개 MPII 출력 관절이 15개 => 달리기 자세를 측정해야 하기에 많은 관절을 추출할 수 있는 BODY-25를 사용하기로 했다 OpenPose 간단히 실습해보기 OpenPose를 사용하기 위해서는 깃허브에서 모델을 다운받아서 적용해야 한다 방법 OpenPose 저장소를 clone한다 (https://github.com/CMU-Perceptual-Computing-Lab/openpose) models 폴더 안의 getModels.sh를 실행한다 생성된 파일 중 mo..

[졸업 프로젝트] #1 주제 정하기
2023. 4. 28. 20:04
Project/졸업프로젝트 - Running Coach
우리학교는 1년간의 졸업 프로젝트를 진행해야 한다 졸업 프로젝트를 진행하면서 논문 역시 작성해야 한다 2인 팀으로 구성하였고, 주제를 고르기까지 정말 많은 고민을 했고, 많은 논문을 찾아보게 되었다 주제를 잡는데에는 중요한 요소가 몇가지 있었는데, 1. 논문을 작성할 수 있을 만 한 주제라는것 보통의 웹서비스나, 어플로는 논문을 작성할 수 없다 2. 머신 러닝 프로젝트라는 것 1번과 비슷한 내용이지만 선배들은 모두 머신 러닝 프로젝트를 하였고, 논문까지 작성했다 사실 머신 러닝 프로젝트를 해본적이 없기에, 어느 수준의 프로젝트가 우리가 할 수 있고 실현 가능한 지 가늠하는 것이 제일 어려웠다 팀원 분과 회의를 하면서 자세 교정에 관한 쪽으로 틀을 잡았고, treadmill에서 찍은 모습을 통해 달리기 자..

[Snacks 개발 일기] #14 ec2 포트포워딩 하기
2023. 1. 20. 16:12
Project/Snacks
우리는 하나의 ec2안에서 docker compose를 통해 프론트엔드 + 백엔드 + redis가 연결되어있다 따라서 ec2의 ip주소로 접속하려면 먼저 프론트엔드의 포트로 접속을 해야하는데 (그렇지 않으면 ip주소:포트번호 로 접속), 이럴때 ec2에서 포트포워딩 설정을 해주면 된다 기본값인 80번 포트로 접속을 하면 내가 원하는 포트번호로 연결시켜주는 것이다 sudo su iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port [원하는 포트번호] 이 과정을 실행하면 더이상 ip주소 뒤에 포트번호를 붙이지 않아도, ip주소만 입력하면 내가 원하는 포트로 이동할 수 있다!

[Snacks 개발 일기] #13 ec2에서 빌드 안될 때, swap 메모리 설정하여 해결하기
2023. 1. 20. 16:05
Project/Snacks
프론트엔드 + 백엔드 + redis로 이루어진 docker compose를 드디어 ec2에서 실행하는 순간이 왔다 원래도 백엔드 파일이 커서 빌드되는데 시간이 많이 걸리긴 했는데, ec2에서 돌리니 더 안돌아가는 것이었다 이전에 동아리에서 스터디를 할 때, 간단한 파일임에도 불구하고 ec2에서 빌드를 했을 때 1시간 반이 걸리고, 그마저도 실패로 뜨는 경험을 무려 6번이나 했기 때문에 무엇이 문제인지 단번에 파악할 수 있었다 (이래서 경험이...중요....) swap 메모리를 설정해주면 된다 swap이란 시스템에 메모리가 부족할 경우에 하드 디스크의 일부 공간을 활용하여 계속 작업을 도와주는 영역이며, 하드 디스크의 일부를 RAM처럼 사용할 수 있게 만드는 것이라고 한다 sudo dd if=/dev/ze..

[Snacks 개발 일기] #12 docker compose 시 redis 연결 안될 때 해결하기
2023. 1. 20. 15:57
Project/Snacks
기존에 로컬에서 작업할 때는 로컬에서 redis를 설치하여 localhost로 백엔드 프로젝트와 연결을 하고있었다 하지만 docker를 사용하면서 redis를 직접 설치하는 것이 아닌, 이미지를 불러오는 방식을 채택했는데 연결이 안되는 현상이 발생했다 현재 프론트엔드 이미지 + 백엔드 이미지 + redis 이미지 모두 localhost를 통해 연결을 시키고 있었고, 실제로 프론트엔드 백엔드는 연결이 잘되고 있었다 redis만 연결이 안되고 있었다 찾아보니 docker에서 컨테이너를 띄우면 각 컨테이너와 localhost는 독립적이게 된다고 한다 docker를 실행 시킨 후 ip를 확인해보니, 백엔드와 redis의 주소가 달랐다 서로 연결이 안되었던 것이다 왜 프론트랑 백엔드는 연결이 된거지? 해결 방법으..

[Snacks 개발 일기] #11 Table doesn't exist 해결하기
2023. 1. 13. 23:26
Project/Snacks
당시 나의 상황은 local에서 db를 연결하여 개발 완료 -> local db를 aws rds로 변경 했던 상황이었다 회원가입 및 로그인은 잘 되는데, 갑자기 위젯 관련된 기능을 실행시키면 오류가 떴다 Table doesn't exist............. 바로 DB를 켜서 테이블을 확인해보니...? 멀쩡하게 있다 혹시 내가 오타를 썼나? 했는데 오타도 없다...... 해결법 SQL를 배울 때, SQL은 대소문자를 구분하지 않는다고 배웠다 하지만....구분한다...........linux에서는........... (window에서는 구분하지 않는다고 한다) 근데 mac에서 작업한 나는 왜 이제서야 알게되었나..? => 우선 이 설정은 lower_case_table_names 변수의 값부터 알아보는 ..

[Snacks 개발 일기] #10 incorrect string value..... 에러 해결하기
2023. 1. 3. 22:41
Project/Snacks
localhost의 테스트 db를 적용하면서 개발을 하고 있었는데 본격적인 배포 준비를 위해서 RDS를 적용하게 되었다 적용하는 과정에서 이전에는 보지 못한 오류들이 나왔는데 오류 내용이 "incorrect string value...." 라는 오류였다 구글링해보니 한글이 안들어가져서 그렇다는데... 이전에 rds를 몇번 생성한 경험이 있어 rds를 생성하면서 파라미터 그룹의 값도 한글이 들어가게끔 utf8mb4로 변경했는데 왜 안되지 싶었다 뭐가 문제인지 몰라서 utf8mb4대신 utf8로도 해보고, 직접 접속하여 값을 바꿔보았지만 바뀌는 것은 없었다 구글링하면서 한 가지 알아내었다 바로 파라미터 그룹을 설정한 뒤 재부팅을 안했다는 것! 재부팅을하니 이번에는 utf8이 아니라 utf8mb3가 설정이 된..

[Snacks 개발 일기] #9 Spring Security에서 cors 에러 해결하기
2022. 12. 23. 15:25
Project/Snacks
프론트엔드와 연결하는 작업을 시작하면서 드디어 만나게 되었다 cors..... 사실 본 프로젝트를 시작하기 전에 기본 기능만 닌자처럼 빠르게 구현해보고 부족한 점을 찾아서 본 프로젝트에서 보완하자는 의미의 '닌자 프로젝트' 를 진행하면서 cors 설정을 해두었기때문에 크게 걱정하지는 않았다 하지만 닌자 프로젝트는 spring security를 사용하지 않았지...... 닌자 프로젝트에서 다음과 같이 cors을 적용했다 하지만 spring security는 이와 같이 해서는 안되고 filter에 적용을 시켜야 한다는 것을 모르고 있었다 몰랐기에 이것 저것 정말 많이 시도해보았고 결국은 해냈다 스프링부트 2.4.0부터 AllowCredentials가 true일때는 AllowdOrigin에 *를 추가할 수 없..

[Snacks 개발 일기] #8 구글 로그인과 같은 이메일로 자체 로그인할 때 안되는 현상 해결하기
2022. 12. 23. 13:05
Project/Snacks
이전에 자체 로그인시 사용되는 이메일이, oauth2를 통해 로그인하는 구글 이메일과 같을때 다른 유저라고 생각하고 구현을 했었다 각각 테스트를 했을때는 정상적으로 작동이 되었지만, oauth2로 로그인된 이메일이 이미 db에 저장되어 있을때 회원가입은 정상적으로 되지만 로그인이 안되는 현상을 발견했다 oauth2 로그인과 자체 로그인은 provider로 구분하게 해놓았는데, 이부분에서는 구분이 안되니 여기서 문제가 생겼을 것이라 생각했다 하지만 UsernamePasswordAuthenticationToken은 이름에서도 알 수 있듯이 유저 아이디와, 비밀번호로만 생성이 가능했고, provider를 사용하기 위해서는 새롭게 custom을 해야하나? 아니면 이미 구현된 CustomUserDetails에서 ..

[Snacks 개발 일기] #7 자체 로그인과 구글 로그인 충돌 방지
2022. 12. 12. 17:58
Project/Snacks
구현을 계속 하다보니 이런 경우도 있지 않을까 싶었다 구글 로그인을 통해 회원가입을 했는데, 구글 이메일을 가지고 자체 회원가입을 하는 경우.....! ....대대적인 수정에 들어갔다 우선 AuthRepository에 findByEmailAndProvider을 구현하여, email과 provider을 통해 유저의 정보를 찾을 수 있게끔했다 1. 자체 회원가입을 할 때 DB의 provider컬럼에 local이 추가되도록 하였다 (구글 로그인은 이미 추가됨) 2. JWT에 넣어져 있는 유저의 이메일을 가지고 유저를 구분하려 했으나, 이제는 provider와 함께 구분해야하기에 claim에 provider를 추가하였다 3. accessToken을 재발급하는 /refresh에도 유저의 refresh 토큰에 있는..