728x90
반응형

전체 글 144

클라이언트 식별과 쿠키

# 클라이언트 식별과 쿠키 이 장에서는 서버가 통신하는 대상을 식별하는데에 사용하는 기술을 알아본다. ## 개별 접촉 HTTP는 익명으로 사용하며 상태가 없고 요청(Request)과 응답(Response)로 통신하는 프로토콜 현대의 웹 사이트들은 개인화된 서비스들을 제공하고 싶어한다. ### 개별 인사 개인에게 맞춰져 있는 것처럼 느끼게 하려고 사용자에게 특화된 환영 메세지나 페이지 내용을 만듦 ### 사용자 맞춤 추천 고객의 흥미가 무엇인지 학습해서 고객이 좋아할 만한 상품을 추천해준다. 개개인의 기념일이나 생일이 다가오면 그에 맞는 상품을 제시할 수도 있다. ### 저장된 사용자 정보 배송지 주소와 카드 정보를 매번 입력받게 하지말고 데이터베이스에 저장하여 저장하는 경우를 말한다. ### 세션 추적 ..

CS/네트워크 2022.08.10

@Mock 사용기

📌 Service 레이어 테스트저번 퍼사드 패턴 적용기 에서언급했던 테스트에 대해서 써보려고 한다.바로 정리해보도록 하겠다.이전의 Mockito 에 대해서 정리한 글이 있다.📌 테스트 과정일단 퍼사드 패턴을 적용함으로써여러개의 서비스를 하나의 퍼사드가 관리해주는 형태로 작성을 했었다.그러면서 하나의 Service Repository가 되는 구조를 가지게 되었다.여기서 @Mock이 등장하게 되었는데,기존의 @Autowired 방식으로 사용했다면 꿈도 못꾸는 가짜 객체 주입이다.Service service = new Service(); 해서 @Autowired된 객체를 주입할 수 있을까?답은 아니라고 생각한다. 의존을 자동으로 주입해주기 때문에 뭘 할당할 수 없는 구조였다.하지만 생성자 주입을 해준다면?..

Spring 2022.08.10

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

Cache

웹 캐시 웹 캐시 또는 HTTP 캐시 라고 하는데, 이 캐시는 서버와 불필요한 네트워크 통신을 줄이기 위해서 임시 저장한 정보들을 바로 뿌려주는 기술이다. 웹 캐시가 자신의 저장소 내에 요청된 리소스를 가지고 있다면, 그 요청을 가로채 원래라면 서버에서 리소스를 가져오겠지만, 리소스의 복사본(프록시) 를 통해 데이터를 가져오게 된다. 성능이 향상되는건 말할 것도 없지만, 이 리소스가 영원히 변하지 않는 것은 아니기 때문에 가지고 있던 값이 변하기 전까지만 캐시로 유지하고 더 이상은 캐싱을 하지 않아야 한다. 사설 브라우저 캐시 이 캐시는 한 사용자 전용의 캐시이다. 예로, 크롬 브라우저를 켰을때 브라우저 자체는 이 사용자만의 캐시를 고유하게 갖고 있다. 이게 사용자마다의 개개인의 캐시로 기록이 되어있기 ..

CS 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
728x90
반응형