Spring 서비스 테스트 중 발견한 NPE 해결기
·
Spring/테스트 코드
게시판의 대댓글 관련 테스트 코드를 작성하다가 NullPointException이 발생했다. 1. 우선 테스트하고자는 코드를 살펴보자 서비스 코드 @Slf4j @RequiredArgsConstructor @Transactional(readOnly = true) @Service public class BoardSubCommentService { private final BoardSubCommentRepository boardSubCommentRepository; private final UserRepository userRepository; private final BoardCommentRepository boardCommentRepository; /** * 대댓글을 저장한다. */ @Transaction..
Spring: Maven과 Gradle의 차이
·
Spring/Spring 기초 지식
Maven와 Gradle의 차이점이 뭘까? 📌 서론 스프링을 사용하다 보면 라이브러리를 다운받기 위해 pom.xml이나 build.gradle에 사용하고자하는 라이브러리를 적어주곤 한다. 그런데 이런 것들은 maven, gradle에 의해서 다운받아지고 라이브러리 의존성이 관리되는데 이것들에 대해서 자세히 알아볼 기회는 많지 않다. 이번에는 maven, gradle에 대해서 알아보도록 하자 아래의 글을 통해 maven과 gradle에 대한 이해를 하고 오시는것을 추천합니다! Spring: Maven이 뭘까? 이번 포스트에서는 Maven에 대해서 알아보자 📌 서론 이전 회사에서 작업을 할 때 SpringFramework3.x.x 버전을 사용하고 Maven을 사용했던 기억이 있다. 이때 첫 프로젝트를 하면서..
[스프링, 스프링 부트] Spring test - service 테스트에서 만난 오류
·
Spring/테스트 코드
오늘 스프링 부트 개인 프로젝트를 진행하던 도중 서비스 레이어를 테스트하다 만난 오류다. 1. 오류 확인 1-1. 에러 로그 아래와 같이 log에 남았고 이게 뭔지 찾아보니 나는 예외를 던지도록 bad case를 테스트했는데 예외가 터지지 않은것이었다. OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended java.lang.AssertionError: Expecting code to raise a throwable. at com.jinan.profile.service.board.BoardServiceTest.validUserEx..
SpringBoot: 인터셉터(interceptor)의 동작원리
·
Spring/Spring 기초 지식
스프링 부트에서 사용되는 Interceptor의 동작원리를 알아보자 1. 스프링부트에서 인터셉터란? 스프링부트에서의 인터셉터 스프링부트에서 인터셉터는 웹 애플리케이션에서 요청과 응답을 처리하는 중간 단계에서 사용된다. 인터셉터는 특정 URI 패턴에 대한 요청을 가로채어, 컨트롤러가 처리하기 전후에 추가적인 작업을 할 수 있게 해 준다. 이를 통해, 로그인 체크, 권한 검증, 로깅 등과 같은 작업을 효율적으로 처리할 수 있다. 인터셉터의 동작 과정 클라이언트로부터 들어오는 요청(HttpRequest)을 가로챈다. 가로챈 요청에 대해 원하는 처리(예: 로그인 체크, 권한 체크 등)를 수행한다. 처리가 끝난 후, 요청을 원래의 목적지인 컨트롤러로 전달한다. 컨트롤러가 응답(HttpResponse)을 반환하면,..
Spring MVC의 Model, ModelAndView, ModelMap 비교
·
Spring/Spring 기초 지식
Model, ModelAndView, ModelMap의 차이점 그리고 @ModelAttribute에 대해서 알아보자 📌 서론 스프링 프레임워크에서는 컨트롤러(Controller)에서 뷰(View)로 데이터를 전달하는 여러 가지 방법이 있다. 이번 포스트에서는 이러한 방법 중에서 스프링 MVC에서 사용되는 Model, ModelMap, ModelAndView의 사용에 대해 좀 더 상세하게 설명하도록 한다. 1. 스프링 부트의 모듈 이해하기 Model Model은 스프링 MVC에서 뷰 렌더링에 사용되는 데이터를 컨트롤러로부터 뷰로 전달하는 역할을 하는 기본 인터페이스다. 컨트롤러에서 Model 객체에 데이터를 추가하면, 이 데이터는 뷰로 전달되어 활용될 수 있다. Model에 데이터를 추가하고 싶다면, 'a..
Spring에서의 인스턴스 생성 비교: new 키워드 대 DI
·
Spring/Spring 기초 지식
Spring과 자바의 2가지 인스턴스 생성방법의 차이를 알아보자 내가 완전 1개월 차 주니어 시절 스프링을 통해 개발을 하던 도중 컨트롤러 메서드를 작성할 일이 생겼는데 이때 메서드의 매게 변수로 객체를 받는 것과 메서드 내부에서 new를 통해 객체를 생성해서 사용하는 것에 대한 궁금증이 생겼다. 10년 이상된 프로젝트였는데 어떤 객체는 new를 통해 생성하였으며 어떤 객체는 Map이나 List를 통해 파라미터로 받아서 사용하고 있었다. 어떤 방식이 더 좋은 방법인지 간단하게 알아보도록 하자 1. Spring에서의 DI (Dependency Injection) 이해 1-1. Spring에서의 DI(Dependency Injection) 이해하기 Spring Framework에서 DI(Dependency ..
Spring JPA - 데이터 영속화란?
·
Spring/JPA
문득 JPA를 사용하다 영속화란 단어를 계속보는데 궁금증이 들었다. 데이터 영속화가 뭔지 알아보자 1. 데이터의 영속화가 무슨 의미인가? 데이터의 영속화는 데이터를 장기적으로 보존하는 과정을 의미한다. 이는 일시적인 메모리 저장이 아닌, 데이터베이스와 같은 영구 저장 매체에 데이터를 저장하는 것을 포함한다. 이로 인해 시스템이 종료되거나 장애가 발생해도 데이터는 안전하게 보존된다. 데이터의 영속화는 데이터가 손실되지 않도록 보장하고, 데이터를 효율적으로 검색하고 처리할 수 있도록 한다. 2. 데이터 영속화의 장점 데이터의 영속화에는 다음과 같은 장점이 있다. 데이터 손실 방지: 데이터를 안정적인 저장 매체에 보존함으로써, 시스템 장애나 다른 문제로 인한 데이터 손실을 방지한다. 효율적인 검색 및 처리: ..
Spring JPA - 엔티티를 DTO로 바꿔서 사용하는 이유
·
Spring/JPA
이번 포스트에서는 SpringBoot 프로젝트에서 왜 Entity를 DTO로 변환시켜서 사용하는지 알아보자 1. 엔티티와 DTO 엔티티(Entity): 엔티티는 데이터베이스의 테이블과 직접 매핑되는 객체로, 비즈니스 로직을 포함할 수 있다. 엔티티는 데이터베이스와의 상호작용을 위해 설계되며, 변경이 발생하면 데이터베이스 스키마에도 영향을 미칠 수 있다. DTO(Data Transfer Object): DTO는 계층간 데이터 교환을 위한 객체로, 로직을 포함하지 않고 순수한 데이터만을 가지고 있다. DTO는 특정 엔티티의 일부 데이터나 여러 엔티티의 조합된 데이터를 전달하는 데 사용될 수 있으며, 클라이언트와 서버 간의 통신에 최적화된 구조를 가진다. 2. 엔티티를 직접 사용하는 문제점 데이터 노출 문제 ..