패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 17일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 4. 17. 23:01

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 17일차!
오늘은 커뮤니티 피드 서비스의 유저 관련 api를 구현하는 작업을 진행하였다.

 

response와 error 템플릿을 생성해서 응답값이 통일될 수 있도록 하였다.

enum 타입으로 ErrorCode 클래스를 만들어 각 상황에 따른 에러 코드를 정의하고, 제네릭을 사용하여 여러 타입의 데이터가 Response 템플릿의 형식에 맞게 포함되어 반환되게 했다.

 

그리고, 프로젝트의 exception을 핸들링하기 위해 예외 처리 핸들러 클래스도 구현하였다.

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    public Response<Void> handleIllegalArgumentException(IllegalArgumentException exception) {
        return Response.error(ErrorCode.INVALID_INPUT_VALUE);
    }
}

 

@RestControllerAdvice

: @RestController 어노테이션이 붙은 컨트롤러에서 발생하는 Exception을 전역적으로 처리하는 어노테이션이다.

- @ControllerAdvice + @ResponseBody로, JSON 응답을 반환한다.

 

 

여러 작업이 하나의 단위로 진행되는 경우, 일부 작업만 성공한 상태로 값이 저장되지 않아야 한다.

All or Nothing, 모두 성공하거나 모두 실패하거나여야 한다.

이렇게 작업이 원자적으로 진행되게끔 하기 위해 @Transactional 어노테이션을 사용한다.

 

 

엔티티 클래스에 @DynamicUpdate 어노테이션을 적용시키면 변경된 값들에 한해서만 update를 진행한다.

예를 들어 유저가 다른 유저를 팔로우하는 경우, user 테이블에서 변경되어야 하는 컬럼은 follwer_count와 upd_dt 두 개지만, JPA는 update 시 변경되지 않은 컬럼도 포함하여 모든 컬럼을 set 한다.

# @DynamicUpdate 적용 X
# community_user 테이블의 모든 컬럼이 set이 된다.

update
        community_user 
    set
        follower_count=?,
        following_count=?,
        name=?,
        profile_image=?,
        upd_dt=? 
    where
        id=?
# @DynamicUpdate 적용 O
# 변경되는 컬럼만 set이 된다.

update
        community_user 
    set
        follower_count=?,
        upd_dt=? 
    where
        id=?

 

 

강의 중, 강사님께서 Repository를 Controller에 바로 주입하면 어떨까요? 라는 질문을 하셨다.

Repository와 Controller는 둘 다 저수준 컴포넌트이기에 객체지향적으로는 문제가 없을 것 같다는 생각과 동시에, 그동안 프로젝트를 할 때마다 어느 기능이든 Controller - Service - Repository 레이어를 거치도록 구현했던 경험이 떠올랐다. 뭔가 보편적인 레이어를 벗어나면 안될 것 같은 느낌..?ㅋㅋㅋ

강사님께서 비즈니스 로직에 따라 데이터 변경이나 값이 추가되어야 한다면 서비스를 거쳐야 하지만, 단순 조회는 서비스 레이어를 거치지 않아도 괜찮다고 설명하셨다. (단, 이런 Repository는 조회 기능만 있는 쿼리 레포지토리여야 한다.)

 

개발을 하다 보면 나도 모르게 자꾸 익숙하고 일반적인 방법을 찾게 되는 것 같다.

문제가 되지 않는다는 것을 아는 상태임에도 실제 프로젝트에 적용시키는 것에 대해 약간의 두려움이 없지 않아 있던 것 같기도 하다.

이번 강의를 보면서 새로운 방법을 적용시키는 걸 즐기면서 개발할 수 있는 사람이 되기 위해 노력해야겠다는 다짐을 하게 되었다.