[TIL] 23일차 _ 일정관리 앱 #2

Seoyeon Lee·2025년 11월 5일

Today I Learned ...

오늘은 코드카타 SQL 27번 문제와 알고리즘 26, 27번 문제를 풀고, 일정관리 앱 프로젝트의 도전 과제를 진행했다!


🗒️ 코드카타 #16

오늘 진행한 SQL 문제는 어제에 이어 group by를 활용해 특정 달의 카테고리별 데이터 개수를 구하는 문제였다.
어제는 hour([컬럼])을 활용했다면, 오늘은 month([컬럼])을 활용하여 문제를 풀었다.
오름차순과 내림차순이 헷갈려 실수가 있었지만... 큰 문제 없이 해결할 수 있었다.

오늘은 총 2개의 알고리즘 문제를 풀었는데,
첫 번째 문제는 절댓값이 있는 배열과 부호가 있는 배열을 입력받아 부호를 숫자에 적용하여 합산하는 것이다.
for문을 활용해 각각의 배열을 순회하며 쉽게 해결할 수 있었다.
나는 if를 활용해 부호가 양일 때와 음일 때를 나누었는데, 이걸 삼항연산자를 사용해 처리하면 훨씬 더 쉽게 처리할 수 있었다.
항상 두번, 세번 생각을 하면서 문제를 풀어봐야겠다..

오늘 푼 두 번째 문제는 String으로 전화번호를 입력받고, 전화번호의 뒤 4자리를 제외하고 모두 '*'로 바꾸는 것이다.
String을 char 배열로 바꾸고, for문을 활용해 뒤에서 4번째 인덱스 전까지의 값들을 바꿔주면서 해결할 수 있었다.
그런데, 다른 사람들의 풀이를 보니 String의 replaceAll() 메서드를 활용하면 쉽게 해결할 수 있었다.
replaceAll(String regex, String replacement)가 replaceAll의 기본 구조인데, regex에는 자바의 정규표현식이 들어갈 수 있다.
정규표현식이란 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것인데...
사실 아직 어떻게 쓰는 것인지 잘 모르겠다.
정규표현식은 조금 더 공부를 해봐야겠다.

각각의 문제와 풀이는 깃허브를 통해 업로드해두었다.
GitHub 보러가기


🖥️ 일정관리 앱 프로젝트 #2

오늘은 일정관리 앱 프로젝트의 도전 과제를 진행했다.
도전과제의 Lv 5, 6은 댓글을 생성하고, 일정의 단건 조회 시 댓글을 함께 반환하는 것이고,
Lv 7은 유저의 입력에 대한 검증을 수행하는 것이다.

댓글을 생성하고, 관리하기 위해서는 댓글에 대한 3 Layer Architecture를 새로 생성해야 했다.
Schedule의 3 Layer Architecture를 구현했던 것과 비슷하게 생성하고, API를 구현하며 큰 어려움 없이 해결할 수 있었다.

다만 아쉬운 것은 단건 일정과 댓글을 조회할 때 두 테이블을 join해서 사용한다기 보다는
댓글 리포지토리에 일정 id로 데이터를 반환하는 메서드를 만들었고, 그걸 사용해 함께 조회하도록 진행했다.
내일은 join을 활용하는 방법을 찾아봐야겠다.

Lv 7에서 요구하는 바는 크게 2가지인데, 하나는 입력값의 글자수를 제한하고, 필수값을 처리하는 것이고, 두번째는 비밀번호가 일치하지 않을 때 예외 처리를 하는 것이다.
첫 번째 요구에 대해서는 엔티티의 필드에 Column(length = 100, nullable = false)를 붙이며 쉽게 해결할 수 있었다.
두 번째 요구인 예외 처리에서는 새로운 방법을 시도해보았는데,
비밀번호가 일치하지 않는 경우에 대한 예외를 내가 새롭게 생성하고, @ExceptionHandler로 예외를 처리하는 것이다.
예외가 발생했을 때 HTTP의 상태코드를 직접 정할 수 있고, 그때의 메시지도 함께 출력되도록 할 수 있다.
이 방법으로 존재하지 않는 일정의 ID를 조회할 때의 예외 처리도 할 수 있었다.

아직 해결하지 못한 트러블이 많다.
먼저, Request 파라미터에 Long을 집어넣었을 때의 문제도 해결하지 못했고,
Request 파라미터에 일치하지 않는 값을 넣었을 때의 예외 처리도 추가해보려고 한다.
그리고, join을 활용해 일정과 댓글 테이블을 다루는 방법도 생각해보려고 한다.
아직 내일 제출 마감까지 시간이 남아있으니 내일 조금 더 진행해봐야겠다.

내가 작성한 코드는 깃허브에 업로드해두었다.
GitHub 보러가기


🙃 오늘의 느낀점

일단 내가 이해한 방법으로 도전 과제를 진행해보긴 했는데...
도전과제의 난이도가 높다는데, 생각보다 너무 빠르게 해결되어서 내가 문제를 제대로 이해한게 맞는지 싶다..
내일 튜터님을 찾아가서 이렇게 하는게 맞는지 여쭤봐야겠다...

profile
백엔드 개발자 지망생

0개의 댓글