Spring

    [Spring] Spring Boot에서 MockMvc 사용해보자!

    학습 목표 MockMvc를 활용해서 테스트 코드를 작성하는 방법에 대해 알아보자. MockMvc란? 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고 테스트용 MVC환경을 만들어 요청 및 전송, 응답 기능을 제공해주는 유틸리티 클래스이다. 즉, 실제 객체와 비슷하지만 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 스프링 MVC 동작을 재현할 수 있도록 하는 클래스를 의미한다. 의존성 추가 - gradle testImplementation 'org.springframework.boot:spring-boot-starter-test' - maven org.springframework.boot spring-boot-starter-test test (필자는 스프링 부트 프로젝트를 생성할 때마다 해당 의존성..

    [Spring] Spring Triangle? 그게 뭔데 - PSA

    PSA(Portable Service Abstraction) 영어를 직역하면 '휴대용 서비스 추상화'라고 해석할 수 있지만, 무엇을 의미하는지 한눈에 알기는 어렵다. 추상화라고 하면 '공통된 부분을 추출해내는 것이다'라고 설명할 수 있다. 그러면 여기서 말하는 서비스 추상화는 무엇을 의미할까? 서비스 추상화는 서비스의 내용을 모르더라도 해당 서비스를 이용할 수 있다는 것을 의미한다. PSA 예 Spring Web MVC를 예로 들어보면, 우리는 클래스를 만들고 해당 클래스에 @Controller 어노테이션을 작성하여 컨트롤러 역할을 하는 클래스를 만든다. 그래서 @GetMapping이나 @PostMapping으로 요청을 매핑하여 사용한다. 그런데 원래 Servlet을 사용하기 위해서는 HttpServle..

    [Spring] Spring Triangle? 그게 뭔데 - IoC/DI

    이전 포스팅에서 AOP에 대해 알아보았다면 이번 시간에는 IoC/DI에 대해 알아보자. [Spring] AOP란? AOP(Aspect Oriented Programming) AOP(Aspect Oriented Programming)는 '관점 지향 프로그래밍'이라고 한다. 여기서 말하는 관점 지향이란? → 어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점으로 나눠서.. gwamssoju.tistory.com IoC(Inversion of Control)란? IoC란 '제어의 역전'이라고 한다. '제어의 역전'이라는 말은 상당히 어렵게 느껴지는 말이지만 이렇게 설명할 수 있다. 개발자가 제어하는 것이 아닌 스프링 컨테이너에게 제어권이 넘어간다. 그렇다면 여기서 말하는 스프링 컨테이너는 뭘까? 스프링에서는 ..

    [Spring] Spring Triangle? 그게 뭔데 - AOP

    Spring에는 Spring Triangle이라고 하는 AOP, IoC/DI, PSA가 있다. 이번 시간에는 AOP에 대해 알아보자. AOP(Aspect Oriented Programming) AOP(Aspect Oriented Programming)는 '관점 지향 프로그래밍'이라고 한다. 여기서 말하는 관점 지향이란? → 어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점으로 나눠서 그 관점을 기준으로 모듈화 하겠다는 것이다. 그러면 모듈화란? → 공통된 로직이나 기능을 하나로 묶는 것이다. 핵심적인 관점과 부가적인 관점은 어떤 것을 의미하는가? → 핵심적인 관점은 우리가 적용하고자 하는 핵심적인 비즈니스 로직을 뜻한다. 반면에 부가적인 관점은 핵심적인 관점이 행해지기 위한 것으로 볼 수 있다. 위 그..

    [Spring] 인터셉터(Interceptor)에 대해 알아보자!

    [Spring] 인터셉터(Interceptor)에 대해 알아보자!

    인터셉터(Interceptor)란? intercept의 의미가 '가로채다'이니 interceptor는 '가로채는 행위를 하는 주체' 정도로 정의할 수 있다. 그럼 interceptor는 무엇을 가로채는 것일까? 바로 클라이언트의 요청과 서버의 응답을 가로챈다. 그림에서 알 수 있듯이 클라이언트의 요청이 컨트롤러에 닿기까지 거치는 과정들이 있다. 이전 포스팅에서 클라이언트의 요청을 가장 먼저 만나는 Filter에 대해 알아보았는데 요청을 했을 때 정말 저런 순서를 거치는지 눈으로 확인해보자! interceptor는 어떤 경우에 사용할까? interceptor는 Controller 작업을 수행하기 전/후에 추가적인 작업을 진행하기 위해 사용한다. 예를 들어, 관리자 계정에서만 볼 수 있는 전체 회원의 정보를..

    [Spring] Filter에 대해 알아보자 !

    클라이언트가 요청을 하면 Controller까지 접근하기 위해서는 중간중간 거치는 과정들이 있다. 그래서 이번 포스팅의 주제는 Spring Filter에 대해 알아보려고 한다. Spring Filter 위 그림에서 볼 수 있듯이 클라이언트의 요청을 가장 먼저 마주하는 것이 바로 Filter이다. Dispatcher Servlet에 도달 전/후에 모든 요청에 부가 작업을 처리할 수 있는 기능을 한다. 또한 Filter는 FilterChain에 의해 여러 필드가 연쇄적으로 동작할 수 있다. Filter는 스프링 컨테이너가 아닌 톰캣같은 웹 컨텍스트에 의해 관리된다. 즉, 스프링 범위 밖에서 처리되는 것이다. Filter는 어떤 경우에 쓰이는 걸까? → Filter는 요청에 대한 인증, 권한 체크 등을 하는 ..

    [Spring Boot + Spring Security + jwt] OAuth2를 활용하여 로그인

    Google 클라우드 플랫폼을 클릭해서 페이지 이동을 하자. 좌측 상단에 보면 노란색 부분을 클릭해서 프로젝트를 하나 만들어주자. 프로젝트 이름은 아무거나 해도 상관없으니 식별하기 쉽게 만들자 ! 사이드 바에 OAuth 동의 화면을 클릭해서 내부와 외부 두 가지 선택지가 있을 텐데 외부를 선택해주고 만들기를 눌러주자. 바로 위에 사용자 인증 정보를 클릭해서 + 사용자 인증 정보 만들기를 눌러주면 아래처럼 OAuth 클라이언트 ID가 나올 것이다. 노란색 부분을 클릭해서 클라이언트 ID를 만들자. 애플리케이션 유형은 웹 애플리케이션으로 설정해주고 이름도 아무거나 상관없으니 식별하기 쉬운 이름으로 설정하자. 그리고 아래로 쭉 내려가면 승인된 리디렉션 URI를 만들어주자. 작성하고 만들기 버튼을 클릭하면 클라..

    [Spring Boot + Spring Security + jwt] 환경 설정

    [Spring Boot + Spring Security + jwt] 환경 설정

    최근에 토큰에 대해 공부하면서 토큰 기반 인증을 구현해보고 싶다는 생각이 들어 여러 가지를 찾아보다가 Spring Security에 대해 알게 되었다. 그래서 Security를 적용해보려고 며칠을 고생해봤지만 혼자서 쉽지 않았다..... 그러다가 인프런에서 강의를 하나 알게 되었고 그 강의의 내용을 포스팅하려고 한다! [무료] 스프링부트 시큐리티 & JWT 강의 - 인프런 | 강의 스프링부트 시큐리티에 대한 개념이 잡힙니다., - 강의 소개 | 인프런... www.inflearn.com Version IDE : Intellij 2021.3.3 Ultimate Framework : Spring Boot 2.6.8 Java Version : Java 11 Build Tool: Gradle DBMS : Ora..

    [spring] Spring MVC 구조

    스프링 MVC는 '모델 1'과 '모델 2'가 있다. 이번 포스팅에서는 '모델 2'에 대해 간단하게 쓰려고 한다. 모델 2 방식은 쉽게 말해서 '로직과 화면을 분리'하는 스타일의 개발 방식이다. 전체적인 구조를 보면 아래와 같다. 위 그림에서 좀 더 세세하게 보면 아래와 같이 나타낼 수 있다. 1. 사용자의 요청은 DispatcherServlet을 통해서 처리한다. 프로젝트의 web.xml을 보면 모든 요청을 DispatcherServlet이 받도록 처리하고 있다. HandlerMapping은 요청의 처리를 담당하는 컨트롤러를 찾기 위해서 존재한다. 2. 3. HandlerMapping 인터페이스를 구현한 여러 객체들 중 RequestMappingHandlerMapping 같은 경우는 개발자가 @Reque..

    [spring] 컴포넌트 스캔

    [spring] 컴포넌트 스캔

    이전까지 스프링 빈 등록할 때 자바 코드의 @Bean이나 XML의 을 통해서 일일이 설정 정보에 직접 등록할 빈을 나열했다. 하지만 지금까지는 등록할 빈이 몇 개 되지 않았기 때문에 문제가 안됐지만 빈의 개수가 늘어나면 직접 등록하는 작업에 부담을 느끼게 된다. 그래서 스프링은 설정 정보 없이 자동으로 스프링 빈 등록을 해주는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존 관계도 자동으로 주입하는 @Autowired 기능도 제공한다. 코드를 통해서 컴포넌트 스캔과 자동 주입에 대해 알아보자. 설명에 앞서 설정 정보가 없어도 자동으로 등록해준다고 했지만 설정 정보를 만든 상태에서 컴포넌트 스캔을 사용하는 코드를 보고 설정 정보가 없는 상태의 코드를 보겠다. @Configuration은 많이 봤던 어노테이션..