오늘은 코드카타 SQL 24번 문제와 알고리즘 21, 22번 문제를 풀고, Spring 공부를 시작했다!
오늘 진행한 SQL 문제는 substr을 사용해 데이터의 일부를 자르고, group by를 사용해 카테고리별 개수를 계산하는 문제였다.
substr([조회할 컬럼], [시작 위치], [글자 수])로 사용하여 데이터를 가공할 수 있다.
이 내용은 사전캠프에서 다뤘던 내용이라 문제 없이 해결할 수 있었는데,
아직은 문제를 풀 때마다 함수 사용법을 찾아보며 진행해야만 했다.
문제를 많이 풀어보며 빨리 익숙해질 수 있게 해야겠다.
오늘은 총 2개의 알고리즘 문제를 풀었다.
첫 번째 문제는 특정 숫자를 각 자릿수의 합으로 나눴을 때 나누어 떨어지는지, 아닌지를 검사하는 것이었다.
이제 숫자를 문자열로 바꾸고, 각 자릿수의 합을 구하는 것 쯤은 쉽게 해결할 수 있다.
그런데!! 이것도 stream을 활용하면 더 쉽게 풀 수 있더라.
chars()를 사용해 String 객체의 문자들의 아스키 코드값으로 바꾸고, map(ch -> ch - '0')으로 0을 빼줌으로써 숫자로 바꿔줄 수 있었다.
또 한가지 깨닫게 된 것이 있는데, 반환 자료형이 boolean일 때, 수식을 바로 return 해줄 수 있다는 것이다.
정말 알면 알수록 이상하고, 신기한 세상이다..
두 번째 문제는 두 정수를 입력받으면, 그 사이 값들의 합을 구하는 것이다.
사실 그냥 등차수열의 합을 구하라는 것이다.
그런데 그 생각을 못해서... a와 b가 같을 때, a가 b보다 클 때, b가 a보다 클때, 총 3가지로 나누어서 그때그때 stream을 활용해 풀었다.
stream의 rangeClosed를 배웠다고 신나서는 그렇게 풀었지만... 사실 훨씬 더 쉽게 풀 수도 있었다는 함정이다..
각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
오늘부터는 이제 스프링 부트를 배우기 시작한다!!
스프링이 개발자들에게 좀 더 편한 세상을 주었다는 말을 나는 좀 더 쉬운 세상을 주었다고 받아들였는데...
쉽다는게 아니라 그냥 편하다는 것이다..
자바도, 스프링도 처음 배우는 것인데, 자바는 이렇게까지 머리가 터질 것 같지는 않았다.
그런데 스프링은 정말 강의 하나를 들어도.. 잘 모르겠다...
이제 뭔가 아는게 좀 생겼다고 스프링이 어떻게 동작하는건지 이해해보려고 노력하지만, 이해는 되지 않고,
이해할 필요가 없다고 하는데, 이해가 되지 않으니 다음 진도로 넘어갈 수가 없고..
핳
일단, 오늘 강의를 들으며 스프링의 가장 핵심인 것 같은 부분은 MVC이다.
MVC란 애플리케이션의 코드를 데이터와 비즈니스 로직을 담당하는 Model, 사용자에게 보여지는 화면을 담당하는 View, 사용자의 요청을 받아 처리하는 Controller로 나누는 설계 방식이다.
그런데, 프론트엔드와 백엔드의 세계가 나뉘어지면서 백엔드 개발자들은 화면을 다루거나 데이터를 관리하는 등의 역할을 하지 않게 되었다.
사용자의 요청을 받아 처리하고, API 응답으로 데이터를 반환하는 일에만 집중할 수 있게 되었다는 것이다.
오늘 강의에서 어떻게 컨트롤러를 만들고, 받은 요청을 어떻게 매핑하는지에 대해서도 다루었다.
하지만, 아직 실습도 진행해보지 않았고, 머릿속에 개념들이 확실히 정리되지 않았기에...
다음주로 넘겨보려고 한다.
강의의 자세한 설명은 노션에 정리해두었다.
Notion 확인하기
Java는 사전캠프 때 대충 개념 정리를 해두었기도 하고, 강의가 너무 이해가 잘 되었고, 프로젝트도 너무 쉽게 쉽게 잘 풀렸다.
그런데 확실히 Spring은 개념부터가 쉽지 않은 느낌이다.
계속 무슨 말인지 이해가 안 되고, 왜 이렇게 작동하는건지 이해가 안 돼서 검색해가며 강의를 들었는데...
왜 다 이해하려고 하지 말고 일단 강의를 쭉 들어보라고 하셨는지 이해해버렸다.
지금은 안 쓰는 내용들을 자꾸 깊게 들어가려고 하고 있다...
일단은 강의를 쭉 들어봐야겠다.