전체 글(161)
-
리버스 프록시(Reverse Proxy) 설정
필자가 구성해야할 구조는 하나의 EC2에 2개의 WAS가 있는 구조이다.해당 구조로 설정한 이유는 2개의 WAS 중 1개가 매우 가벼워 굳이 1개의 EC2를 더 띄울 필요가 없었기 때문이다.따라서, 2개의 WAS의 라우팅이 필요하여 리버스 프록시를 이용하기로 하였다. 참고 : 리버스 프록시클라이언트의 요청을 대신 받아 내부 서버로 전달해주는 것을 리버스 프록시라고 한다.장점- 보안 : 모든 요청은 Reverse Proxy에 들어오며, 사용자는 내부 서버의 존재를 모른다. 오직 Reverse Proxy만이 내부 서버를 알고 있다.- 로드 밸런싱 : Proxy 서버가 로드 밸런싱 즉, 부하 여부에 따라 요청을 분배할 수 있다.- 캐싱 : 미리 렌더링된 버전의 페이지를 캐시하여 페이지 로드 시간을 단축할 수..
2024.01.22 -
DNS(Domain Name System)
DNS란?? DNS는 Domain Name System의 약자로, IP 주소와 도메인 주소를 연결해주는 시스템이다. 예를 들어, IP 주소가 44.342.03.244이고, 도메인 주소가 www.eatceed.com 이라고 하자. 해당 IP 주소와 도메인 주소가 관계가 있다는 것을 알려주는 시스템이 있어야한다. 사용자는 IP 주소가 무엇인지 일일이 외울 수 없다. 따라서, 도메인 주소를 검색하면 DNS에 해당 도메인 주소와 IP 주소가 매핑되어 있기 때문에 사용자가 IP 주소를 몰라도 도메인 주소를 통해 해당 IP에 접근할 수 있는 것이다. 예시를 그림으로 나타내면 아래와 같다. 먼저, 사용자가 www.exceed.com 으로 요청을 하면, DNS에서 도메인 주소와 매칭되는 IP 주소를 반환한다. 웹은 해..
2024.01.21 -
Spring Security에서 Unauthorized, Forbidden 처리
JwtAuthenticationFilter에서 토큰을 검증하는 과정에서 ExpiredJwtAuthenticationException, InvalidJwtAuthenticationException 등과 같이 AuthenticationException을 상속하여 만든 커스텀한 예외들이 터질 수 있다. 해당 예외들을 하나하나 전역적으로 예외 처리하려고 한다. 개념 먼저, Spring Security에는 AuthenticationException, AccessDeniedException 이 존재한다. 해당 예외들은 시큐리티 필터체인의 마지막에 속해있는 ExceptionTranslationFilter에서 처리할 수 있다. ExceptionTranslationFilter는 필터체인에 속해져 있으므로, 예외는 일반적..
2024.01.15 -
@ExceptionHanlder의 동작 원리(Feat.HandlerExceptionResolver)
이번 포스팅에서는 @ExceptionHandler의 동작 원리를 살펴보도록 하겠습니다. ExceptionHandler라는 이름에서 알 수 있듯이 예외를 핸들링하는 데 사용하는 애노테이션이다. 예외를 핸들링하려면 예외가 발생해야합니다.그렇다면, Spring에서는 예외가 발생하였을 때 어떤 흐름일까요? 예외 발생 FLOWHTTP 요청 : WAS -> Filter -> DispatcherServlet -> Interceptor -> Controller -> Service -> 등등...만약 파란색부분에서 에러가 발생하였을 경우, 아래와 같은 FLOW를 타게됩니다.Controller -> Interceptor -> DispatcherServlet -> Filter -> WAS 만약 에러 페이지를 요청한다면, 다..
2024.01.15 -
[Spring Security] @AuthenticationPrincipal을 커스텀 해보자(Feat : ArgumentResolver)
문제 발생 필자는 보통 개발할 때, 시큐리티보다는 다른 기능들을 먼저 개발한 후에 시큐리티를 기능을 입히는 것을 선호한다. 이번 프로젝트 역시 위와 같이 진행했다. 기존 코드는 @AuthenticationPrincipal을 이용해 Authentication을 구현한 UsernamePasswordAuthenticationToken의 Principal인 MemberDetails에서 memberId를 조회하고 있다. @GetMapping("/meal") public ApiResponse getMeal(@AuthenticationPrincipal MemberDetails memberDetails) { Long memberId = memberDetails.getMemberId(); getMaintainMealUs..
2024.01.11 -
JPA 대소문자 구별 에러 해결 with MariaDB
문제 발생 프로젝트를 배포한 후 개발한 api에 요청하였더니, 아래와 같은 문제를 마주하였다. Hibernate : select foodentity0_.food_pk as food_pk1_0_, foodentity0_.food_calorie as food_cal2_0_, foodentity0_.food_carbohydrate as food_car3_0_, foodentity0_.food_fat as food_fat4_0_, foodentity0_.food_main_category as food_mai5_0_, foodentity0_.food_name as food_nam6_0_, foodentity0_.food_protein as food_pro7_0_, foodentity0_.food_serving_s..
2024.01.01