일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 운영체제
- 문자열 불변성
- rainbow table
- SystemCall
- functional interface
- django-crontab
- FunctionalInterface
- 롬복주의점
- custom annotation
- sql-mappler
- python-socketio
- 도커
- ReflectUtils
- 프로세스
- strict stubbing
- 문자열 리터럴
- 쓰레드 라이브러리
- AOP
- Thread Library
- Process
- OS
- task_struct
- hiberbate
- spring-data-jpa
- @Header
- none이미지
- Thread Multiplexing
- 함수형 인터페이스
- java.util.function
- Spring
- Today
- Total
목록Spring (16)
JH's Develog
ReflectUtils란? ReflectUtils는 Spring에서 제공하는 유틸리티 클래스이며, Java Bean 형식의 클래스에 대해서 자바의 Reflection API를 쉽게 사용할 수 있게 도와줍니다. ReflectUtils를 사용하면 자바의 Reflection API를 직접 사용하지 않고도 Java Bean 형식 클래스 멤버의 이름, 값에 손쉽게 접근할 수 있습니다. getConstructor(Class type, Class[] parameterTypes) 메서드를 통해 Constructor 객체를 얻어와서 생성자에 접근하거나, getBeanProperties(), getBeanGetters(), getBeanSetters() 중 하나를 사용해서 해당 객체의 모든 프로퍼티에 대한 Property..
Postman에서 위와 같은 형식으로 multipart/form-data 요청을 보내는 것과 같은 형식으로 Controller 테스트를 작성해보겠습니다. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; ... @AutoConfigureMockMvc @SpringBootTest public class NoteControllerTest { @Autowired private MockMvc mvc; @Test void test() throw..
Spring Security에서 JWT를 사용한 인증에서 발생할 수 있는 ExpiredJwtException, JwtException, IllegalArgumentException과 같이 Filter에서 발생하는 Exception을 핸들링하는 방식에 대해 알아보겠습니다. @ControllerAdvice로는 안되는 이유 일반적으로 Spring에서는 아래와 같이 @ControllerAdvice 어노테이션을 붙인 클래스 내부에 @ExceptionHandler을 붙인 핸들링 메서드를 여러개 추가하는 방식으로 전역범위의 Exception을 핸들링 할 수 있습니다. @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception...
객체를 저장하는 Service의 유닛 테스트 중 발생한 Strict Stubbing 문제와 해결법에 대한 포스팅입니다. 문제가 발생한 상황 ... @InjectMocks private NoteBookService sut; @Mock private NoteBookRepository noteBookRepository; @Mock private NoteRepository noteRepository; ... @Test void givenNormalNoteBook_whenCreateNoteBook_thenReturnOK(){ //Given NoteBookDto noteBookDto = createNormalNoteBookDto("notebook 1"); User user = createUser("user1"); ..
Spring Security로 JWT 토큰을 사용하면 Authentication 정보를 메서드의 파라미터로 받아올 수 있습니다. 다만 매번 Authentication에서 Principal 정보를 꺼내쓰는 코드를 작성하면 코드의 중복이 심하므로 HandlerMethodArgument를 이용해서 Principal을 바로 메서드의 파라미터로 받아오는 방법을 알아보겠습니다. 0. HandlerMethodArgumentResolver의 구성요소 HandlerArgumentResolver 인터페이스는 두 개의 메서드를 구현해줘야합니다. boolean supportsParameter(MethodParameter parameter); Object resolveArgument(MethodParameter paramete..
Entity를 작성할 때 id나 생성시간, 수정시간과 같은 속성정보는 모든 Entity에 동일하게 추가되는 정보이기 때문에 코드의 중복이 발생합니다. Entity마다 중복되는 컬럼들을 따로 모아서 상속받을 수 있는 방법을 알아보겠습니다. 먼저 중복되는 컬럼들을 가지고 있는 BaseEntity를 생성합니다. @Getter @MappedSuperclass @NoArgsConstructor @EntityListeners(AuditingEntityListener.class) public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @CreatedDate private Local..
Spring Security의 PasswordEncoder를 공부하며 든 궁금증을 정리합니다. 암호화 해시함수는 단방향 알고리즘이기 때문에 해시값으로 저장된 비밀번호를 역으로 계산해서 원래의 암호를 알아내는 것은 불가능하며, 로그인을 할때는 입력받은 값을 같은 해시함수에 넣어 결과값을 얻고 이 값과 같은 값이 데이터베이스에 있는지 확인함으로써 로그인을 처리합니다. 하지만 이런 방식 또한 취약점이 있는데 바로 입력 가능한 모든 문자열 조합을 해시함수에 넣어서 결과를 저장한 테이블인 Rainbow Table을 사용하여, 탈취한 암호값을 일일이 대조하여 비밀번호를 알아내는 방식의 브루트 포스 공격이 가능하다는 점 입니다. 그래서 현대의 암호화 해시함수에서는 입력값에 랜덤으로 생성한 값(이를 salt라고 합니다..
Spring Data JPA에서 기본적으로 제공해주는 쿼리 메서드 기능으로는 복잡한 로직의 쿼리를 구현하는 데에 한계가 있고, @Query 어노테이션을 이용하여 JPQL문을 직접 문자열로 입력하는 방식도 type-safety를 지원하지 않고 컴파일 타임에 구문오류를 발견할 수 없는 것과 같은 문제점이 있습니다. Querydsl은 이러한 점을 해결해주는 JPQL 작성 라이브러리이며, Spring Data JPA와 조합하여 복잡한 쿼리를 자바 코드를 통해 type-safe하게 작성 가능하고 Spring Data JPA의 Repository 인터페이스와 매끄럽게 연동되는 장점이 있습니다. 다만, 초기 세팅 과정이 번거로운 편인데 이번 포스팅에서 springboot와 mysql에 querydsl을 사용하기 위한..