본문 바로가기
  • 구름빵의 개발 블로그

Back-End/Spring Boot6

[JPA] Spring Boot JPA를 통한 Entity 조회 개요JPA를 사용해 데이터를 조회한다는 개념에 대해 정확히 알게 되어 기록하고자 한다. 지금까지 Spring Boot JPA를 사용함에도 불구하고 JPA의 기능을 완전히 사용하고 있지 않았다는 것을 알게 되었다.주로 QueryDSL을 같이 사용하다 보니 양방향 참조를 거의 사용하지 않았으며, Entity를 정의할 때도 단방향 참조만을 사용해 정의했었다. 예를 들어, User와 Order Entity가 있다고 할 때 Order는 주문자 정보를 받아야 하기 때문에 User의 정보를 갖고 있어야 한다. 그렇기에 Order에는 User의 ID 값이 들어가도록 명시했다. 하지만 User 테이블에는 Order의 정보를 담을 이유가 없다. 그렇기에 따로 명시하지 않고 Order에서 User로 향하는 단방향 참조만 구.. 2025. 10. 1.
[Spring Boot] Logging ( feat. Slf4j ) 개요개발하고 운영하는 과정에서 서비스 내부에서 일어나는 작업들을 가시적으로 보여줄 수 있는 가장 효율적으로 유일한 수단이 Logging이다. 디버깅 할 때도, 에러를 잡을 때도 모두 Log를 사용해서 잡기 때문에 이 Logging은 굉장히 중요하다. Logging에 대해 알아보고 Spring Boot에서 Logging을 구현하고 사용하는 방법에 대해 알아보도록 한다. Logging 기능의 구성많은 Logging 프레임워크들은 Logger-Appender-Layout로 이루어진 3단 구성 구조를 갖고 있다.Logger는 로그를 수집하고자 하는 대상으로 로그를 생성하는 주체를 의미한다. Appender는 로그 정보를 출력할 대상으로 로그 정보를 출력하는 장소를 말한다. 파일이 될 수도 있고 콘솔이 될 수도 .. 2025. 9. 29.
[Spring Boot] Exception Handler를 통한 예외 일괄 관리 개요서비스를 개발할 때 빠뜨리기 쉬우면서도 사용자 경험을 위해 가장 중요한 것 중 하나가 예외 처리이다. Spring Boot는 데이터베이스와도 통신하고 다양한 비즈니스 로직이 구현되며 Http 통신도 이루어지기 때문에 정말 많은 예외가 나올 가능성이 존재한다. 이런 예외들을 하나하나 각각 다른 곳에서 관리하면 한 번에 관리하기도 어렵고 빠뜨리기도 쉽다. 따라서 이런 예외들을 한 번에 관리할 수 있는 방법에 대해 기록해보고자 한다. @RestControllerSpring MVC를 사용하면 반드시 컨트롤러가 존재한다. 이 때, @Controller 어노테이션과 @RestController라는 어노테이션이 따로 존재한다. 둘 다 같은 컨트롤러인데 어떤 차이가 있나 알아보니 @RestController는 @R.. 2025. 9. 24.
[Spring Boot][Trouble Shooting] 서비스 자동 재시작 기능 개요다른 팀이 하던 프로젝트를 이어 받아서 Restful API를 개발할 일이 있었다. 테스트를 위해 application.yml의 local 프로필을 사용하면 된다고 하길래 해당 프로필을 사용해서 로컬 테스트를 진행했다. Swagger를 통해 API를 실행해보고 문제가 발생하면 즉석에서 코드를 수정했었다. 근데 계속 중간 중간 Spring Boot 서비스가 재시작 되는 문제가 발생했다.이유도 모르게 계속 서비스가 재시작 되어서 Swagger에서 만든 API들을 한 번에 테스트하고 일괄적으로 수정하려고 했는데 테스트를 진행하는데 시간이 너무 소모되었다. 원인알고 보니 application.yml의 local 프로필에 코드가 변경되면 서비스를 재시작하는 옵션이 설정되어 있었다.내가 만든 프로필이 아니다보.. 2025. 9. 5.
[Spring Boot] Spring Boot의 스케쥴링 기능 배경서비스를 만들면서 서버에서 일정 시간마다 특정 외부 API를 통해 정보를 가져와야 하는 경우가 있었습니다.웹 서비스가 아닌 경우에는 Crontab과 같은 기능을 사용했었는데 Spring Boot에는 자체적으로 스케쥴링을 할 수 있는 기능이 있다는 것을 알게 되었습니다.따라서 이 스케쥴링 기능을 사용하는 방법과 주의할 점에 대해 알아보고자 합니다. @Scheduled() 어노테이션스케쥴링 기능을 사용하기 위한 어노테이션으로 @Scheduled라는 어노테이션을 찾을 수 있었습니다.지정된 시간마다 해당 메서드를 작동시키도록 되어 있었습니다.사용 예시는 아래오 같습니다.@Scheduled(fixedRate = 300000)@Transactionalpublic void updateTime( long id ) .. 2025. 6. 30.
[Spring Boot] @ModelAttribute vs. @RequestBody 차이점 배경Controller에서 http 메서드를 통해 데이터를 받을 때 위와 같은 어노테이션을 사용해서 전달받는다.@GetMapping("/user")public ApiResponse> getUserName( @RequestBody GetUserNameRequest request) { List result = userFacade.getUserNames( request ); return ApiResult.of( result );}----------------------------------------------------------------------@PostMapping("/user")public ApiResponse> createUser( @ModelAttribute CreateUserR.. 2025. 6. 30.