Spring Cloud Gateway 연동
·
Spring
모듈이 늘고 인증에 대한 중앙화와 라우팅에 대한 필요성을 느껴 Cloud Gateway를 도입해보도록 한다.현재 생태계는 Spring이기 때문에 Spring Cloud Gateway를 도입하였다.각 모듈, API의 독립성을 유지해 주는 점에 있어서는 좋으나,아무래도 요청이 밀집될 수 있기 때문에 Gateway의 부하 분산에 대한 고민이 필요할 것 같다.Spring Version : 3.4.1Java : 17Spring Gateway 환경 설정build.gradleext { set('springCloudVersion', "2024.0.0")}dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' ..
멀티모듈매핑, 결합도 낮추기
·
Spring
멀티모듈은 서비스 레이어를 더 높은 차원에서, 물리적으로 나눈다는 생각이 든다.그렇기에 의존성을 더 고민하고 나누어 놓을 필요가 있어 보인다😇현재 프로젝트는 도메인 별로 모듈을 나누어 놓은 상태인데 고민의 흔적을 남겨 보고자 한다. 모듈 역할들어가기에 앞서 모듈의 책임/역할에 대해 간략히 정리해 보자. 하나의 도메인에 대해 간략하게 두 개의 모듈로 나누어 두었다.api module외부와의 인터페이스 역할을 하며, HTTP 요청을 처리하고 응답을 반환을 처리domain module비즈니스 로직 및 데이터 모델을 관리데이터 처리를 위한 Repository, Entity 등이 위치하며, 비지니스 로직을 다루기 위한 서비스 레이어도 포함한다. 왜 매핑을 고민할까?결론만 말하면 모듈간 의존성을 낮추고자 하기 ..
Spring Cloud Config
·
Spring
멀티 레포 프로젝트라면 공통된 설정 파일이 여러 군데 분포되어, 관리가 어려워 질 수 밖에 없다.설정 관리에 곤란함을 겪어 본 적이 있어 이를 개선하기 위해 Spring Cloud Config를 사용해 보았다.참고 공식 문서 : https://docs.spring.io/spring-cloud-config/docs/current/reference/html/ Spring Cloud ConfigSpring Cloud Config provides server-side and client-side support for externalized configuration in a distributed system. With the Config Server, you have a central place to manage..
Spring - Exception
·
Spring
Spring은 서블릿 위에서 작동한다. Servlet 단계에서의 예외부터 이해해보자! 서블릿의 예외 처리 방법 두 종류 1️⃣ Exception 2️⃣ response.sendError(HTTP Status Code, Error Message) Exception 자바가 직접 실행 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료 웹 어플리케이션 사용자 요청별로 쓰레드 할당되며 서블릿 컨테이너 안에서 실행된다. try-catch로 예외를 잡아서 처리하면 문제가 없지만 서블릿 밖으로 나가게 되면 500으로 처리된다 response.sendError(HTTP 상태 코드, 오류 메시지) 서블릿 컨테이너에게 오류 메시지를 직접 전달 가능 WAS👈필터 👈 서블릿 👈인터셉터 👈 컨..
MVC2 - Filter, Interceptor
·
Spring
쇼핑몰을 예를 들어 보자면, 주문 현황 페이지는 게스트가 아닌 회원만이 접속할 수 있어야 한다. 만약 게스트가 주문 현황 페이지에 접근하게 되면 타 페이지로 리다이렉트되야 할 것이다 하지만 위와 같이 회원만이 접근할 수 있는 페이지가 여러 개일 경우 일일이 컨트롤러에서 로그인 여부를 체크해서 리다이렉션해주어야 할까?😅 모든 컨트롤러에서 매번 권한을 체크하고 리다이렉션해주어야 한다면 👎실수가 발생할 확률이 높아질 것이고, 👎로직이 변경/추가될 때 일일이 변경해줘야 하는 수고가 생긴다. 이처럼 여러 곳에 걸쳐서 공통의 관심사가 적용되는 경우를 '공통 관심사(Cross-cutting Concern)'라고 한다. 위 쇼핑몰과 같은 예시는 인증에 대한 공통 관심사가 존재한다고 말할 수 있겠다. 공통... 관심사?..
MVC2 - 로그인(쿠키, 세션)
·
Spring
도메인이란? 화면, UI, 기술 인프라 등등의 영역을 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역 웹은 도메인에 의존하지만, 도메인은 웹에 유지하지 않는다. 쿠키의 사용 배경 HTTP 는 Stateless Protocol 그러므로 현재 로그인에 성공 시 회원임을 검증할 수 있는 쿠키를 만들어 웹 브라우저에 전달해 주어야 한다. 모든 요청에 쿠키를 포함하여 로그인이 된 상태인지 확인하자! 쿠키의 종류 세션 쿠키 : 브라우저 종료시까지만 유지(만료 날짜 생략 시) 영속 쿠키 : 만료 날짜까지 쿠키 유지 쿠키로 로그인/로그아웃 구현 쿠키 만들기(로그인) 🍪 로그인에 성공할 시에 쿠키를 만들어 주면 되겠다! @PostMapping("/login") public String login(@Validate..