Spring Security - Spring Security란?
·
Spring
Spring Security란?Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다.Spring Security는 인증과 권한에 대한 부분을 Filter 흐름에 따라 처리한다.Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller 사이에 위치한다는 점에서 적용 시기의 차이가 있다.Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. 인증관련 architecture 인증(Authentication)과 인..
Spring - Spring initializr로 프로젝트 생성하기
·
Spring
매번 프로젝트를 사용하지만 헷갈리는 기능들이 있어서 정리해 본다. Spring initializr 스프링 프로젝트를 쉽게 만들 수 있도록 Spring에서 제공하는 기능이다. 아래 링크를 통해 이동할 수 있다. https://start.spring.io/ 그러면 아래와 같은 화면이 나온다.\ Project 사용할 빌드 툴을 선택한다. 이전에는 Maven을 사용했지만 지금은 보통 Gradle을 사용한다. Language 사용하려는 언어를 선택한다. Spring Boot Spring Boot 버전을 선택한다. 개발 중인 버전(SNAPSHOT), 정식 릴리즈되지 않은 버전(M1)이 붙지 않은 버전인 정식 릴리즈 버전을 사용하면 된다. Project Metadata 사실 이 메타데이터 부분이 매번 헷갈려서 이 글..
Spring - Thmbnail 이미지로 웹 성능 향상시키기
·
Spring
얼마 전 S3로 이미지를 저장하고 저장된 이미지의 URL을 반환하는 기능을 구현했다.하지만 한 가지 문제가 있었는데, 고용량의 이미지가 그대로 올라간 것이다. Thumbnail 이미지를 생성하는 이유썸네일 이미지를 생성하면 이미지의 파일 크기를 크게 줄일 수 있다. 즉, 이미지가 더 빨리 전송되기때문에 웹 성능이 향상된다. 더 좋은 사용자 경험을 전달할 수 있다.더 작은 용량의 이미지를 전달하기 때문에 서버의 부하를 줄이고 더 많은 요청을 동시에 처리할 수 있다.Thumbnail 이미지를 생성해서 사용자 경험을 개선하고 리소스 사용량을 줄여보자 AmazonS3ResourceStorage보통 원본 이미지와 썸네일 이미지를 같이 저장하지만 우리 서비스에서 이미지는 챌린지 참여 인증 사진용으로 일회용으로 사용..
Spring - Jasypt를 사용해서 application.yml 프로퍼티 암호화하기
·
Spring
프로젝트를 진행하다 보면 각종 민감한 Password와 같은 프로퍼티를 외부로부터 안전하게 보관해야 할 일이 많다. 실수로라도 Github에 업로드한다면 끔찍한 일이 벌어질 것이다... 이럴 때 사용할 수 있는 Jasypt 라이브러리 사용법에 대해 araboza Jasypt는 자바 애플리케이션의 설정파일(application.yml, application.properties 등)을 암호화할 수 있도록 지원하는 라이브러리다. 암호화된 설정 파일은 애플리케이션의 버전관리 시스템에서 안전하게 관리할 수 다. 아래는 Jasypt를 사용하여 스프링 부트 애플리케이션에서 application.yml 파일의 값을 암호화하는 방법이다. 1. Jasypt 의존성 추가 build.gradle 파일에 아래와 같이 의존성을 ..
Spring - Spring으로 AWS S3에 이미지 업로드하기2: Spring에서 기능 구현
·
Spring
이전 글 참고! AWS - Spring으로 AWS S3에 이미지 업로드하기1: S3 버킷과 IAM 생성 이번에 진행하는 프로젝트에서 AWS S3에 파일을 저장/수정/삭제할 수 있는 기능 구현을 담당하게 되었다. 버킷 생성부터 업로드 로직 구현까지의 과정을 정리해 본다. S3를 사용하는 이유 S3는 거 green-bin.tistory.com Gradle Dependency build.gradle implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' 어플리케이션 환경설정 application.yml cloud: aws: s3: bucket: challenge66.file.bucket # s3 버킷 이름 region:..
Spring Security - OAuth2와 JWT로 로그인 구현하기(Kakao, Google, Naver)
·
Spring
나는 새로운 서비스를 이용할 때 매번 새로운 아이디와 비밀번호를 생성하는 것을 별로 좋아하지 않는다. 보통 구글이나 카카오 로그인을 선호한다.OAuth2는 사용자가 특정 서비스에 직접 회원가입을 하지 않고 접근 권한을 부여 받을 수 있도록 해준다. 이를 통해 애플리케이션의 보안성과 사용자 경험을 향상 시킬 수 있다. 이번에 진행하는 프로젝트에서 Spring Security와 OAuth2.0으로 카카오, 구글, 네이버 로그인 기능을 담당하게 되었다.3개의 로그인 기능을 구현해야되서 부담스러웠는데, Spring Boot에서 신경 써야할 부분들을 상당 부분 대신 해줘서 개발하기 수월했다.(하지만 시큐리티는 어렵다..)어떤식으로 구현했는지 정리해본다.기본적인 Spring Security 설정은 팀원이 담당하였기..
Spring - Scheduler로 매일 자정 실행되는 로직을 짜보자
·
Spring
팀 프로젝트를 진행하면서 꽤 머리 아픈 로직을 담당하게 되었다. Spring Scheduler를 사용해서 매일 자정 실행되는 로직을 짜는 것이다. 앞서 프로젝트를 간단히 소개할 필요가 있겠다. '66Challenge'는 66일 동안 올바른 습관을 만들 수 있도록 도와주는 목표 달성 서비스이다. 66Challenge는 특정 습관을 시작하면 66일 동안 쉬지 않고 인증해야 한다. 단, 두 개의 와일드카드가 주어지기 때문에 2일 정도는 참여하지 않아도 문제가 없다. 와일드카드를 모두 소진한 후 하루라도 인증을 하지 않으면 자동으로 습관 실패 처리가 된다. { int wildcardCount = challenge.getWildcards() == null ? 0 : challenge.getWildcards().s..
Spring - No Offset 페이지네이션으로 페이징 성능을 개선해보자!
·
Spring
웹 서비스에서 페이지네이션은 흔하게 사용되는 기능 중 하나이다. 현재 진행중인 66Challenge에서도 페이지네이션이 기능이 필요했고 JPA에서 기본적으로 제공하는 Offset 페이지네이션을 적용했다. Offset 페이지네이션은 Pageable 객체를 통해 페이지네이션을 구현하는 방식이다. // Offset Pagination SELECT * FROM 테이블 WHERE 조건문 ORDER BY id DESC LIMIT 컨텐츠개수 OFFSET 페이지번호 * 컨텐츠개수 하지만 Offset 페이지네이션에는 두 가지 문제점이 있었다.😕 이번에는 이 문제점을 어떻게 해결하여 페이징 성능을 개선했는지에 다뤄 보려고한다. Offset 페이지네이션의 문제점 1. 뒤로 갈수록 심해지는 성능 저하 Offset 페이지네이션..
Spring - 의존관계 주입(DI) 4가지 방법
·
Spring
의존성 주입은 크게 4가지 방법이 있다. 4가지 주입 방법과 어떤 방법을 사용하는 것이 바람직한지 알아보자 생성자 주입 setter 주입 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입하는 방법이다. 생성자 주입은 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 변하지 않으며(불변), 반드시 필요한(필수) 의존관계에 사용한다. @Component public class ServiceImpl implements Service { private final MemberRepository memberRepository; // 생성자 주입 @Autowired // 생성자가 1개만 있으면 생략 가능(스프링에서만 가능) pulic ServiceImpl(MemberRepository m..
Spring - 옵션 처리 3가지 방법
·
Spring
의존관계 주입은 스프링 빈에 등록이 되어 있을 때 정상적으로 동작한다. 하지만 개발자의 실수로 인해서 또는 특수한 상황에 주입할 스프링 빈이 없어도 동작해야 하는 경우가 있다. @Autowired는 기본값이 required = true 로 설정되어있기 때문에 주입 대상이 없으면 오류가 발생한다. 이 때 자동 주입 대상을 옵션으로 처리하여 오류를 막을 수 있다. 옵션 처리하는 3가지 방법에 대해 알아보자 @Autowired(required = false) org.springframework.lang.@Nullable Optional @Autowired(required = false) 자동 주입할 대상이 없으므로 호출 자체가 되지 않는다. @Autowired(required = false) public vo..
Cold Bean
'Spring' 카테고리의 글 목록 (3 Page)