본문 바로가기

Backend

(35)
[Spring/SpringBoot] Spring Security - Remember Me 안녕하세요. 이번 포스팅에서는 Spring의 Remember-me 즉 로그인 기억하기 기능에 대해 살펴보겠습니다. Session 보통 일반적인 웹 서비스에서, Client가 로그인을 하게 되면 세션 Id가 서버로부터 부여됩니다. 이는 이 사용자에 대한 인증이며, 서버에서 따로 관리하며 이 인증정보로 서버의 리소스들을 접근할 수 있게 됩니다. 하지만 당연하게도 이 세션 Id는 취약합니다. Client가 지워버릴 수도 있고, Server가 꺼졌다가 재시동되면 당연히 Client들의 세션 Id를 보관하던 저장소도 사라지게 됩니다. 이렇게 되면 로그인 정보가 사라지게 됩니다. Spring tomcat은 기본적으로 session timeout을 30분 정도로 가지고 있습니다. 이 말은 로그인을 해도 30분이 지나..
[Spring/SpringMVC] spring 빌드 시 npm 라이브러리 추가하기 안녕하세요. 이번 포스팅에서는 spring 빌드 시에 npm 라이브러리를 추가하는 방법에 대해 포스팅하도록 하겠습니다. 저희가 흔히 타임리프 혹은 jsp와 같은 템플릿 엔진을 사용하게되면, javascript라이브러리를 링크를 통해 첨가하는 경우가 많습니다. 가령 html head태그에 위와 같이 https:~~ 링크를 통해 해당 라이브러리를 추가하는 경우를 볼 수 있습니다. 특별한 경우가 아니면 위 방식도 괜찮은 방법입니다. 하지만 생각을 조금 바꾸어보면, 링크주소가 변경되거나 추가 버전이 릴리즈 되어 구 버전을 더 이상 활용할 수 없게 될 수도 있습니다. 또한 네트워크 문제에 따라 서비스가 불안정해질 수도 있습니다. 만약에 위 라이브러리들을 사전에 받아놓고, 저희가 빌드 시에 추가할 수 있다면 위 방..
[Spring/SpringBoot] SpringSecurity를 API Server에 적용하기(JWT) 안녕하세요. 오늘 포스팅에서는 Rest Api Server에 Spring Security를 적용시켜 인증된 권한을 가진 유저에게만 요청을 허용하는 방법에 대해 알아보도록 하겠습니다. 우선 spring security를 사용하시려면 gradle 기준 다음의 dependency를 추가하셔야 합니다. implementation 'org.springframework.boot:spring-boot-starter-security' 1. Spring Security 스프링에서 인증 및 권한 부여를 쉽게 도와주는 spring security framework를 제공해줍니다. spring boot 기반 프로젝트를 진행 중이시라면 별도의 보안 관련 처리 없이 spring security를 적용하여 사용하실 수 있습니다. ..
[Spring/SpringBoot] RestController에서 Validation Api 사용하기 + MethodArgumentNotValidException 예외 처리하기 안녕하세요. 오늘은 Validation(유효성 검사)의 예외처리에 대해 살펴보겠습니다. 이번에 스프링으로 프로젝트를 진행하게 되었는데, Account 관련 처리를 맡게 되어 회원가입에 관한 Validation 인증을 구현해야 하는 상황이었습니다. ControllerAdvice에서 class를 받아 구현하려 하니, 잘 작동이 되지 않아 제가 사용한 방법을 포스팅하려 합니다. 제가 사용한 SignUpForm은 다음과 같이 정의하였습니다. package com.SCAR.Account; import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.Email; import javax...
[Spring/SpringBoot] 예외처리 Controller 정의하기 안녕하세요. 이번 포스팅에서는 restful service에서 발생하는 예외처리를 하는 방법에 대해 알아보려 합니다. 우선 사용할 샘플 코드는 다음과 같습니다. @GetMapping("/Account/{id}") public Account retrieveUser(@PathVariable int id) { Optional findAccount = accountRepository.findById(id); if(findAccount.isEmpty()) return null; return findAccount.get(); } 저의 Account Controller에서 /Account/{id}라는 주소로 GetMapping을 받겠습니다. 내부적으로는 JpaRepository를 구현한 accountRepositor..
[Java] Collections framework 이해하기 이번 포스팅에서는 Collections Framework에 대해 이해하는 시간을 갖도록 하겠습니다. 본 포스팅은 생활코딩님의 Java Collections framework를 참고하였습니다. (https://www.youtube.com/watch?v=KaPbVAxi5LE) 1.ArrayList import java.util.ArrayList; public class MainClass { public static void main(String[] args) { String[] objectArr = new String[2]; objectArr[0] = "1"; objectArr[1] = "2"; // objectArr[2] = "3"; ArrayList al = new ArrayList(); al.add("..
[Java] 제네릭 이해하기 안녕하세요. 오늘 포스팅에서는 JDK1.5 이후로 추가된 자바의 제네릭스에 대해 포스팅해보겠습니다. 1. 제네릭이란? Generics add stability to your code by making more of your bugs detectable at compile time. – Oracle Javadoc 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. – 생활코딩 지네릭스는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. – 자바의 정석 기본적으로 클래스 내부에서 사용할 데이터타입을 사전에 정의하지 않기 때문에 인스턴스 생성 시에 해당 클래스 안의 데이터 타입을 동적으로 넘겨줄 수 있습니다. 또한 ..
[Database] 예제로 보는 데이터베이스 정규화 안녕하세요. 오늘 포스팅에서는 데이터베이스의 정규화에 대해 알아보겠습니다. 우선 본 포스팅에 앞서 사용한 자료는 이 링크에서 참조하였으며, 유튜브 생활코딩님의 강의를 기반으로 합니다. 1. 정규화란? 우선 기본적인 정규화의 의미를 살펴보면, 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라 합니다. 즉 데이터베이스가 크고 구조화되지 않은 상태라면, 이를 작고 잘 구조화시켜서 저희가 원하는 비즈니스 로직을 수행하는 데에 있어 이상이 없고 효율적으로 처리할 수 있는 데이터베이스 설계를 구축하는 것에 그 목적이 있습니다. 여기서 말하는 이상(문제)란 다음과 같습니다. 갱신 이상 ( Modification Anomaly ) 중복된 데이터 중 일부를 갱신할 때 의도치 않은 데..