오늘은 코드카타 SQL 41-43번 문제와 알고리즘 41번 문제를 풀고, 일정관리 앱 Dev 과제의 Lv. 5를 진행했다!
오늘 진행한 SQL 문제들은 where과 having을 활용해 조건에 맞는 데이터를 가공하는 것이었다.
where은 모든 필드에 조건을 두어 사용할 수 있고, having은 group by를 한 이후의 데이터에 대해 조건을 둘 수 있다.
예를 들어, group by와 sum을 사용해 카테고리별 총금액을 구하고, 계산된 총금액이 일정 수준 이상인 경우를 찾으려고 한다면 having을 사용하면 된다.
사전캠프 때까지만 해도 where과 having이 헷갈리기만 했는데, 이제는 상황에 맞게 잘 선택해서 사용할 수 있게 되었다!
원래 계획은 3개의 알고리즘 문제를 푸는 것이었지만...
첫번째 문제부터 거의 1시간이 넘도록 고민하는 바람에 한 문제만 풀고 끝냈다..
오늘 푼 문제는 띄어쓰기를 포함한 문장을 입력받으면, 각각의 단어에서 홀수는 대문자로, 짝수는 소문자로 바꾸어 반환하는 것이었다.
대소문자로 바꾸는 것 자체는 크게 어렵지 않았는데...
처음에는 문제를 잘못 해석해서 문장 전체의 홀수, 짝수로 계산해버렸고,,,
그 다음에는 여러개의 공백이 있을 수 있다는 사실을 놓쳐서 일부 케이스에서 테스트에 실패하였다.
이것저것 찾아보면서 여러개의 공백에 대한 처리는 성공했는데,
처음 입력받은 그대로 다시 출력해야하는 줄 알고 또 이상한 데에 시간을 쓰고 있었다...
결국은 어찌저찌 문제를 푸는 데에 성공했지만.. 문제를 풀기 전에 문제의 요구사항을 해석하는 시간을 가져야겠다..
각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘은 일정관리 앱 Dev 프로젝트의 Lv.5를 진행했다!
사실 오늘 다 끝내려고 했지만..! 끝내지 못했다ㅎ
어제까지는 모든 커스텀 예외마다 새로운 클래스로 만들어서 생성했었는데,
오늘 수준별 학습반 세션에서 커스텀 예외를 만드는 아주 편리한 방법을 배웠다.
Enum을 통해 예외의 메시지를 관리하는 것까지는 생각했었는데,
Enum을 통해 예외의 메시지 뿐만 아니라 Http 상태코드까지 관리하고, 이 Enum을 활용해 예외를 만들어버리면 되는 것이었다!!
그래서 ExceptionHandler에서는 공통 부모인 예외 클래스에 대해서만 처리해두고,
공통 부모 예외 클래스를 만들 때, 생성자에 Enum을 입력받아와 각각의 상태코드와 메시지를 처리하도록 했다.
이러니 새로운 커스텀 예외가 필요하면 클래스를 새로 만들 필요 없이 Enum에 상수 하나만 추가하면 되고,
예외를 던질 때도 공통 부모 클래스로 만들면서 매개변수로 Enum을 전달해주기만 하면 됐다.
이러니까 너무 너무 너무 편해졌다!!
어제도 오늘도 여전히 커스텀 예외에 잡혀있지만.. 내일은 정말 Validation을 활용해 예외 처리를 시작해야겠다..
오늘 튜터님을 찾아뵀다가 전에 배웠던 서블릿에 대해 이야기를 나눴는데... 분명히 어디서 들어본 적은 있는 것 같은데 기억이 정말 하나도 안나더라...
이래서 개념 정리를 똑바로 해둬야 하나보다...흑
서블릿과 스프링 MVC에 대해서는 이해를 했었는데, 서블릿과 3계층을 연관지어볼 생각은 못했었다.
그런데 그냥 서블릿과 스프링 MVC의 관계에서 Controller의 역할이 3계층의 시작이 되고, 거기에서 3계층이 나뉘게 되는 거였다!
스프링에서는 자체적으로 서블릿 컨테이너인 톰캣을 불러서 사용하기 때문에, 내가 특별히 서블릿 컨테이너를 설정하거나 지정하지 않아도 잘 작동이 되고 있었던 것이었다.
여기저기서 들은 내용들은 너무 많은데 이게 하나로 모이지를 못하고 있다..
개념을 확실히 정리해가면서 하나하나 쌓아가야겠다.
내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기
오늘은... 정말 너무 공부하기가 싫어서.. 많이 놀고 조금 공부했다..ㅎ
내일은 조금 더 집중해서 해야겠다..