SPRING 12

RedisRepository 이용하여 refreshToken 관리하기

설정 라이브러리 추가 스프링 부트에서는 spring data redis 라이브러리가 필요하므로 build.gradle 에 의존성을 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-data-redis' 이를 통해 Lettuce, Jedis라는 두개의 오픈소스 라이브러리를 사용할 수 있다. Lettuce는 별도 설정 필요x, Jedis 는 별도의 의존성이 필요하다. Redis를 설정하는 두가지 방식 spring data redis가 제공하는 방법은 2가지이다. - RedisTemplate - RedisRespository spring data redis에 내장되어 있는 lettuce를 사용하고, 이번에는 RedisRepository을 ..

SPRING 2024.02.07

Redis 사용방법 (feat. RedisTemplate)

설정 라이브러리 추가 스프링 부트에서는 spring data redis 라이브러리가 필요하므로 build.gradle 에 의존성을 추가해준다. implementation 'org.springframework.boot:spring-boot-starter-data-redis' 이를 통해 Lettuce, Jedis라는 두개의 오픈소스 라이브러리를 사용할 수 있다. Lettuce는 별도 설정 필요x, Jedis 는 별도의 의존성이 필요하다. Redis를 설정하는 두가지 방식 spring data redis가 제공하는 방법은 2가지이다. - RedisTemplate - RedisRespository spring data redis에 내장되어 있는 lettuce를 사용하고, RedisTemplate을 설정해보자. ..

SPRING 2024.02.06

[Swagger] RequestHeader 설정하기

환경 - spring boot : 2.6.3 - springfox 도입 배경 개인 프로젝트를 만들던중, swagger에서 회원정보를 얻는 api 를 실행했다. request header 에 토큰 값을 넣었는데 자꾸 에러가 났다. @GetMapping @PreAuthorize("hasRole('MEMBER')") public ResponseEntity getProfileInfo( @RequestHeader("Authorization") String token){ return ResponseEntity.ok("welcome!"); } Required request header 'Authorization' for method parameter type String is not present postman에서는..

SPRING 2024.01.29

[Feign Client] 정리 및 사용법

Feign Client 메일 발송 서비스인 mailgun를 스프링환경에서 간편하게 호출하기 위해서는 feign client라는 라이브러리가 필요하다. spring-cloud-starter-openfeign 으로 라이브러리를 추가해주면 된다. JPA처럼 인터페이스만 만들어주면 스프링이 자동으로 구현체를 만들어준다. mailgun 사용법은 여기를 보면된다. https://documentation.mailgun.com/en/latest/quickstart-sending.html How to start sending email — Mailgun API documentation Add a domain you own and verify it by setting up the DNS records we provide ..

SPRING 2024.01.25

[QueryDSL] 정리 및 spring boot에서 사용법

Spring JPA 이커머스 프로젝트를 진행하면서 jpa를 사용하였다. 덕분에 sql을 직접 작성하지 않고 메서드를 통해서 쿼리를 구현하였지만,, OneToMany 관계를 가지는 구조에서 직접적인 연관관계가 없다면, many 쪽에서 one의 엔티티를 가져오는것이 번거롭다. Product : 나이키 에어포스 ProductItem : 260 ProductItem_status : 품절 status로부터 해당 product를 가져오기 위해서는 jpa 로는 안되고 엔티티 내부를 들어가서 비교문과 반복문을 통해 가져와야한다. 또한 가져오는 과정에서 모든 필드가 넘어오므로 원하는 필드만 가져오는것도 불가능하다. Dto를 따로 만들어 반환한 이유이다. @Query를 이용한 JPQL sql문을 직접 쓰는거라 오타날 확률..

SPRING 2024.01.21

Swagger 사용방법(feat.springdoc)

