728x90
반응형

Java 79

Facade Pattern 적용기

👏 퍼사드 패턴 적용기 퍼사드 패턴에 대한 설명은 깃허브 에 있다. 리팩토링 진행도중에 좀 좋은 구조를 구성해서 적어본다. 🔥 개요 우선 Service 레이어에서 Repository를 너무 많이 의존하는것이 상당히 컸다. 여러군데에서 가져오는 것 사실 이것은 개발하면서 어쩔 수 없는 노릇일 수 있다. 그러나 의존을 너무 많이 가져간다는 것은 유지보수 측면에서도 힘들것이고, 응집도도 낮은 그런 클래스가 되어버린다. 그래서 일단 생각해 낸것은 우리는 객체지향을 사용하고 있다. 어떤 한 클래스는 조합하는것만을 목표로 하는 클래스가 있다면 어떨까🤔 하고 생각했다. 이 클래스를 생각한것은 기존 프로젝트에 테스트 코드를 추가하려고 하다보니까 고민하게 되었다. 🤔 기존 클래스에서 테스트를 하려면 너무 필요없는 의존성..

디자인패턴 2022.08.10

에라토스테네스의 체

기본 알고리즘부터 풀어보는데에 있어서 이 소수를 구하는것에 상당히 애를 먹는다. 물론 소수 뿐만이 아니라 다른 유형의 문제들도 결국 머릿속에선 정리가 매우 잘되지만, 이걸 코드로 구현하는게 쉽지가 않다. 아무튼 각설하고, 소수를 판별하는 알고리즘에 대해 알아보도록 하자. 소수 소수는, 1보다는 큰 자연수들 중 1과 자기 자신만을 약수로 가지고 있는 수를 의미한다. 위키피디아의 이미지를 가져와보았다. 순서는 2부터 소수를 구하고자 하는 목표값 까지의 모든 수를 나열한다. 그다음 2는 소수기에 Prime Numbers에 2를 넣어준다. 그 다음 자기 자신을 제외한 2의 배수를 다 지운다. 지우는 이유? 자기 인수의 배수를 다 지우는 이유는 그 수들은 이미 배수라서 약수에 인수가 포함되기 때문이다. 이 구간을..

CS/알고리즘 2022.08.09

일급 컬렉션

일급 컬렉션 일단 나는 넥스트스텝의 TDD, Clean Code with Java 12기를 하면서 여기서도 일급 컬렉션을 사용했었다. 참 웃겼던건 이것을 조금 응용을 했었어야 했는데 개념 자체도 자세하게 정리가 덜 된것 같았다. 도메인에서부터 차근차근 만들어가는 것에서는 어느정도 생각이 잘 들었지만, 기존 레거시 코드에 이런게 적용되어 있지 않고 뚱뚱하게 로직이 작성되어 있으면 그냥 넘어갔던게 흔했다. 객체지향 생활체조 원칙 소트웍스 앤솔러지에서 발췌된 객체지향 생활체조 원칙이다. 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다. 규칙 2: else 예약어를 쓰지 않는다. 규칙 3: 모든 원시값과 문자열을 포장한다. 규칙 4: 한 줄에 점을 하나만 찍는다. 규칙 5: 줄여쓰지 않는다(축약 금지)...

Java 2022.08.09

Validaion

모든 코드는 깃허브 에 있다. Validation Validation의 사전적 정의는 확인 이다. 프로그래밍을 하면서 Validation을 한다고 하면 유효성 검증, 즉, 수없이 싸우는 null과 빈 값에 대해 검증을 한다. 뭐 때에 따라서는 조건에 맞는 값이 들어와야 한다는 것도 포함이다. 유효성 검증 애초에 검증을 한다는 것을 단순하게 생각하면 스프링에서 어떤 요청이 하나 들어왔다고 치자. @RestController public class Hello { @GetMapping("/hello") public String hello(@RequestParam String name) { return "hello " + name; } } /hello?name=이름이라는 주소로 호출을 한다면 파라미터에 name..

Spring 2022.08.09

로그인 동작 순서

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

AbstractMessageConverter

HandlerMethodArgumentResolver 이 HandlerMethodArgumentResolver에 정의되어있는 자바독을 읽으면 주어진 요청의 컨텍스트에서 메소드 매개변수를 인수 값으로 해석하기 위한 전략 인터페이스라고 설명되어 있다. 이 HandlerMethodArgumentResolver에는 이렇게 두개의 메소드가 있는데 supportsParameter()로 메소드의 매개변수를 처리할 수 있는지 여부를 판단한다. @RequestBody @RequestBody 어노테이션을 읽으려면 HandlerMethodArgumentResolver AbstractMessageConverterMethodArgumentResolver AbstractMessageConverterMethodProcessor R..

디버깅 2022.08.09

RequestParamMethodArgumentResolver

@RequestParam을 처리해주는 아규먼트 리졸버 = RequestParamMethodArgumentResolver RequestParamMethodArgumentResolver는 AbstractNamedValueMethodArgumentResolver를 상속한 콘크리트 클래스고, resolveArgument를 오버라이딩 하지 않았기 때문에 AbstractNamedValueMethodArgumentResolver.resolveArgument가 호출된다. 흐름도 일단 흐름도는 이러하다. 어제 살펴봤던 내용은 DispatcherServlet 이전의 처리내용이었다. 스프링 MVC에 대해서 교환대라고 할 수 있는 DispatcherServlet 이 클래스가 HandlerAdapter 등.. 조건에 부합하는 ..

디버깅 2022.08.09

RequestMapping 동작

얼마만의 포스팅인지 모르겠다. 일단 바로 스타트 ❗❗❗ 깃허브를 원래 올리는게 맞지만 회사 코드라서 따로 올리지는 못한다. 😥😥😥 테스트 @GetMapping에 대해서 어떻게 돌아가는지 궁금해서 무작정 실행을 시켜봤다. 지금 보이는 이미지는 톰캣에서 HTTP 메세지를 받아오는 구간이다. 그러니까 DispatcherServlet전에 수행되는 구간이다. 어떻게 저걸 담고있냐는 localhost:8081/swagger-ui.html 이라는 곳에서 크롬브라우저를 이용한 HTTP 통신을 하려고한다 라는 헤더를 추출한것이다. 여기서 api를 호출하고 GET방식으로 조회하는것 까지 확인했다. 오해했던 부분 처음에 나는 @GetMapping이 GET메소드를 만들어준다? 라고 생각했다. HTTP 완벽 가이드를 읽으면서도..

디버깅 2022.08.09
728x90
반응형