스프링 11

[Spring Security] 스프링 시큐리티가 사용자를 이해하는 방법

스프링 시큐리티가 사용자를 이해하는 방법 목표 Spring Security가 사용자를 이해하기 위한 인터페이스, UserDetails를 이해한다. 사용자를 찾고 관리하는 UserDetailsService을 이해한다. 최소한의 정보를 가진 User Entity를 사용하여 엔드포인트에 접근하는 방법을 배운다. 시작하기에 앞서, 스프링 시큐리티의 전체 인증 프로세스를 보자. 오늘은 아래 프로세스 중에, 사용자를 식별하는 User details service에 대한 내용을 정리할 것이다. UserDetails 스프링 시큐리티가 사용자의 인증/인가에 필요한 정보를 정의한 인터페이스이다. 다르게 표현하면, 시큐리티가 바라보는 사용자를 정의한 것이다. 코드는 아래와 같다. package org.springframew..

스프링 2024.03.26

[Spring Security] HTTP Basic Authentication를 사용한 간단한 인증 처리

HTTP Basic Authentication를 사용한 간단한 인증 처리 목표 spring security를 사용하여 간단한 인증 프로세스를 구현하고 구성 요소를 재정의해보자. Basic Authentication이란? 사용자를 식별하는 방법 중에 가장 단순한 방법이다. http 헤더에 username과 password를 넣어 인증하는 방식이다. Authorization 헤더에 "Basic"과 "username:password"의 base64 인코딩 값을 넣어준다. (인증과 인가에 대해 알고 있다면, basic authentication인데 왜 Authorization에 넣을까?하는 의문이 들 수 있지만, 관례에 따른 것이므로 넘어가자) spring security 의존을 추가한 후 아무런 설정을 하지 ..

스프링 2024.03.26

QueryDSL 쪄먹기

querydsl JPA와 querydsl querydsl 시작하기 EntityManager와 JPAQueryFactory를 주입/생성한다. private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } @Bean JPAQueryFactory jpaQueryFactory(EntityManager em) { return new JPAQueryFactory(em); } 위처럼 직접 Constructor를 작성해도 좋고, 아래처럼 스프링 컨테이너가 ..

스프링 2023.10.23

QueryDSL 볶아먹기

QueryDSL 프로젝션과 반환 프로젝션이란? 질의하는 대상이다. select member.name from member처럼 간단한 질의의 프로젝션은 String, 하나의 타입만을 가진다. 물론 select member from member 역시 하나의 타입, Member를 가진다. 두 개 이상의 타입을 가지면 querydsl에서 제공하는 Tuple 타입을 사용하게 된다. Tuple타입을 persistence layer 이외에서 사용하는 것은 좋지 않다. 이를 변환할 DTO를 정의하여 사용한다. DTO 조회 그럼 이제 DTO로 조회하는 법을 알아보자. 순수 JPA 순수 JPA로 작성하면 다음과 같다. List result = em.createQuery( "select new study.querydsl.d..

스프링 2023.10.22

QueryDSL 먹어버리기

QueryDSL 특징 자바 코드로 query를 보낼 수 있다. -> 컴파일 과정에서 문법 오류를 발견할 수 있다. 세팅 build.gradle plugins와 queryDSL이 자동으로 생성하는 디렉토리 경로 plugins { id 'org.springframework.boot' version '2.2.2.RELEASE' id 'io.spring.dependency-management' version '1.0.8.RELEASE' //querydsl 추가 id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id 'java' } //querydsl 추가 시작 def querydslDir = "$buildDir/generated/querydsl" querydsl..

스프링 2023.10.20

테스트 코드 정의와 이점, 왜 해야 할까? 그리고 무엇을 해야 할까?

테스트 코드 정의와 이점, 왜 해야 할까? 그리고 무엇을 해야 할까? 안녕하세요. 오늘은 테스트 코드에 대해 무엇이고, 왜 해야 하고, 어떻게 하면 되는 지를 알아보겠습니다. 테스트 코드를 작성하면 좋은 점 Tomcat을 실행하지 않고 제대로 동작하는 지 확인할 수 있습니다. 새로운 기능을 추가할 때, 이전에 작성했던 기능이 제대로 작동하는 것을 보장합니다. 사람이 검증하지 않습니다. 단위 테스트를 문서로 사용할 수 있습니다. 왜 테스트해야 할까? 왜 테스트해야 하는 지에 대해서는 이견이 없습니다. 모두가 해야 한다고 생각하기 때문이죠. 이런 고민을 하는 이유는 테스트 코드를 작성하기 귀찮은데 웹사이트로 구현했으면 localhost로 확인하고 postman으로 응답을 받아보면 확인이 된다고 생각하기 때문..

스프링 2023.07.08

JPA란?

JPA란? Java Persistence API 자바의 ORM 기술표준이다. 다르게 표현하면, 'ORM을 구현하려면 자바에서는 이렇게 하자!' 하는 명세서다. 그리고, Hibernate는 JPA를 구현한 라이브러리 중 하나이고 가장 보편적이다. 그래서 뭘 할 수 있는데? 자바로 관계형 데이터베이스를 다룰 때, 객체지향 언어인 자바와 스키마 중심 데이터베이스의 패러다임 차이를 극복하여 객체중심 데이터 설계를 가능하게 한다. 사실 위처럼 설명하면 나는, '뭐만 하면 객체중심이여' 하곤 했다. 뭔지는 모르겠지만 스프링이 객체 지향적으로 설계할 수 있다고 하면, 객체 지향이 가지는 상속, 참조를 통한 연관관계(구성)를 SQL로 풀어낼 때는 '번역'과도 같은 작업이 필요하다. 위 내용은 받아드릴 수 있지 않을까?..

스프링 2023.07.06

서블릿이 뭔데?

서블릿에 대해 알아보자 Jakarta Servlet 한 줄 설명 Wiki A Jakarta Servlet (formerly Java Servlet) is a Java software component that extends the capabilities of a server. 클라이언트 요청을 처리할 때, 비즈니스 로직을 제외한 request message parsing, response message 생성 등을 담당 부연설명 서버는 클라이언트로부터 요청을 받는다. 브라우저의 http 요청을 해석하기 위해 서블릿은 요청 메세지를 parsing한다. 또한, HttpServletRequest, HttpServeltResponse 객체를 생성하고 요청에 따른 비즈니스 로직 실현 후, Response 객체에 내..

스프링 2023.06.07