no image
[SpringBoot] SOLID 원칙과 Bean, 의존성 주입(DI)
1. SOLID 원칙객체 지향 프로그래밍에서 좋은 설계를 위한 5가지 원칙을 말한다. SRP (단일 책임 원칙): 한 클래스는 하나의 책임만 가져야 한다.OCP (개방-폐쇄 원칙): 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.LSP (리스코프 치환 원칙): 부모 타입은 자식 타입으로 자유롭게 교체 가능해야 한다.ISP (인터페이스 분리 원칙): 클라이언트는 자신이 사용하지 않는 메서드에 의존하지 않아야 한다.DIP (의존 역전 원칙): 구체화(구현 클래스)가 아닌 추상화(인터페이스)에 의존해야 한다.2. DI(Dependency Injection, 의존성 주입)란?정의 : 객체가 직접 의존할 구현체를 만들지 않고, 외부에서 필요한 객체(의존성)를 넣어주는 것목적 : 코드의 결합도를 낮추고, 유연하게..
2025.09.18
no image
[Spring Security] CustomFilter를 만들고 UsernamePasswordAuthenticationFilter에 등록해보자
1. 서론Spring Security는 클라이언트의 요청이 여러개의 필터를 거쳐 DispathcerServlet(Controller)으로 향하는 중간 필터에서 요청을 가로챈 후 검증(인증/인가)을 진행한다. 클라이언트 요청 -> 서블릿 필터 -> 서블릿(Controller) 순으로 진행된다. 아래 사진을 참고하면 왼쪽(FilterChain)에서 DelegatingFilter를 등록하면 오른쪽(SecurityFilter)으로 가로채서 검증을 진행한다.검증 진행 후 서블릿으로 요청을 전달한다.SecurityFilterChain의 필터 목록과 순서 1.2 Form 로그인 방식에서의 UsernamePasswordAuthenticationFilterForm 로그인 방식에서는 클라이언트단이 username과 pa..
2025.05.03
[Spring Boot] Optional
Optinal이란?Java 8 버전부터 도입된 Optional은 값이 없는 경우를 표현하기 위한 클래스이다.Optional 클래스는 제네릭을 사용하여 어떤 타입의 객체도 감싸서 담을 수 있다. Option 객체는 값이 존재할 수도 있고, 없을 수도 있다.이는 NPE(NullPointerException) 예외를 방지할 수 있으며 코드의 안정성을 높이며 가독성을 향상 시킨다.Optional 객체 생성Optional 객체를 생성하면 of(), ofNullable(), empty() 등의 정적 팩토리 메서드를 사용할 수 있다.of() 메서드 : 값이 null이 아닌 경우에만 Optional 객체를 생성ofNullable() 메서드 : 값이 null인 경우에도 Optional 객체를 생성empty() 메서드 :..
2024.07.17
[Spring Boot] @RestController
서론 @RestController는 @Controller와 @ResponseBody의 조합이다. @RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답을 담아서 전송한다. 따라서 return 값이 @Controller와 달리 반환 값으로 뷰를 찾는 것이 아닌, HTPP 메세지 바디에 바로 입력하게 된다. @RestController @RequiredArgsConstructorpublic class TestController { private final MemberService memberService; @GetMapping("api/board/member") public Member findMember(@RequestParam("id") Stri..
2024.04.10
no image
[Spring Boot] @Controller
서론 Spring에서 클래스에 컨트롤러를 지정해주기 위한 애노테이션은 2가지가 있다. 이 2가지의 주요 차이점은 HTTP ResponseBody가 생성되는 방식, @Controller + @ResponseBody 조합이 @RestController라고 말할 수 있다. 오늘은 Controller에 대해 알아보자 @Controller @Controller는 Spring MVC의 컨트롤러 애노테이션이며 주로 View(화면)을 반환하기 위해 사용한다. @Controllerpublic class TestController { // @RequestMapping(value = "api/board/update", method = {RequestMethod.GET}) @GetMapping("api/board/update..
2024.04.10
no image
[Spring Security] 10 - csrf enable 설정 방법
csrf 란? CSRF(Cross-Site Request Forgery)는 요청을 위조하여 사용자가 원하지 않아도 서버측으로 특정 요청을 강제로 보내는 방식이다. (회원 정보 변경, 게시글 CRUD를 사용자 모르게 요청) 개발 환경에서 csrf disable() 개발 환경에서는 Security Config 클래스를 통해 csrf 설정을 disable 설정하였다. 배포 환경에서는 csrf 공격 방지를 위해 csrf disable 설정을 제거하고 추가적인 설정을 진행해야 한다. 배포 환경에서 진행 사항 security config 클래스에서 csrf.disable() 설정을 진행하지 않으면 자동으로 enable 설정이 진행된다. enable 설정시 스프링 시큐리티는 CsrfFilter를 통해 POST, PU..
2024.02.26
no image
[Spring Security] 09 - 세션 설정
로그인 정보 사용자가 로그인을 진행한 뒤 사용자 정보는 SecurityContextHolder에 의해서 서버 세션에 관리된다. 이때 세션에 관해 세션의 소멸 시간, 아이디당 세션 생성 개수를 설정하는 방법에 대해 알아보자. 세션 소멸 시간 설정 세션 타임아웃 설정을 통해 로그인 이후 세션이 유지되고 소멸하는 시간을 설정할 수 있다. 세션 소멸 시점은 서버에 마지막 특정 요청을 수행한 뒤 설정한 시간만큼 유지된다. (기본 1800초) application.properties //초 기반 server.servlet.session.timeout=1800 //분 기반 server.servlet.session.timeout=90m 다중 로그인 설정 하나의 아이디에 대해서 여러 브라우저에 로그인하는 방법 https..
2024.02.26
no image
[Spring Securitiy] 08 - 세션 정보 확인
세션(Session) 세션(Session)은 사용자가 웹 사이트에 로그인했을 때 사용자에 대한 정보를 일정 기간 동안에 서버에 기록하고 보관함으로써 사용자를 관리하기 위한 목적으로 사용되는 저장 공간이다. 세션 정보 확인 1. id 확인하기 String id = SecurityContextHolder.getContext().getAuthentication().getName(); SecurityContextHolder.getContext() - Spring Security에서 현재 실행 중인 보안 컨텍스트를 제공하는 클래스이다. 이를 통해 현재 사용자의 인증 정보에 접근할 수 있다. getAuthentication() - 현재 인증된 사용자의 인증 정보를 반환한다. 이 정보는 Authentication 인..
2024.02.25