오늘은 코드카타 SQL 55번 문제와 알고리즘 54번 문제를 풀고, 뉴스피드 프로젝트의 필수 구현 부분을 진행했다!
오늘 푼 SQL 문제는 두 테이블을 조인하고, count한 결과가 일정 수준 이상인 데이터를 조회하는 것이었다.
두 테이블을 조인하는 것도 할 수 있고, count가 일정 수준 이상인 것들도 뽑아낼 수 있다.
그런데..! 문제의 조건에 select절 안에 count가 들어가지 않았다..
그래서 계속 서브쿼리를 만들어서 진행해야하는 줄 알고 시도를 했지만,, 알고보니 select절 안에 count를 넣지 않아도, having절에서 count를 사용할 수 있었다...
다른 사람들의 풀이를 보니 having을 사용하지 않고 서브쿼리로도 풀 수 있던데,, 이렇게도 다시 시도해봐야겠다.
오늘은 알고리즘 문제를 하나밖에 풀지 못했다.
사실 2개 풀려고 했는데.. 2번째 문제가 자꾸 마지막 테스트 케이스에서 실패한다... 흑
오늘 푼 문제는 2016년 기준으로 입력받은 날짜의 요일을 출력하는 것이다.
사실 이 문제는 매우 매우 매우 쉽게 해결했는데, 자바의 LocalDate를 가져와서 사용했다.
LocalDate에 날짜를 넣어주고, getDayOfWeek() 메서드를 사용하니 정말 간단하게 해결할 수 있었다.
다른 방법으로도 풀 수 있다는 것도 알고, 이렇게 풀라고 낸 문제가 아닌 것도 알지만,,, 그래도 새로운 메서드를 알게 되었음에 만족한다.
각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘은 뉴스피드 프로젝트의 필수 구현 단계를 진행했다!
사실 거의 다 완성되었다!! 오예
필수 구현 단계에서 요구하는 내용은
User로 회원가입/로그인/로그아웃 등의 CRUD를 구현하고, User간에 팔로우 관계를 맺고, User로 게시물을 만들고, 조회하는 등의 CRUD를 구현하는 것이었다.
앞서 설명한 것처럼 우리 조는 야구 게시판을 만들기로 기획했기 때문에,
야구의 10개 구단을 다루는 Enum 구현, 유저의 CRUD 구현, 팔로우 CRUD 구현, 게시판의 CRUD 구현으로 총 4가지 주요 작업이 필요했다.
나는 이 중에서 팔로우 CRUD 구현을 담당해서 진행했다!
사실 위 3가지 CRUD 구현 작업 중에 팔로우가 가장 양도 적고, 간단하다ㅎㅎ
다른 것들은 말이 CRUD이지 거의 10개 가까이 되는 API를 만들어야만 했다..
Follow 테이블은 User의 FK를 2번 가져와 사용한다.
팔로우를 거는 fromUser와 팔로우를 받는 toUser로 필드를 생성하였다.
(사실 following과 follower였지만, 너무 헷갈려서 중간에 바꿨다..)
그리고 팔로우를 걸고, 팔로우를 취소하고, 특정 유저의 팔로잉/팔로우 수를 조회하고, 팔로잉/팔로워 목록을 조회하는 4가지 작업만 진행해주면 됐다.
사실 API를 구현하면서는 별다른 어려움 없이 잘 해결할 수 있었다.
그런데, 문제는 우리가 팀 프로젝트를 하고 있고.. 깃허브에서 함께 작업하고 있다는 것이었는데..
다른 사람들이 작업하면서 필요한 의존성을 추가하였고, Main에 해당 의존성을 추가해서 merge를 시켜놨었다.
그런데 나는 내 작업 하느라 프로젝트 업데이트를 안했고..
왜인지는 모르겠지만 의존성이 꼬이면서 UnsatisfiedDependencyException 예외가 터지며 프로그램이 동작하지를 않았다.
인터넷을 뒤져가며 gradle 빌드를 clean도 해보고, refresh도 해보고, 인텔리제이 재실행도 해보고 별별 시도를 다 해봤는데 다 실패했다..
그런데 그냥 프로젝트 업데이트 한번 하니까 잘 해결이 되더라.
왜 갑자기 의존성이 꼬여버린 것인지는 모르겠지만,, 어쨌든 프로젝트 업데이트의 중요성을 다시 한번 알게 되었다.
우리 팀이 진행한 내용들은 깃허브를 통해 업로드해두었다.
GitHub 보러가기
정말 깃허브가 너무 너무 어렵다,,,
프로젝트 업데이트를 한번 하려고 해도 merge와 rebase 중 하나를 고르라고 하고..
브랜치에 브랜치를 만들었더니 main 브랜치가 한번 바뀔 때마다 이런저런 작업들을 해야 하고..
다른 사람들과 커밋 메시지도 통일해서 작성해야 하고..
깃허브 뿐만 아니라 코드를 작성할 때도 형식을 일치시켜야 하고...
혼자 할 때는 아무것도 신경쓰지 않고 그냥 내가 편한 방식, 내가 하던 방식대로만 쭉 하면 됐었는데,
팀 협업을 하려다보니 이것저것 맞춰야 할 게 한두개가 아니다.
그리고 괜히 내가 잘못 커밋했다가 프로그램이 망가질까봐 커밋하기 전에 5번씩은 다시 확인하게 된다..
(5번 확인해도 놓친 오류가 있다는 사실..)
하지만,, 앞으로도 나 혼자 개발할게 아니니까.. 빨리 적응하고 익숙해져야겠다.