728x90
반응형

Spring 21

Service Layer에 대한 생각

Service Layer 이직하고 프로젝트에 대해 구조 파악을 하면서 리팩토링을 진행중에 좀 생각하게 된게 꽤많았다. 사실 서비스 레이어라고 해서 비즈니스 로직을 다 넣는건가? 또는 비즈니스 로직이 다 들어가 있는 것이다. 라는 얘기들이 많았다. 사실 나도 그렇게 생각했었던 사람중 1명이었다. 이게 근데 잘못된 생각이었다. 결국엔 사실 소스 코드를 다 분리하고 봐도 하나로 합쳐져서 동작하게 되는건 사실 맞다고 본다. 그러니까 다시 말하면 클래스 하나의 메소드에서 엄청나게 많은 줄을 가지고 개발을 할 수도 있다는 것이다. 근데 이거는 객체 지향 설계 관점에선 너무 안좋은 것이고 각자의 책임이 있을 것인데 그걸 분리한게 객체 지향인거다. Service Layer에 대한 오해 일단 이 서비스 레이어에서는 비즈..

Spring 2022.08.10

로그인 동작 순서

Spring Security 예제 우선 코드는 깃허브에 있다. 일단 문서로 정리한 것을 토대로 로그인과 회원가입 어떤 순서로 동작하는지 알아보려고 했다. 로그인 일단 시큐리티에 대한 설정은 SecurityConfig 라는 클래스 설정파일을 만들어서 진행했다. WebSecurityConfigurerAdapter WebSecurityConfigurerAdapter는 WebSecurityConfigurer 라는 인터페이스를 조금 더 쉽게 생성하기 위해 존재하는 클래스이다. 이 클래스의 구현을 그러니까 기본으로 적용되어 있는것 외에 재정의 하여 사용할 수 있다. 아래는 해당 추상클래스에 대한 설명을 가져와봤다. 우리는 이 추상 클래스에서 구현되어있는 configure(HttpSecurity http) 메소드를 ..

Spring/Security 2022.08.09

Authentication 인증

스프링 시큐리티 사용자 인증 스프링 시큐리티는 인증에 대한 정보들을 제공한다. Servlet Authentication Architecture 인증에 대한 아키텍처는 아래와 같다. SpringSecurityContextHolder 인증된 사용자의 세부 정보를 저장하는 곳 SecurityContext SpringSecurityContextHolder에서 가져온 현재 인증된 사용자 인증을 가지고 있다. Authentication 사용자가 인증을 위해 제공한 자격증명이나 현재 사용자를 제공하기 위한 AuthenticationManager의 입력이 될 수 있음 GrantedAuthority 인증에 대한 권한 정보 AuthenticationManager 스프링 시큐리티 필터가 인증을 수행하는 방법을 정의 Prov..

Spring/Security 2022.08.09

개요

📌 Spring Security Spring Security는 Servlet Filters를 기반으로 동작한다. Spring Security는 인증, 권한 부여 및 보호를 제공하는 프레임워크이다. 전체적인 구조는 위와 같다. Gradle 설정 plugins { id 'io.spring.dependency-management' version "1.0.10.RELEASE" } dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' } 📌 Filter 그래서 필터의 역할을 먼저 아는것이 중요한데, Filter 영어 단어만 봐도 뭔가를 필터로 걸러주는 느낌이 난다. 업무중에 통신 하나하..

Spring/Security 2022.08.09

YAML 파일을 읽어보자

전역 값 회사 프로젝트에서 resources 디렉토리에 있는 설정파일은 application.properties를 사용한다. 그래서 여기에 값을 할당해주고 @Value를 가져다가 사용한다. properties의 값을 가져올때는 @Value("${properties키 값}")으로 불러오기 때문에 이번에 내가 진행하게된 프로젝트 설정파일 application.yaml에도 똑같이 @Value가 적용될줄 알았다. 근데 적용하려고 보니까 에러가 나는것이다. 에러메세지부터 바로 보자. 에러메세지 Could not resolve placeholder 'application.open-api.adminKey' in value "${application.open-api.adminKey}" 라는 에러가 발생했..

디버깅 2022.08.09

Filter, Interceptor 정리

