spring

Web

[Spring] Unit Tests with Mockito ( in Service Layer )

@SpringBootTest 말고 Mockito 를 사용하면 어떨까 ? Mockito 란? Mockito 는 테스트 목적으로 Mock 개체를 생성하도록 특별히 설계된 Mocking 프레임워크이다. Mocking은 단위 테스트 시 외부 종속성이 있는 경우 사용되는 프로세스로, 외부 종속성의 동작이나 상태가 아니라 테스트 중인 코드에 집중한다. 또한, 대상을 실제 개체가 아닌 Mock과 같은 모의(가짜) 개체로 대체한다. Mockito를 사용하면 Mock 개체의 기대치와 동작을 정의하여 테스트 중에 특정 시나리오를 시뮬레이션할 수 있게 된다. 이를 통해, Junit을 보완할 수 있다. 주요 장점은 아래와 같다. 1. No handwriting : 개발자들이 직접 Mock 코드를 구현할 필요가 없다. 2. A..

Web

[Spring] MapStruct 사용하기

사용자가 입력한 데이터가 담긴 DTO를 DB에 저장할 Entity로 바꾸기 위한, mapstruct 사용법에 대해 정리해보자. MapStruct 란 ? 프로젝트를 할 때, DTO 와 Entity 를 매핑해야하는 경우가 많은데 이러한 매핑 코드를 작성하는 것은 귀찮고 오류가 발생하기 쉽다. MapStruct 는 이를 자동화하여 작업을 단순화할 수 있게 한다. 자세한 내용은, 아래 공식 문서를 통해 확인할 수 있다. MapStruct – Java bean mappings, the easy way! Java bean mappings, the easy way! Get started Download mapstruct.org MapStruct 사용하기 1. dependency 추가 및 주의사항( Gradle ) d..

Web

[Spring] 라이브러리 버전 관리하기 ( Gradle )

Gradle로 프로젝트를 하면 build.gradle 에서 라이브러리를 관리할 수 있다. 그런데, 아래와 같이 사용하면 라이브러리가 늘어남에 따라 버전에 대한 가독성이 떨어진다. implementation과 annotationProcessor 로 scope를 구분하되 동일한 버전을 쓰는 경우도 마찬가지다. 그래서 가독성을 높이고 편리하게 사용할 수 있는 방법을 간단히 정리했다. Extra Properties 사용하기 Gradle에서 제공하는 Extra Properties를 이용하면, ext 를 통해 아래와 같이 버전을 한 곳에서 관리할 수 있다. 주의할 점은 작은 따옴표(' ')를 사용하면 ${변수명} 의 템플릿 문자열을 구성할 수 없기 때문에 큰 따옴표(" ")를 사용하도록 하자. ext { mapst..

Web

[Spring] Exception Handling 에 대해서

항시 프로젝트를 할 때 예외 처리가 중요하다고 생각하여 예외를 커스텀하여 ControllerAdvice를 통해 전역 처리를 했었다. 그런데 그 메커니즘에 대해서는 궁금해하지 않았던 것 같아, 이번에는 Spring이 예외를 처리하는 메커니즘에 대해서 순서도와 같이 정리를 해보려한다. Spring 의 예외 처리 프로세스 보이는 대로 해석을 해보자면, ① @ExceptionHandler 가 같은 Controller에 존재하는가 ? - Yes : 예외는 @ExceptionHandler 로 처리된다. - No : ② 로 이동 ② @ExceptionHandler 가 @ControllerAdvice 클래스에 존재하는가 ? - Yes : 예외는 @ExceptionHandler 로 처리된다. - No : ③ 로 이동 ③..

Web

[Spring] @Builder 와 Builder 패턴

spring 강의를 들으면서 배운 내용으로는, 실무에서 Set 메서드를 사용하면 무분별하게 값이 변경되기 때문에 지양해야하고 필드의 개수가 늘어남에 따라 선택적으로 필드에 값을 넣기위해 @Builder를 사용한다고 했다. 이 내용에 대해 좀 더 깊이있게 다뤄보려고 한다. @Builder 사용방법 ( With Lombok ) lombok dependency를 사용한다는 가정하에, 아래의 코드는 Builder 패턴을 구현한 대신에 롬복에서 제공하는 @Builder 를 적용한 예이다. 여기서는 email과 passwd에 대해서만 적용했는데 용도에 따라 매개변수를 추가해서 활용하면 된다. .. public class MemberDto { private String email; private String pass..

Web

[Spring] Gradle 과 Maven 에 대해서

Spring boot 프로젝트를 Gradle 과 Maven 모두 진행해봤는데 딱히 선택한 기준은 없었다. Gradle 이 더 빠르고 권장한다는 얘기만 들었지, 왜인지는 생각해보지 않아서 정리해보려한다. Maven과 Gradle 정의 Maven 이란 ? Java 개발에 사용되는 프로젝트 관리 빌드 도구로, Apache Software Foundation에서 호스팅하는 Maven은 Jakarta 프로젝트의 일부로 시작됨. Gradle 이란 ? Gradle은 그루비를 이용한 빌드 자동화 시스템으로, 거의 모든 유형의 소프트웨어를 빌드할 수 있을 만큼 유연한 오픈 소스 빌드 자동화 도구. 라이브러리 관리 그래서 Maven 장점이 뭐가 있을까 찾아보니 가장 중복되는 내용이 '편리한 의존성 라이브러리 관리' 였다...

Web

[Spring] HikariCP 와 Pool Size에 대해서

토이프로젝트나 팀프로젝트 등을 Spring boot로 하였는데 한 번도 그 로그에 대해서 궁금해했던 적은 없는 것 같다. 그래서 이번에 로그에 대해서 분석을 해보니, 위와 같이 ~.HikariDataSource 에서 HikariPool 을 Starting 하는 부분이 보였다. 해당 스프링 프로젝트는 2.x 버전이고 2.x 버전에서 default JDBC Connection Pool이 HikariCP이다. Connection 과 Connection Pool Connection Pool 은 말 그대로 Connection 객체를 관리하는 공간으로, WAS와 DB와의 통신을 위한 Connection 객체를 재사용할 수 있게 보관하는 곳이다. 쿼리를 보낼 때마다 Connection 을 계속 생성하게 되면 속도가 ..

Web

[Spring] Spring Security 로 CSRF 처리하기

CSRF(Cross Site Request Forgery) 란 '사이트 간 요청 위조' 의 줄임말로, 웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법이다. 해커들은 링크나 이미지 클릭을 유도해 사용자의 정보를 얻거나, 해커 본인들의 데이터로 다시 전송하는 등의 공격을 수행한다. Spring 에서 이를 어떻게 처리할까 ? 1. REST API 설계 시, CSRF 나는 REST API로 프로젝트를 하게되면, spring security에서 CSRF 를 자동으로 활성화하여 POST 요청 시 에러가 발생하기 때문에 줄곧 disable 처리를 해왔는데, 왜인지는 고민해보지 않았던..

limnj
'spring' 태그의 글 목록 (3 Page)