Swagger swagger는 api 문서 작업을 대신해주는 OpenAPI Specification 프레임워크이다. 백엔드와 프론트엔드가 소통하기 위해서는 restfulAPI로 작성한 코드를 정리한 문서가 필요하다. /user/signup : user 회원가입 /user/login : user 로그인 /user/mypage : user 마이페이지 등등 api 스펙들을 적어놓는다. 이런식으로 수동으로 문서 작업하는것은 시간도 잡아먹고 실수할 우려도 있다. (사실 귀찮다) swagger는 이러한 문서 작업을 자동으로 대신 해주고 해당 문서를 /swagger-ui/ 로 접근하면 문서 페이지를 그려준다. 또한 포스트맨에서 했던 요청 테스트도 swagger ui 페이지를 통해 가능하다. 어떻게 대신 해주는거지 스..

SPRING 2023.12.30

3. 인증 관련 구조와 내부 동작

Structure 일단 인증관련 전체적인 구조는 다음과 같다. 1. 필터를 통해 들어온 요청이 아직 인증되지 않은 것이라면 2. 인증을 시작한다. 3. 또는 요청이 AccessDeniedException이라면 접근을 거부한다. 인증 과정을 살펴보자 SecurityContextHolder 사용자 정보인 principal을 Authentication에서 관리하고 Authentication은 SecurityContext가 관리하고 SecurityContext는 SecurityContextHolder가 관리한다. SecurityContextHolder의 주요한 역할은 SecurityContext를 스레드와 연결시켜서 Authentication을 저장하도록 하는것이다. SecurityContextHolder의 T..

SPRING 2023.12.23

2. Spring Security란?

Spring Security 스프링에서의 인증방식 Credential 기반 - Principal(접근 주체): 보호받는 Resource에 접근하는 대상 (id) - Credential(비밀번호): Resource에 접근하는 대상의 비밀번호 (pw) Spring Security는 스프링 기반의 어플리케이션의 인증과 인가를 담당하는 프레임워크이다. 매 요청마다 유저에 대한 Authentication 과 Authorization 를 검증한다. Filter를 이용하여 사용자의 요청 및 서버의 응답을 전후처리를 한다. 왜 굳이 Filter를 쓸까? Interceptor로도 할 수 있는데 인증되지 않은 사용자의 요청이라면 스프링 컨테이너로 접근하기 전에 웹 컨테이너에서 거르른 것이 더 효율적이기 때문이다. Spri..

SPRING 2023.12.23

1. 인증 방법 - 쿠키,세션,jwt

인증 유저가 서비스의 회원임을 확인하는 것을 인증(Authentication) 이라고 한다. 인증된 유저만이 특정 기능을 사용하도록 하는것을 인가(Authorization) 라고 한다. 유저가 회원가입을하고, 로그인을 해서 자신이 관심있는 회사를 조회한다고 가정해보자. 로그인된 유저만이 관심회사 조회 기능을 쓸수 있다고 한다. 유저를 인증 한 뒤, 해당 기능에 대해 유저를 인가하면 될것같다. 그렇다면 인증을 어떻게 해야할까? 아이디와 비밀번호를 생성해서 디비에 저장하고, 유저가 아이디와 비밀번호를 쳤을때 일치하면 보내주면 되지 않나? 웹 사이트는 HTTP 통신 위에서 동작한다. 따라서 웹 사이트 내의 모든 요청과 응답은 stateless하다. (서버에서 Client의 이전 상태를 기억못함.) -> 반복적..

SPRING 2023.12.23

Packaging Jar VS War

스프링부트에서 프로젝트를 세팅할때, Packaging를 Jar 또는 War로 선택할 수 있다. 여기서 Packaging란 무엇일까? Packaging 배포 & 배포를 위한 자바 응용 프로그램이다. 애플리케이션을 실행하는데 필요한 파일과 리소스를 구조화시켜 아카이브를 만드는 것을 패키징이라고 한다. 그래서 패키징 유형 이름도 Jar ( Java Archive) War (Web Application Archive) 인 것이다! Jar Java 어플리케이션이 동작하도록 자바 프로젝트를 압축한 파일이다. Java 리소스와 속성 파일 + 라이브러리 파일 JRE만으로도 실행 가능하다. 즉 별도의 웹서버 없어도 자바가 설치된 모든 시스템에서 실행가능하다는 뜻. War servlet / jsp 컨테이너에 배치 할 수 ..

SPRING 2023.12.07