Spring

Spring

Jasypt를 사용하여 암호화하기

Jasypt를 이용하여 암호화에 관해 작성할 예정이다. chatUniv프로젝트는 gpt key, jwt token, db password 등등 외부에 노출되면 안 되는 정보가 많이 담겨있다. 따라서 암호화가 반드시 필요한 상황이었다. 이를 해결하기 위해 Jasypt를 사용하였다. Jasypt(Java Simplified Encryption)은 Java 언어로 개발된 간단한 암호화 및 복호화 기능을 제공하는 라이브러리이다. Jasypt는 다양한 암호화 알고리즘과 기술을 지원하여 데이터 보안을 향상하는 데 도움을 준다. 간단한 사용법: Jasypt는 개발자가 암호화와 복호화 작업을 쉽게 수행할 수 있도록 해준다. 다양한 암호화 알고리즘 지원: Jasypt는 대칭키 및 비대칭키 암호화 방식을 지원하고, AES..

Spring

필터(Filter) vs 인터셉터(Interceptor) 차이

Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보자 필터(Filter) 필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 되는 것이다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너(서블릿 컨테이너)에 의해 관리가 되는 것이고(스프링 빈으로 등록은 된다), 디스패처 서블릿 전/후..

Spring

의존성 주입(Dependency Injection)

의존성 주입(Dependency Injection) 이란? DI란 외부에서 두 객체 간의 관계를 결정해 주는 디자인 패턴으로, 인터페이스를 사이에 두어 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해 준다. 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다. public class Shop { private Book book; } Shop 객체가 Book 객체를 사용하고 있는 경우에 Shop 객체가 Book 객체에 의존성이 있다고 표현한다. 그리고 두 객체 간의 관계를 맺어주는 것을 의존성 주입이라고 한다. Book book = new Book(); Shop shop = new Shop(book); 의존성..

Spring

@Autowire 빈 탐색 전략

빈(Bean) 등록과 조회 규칙 Spring은 기본적으로 메서드/클래스의 이름을 Bean의 이름으로 사용한다. @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } 직접 빈의 이름을 부여할 수 있다. @Bean("fixDiscountPolicy") public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } @Bean("rateDiscountPolicy") public Discou..

Spring

@Configuration안에서 @Bean을 사용해야하는 이유

Spring에서 수동으로 빈을 등록할 때 @Configuration 클래스 안에서 @Bean을 사용해야 한다. 그 이유를 알아보자. @Configuration안에서 @Bean을 사용해야 하는 이유 스프링에서는 일반적으로 컴포넌트 스캔을 사용해 자동으로 빈을 등록하는 방법을 이용한다. 하지만 @Bean 어노테이션을 사용해 수동으로 빈을 등록해야 하는 경우도 있다. 개발자가 직접 제어가 불가능한 라이브러리를 활용할 때 애플리케이션 전범위적으로 사용되는 클래스를 등록할 때 다형성을 활용하여 여러 구현체를 등록해주어야 할 때 @Bean을 이용한 수동 빈 메서드는 스프링 빈 안에만 구현해 되어 있다면 모두 동작한다. 하지만 스프링은 @Bean은 반드시 @Configuration 어노테이션을 활용하도록 강조한다. ..

Spring

@Bean,@Configuration,@Component 차이점

기존의 Spring MVC는 xml을 활용하여 bean을 등록했다. 하지만 프로젝트 규모가 커지면서 사용하는 요소들을 xml에 등록하는 것은 상당히 번거로워졌다. 따라서 어노테이션을 활용하여 Bean을 등록하는 방법이 생겨났다. Spring Bean Spring에서는 Spring의 DI Container에 의해 관리되는 POJO(Plain Old Java Object)를 Bean이라고 부르며, 이러한 Bean들은 Spring을 구성하는 핵심 요소이다. POJO(Plain Old Java Object)로써 Spring 애플리케이션을 구성하는 핵심 객체이다. Spring IoC 컨테이너(또는 DI 컨테이너)에 의해 생성 및 관리된다. class, id, scope, constructor-arg 등을 주요 속..

Spring

@RequestBody, @ModelAttribute, @RequestParam의 차이

스프링에서 클라이언트로 받은 요청을 객체로 바인딩하기 위해 사용하는 방법을 알아보자. @RequestParam @RequestParam은 1개의 HTTP 요청 파라미터를 받기 위해서 사용한다. @RequestParam은 필수 여부가 true이기 때문에 반드시 해당 파라미터가 전송되어야 한다. 파라미터가 전송되지 않으면 400 에러가 발생한다. 반드시 필요한 값이 아니라면 required를 false로 설정해 주면 되고, defaultValue 옵션을 사용하면 기본값 역시 지정할 수 있다. // searchKeyWord는 required가 false이기 때문에 없을 수도 있으므로, 없다면 기본값이 할당된다. @GetMapping("/list") public ResponseEntity requestParam..

Spring

@Controller와 @RestController 차이점

스프링에서 컨트롤러를 지정해 주기 위한 어노테이션은 @Controller, @RestController가 있다. 둘을 쉽게 생각하면 @RestController == @Controller + @ResponseBody이다. @Controller 전통적인 Spring MVC의 컨트롤러 어노테이션인 @Controller는 주로 View를 반환하기 위해 사용된다. 1. 클라이언트는 URL형식으로 요청을 보낸다. 2. DispatcherServlet이 요청을 위임할 Handler Mapping을 찾는다. 3. Handler Mapping을 통해 요청을 Controller로 위임한다. 4. Controller는 요청을 처리한 후 View Name을 Handler Adapter한테 반환한다. 5. Handler Ad..

Spring

Servlet, Spring MVC 정리

Servlet이란? 서블릿은 클라이언트 요청을 처리하고, 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램이다. 이전의 웹 프로그램들은 클라이언트의 요청에 대한 응답으로 만들어진 페이지를 넘겨주었으나, 현재는 동적인 페이지를 가공하기 위해서 웹 서버가 다른 곳에 도움을 요청한 후 가공된 페이지를 넘겨주게 된다. 이때 서블릿을 사용하게 되면 웹 페이지를 동적으로 생성하여 클라이언트에게 반환해 줄 수 있다. Servlet의 예시 @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void s..

Spring

Spring Security + JWT 회원가입, 로그인 기능 구현

인증(Authentication)과 권한(Authorization) 이 두 영역은 사실상 스프링 시큐리티의 핵심이다. 인증(Authentication): 보호된 리소스에 접근하는 대상, 즉 사용자에게 적절한 접근 권한이 있는지 확인하는 일련의 과정을 의미한다. 이때 보호된 리소스에 접근하는 대상(사용자)을 접근 주체(Principal)이라고 한다. 권한(Authorization): 인증절차가 끝난 접근 주체가 보호된 리소스에 접근 가능한지를 결정하는 것을 의미한다. 이때 권한을 부여하는 작업을 인가(Authorize)라고 한다. 쉽게 말하면 인증은 아이디와 비밀번호를 입력 받아 로그인하는 과정 자체를 의미하는 것이고 권한이 필요한 리소스에 접근하기 위해서는 당연히 이러한 인증 과정을 거쳐야 한다. 스프링..

javajoha
'Spring' 카테고리의 글 목록