웹/Spring
-
[Spring Security] Spring Security의 로그인 과정 씹어먹기 - 인증웹/Spring 2024. 8. 9. 11:25
들어가며... 로그인, 로그아웃 기능은 굉장히 간단해 보이지만 그 기능을 구현하는 방식도 여러가지(단순한 세션 방식, JWT 방식, OAuth2 방식)이고, 회원들의 정보가 저장된 저장소도 제각각이며(In-memory, Redis, Database, ...), 심지어는 회원의 ID, PW를 보내는 HTTP 스키마 마저 자유분방하다(Form-data, Json-data, Http Basic, ...).하지만, 스프링 시큐리티는 이런 자유도 높은 로그인, 로그아웃 구현 방법을 굉장히 세세한 단계로 쪼개어 추상화 했고 그것에 걸맞는 인터페이스를 제공한다. 그 인터페이스들을 구현해 손쉽게 로그인, 로그아웃 기능을 구현할 수 있도록 도와준다. 그러나 워낙 로그인, 로그아웃 기능이 여러가지 방식으로 구현될 수 있..
-
[Spring MVC] @ExceptionHandler와 @ControlAdvice로 예외 처리하기웹/Spring 2024. 7. 31. 22:56
목표사용자 정의 예외 및 Java가 지원하는 예외가 발생했을 때, JSON 형식으로 응답을 반환하는 객체를 작성한다.컨트롤러 코드와 예외 처리 코드를 분리할 수 있도록 한다.JSON 형식의 반환과 더불어 HTTP 코드 응답도 할 수 있는 예외처리 객체를 작성한다. 스프링 예외 처리 과정스프링 MVC 프레임워크가 예외처리를 진행하는 과정은 다음과 같다.컨트롤러 내부에서 예외가 발생한다. - HttpServletResponse.sendError() 메서드 등으로 오류를 전달해도 동일하게 동작만약 컨트롤러 및 필터 등에 try-catch 문이 존재한다면 예외가 잡혀 catch 문 내의 코드가 실행된다.try-catch 문이 없다면 WAS 계층까지 예외가 전파되며, WAS 계층에서는 서버 내부에 문제가 있다고 ..
-
Spring Boot 환경에서 컨테이너 테스트 환경 구축하기 w/ Testcontainers웹/Spring 2024. 7. 18. 15:10
테스트 환경 구축의 필요성Spring Boot로 개발하다 보면, 내가 작성한 컴포넌트가 올바르게 동작하는지 테스트 할 필요가 있고, 아예 테스트 기반으로 개발을 해나가는 TDD라는 개념도 존재한다.아직 테스트 코드를 작성하는데 미숙하지만, 테스트 코드가 주는 이점이 상당하다고 생각한다. 그 중 대표적인 것이 개발 생산성 증가인 것 같다. 테스트 코드를 작성하지 않으면 Postman과 같은 API 테스터기로 테스트를 진행해야 하는데, 이것이 여간 생산성을 좀먹는 존재가 아니다. 더군다나 자동화되지 않은 테스트 방식은 휴먼 에러를 불러일으키기도 매우 쉽다. 다만, API를 테스트 할 때 고려해야 할 것이 바로 외부 모듈(대표적으로 DB)이다. 외부 모듈이 항상 같은 반환값을 내주어야 테스트 결과도 일정해지기..
-
[Spring Boot] Thymeleaf로 layout을 구현하는 방법웹/Spring 2024. 1. 13. 23:17
0. 개요 스프링 부트를 사용해 MVC 패턴을 기반으로 하는 웹 어플리케이션을 만들 때, 반복되는 코드(boilerplate)가 다수 있다. 그러한 코드를 줄이기 위해서는 Thymeleaf가 지원하는 fragment 기능과 layout을 설계할 수 있도록 하는 외부 라이브러리의 도움을 받아야 한다. 그 방법에 대해서 포스팅 하겠다. 1. Thymeleaf, Thymeleaf-layout-dialect 설치 (Gradle을 사용한 빌드인 경우) build.gradle에 다음과 같이 외부 라이브러리를 import 해주자. dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' // Thymeleaf imple..