
Spring기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크이다.Filter기반으로 동작한다. 시큐리티에서 주요 컴포넌트는 SecurityContextHolder,SecurityContext,Authentication 이 세가지 클래스이다.아이디/패스워드로
spring에서 제공하는 라이브러리를 사용하여 메일 전송을 해보려고 한다.SMTP : Simple Mail Transfer Protocol인터넷상에서 메일을 보낼 때 사용하는 프로토콜POP3 : Post Office Protocol3사용자의 메일을 내PC로 가져올때 사
jar:file:경로~ 로 실행하게 되어 Exception이 발생Local 환경에서는 파일 처리를 하는데 문제가 없는데, 개발 배포를 하면 위와 같은 에러가 발생한다. 현재 개발서버는 jar로 배포를 하고 있다. springboot를 통해서 jar 파일로 만들게 될
지난 게시글에서 spring security에 대해 공부하였는데, 이번에는 JWT를 적용해보겠다.json web token의 약자이다. 유저를 인증하고 식별하기 위한 token기반 인증이다.토큰은 서버에 저장되지 않고 클라이언트에 저장되기 때문에 서버 부담이 적어진다.
API를 개발하다보면 데이터의 필수값 등을 검증해야할 경우가 있다. 이 글에서는 객체의 검증을 쉽게 하는 법을 공부해보고자한다. 의존성 gradle [제약조건 어노테이션 종류] @NotNull : null 인지 검증 @NotEmpty : null이 아니고, ""아닌
관리자센터 작업중에 /admin으로 이어지는 경로의 경우 접근에 대한 권한 처리가 필요하였다.선언적 방식hasRole(String) : 역할에 따른 접근 허용hasAuthority(String) : 권한에 따른 접근 허용SecurityConfig에서 해당 권한 설정을
이전글에서 @RequestBody가 하나의 객체일때 유효성 검사하는 것을 공부하였다.하지만 API @RequestBody가 List일때 유효성 검사가 제대로 되지 않는 상황이 발생하였다.@Valid는 하나의 객체를 검증하는데, Collection인 경우 Spring은
지난 글에서는 검색 시 가장 많이 나오는 custom validator를 생성하여 List 객체의 validation 체크를 하였다. 하지만 현재 Rest API를 사용할때 JSON형식으로 주고받고 있기 때문에 이것을 형식을 유지하고 custom validator를 사
비즈니스 로직과 관련 없지만 여러 모듈에 걸쳐 공통적이고 반복적으로 처리가 필요한 내용을 횡단 관심사(Cross-Cutting Concern)이라고 합니다. 이를 DRY(Do not Repeat Yourself)대로 분리해서 한 곳으로 모으는 방법을 관점 지향 프로그래
지난 글에서 AOP 이론에 대해 공부해보았고 오늘은 코드를 보면서 사용법을 공부해보고자 한다.Target 선언@Inherited : 자식 클래스에서 부모클래스에 선언된 어노테이션을 상속받을 수 있다.Aspect 선언@Aspect 어노테이션을 붙이고 @Component를
@RestControllerview가 필요없는 API만 지원하는 서비스에서 사용.@RequestMapping 메서드가 기본적으로 @ResponseBody의미를 가정한다.data(json,xml) return이 주목적이다.@ControllerAPI와 view를 동시에 사

api 개발이 어느정도 완료되서 무거운 데이터를 다루는 api에 대해 부하테스트를 진행하여 tps 등을 확인해야 할 일이 있었다. 부하테스트를 할 수 있는 도구들은 많다. 그 중 간단하게 바로 사용할 수 있는 것이 JMeter였기에 사용했다.Apache Bench시나리
sonarqube에서 아래와 같은 버그를 수정하라고 권고했다."saveUserSignUpInfo's" @Transactional requirement is incompatible with the one for this method.기존 소스는 아래와 같은 방식으로 구현

멀티 모듈 프로젝트를 구성하고 있는데 domain 관련 모듈 구조를 잡던 중 겪었던 이슈를 정리해보고자한다.domain 모듈에는 DB관련 설정들이 있다. JPA 관련 설정과 Entity 관련 클래스가 해당 모듈에 설정되었다.gradle : 8.2.1springboot
새로운 프로젝트를 시작하며 spring을 2.6.x에서 3.1.x 로 업그레이드하였다. 그런데 버전이 올라가며 QueryDsl 설정 방법이 변경되었다. 변경 사항에 대해 정리해보고자 글을 작성한다.pluginsid "com.ewerk.gradle.plugins.quer
Rest API로 서비스 간 통신을 위해서 FeignClient,WebClient,RestTemplate 등을 활용하는데, 이번에는 자주 사용하는 것들을 비교해보고자한다.HTTP 요청을 만들기 위해 Spring Framework에서 제공하는 동기식 클라이언트 라이브러리
JAVA에서 이미지를 크롤링해야할 일이 있어 라이브러리를 찾아보니 OpenGraph라는 것이 있었다. 이를 사용해본 후기를 기록하고자 한다.OpenGraph Githttps://github.com/johndeverall/opengraph-javaOpenGrap
API 캐싱 적용 중 겪은 문제를 해결하는 과정을 정리해보았다.대시보드 조회 API에도 캐싱을 적용할 필요가 있어서 보던 중 해당 메소드에는 파라미터가 존재하지 않아 구분이 힘들다는 것을 알았다.해당 API는 랜덤값으로 바뀌는 데이터로 "프로젝트 이름:메소드이름:키워드
배치 개발중에 트랜젝셔널이 제대로 작동하지 않아 원인을 찾던 중 정말 기본이 되는 부분을 놓쳐서 이를 기록하고자 글을 작성한다. 문제 해결기를 정리하며 동작 원리와 주의 사항에 대해 다시 공부하며 같이 정리하였다.deleteStatsDatas() 메소드를 타면서 데이터