Web

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] @Email 과 이메일 정규식 표현

DTO에서 이메일에 대한 유효성 검증을 할 때, 매번 별 생각없이 @Email 을 사용했었다. 근데 교육에서 테스트 코드를 작성하다가 @Email 의 허점을 발견했다. 그래서 이에 대한 허점과 대안을 정리해보겠다. @Email 에 대해서 spring-boot-starter-validation dependency를 추가했다는 가정하에, UserDTO 의 email 필드에 이메일을 검증하는 @Email 을 넣는다. .. public class UserDTO { @Email(message = "올바른 이메일 형식이 아닙니다.") private String email; .. } 보통 이메일은 유저ID@도메인과 같고 예시로는 test12@test.com 으로 넣을 수 있다. 그렇다면 도메인에서 '.' 이 빠진 t..

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
'Web' 카테고리의 글 목록 (4 Page)