목록전체 글 (75)
Arthur's Blog
🎊 시작하기 전에.. EntryDSM에서 Entry 6.0을 작업하면서, 중간에 생겼던 오류 중 pdf 미리보기에서 다른 사용자의 사진이 보여지는 현상이 있었는데 QA를 진행하면서 원인을 찾았다. 해당 코드를 짧게 보자면 @Component class PdfConverter { private final Map values = HashMap(); ... } 와 같은 구조였는데 Bean은 상태를 가지면 안된다. 위의 코드에서는 Bean이 싱글톤이므로 요청이 들어와도 이전의 인스턴스를 그대로 사용하는데 이 상황에서 values까지 그대로 있었으므로 덮어쓰기 되지 않는 부분은 이전 사람의 값이 남아있는 것이었다. 따라서 Spring Bean은 State less해야한다는 것을 깨닫고 이 글을 작성하게되었다. 📌..
🐛 문제 상황 List 안의 value를 검증해야하는 상황인데 검증을 못함. 🏴☠️ 원인 List 변수 위에 validation 어노테이션을 붙이면 그 List에 대한 것을 검증하기 때문이다. ♻ 해결법 Java 8부터 지원된 어노테이션을 타입에 사용할 수 있는점을 활용하면 된다. 예를 들어 List 자료형이라면 List와 같이 사용하면 된다.
🎊 시작하기 전에.. 초보 개발자인 저의 의견에 대해 정리한 글입니다. interface-구현체구조를 흔히 무지성, 즉 이유없이 사용하거나 관례라서 사용하는 사례을 많이 봐왔습니다. 저는 그것을 굳이 interface를 사용해야 하는가? 라는 생각이 들어 글을 적었습니다. ✨ 다형성 Service의 구현체를 interface로 추상화해서 사용하는 이유중 가장 큰 이유가 다형성일 것입니다. 다형성이란 간단하게 하나의 Type에 여러 객체를 대입할 수 있는 성질입니다. 하지만 일반적인 스프링에서 서비스의 다형성을 굳이 구현해야 하는 이유를 저는 찾지 못했습니다. 예를 들어, UserService를 구현할 때 기능으로 유저 정보 가져오기, 닉네임 변경 등이 있다고 가정합시다. 이 UserService의 구현체..
🐛 문제 상황 Jwt Filter가 인증 과정에서 두 번 호출이 된다. 🏴☠️ 원인 Filter가 두 번 등록되어서 두 번 호출이 된다. 두 번 등록된 이유는 builder.addFilterBefore(filter, UsernamePasswordAuthenticationFilter.class);와 같이 필터를 등록했지만, 필터 상단의 @Component 어노테이션으로 인해 Filter Chain의 맨 마지막에 한번 더 등록되므로. ♻ 해결법 @Component 어노테이션을 제거한다.
❓ 필요한 이유 Spring Boot 어플리케이션을 제작하다보면 환경변수 중 기본값이 필요한 경우가 있다. 😉 설정하는 법 Properties leeseojune.password=${LSJ_PASSWORD:1234} Yml leeseojune: password: ${LSJ_PASSWORD:1234} 위와 같이 환경변수를 가져오는 ${LSJ_PASSWORD}에서 :(콜론)을 붙여준 뒤, 그 뒷부분에 값을 추가하면 환경변수에 값이 없을 시 들어간다.
😵 차이점 Random은 seed값으로 생성될 때의 시간을 이용하지만, SecureRandom은 예측할 수 없는 seed를 사용한다.
🐛 문제 상황 static 변수에 @Value를 사용하였는데 null값이 들어가있음. 🏴☠️ 원인 Spring에서 static 변수에 값 주입을 허용하지 않기 때문이다. ♻ 해결법 해당 static field의 Setter를 만들어서 해당 메소드 위에 @Value(“${~~}”)를 붙인다.