Spring - Jasypt를 사용해서 application.yml 프로퍼티 암호화하기
·
Spring
프로젝트를 진행하다 보면 각종 민감한 Password와 같은 프로퍼티를 외부로부터 안전하게 보관해야 할 일이 많다. 실수로라도 Github에 업로드한다면 끔찍한 일이 벌어질 것이다... 이럴 때 사용할 수 있는 Jasypt 라이브러리 사용법에 대해 araboza Jasypt는 자바 애플리케이션의 설정파일(application.yml, application.properties 등)을 암호화할 수 있도록 지원하는 라이브러리다. 암호화된 설정 파일은 애플리케이션의 버전관리 시스템에서 안전하게 관리할 수 다. 아래는 Jasypt를 사용하여 스프링 부트 애플리케이션에서 application.yml 파일의 값을 암호화하는 방법이다. 1. Jasypt 의존성 추가 build.gradle 파일에 아래와 같이 의존성을 ..
Spring - No Offset 페이지네이션으로 페이징 성능을 개선해보자!
·
Spring
웹 서비스에서 페이지네이션은 흔하게 사용되는 기능 중 하나이다. 현재 진행중인 66Challenge에서도 페이지네이션이 기능이 필요했고 JPA에서 기본적으로 제공하는 Offset 페이지네이션을 적용했다. Offset 페이지네이션은 Pageable 객체를 통해 페이지네이션을 구현하는 방식이다. // Offset Pagination SELECT * FROM 테이블 WHERE 조건문 ORDER BY id DESC LIMIT 컨텐츠개수 OFFSET 페이지번호 * 컨텐츠개수 하지만 Offset 페이지네이션에는 두 가지 문제점이 있었다.😕 이번에는 이 문제점을 어떻게 해결하여 페이징 성능을 개선했는지에 다뤄 보려고한다. Offset 페이지네이션의 문제점 1. 뒤로 갈수록 심해지는 성능 저하 Offset 페이지네이션..
JPA - AnnotationException: mappedBy reference an unknown target entity property 에러 원인과 해결법
·
나의 에러 일지
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: challenge.server.habit.entity.Habit.user in challenge.server.user.entity.User.habits 도메인 별 Entity를 구현한 후 첫 실행에서 만난 에러. 원인도 단순하고 해결법도 단순하다. 에러 내용을 해석해보자면 user에서 habit으로 mappedBy reference한 대상이 무엇인지 알 수 없다는 의미이다. 내 코드에서 어떤 내용이 문제였는지 알아보자 원인 package challenge.server.user.entity; import challenge.serv..
Spring Security - There is no PasswordEncoder mapped for the id "null" 원인과 해결법
·
나의 에러 일지
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null" at org.springframework.security.crypto.password.DelegatingPasswordEncoder$UnmappedIdPasswordEncoder.matches(DelegatingPasswordEncoder.java:289) ~[spring-security-crypto-5.7.5.jar:5.7.5] at org.springframework.security.crypto.password.DelegatingPasswordEncoder.matches(DelegatingPasswordEncoder.java:237) ~[spr..
Spring Data JPA - Auditing으로 생성일, 수정일 자동화하는 법
·
JPA
JPA Auditing 생성일, 수정일은 거의 모든 엔티티에 사용되고 있다. 이런 공통적인 기능을 엔티티마다 생성해서 관리하는 것은 굉장히 비효율적이다. JPA Auditing을 사용해 하나의 엔티티로 효율적으로 사용해보자. JPA Auditing은 데이터의 생성 또는 수정이 발생하면 자동으로 값을 넣어주는 아주아주 고마운 친구다. @EnableJpaAuditing 추가 @EnableJpaAuditing @SpringBootApplication public class TodoApplication { public static void main(String[] args) { SpringApplication.run(TodoApplication.class, args); } } Spring Boot을 실행시키는 ..
Spring - Invalid character found in method name. HTTP method names must be tokens 에러
·
나의 에러 일지
java.lang.IllegalArgumentException: Invalid character found in method name [0x160x030x010x020x000x010x000x010xfc0x030x03@0x060x8d0x9bS0x170x8a0xb0"0x1c0x09m0xe6:0xcc~Y0xcd0x0a0xa30x180xf0j0xd0[0xd5Q{O0xc8PA ]. HTTP method names must be tokens 이번에 간단한 Todo 앱을 구현해보고 todobackend라는 사이트(http://www.todobackend.com/)에서 테스트를 해보려다가 만난 에러를 소개한다. 원인 https를 받아들이지 준비가 안된 서버에 https 요청이 들어왔을 경우 발생한다. 내가 구현해 놓은..
Spring - 의존관계 주입(DI) 4가지 방법
·
Spring
의존성 주입은 크게 4가지 방법이 있다. 4가지 주입 방법과 어떤 방법을 사용하는 것이 바람직한지 알아보자 생성자 주입 setter 주입 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입하는 방법이다. 생성자 주입은 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 변하지 않으며(불변), 반드시 필요한(필수) 의존관계에 사용한다. @Component public class ServiceImpl implements Service { private final MemberRepository memberRepository; // 생성자 주입 @Autowired // 생성자가 1개만 있으면 생략 가능(스프링에서만 가능) pulic ServiceImpl(MemberRepository m..
Spring - 옵션 처리 3가지 방법
·
Spring
의존관계 주입은 스프링 빈에 등록이 되어 있을 때 정상적으로 동작한다. 하지만 개발자의 실수로 인해서 또는 특수한 상황에 주입할 스프링 빈이 없어도 동작해야 하는 경우가 있다. @Autowired는 기본값이 required = true 로 설정되어있기 때문에 주입 대상이 없으면 오류가 발생한다. 이 때 자동 주입 대상을 옵션으로 처리하여 오류를 막을 수 있다. 옵션 처리하는 3가지 방법에 대해 알아보자 @Autowired(required = false) org.springframework.lang.@Nullable Optional @Autowired(required = false) 자동 주입할 대상이 없으므로 호출 자체가 되지 않는다. @Autowired(required = false) public vo..
Spring - PortInUseException: Port 8080 is already in use 원인과 해결방법
·
나의 에러 일지
org.springframework.boot.web.server.PortInUseException: Port 8080 is already in use 오늘 소개할 친구는 PortInUseException: Port 8080 is already in use 요 녀석이다. SpringMVC를 연습하던 중 로컬을 확인하기 위해 실행하다가 만난 에러다. 사실 이전에도 한 번 만난적 있는데 생각보다 자주 만나게 되서 블로그에 남기기로 했다. 원인과 해결방법 모두 생각보다 간단하다. 원인 원인은 2가지 정도로 볼 수 있다. 이미 사용중인 포트를 다른 애플리케이션에서 사용하려고 할 때 IDE에서는 프로세스가 종료되었지만 실제로 프로세스가 종료되지 않고 계속해서 실행중일 때 보통 두 번째 이유때문에 해당 에러가 발생한..
Cold Bean
'Spring' 태그의 글 목록