[TIL] 21일차 _ 입문 Spring #2

Seoyeon Lee·2025년 11월 3일

Today I Learned ...

오늘은 코드카타 SQL 25번 문제와 알고리즘 23번 문제를 풀고, 입문 Spring 강의를 완강했다!


🗒️ 코드카타 #14

오늘 진행한 SQL 문제는 group by를 활용해 카테고리별 데이터의 숫자를 구하는 문제였다.
이때 특정 카테고리를 먼저 계산하라는 조건이 있었다.
사실 알파벳이 더 먼저인 것을 알았기 때문에 그냥 order by를 사용해도 됐지만,
특정 값 우선 정렬을 도와주는 order by field(컬럼1, 우선 정렬할 값, 두번째 정렬할 값, ...)를 사용해보았다.
order by case when을 사용할 수도 있다고 하지만, 왜인지 오류가 나서 나중에 다시 시도해보려고 한다.

오늘 진행한 알고리즘 문제는 입력받은 숫자가 1이 될 때까지 특정 계산을 반복하고, 반복된 횟수를 반환하는 문제였다.
int 자료형과 long 자료형 문제로 일부 케이스에서 문제가 있었지만,, 입력받은 숫자의 자료형을 long으로 바꿔주면서 잘 해결이 되었다.
처음에는 컬렉션을 사용해서 값들을 컬렉션에 저장해주고, 컬렉션의 크기를 구하는 방식으로 진행했었는데,
while문의 반복 횟수를 쉽게 구하는 방법이 있었다.
정수 i를 미리 세팅해두고, while문 안에 i++을 활용해 while문이 한번 돌때마다 i의 값을 1씩 증가해주면 되는 것이었다.
나는 if와 else를 활용해 문제를 풀었는데, 다른 사람들의 풀이를 보니 삼항연산자를 활용하면 더 깔끔하게 해결할 수 있었다.
문제를 풀 때 계속 더 깔끔하게 해결할 수 있는 방법에 대해 고민해봐야겠다.

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


📚 입문 Spring #2

지난 강의까지는 계속해서 이론을 다뤘다면, 오늘부터는 데이터베이스를 연동해서 실습을 많이 진행했다!

지난 강의까지 왜 그렇게 이해가 안되나 했더니...
Spring MVC라는 개념이 프론트엔드와 백엔드가 나뉘면서 모호해졌기 때문이다.
오늘 수준별 학습반의 스탠다드반 세션이 진행되어서 다시 한번 개념을 정리할 수 있었다.

사실 Spring MVC는 클라이언트와 서버 사이의 개념이고,
개발을 하면서 더 중요한 것은 3 Layer Architecture였다.
한 계층에 하나의 책임만 주기 위해 3개의 계층으로 시스템을 분리하는데,
사용자와 애플리케이션이 상호작용하는 Controller Layer, 비즈니스 로직을 처리하는 Service Layer, 데이터베이스와 상호작용하는 Repository Layer로 나눌 수 있다.
코드를 작성할 때는 각각의 계층이 자신이 담당하는 일만 다룰 수 있도록 작성해주어야 한다.
Controller Layer는 클래스에 @RestController 어노테이션을, Service Layer는 클래스에 @Service 어노테이션을, Repository Layer는 인터페이스에 JpaRepository<[엔티티 클래스 이름], [PK의 자료형]>을 상속해주며 설정할 수 있다.

이때 상위 계층에서 하위 계층으로만 호출을 할 수 있고, 계층을 건너뛰며 통신해서는 안 된다.
즉, Controller Layer에서는 Service Layer만, Service Layer에서는 Repository Layer만 호출하고, 다뤄야한다는 것이다.

Controller Layer는 사용자, 즉 HTTP의 Request를 처리하고, Response를 반환해주어야 하는데,
HTTP와 자바는 사용하는 언어가 다르다.
이를 보완하기 위해 DTO(Data Transfer Object), 데이터를 전달하기 위한 순수 데이터 객체를 사용한다.
내가 DTO 클래스를 만들어두기만 하면 상황에 따라 스프링이 알아서 HTTP와 매핑해주기에 편하게 사용할 수 있다.

강의의 자세한 설명과 실습 내용은 노션에 정리해두었다.
Notion 확인하기


🙃 오늘의 느낀점

드디어 입문 Spring 강의를 끝냈다.
사실 2강까지의 내용은 전혀 이해가 되지 않았다.
그래서 오늘 과제 발제를 진행할 때도 이게 도대체 어떻게 만들라는 얘기인가 생각하며 들었었는데,
3강을 해보니까 정말 왜 Spring이 훨씬 편하다고 하는지도 알겠고,
이제야 다시 재미를 붙였다.

사실 여전히 어떻게 이렇게 동작할 수 있는 것인지 이해가 잘 되지는 않는다.
하지만 뭐 뒤에서 동작하는건 스프링이 알아서 다 해준다니까 생각하지 않기로 했다.

여태까지는 과제를 하면서 콘솔에서만 진행해서 간지가 안 났었는데,,,
이제는 진짜 뭔가를 개발하는듯한 느낌이 들어서 너무 너무 재밌다!!!

이제 내일부터 과제를 시작하는데, 사실 길지 않은 시간이라 집중해서 빡세게 해야한다.
과제를 하면서는 또 어떤 일이 생길지 모르겠지만.. 열심히 해봐야겠다.

profile
백엔드 개발자 지망생

0개의 댓글