오늘은 코드카타 SQL과 알고리즘 36, 37번 문제를 풀고, 일정관리 앱 Dev 과제의 Lv. 1, 2, 3을 진행했다!
오늘 진행한 SQL 문제들은 지난 문제에 이어 join을 활용해 두개의 테이블을 연관지어 데이터를 가공하는 것이었다.
중간에 문제의 요구사항을 놓쳐서 헤매긴 했지만.. 큰 어려움 없이 해결할 수 있었다.
오늘은 총 2개의 알고리즘 문제를 풀었는데,
첫 번째 문제는 입력받은 문자열의 길이가 특정 조건이고, 문자열이 모두 숫자로 구성되어 있을 경우 true를 반환하는 것이었다.
문자열이 숫자인지 확인하는 것은 이전에 계산기 과제에서 해보았기 때문에 큰 어려움 없이 해결할 수 있었다.
처음에는 문자열을 배열로 바꾸어서 길이를 알아봤는데, String 객체에도 length()라는 메서드가 있더라.
이걸 활용하면 String 형식 그대로 유지한채 길이를 알아볼 수 있다.
두 번째 문제는 길이가 같은 두 2차원 배열을 입력받으면 동일한 자리에 있는 두 수를 더하는 것이었다.
중첩 반복문을 사용해 더하는 것 자체는 어렵지 않게 해결할 수 있었다.
그런데.. 배열은 미리 크기를 지정해야 한다는 사실을 까먹었다..
크기 지정 없이 배열을 선언해두니 계속 에러가 났고, 이걸 해결하느라 애를 먹었지만.. 결국 잘 해결했다.
각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘은 일정관리 앱 Dev 과제의 Lv. 1, 2, 3을 완성했다!
이번 과제의 Lv.1은 일정의 CRUD를 구현하는 것이고, Lv.2, 3은 유저의 CRUD를 구현하고, 회원가입을 만드는 것이다.
사실 일정 CRUD 구현은 이전 과제에서 구현했던 내용들이라 어렵지 않게 해결할 수 있었다.
유저 CRUD 구현도 어렵지 않게 해결할 수 있었는데, 일정 테이블과 유저 테이블을 매핑하는 데에 시간을 좀 많이 쓰게 되었다.
정말 필요한 경우가 아닌 이상 양방향으로 테이블을 매핑하지는 않기 때문에, 이번 과제도 단방향으로 테이블을 매핑한다.
한 명의 유저가 여러 개의 게시글을 작성할 수 있고, 이미 있는 유저의 목록 중 일정이 자신의 유저를 선택하는 형식이기 때문에
일정이 관계의 주인으로서 유저의 id를 관리하는 일대다 관계로 구현하는 것이다.
이렇게 관계의 주인이 어디인지, 즉 누가 누구의 FK를 관리해야 하는지를 정리해두니 많이 해매지 않고 테이블 매핑을 마칠 수 있었다.
이렇게 Lv. 1, 2, 3은 큰 문제 없이 해결할 수 있었다.
사실 Lv. 4도 시작을 했는데..!! Lv. 4는 로그인 기능을 구현하고, 로그인 된 유저의 권한에 따라 CRUD를 실행할 수 있게 하라는 요구사항을 가지고 있다.
로그인과 로그아웃 API 구현까지는 성공을 했지만.. 각각의 단계에 권한의 조건을 걸어두는 데에서 시간을 많이 할애하고 있다.
이 부분은 내일 더 마무리를 지어보려고 한다.
내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기
오늘 생각보다 많이, 예상했던 것보다 쉽게 과제를 구현해나갈 수 있었다!
저녁 시간 이후로 집중력이 많이 떨어져 Lv.4까지 끝내지는 못했지만...
그래도 처음 스프링을 시작했을 때보다 훨씬 더 많이 똑똑해진 것 같다.
내일은 조금 더 집중해서 많이 해봐야겠다.