오늘은 코드카타 SQL 67번 문제를 풀고, 팀 프로젝트의 필수과제를 반쯤 마무리했다!
오늘은 1개의 SQL 문제를 풀었는데, 이번에는 union을 사용해서 두 테이블을 연결하고, 가공하는 것이었다!
처음에는 union도 join처럼 사용하면 될 줄 알고, where 테이블1 union 테이블2 이렇게 사용했지만.. 이렇게 사용하는게 아니었다!
select *
from 테이블1
union all
select *
from 테이블2
위아래로 테이블을 붙이는 만큼 이렇게 쿼리도 위아래로 써줘야 하더라.
그래도 union을 사용하는 것 외에는 큰 어려움 없이 해결할 수 있었다!
오늘 푼 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘은 정말 정말 정말 힘들었다...
먼저, 팀원들 서로가 코드를 쓰는 방식이 너무나도 달랐기 때문에 여기에서 더 진도가 나가기 전에 한번 코드 리뷰를 하며 통일시키기로 했다.
사실 우리 중 아무도 팀원들끼리 코드 리뷰를 해본적이 없었기에, 빠르게 해결할 수 있을 줄 알았지만...
모든 사람이 지금까지 작업한 내용들을 보고, 수정하려고 하니 4시간이 걸렸다...
과정은 매우 힘들었지만, 그래도 한번 해두고 나니 이제 여기서부터는 크게 형식에서 벗어나게 되는 일이 없어질 것 같다.
그래서 마음은 편해졌다.
코드 리뷰 이후에는 내가 한 작업들을 리팩토링하고, 구현이 완료된 다른 브랜치들과 합쳤다.
그리고, 나는 새롭게 로그 작업을 시작했다!
로그가 AOP를 요구해서 뭔가 되게 복잡할 것 같아서.. 일단 로그를 더미 데이터로 만들어서 로그 조회 기능만 구현해두었다.
내일은 정말 AOP와 로그 기록을 시작해봐야겠다..
오늘 일단 지금까지 한 내용들을 확인하기 위해서 프론트엔드와 연동을 시도해봤다.
그런데,, 이상하게 자꾸 서버끼리 연결은 되는데, 회원가입이나 로그인이 제대로 동작하지 않았다!!
일단 먼저 백엔드 서버는 8080포트에서 실행되고, 프론트엔드 서버는 3000포트에서 실행되기 때문에, 이 두 포트끼리 통신이 되도록 설정을 해줘야 했다.
그걸 바로 CORS 설정이라고 한다고 한다.
구글링을 하며 이 CORS 설정까지는 어떻게든 다 해결을 해주었기에 프론트엔드와 백엔드 간의 통신은 잘 되었다.
그런데, 문제는 프론트엔드에서는 백엔드로 처음 요청을 보낼 때, 이 CORS 설정이 제대로 되었는지를 확인하기 위해 임시로 요청을 보낸다.
그래서 그 임시 요청이 다시 프론트엔드로 잘 들어오면 그제서야 진짜 처리할 요청을 보낸다.
이걸 Http와 TCP/IP가 통신하는 3-Way Handshake라고 한다고 한다.
아직 이 부분에 대해서는 정확히 알지 못해서 조금 더 찾아봐야 할 것 같다.
어쨌든 우리는 백엔드를 구현할 때 JwtFilter로 회원가입과 로그인 로직만 필터를 그냥 통과할 수 있도록 설정해두었다.
그런데, 프론트에서 보내는 임시 요청이 이 필터에 걸려서 프론트에서는 CORS 설정이 안전하지 않다고 판단하였고, 이후에 실행해야 하는 진짜 요청을 전달해주지 않았다.
그래서 일단은 임시방편으로 JwtFilter에 임시 요청이 사용하는 OPTIONS 메서드의 경우에는 무조건 필터를 통과할 수 있도록 해주었다.
하지만, 이렇게 될 경우, 다른 사람이 OPTIONS 메서드를 가지고 비정상적인 요청을 주더라도 필터가 뚫려버리는 문제가 발생하기 때문에, 이렇게 구현해서는 안 됐다.
아직 우리는 스프링 시큐리티가 제대로 동작하지 않았기에 사용하지 않고 있었는데, 이걸 스프링 시큐리티를 통해 해결하면 한 번에 해결이 되더라.
아직은 스프링 시큐리티를 제대로 사용해볼 마음의 준비가 안 되었기 때문에.. 이 부분은 최종 제출 전까지 차차 해결해보려고 한다..
내일 빠르게 내 파트를 마무리짓고, 스프링 시큐리티를 더 공부해봐야겠다..
우리 팀이 진행한 내용들은 깃허브를 통해 업로드해두었다.
GitHub 보러가기
으 프론트엔드랑 같이 해볼 수 있다는 생각에 마냥 신나기만 했었는데, 실제로 연동을 해보려니까 정말 쉽지 않은 작업이다..
몸은 굉장히 힘들지만.. 그래도 재미있다.
아직까지는 내가 프론트엔드에 대해서 아무것도 모르기 때문에 그냥 구글링해서 찾은 내용들을 긁어오는게 다였지만,
나중에 언젠가 프론트엔드를 조금 더 배워서 해보면 더 재미있을 것 같다.