Framework

Framework/Spring

[SpringBoot] @RedisHash를 이용한 Spring Data Redis Repository 적용기

Redis란? Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)이다. 데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소이다. String, List, Sets, SortedSets, Hashes 자료 구조를 지원하며 데이터를 디스크에 쓰는 구조가 아닌 메모리에서 데이터를 처리하기 때문에 속도가 빠르다. Spring Boot에서 Redis 사용하기 Spring Boot에서 Redis 인메모리 저장소를 사용하는 것에는 2가지 방법이 있다. RedisTemplate String refreshToken = jwtTokenProvider.createRefreshToken(); ValueOperatio..

Framework/Spring

[SCG] Spring Cloud Gateway는 왜 Netty 기반으로 만들어졌을까? 그리고 WebFlux란?

Blocking I/O를 보완한 Spring Cloud Gateway 자바 진영에서도 Non-blocking 기술이 등장하기 시작하였다. Blocking 기술의 경우 하나의 요청 당 하나의 스레드를 보장한다. 이러한 경우 여러 개의 스레드를 두더라도 딱 그 갯수만큼만의 요청을 처리할 수 있고, 다른 요청들은 모두 Ready queue에서 기다리게 되는 것이다. 대용량 트래픽을 처리하기 위해서는 하나의 스레드 당 여러 요청을 수행할 수 있어야 한다. Spring Cloud Gateway가 비동기 처리를 수행하는 Netty 기반 Reactive Web application으로 구동되는 이유도 동일하다. 전통적인 방식으로 Blocking 방식을 사용하는 Tomcat과 같은 WAS를 사용하게 되면 많은 요청을 ..

Framework/Spring

[SpringSecurity] JWT 정보를 이용해 Controller에서 현재 로그인한 사용자의 정보 추출하기

JWT로 로그인한 경우에 사용자의 정보를 가져와 Controller에서 사용해야하는 상황이 있다. JWT 토큰을 생성하는 코드에서 Claims 에 넣은 정보를 현재 토큰에서 추출하는 방법으로 구현할 수 있는데, 이를 코드로 정리해보려 한다. 내가 만든 서비스에서는 사용자가 이메일과 패스워드를 입력하여 로그인하는 방식으로 구현되어있다. 사용자의 이메일을 JWT 에서 추출해 현재 로그인된 사용자 객체 Member을 가져오는 예제를 보여주도록 하겠다. JwtUtil createToken 메소드 public static String createToken(String mail, String key, long expireTimeMs) { Claims claims = Jwts.claims(); claims.put("..

Framework/Spring

[SpringSecurity] JWT (Json Web Token) 기반의 인증 인가 구현하기

JWT란 ? Json web token의 줄임말로, JSON 포맷으로 인증 정보를 저장하는 Claims 기반의 Web Token이다. 구조는 Header, Payload, Signature로 이루어져있으며 각각의 특징은 아래와 같다. (1) Header : 타입을 저장하는 typ, HS256과 같이 문자열을 해싱하는 알고리즘을 저장하는 alg로 이루어져 있다. (2) Payload : 정보의 단위인 Claim이 저장되며, 토큰의 발급자, 제목, 만료 시간 등의 정보가 Claim 단위로 저장된다. (3) Signature : 토큰 암호화 코드가 저장된다. Token 기반의 인증은 Session 인증과 달리 서버에 로그인 요청 시 헤더에 토큰을 포함하여 함께 보내고, 서버가 아닌 클라이언트에 저장되어 URL..

Framework/Spring

[3주차] Spring Security 구글 소셜 로그인 구현, 세션 관리

소셜 로그인을 구현하기에 앞서, 구글 로그인을 연동하기 위해 아래 링크에서 Oauth Client id를 생성한다. https://console.cloud.google.com/home/dashboard?project=long-sonar-350806 Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요. accounts.google.com resources 디렉토리에 application-oauth.properties를 추가해서 아래와 같이 클라이언트 ID, Secret 값을 넣어 초기화해준다. (.gitignore에 해당 설정파일 추가해주기 필수!) spring.security.oauth2.client.regis..

Framework/Spring

[2주차] Mustache를 이용한 게시글 CRUD 화면 및 기능 구현

템플릿 엔진(Template Engine) 입력 자료를 가공하여 결과물(웹 문서)을 출력하는 소프트웨어를 의미한다. 웹 템플릿 엔진에는 두 가지 종류가 있는데, 1) 서버 템플릿 엔진 (Server Side Template Engine) : 서버에서 가져온 데이터를 Template 엔진에 넣어서 HTML을 생성, 클라이언트에 전달해주는 역할을 한다. ex) JSP(Java Server Page) : 서버 템플릿 엔진을 이용한 화면 생성. 서버 단에서 Java 코드로 문자열을 만든 뒤 이 문자열을 HTML로 변환하여 브라우저로 전달한다. 2) 클라이언트 템플릿 엔진 (Client Side Template Engine) HTML 형태로 코드를 작성, 동적으로 DOM(Documnet Object Model) ..

Framework/Spring

[1주차] 스프링 부트 테스트 코드 작성, JPA로 데이터베이스 접근하기

1. 개요 01장 인텔리제이로 스프링 부트 시작하기 02장 스프링 부트에서 테스트 코드를 작성하자 03장 스프링 부트에서 JPA로 데이터베이스를 다뤄보자 2. 요약 @Test public void helloDto가_리턴된다() throws Exception{ String name = "hello"; int amount = 1000; mvc.perform(get("/hello/dto") .param("name", name) .param("amount", String.valueOf(amount))) .andExpect(status().isOk()) .andExpect(jsonPath("$.name", is(name))) .andExpect(jsonPath("$.amount", is(amount))); } C..

Framework/Spring

Spring 첨부파일 다운로드 코드 리팩토링

2022.03.05 - [Web Development/스프링\JPA] - Spring 첨부파일 다운로드 구현하기 Spring 첨부파일 다운로드 구현하기 첨부파일이 이미지인 경우, 클릭했을 때 화면에 크게 원본 파일을 넘겨줘야 하고, 일반 첨부파일인 경우에는 다운로드를 기본으로 실행해야 한다. MIME 타입이란? https://developer.mozilla.org/ko/docs/Web/ mingyum119.tistory.com 위의 게시물의 코드를 리팩토링한 과정을 기록해보겠다! 참고한 사이트 : todyDev :: Spring 개발 - 게시판 만들기 #첨부파일 다운로드 (tistory.com) Spring 개발 - 게시판 만들기 #첨부파일 다운로드 이전 게시글에서 파일을 업로드했다면, 이번에는 업로드된..

Framework/Spring

[IBAS] 첨부파일 업로드(FileService, FileController) WebMvcTest

첨부파일 업로드 테스트 먼저 윈도우 서버에 첨부파일을 업로드하는 Service 계층의 테스트를 진행해보았다. ServerFileService의 upload method public List uploadFile(List uploadFile) { List fileDtoList = new ArrayList(); String uploadFolder = "C:\\upload"; String uploadFolderPath = getFolder(); File uploadPath = new File(uploadFolder, uploadFolderPath); if (uploadPath.exists() == false) { uploadPath.mkdirs(); } for (MultipartFile multipartFile..

MINGYUM
'Framework' 카테고리의 글 목록