시작
겨울방학부터 팀빌딩을 시작하고 프로젝트 팀이 완성되었다.
사실 여름에도 프로젝트를 할 기회가 있었지만, 너무 못해서 그냥 공부를 더 했다. 이건 좋았던 선택인 것 같다.
김영한 선생님의 강의를 보면서 열심히 했던것 같다. 나같은 비전공자들은 이렇게라도 공부를 해야되지 않나 싶다..
이 강의가 없었다면 아직도 나는 방황하고 있었지 않았나 생각한다.
한학기동안, java, 객체지향, 스프링부트, jpa 등을 동아리와 강의를 통해서 공부하고, 이를 통해서 방학에 프로젝트를 하게 되었다. 프론트 둘, 백 둘로. 여기서 백 둘중 한명이 나다.!
팀 프로젝트
이제는 프로젝트에 대해 말해볼까 한다.
우리팀은 감정기반 음악 추천 웹서비스를 기획하고 만들었다.
처음에는 뭐 순조로울 줄 알았다. 사실 학기중에 실습 했으니까.
그렇지만 계속 하다보니 상상과 현실은 달랐다... 특히 jpa와 rest통신시에 프론트에 리턴 값을 줄 때 약간 문제가 생겼다. 기존에는 그냥 아무런 리턴값 없이 DB에 접속해서 값이 들어갔는지 확인을 하면 돼서 리턴값을 따로 주지 않아도 되는줄 알았다. 하지만 ResponseEntity를 쓰면서 프론트에 전달해줘야 하는 문제가 있었다. 지금 생각해보면 당연한건데, 그때 코드를 만들때 생각을 못해서 처음에 썼던 코드를 다시 리팩토링 해야했다..ㅠㅠ
그리고 spring data jpa외에 Qeury Dls와, jpql를 모르다 보니 완전히 jpa 인터페이스에만 의존해서 db에 값을 조회해야했다.
이때 문제가 인터페이스 메서드가 너무 길어지고, 이러다보니 쿼리가 여러개가 나가는 등 나머지 n+1같은 문제들을 해결하지 못했다. 이에 따라서 서버에 무리가 가서 서버가 터지고,,, 총체적 난국이였다.
또한 중간 테이블을 만들때도 manytoone과 onetomany에 대한 개념이 잡혀있지 않아서 반대로하고 난리가 났다.. 그래도 이정도는 공부를 해서 이제 잘 짤 수 있다. 좀 더 빨리 할걸..
그리고 외부API 사용. 이게 진짜 처음부터 큰 난관이였다. webFlux는 아직 내가건들 단계가 아니였고, RestTemplate는 레거시화 된다고 해서 사용을 지양하고 싶었다. 그러다 멘토의 추천으로 Feign Clinet를알게되었고 겨우 유튜브를 보면서 따라 치며 해결했다.. spotify를 java로 넣는 블로그 글도 없고, 유튜브 강의 딱 하나가 있어서 그거 덕분에 겨우 마치게 되었다. 또 다음 문제로 json형식이 정해져 있다 보니, 내가 커스텀을 해야했는데 objectMapper을 통해 하게 되었다. 내가 원하는 정보를 json 형식으로 재편집 할 수 있다는 점이 상당히 맘에 들었다. 대신 주의해야할 점이 위치를 정확히(뭐 당연한 말이지만) 해서 적어야 한다는 점이 있다. 이로서 원하는 정보만 가져오기에 성공할 수 있게 되었다!!!!
그 외에 중간테이블에 트랙 검색을 위해 임의의 숫자를 부여해서 넣는게 맞는지 잘 모르겠다는 생각이 들었다.
만약 트랙이 1번 트랙, 2번트랙, 3번 트랙 이 저장되어 있다고 치고, 1번 플레이리스트에 1번, 3번 트랙을 넣으면 그 중간테이블 1번 플레이리스트에는 1번, 2번으로 저장되게 하는 비즈니스 로직을 짰다. 근데 이게 테이블에 pk값도 아닌 그냥 구별하기 위해 넣은 숫자라 이게 맞는지 아직도 모르겠다.. 이거에 대해 아는 분은 댓글 부탁드립니다..!!!
인프라 구축
인프라 구축이 진짜 헬이였다. aws는 들어본적만 있고 해본적은 없는데, 서버 배포까지 해야하니 정말 큰 문제였다.
인프라를 내가 구축하지 않긴 했지만, 프리티어라는 aws 특징상 계속터지기 일수였고, 비용도 잘못해서 과금되었다.. ipv4를 4개를 연결해서 ㅠㅠ 여튼 서버도 로컬이 아닌 환경에서 구동되는 거니까, 로컬에서 구동되게 변경하고 싶었다.
그래서 깃허브에 있는 서브모듈을 이용하려고 했지만.. 프론트쪽을 잘 몰라서 애를 먹었다.
나중에 든 생각인데 먼저 서브모듈을 이용해서 로컬에서 서버 구동을 완료 -> 테스트 서버 검증 -> 운영서버 이렇게 해야한다고 생각이 들었다. 이게 맞는진 모르겠지만 다음 팀프로젝트때는 이렇게 해보자고 말 해 볼 생각이다.
결정적인거는 발표때 서버가 터져서 제일 문제였다. 다른팀 발표하는데 허겁지겁 고치느라 아주 애를 먹었다.
마지막으로
이번 팀프로젝트에서 프론트와 백 협업 중요성, 로컬환경세팅, spring data jpa로는 전부를 하지 못한다는 점, 인프라 구축을 잘해야 한다는 점을 배우게 되었다. 밤새서 코딩을 하고 결과를 남들에게 보여주니 뿌듯한 점도 있었지만, 완벽하게 되지 않아 아쉬운 점이 많았다.
다음 프로젝트때는 더욱 보완해서 해야지~~
끝.
ps. 앞으로 공부하는 글과 알고리즘 등등 짬짬히 올릴 계획이다. 그냥 내가 학습한 내용을 정리해서 올리기 보다는 헷갈리는 부분을 정리해서 올릴 것 같다.