필터와 인터셉터 사이드 프로젝트를 하면서, 그리고 최근 회사의 프로젝트를 진행하면서 로깅처리와 더불어 어떠한 인증에 관한 것을 처리할 때 항상 필터를 구현했다. 이 필터가 뭔가 했더니 내가 옛날에도 들었었던 지식이지만 그냥 넘어가는 경우였고, 하다못해 스프링 동작과정에 정리해도 필터와 인터셉터에 관한 내용은 빼먹고 업로드를 한 것같다. 스프링 mvc의 기본 흐름에 대한 조금 더 구체적인 그림을 가져왔다. 다른 플로우차트를 찾아보려고 했지만 없더라. 실행 일단 서블릿 Request요청이 오게되면 바로 Filter로 가게된다. 여기서 무조건 동작을 받아서 처리를 해주고 이 필터들이 쭉 이어진것이 바로 필터체인이다. 필터 내부의 설명에서 보는것과 같이 doFilter 이 메소드에서 필터링을 수행하기 때문에 필..

Spring 2022.08.07

Spring -> Spring Boot 마이그레이션 2

삽질기 모든 코드는 깃허브에 있다. 일단 저번에 마이그레이션 1탄을 했었는데 의존성이 겹쳐서 다시 리팩토링 하려고 보니까 에러가 많았다. 의존성 겹침 에러 일단 의존성이 겹쳐서 생긴 에러가 조금 있다. 부분만 적은 gradle 일부이다. plugins { id 'org.springframework.boot' version '2.5.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } dependencies { implementation ( 'org.springframework.boot:spring-boot-starter-web', //이부분 'org.spring..

Spring 2022.08.06

Spring -> Spring Boot 마이그레이션

내 팀 프로젝트를 예전에 Spring으로 구현을 했었는데 이것을 스프링부트로 마이그레이션 해보았다. 더불어 Maven 의존성을 Gradle로 바꾸면서 마이그레이션을 한 것이다. 오류들이 상당히 많았지만 남들과 같은 오류인지는 잘 모르겠다.🤣 어떤 오류들이 있었는지 알아보자 Lombok 일단 Jar로 빌드하게되면 SpringBoot는 WEB-INF안의 jsp파일을 읽을수가 없다. 그래서 war로 빌드를 해주어야한다. 추후에 Mybatis로 db연결을 하는 방식을 JPA로 변경할 예정이다. 우선 제일 먼저 gradle 을 의존성 관리 툴로 추가하기 위해서 pom.xml 이 있는 경로로 가서 gradle init을 시켜주었다. gradle init --type pom 이것으로 pom.xml의 내용이 Gradl..

Spring 2022.08.05

[Spring] MockMvc Bean 주입 에러

Mock 빈 오류에 관해서 그동안 혼자 공부한 것들을 토대로 프로젝트를 하나 해보려고 한다. 나름 공부한다고 공부를 했는데 HelloWorld 구현하는데 컨트롤러를 만들어두고 테스트 코드를 내의지대로 처음 작성해봤다. MockMvc 클래스를 사용하여 Mock Bean을 주입받으려고 했더니 빈이 등록되지 않았다는 오류를 받았다. 일단 오류에는 두가지가 있었다. @SpringBootTest 어노테이션을 사용할때 @WebMvcTest도 같이 사용해서 MockBean을 주입받는줄 알고 바로 넣었는데 두 Mock객체가 공유되어있는 객체가 아니고 서로 다른 객체이다. 그래서 두개의 빈이 충돌이 발생한다. 여기서 해결책은 두가지였다. @SpringBootTest와 @AutoConfigurationMockMvc를 사용..

Spring 2022.08.04

[Spring] Spring Security

스프링 시큐리티 스프링 시큐리티는 스프링 기반의 애플리케이션의 보안(인증, 권한, 인가 등) 을 담당하는 스프링 하위 프레임워크이다. 인증과 인과를 담당하는 프레임워크이다. 🔒스프링 시큐리티 특징과 구조 보안과 관련하여 체계적으로 많은 옵션을 제공하여 편리하게 사용할 수 있다 Filter 기반으로 동작하여 MVC와 분리하여 관리 동작 어노테이션을 통한 간단설정 세션과 쿠키 방식으로 인증 인증관리자(Authentication Manager)와 접근 결정 관리자(Access Decision Manager)를 통해 사용자의 리소스 접근을 관리 어떤 유저가 로그인을 했을 시에 기본 회원과 admin 유저가 있다고 가정을 하면 회원인지 admin인지 인증 관리자가 먼저 판단을 한다. 그래서 누구인지 명확하게 알고..

Spring 2022.08.03
728x90
반응형