오늘은 코드카타 SQL 71, 72번 문제와 알고리즘 63번 문제를 풀고, Spring 플러스 프로젝트의 Lv.3-3을 시작만 했다..
오늘은 2개의 SQL 문제를 풀었다.
첫 번째 문제는 union을 사용해 두 개의 테이블을 연결하고, 데이터를 가공하는 것이었다.
사실 지난 번에 Union을 사용하는 문제를 풀었었기에 union 자체는 어렵지 않았는데, 오늘은 새로운 것을 사용해보았다.
바로 with [테이블명] as (select ... from...)으로 가상의 테이블을 만드는 것이다.
두 테이블을 연결한 후에 데이터를 가공하다보니 쿼리문이 쓸데없이 길어지고 있었는데, 이렇게 가상의 테이블을 만들고, 이 테이블에서 필요한 조건대로 가공하니 매우 편리하게 사용할 수 있었다.
두 번째 문제는 두 개의 테이블을 join하여 데이터를 가공하는 것이다.
사실 이 문제는 사전캠프 기간에 풀었던 문제라 빠르게 해결할 수 있었다.
오늘은 한 개의 알고리즘 문제를 풀었는데, 두 개의 숫자를 입력받으면, 두 숫자의 공통된 숫자들을 가지고 만들 수 있는 가장 큰 수를 반환하는 것이다.
사실 어제부터 이 문제를 풀었는데, 문제 자체를 풀 수는 있었지만, 시간 초과로 테스트에 통과할 수는 없었다.
처음에는 두 숫자 모두 배열로 바꾸어 비교했기 때문에, 숫자가 커진다면 여기에 걸리는 시간이 너무 오래 걸려 시간 초과가 되었다.
그래서 두 숫자 중 하나만 배열로 바꾸고, char 하나를 다른 string의 contains로 확인하도록 바꾸었는데, 유의미한 차이는 아니었다.
그래서 마지막으로 선택한 방법이 각 자리마다 숫자의 개수를 세는 것이었다.
2차원 배열을 만들어 두 개의 숫자를 구성하는 숫자들의 개수를 세고, 공통되는 만큼을 추려냈다.
중간에 왜인지 모를 IndexOutOfBound 예외가 생겼지만,, 이렇게 해결하니 시간 초과 문제가 해결되었다.
요즘 알고리즘 문제를 풀 때마다 시간 초과로 인한 테스트 실패가 많은데, 코드를 짤 때 이제 성능을 생각하면서 코드를 짜봐야겠다.
오늘 푼 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘은 도커 강의를 빠르게 한번 듣고, Lv.3-3의 AWS 배포를 시도했다.
이전에 AWS를 사용했었기 때문에, 어제 AWS 프리티어 계정을 받으려고 새롭게 계정을 생성했는데,,
얼마 전에 AWS 프리티어 정책이 바뀌었더라..
이제 아무리 새로운 계정을 생성해도 핸드폰 번호가 동일하니 프리티어 혜택을 받을 수 없다..
EC2는 돈이 많이 들지는 않겠지만, 무시무시한 RDS를 사용해야하기 때문에.. 정말 정말 빠르게 진행해야 했다.
빠르게 RDS를 만들어서 기존의 애플리케이션에 연결하고, 애플리케이션을 빌드해서 도커 이미지로 만들고 도커 허브에 푸시하였다.
EC2를 만들어서 도커를 설치하고, 도커 이미지를 받아 컨테이너를 실행하려고 했는데, 스프링이 빌드되다가 중간에 에러가 터지면서 끝나버리더라.
알고보니 내가 application.yml 파일에 환경변수를 사용하고 있는데, 환경변수를 다루는 .env 파일을 같이 실행하지 않았기 때문이었다.
JWT 시크릿키도 환경변수로 관리하는데, 시크릿키가 없으니 JwtUtil이 제대로 생성되지 않고, 그러니 JwtFilter도 제대로 되지 않고, 그러다 결국 종료되어버린 것이다.
사실 엄청 심각해서 해결하는 데에 오래걸릴 줄 알고 AWS 시스템을 모두 중지시켰는데, 그냥 도커 컨테이너를 실행할 때 env 옵션만 추가하면 되는 것이었다.
이 부분의 해결책을 찾아두었으니 내일 다시 시도해봐야겠다.
오늘은 크게 진행한 내용이 없다..
내일 도커를 조금 더 공부해볼 예정인데, 내일 도커에 대해서 정리해봐야겠다.
내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기
의욕을 잃었다...
그치만 연말에 놀려면 빨리하고 끝내버려야겠다.