목록Back-end (14)
쏭의 개발 블로그
지난 포스트에서의 Spring Boot와 Redis 연동 과정에서 언급했던 RedisSerializer 선택 기준에 대해 이 포스트에서 다뤄보고자 한다. Spring은 총 3가지 직렬화/역직렬화 클래스를 제공한다.JdkSerializationRedisSerializer, GenericJackson2JsonRedisSerializer, Jackson2JsonRedisSerializer 3가지를 지원한다.각 Serializer에 대해 알아보자. [1] JdkSerializationRedisSerializerJdkSerializationRedisSerializer는 Java의 기본 직렬화 기법인 JDK 직렬화를 사용하여 객체를 처리한다. RedisTemplate의 기본 직렬화 방식으로, 별도로 등록된 Seri..
프로젝트에서 Redis 관련 전역 환경 설정을 위해 Spring Boot와 Redis를 연동했다. 연동 방법과 그 과정에서 어떤 것을 고민했는지 기록하려고 한다. [1] Redis 의존성 추가 및 application.yml 설정먼저 Spring Boot에서 Redis를 사용하기 위한 의존성을 추가해보자. build.gradle에 Spring Data Redis 의존성을 추가해주면 된다. Spring Data Redis는 Spring에서 Redis연동을 쉽게 해주는 라이브러리로, RedisTemplate, StringRedisTemplate, Spring Cache 등의 기능을 제공한다.implementation 'org.springframework.boot:spring-boot-starter-data-..
[1] JWT란?JWT는 RFC 7519 웹 표준으로 지정된 JSON 객체를 사용해서 토큰 자체에 정보를 저장하는 Web Token이다. 사용자의 인증 정보를 안전하게 전달하기 위한 방식이라고 생각하면 된다. JSON 데이터를 Base 64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 HMAC, RSA, ECDSA 등의 암호화 방식을 사용한 전자 서명도 들어있다. 여기서 Base URL-safe Encode는 일반적인 Base 64 Encode에서 URL에서 오류 없이 사용하도록 '+'와 '/'를 '-'와 '_'로 표현한 것이다.JWT는 서버가 사용자에게 발급하며, 사용자는 이를 활용하여 서버와의 통신에서 자신을 입증할 수 있게 된다. (1) 구조aa..
1. Soft Delete 논리 삭제Soft Delete는 데이터베이스에서 데이터를 삭제하지 않지만 사용자 입장에서는 데이터에 접근 할 수 없게 하는 방식이다.테이블에 deleted 컬럼을 만들어 boolean 값으로 데이터 사용 여부를 결정한다고 생각하면 된다. deleted가 false면 조회가 가능하도록 하고 deleted가 true면 조회가 불가능하도록 한다. 데이터가 삭제된 것처럼 해당 데이터에 사용자가 접근할 수는 없지만 데이터베이스에서 여전히 데이터가 존재한다. 장단점Soft Delete의 장점은 다음과 같다.데이터 복구 쉬움 : 실수로 삭제해도 UPDATE를 사용하여 복구할 수 있다.참조 무결성 유지 : 다른 테이블에서 참조 중인 데이터를 유지하면서 삭제가 가능하다.삭제 로그 관리 용이 :..

💡 OAuth 2.0이란? OAuth 2.0이란?OAuth 2.0은 인증을 위한 개방형 표준 프로토콜입니다. 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준이라고 할 수 있습니다.구글, 페이스북, 트위터와 같은 다양한 플랫폼의 특정한 사용자 데이터에 접근하기 위해, 제3자 클라이언트(우리의 서비스)가 사용자의 접근 권한을 위임받아 리소스 서버에서 제공하는 자원에 접근할 수 있도록 하는 표준 프로토콜을 제공합니다. 등장배경과거에는 서비스(제3자 클라이언트)가 사용자를 대신하여 페이스북, 구글 등 다양한 플랫폼을 활용하는 기능을 만들 때, 사용자의 ID와 ..

웹 서버에서 세션 유지와 보안휴대폰에서 네이버에 로그인 후 전원을 껐다 다시 켜도 로그인 상태가 유지되는 상황- 디바이스를 껐다 켰음에도 연결(세션)은 끊기지 않고 로그인 정보가 유지됨세션 유지의 원리WAS는 사용자의 로그인 여부를 판단할 때 SID값을 확인하여 세션을 복구한다.사용자가 로그인하면 쿠키 형태로 SID(세션 ID)를 할당받고, SID는 File의 형태로 저장된다.사용자가 디바이스 전원을 껐다 켜고 접속하면, File을 다시 읽어와 SID를 그대로 복구해놓는다. ID, PW를 묻지 않고도 로그인 상태를 유지한다.보안 위험해커가 SID에 해당하는 쿠키값을 탈취하면 ID, PW 없이 로그인이 가능하다. 이를 세션 탈취(Session Hijacking)에 해당한다. 세션 탈취(Session Hij..

Spring 프로젝트에서 WebClient를 사용하여 Open API를 호출하도록 구현해보면서 Spring WebFlux와 WebClient에 대해서 학습을 했었다. (물론 Servlet 애플리케이션이어서 WebClient만 사용하긴 했지만!) 평소에 개인 노션에 기록해뒀는데 블로그에도 작성해보려고 한다! [1] WebFlux란 클라이언트, 서버에서 Reactive 스타일의 애플리케이션 개발을 도와주는 스프링 모듈이다. 반응형 프로그래밍을 통해 높은 처리량과 확장성을 갖는 애플리케이션을 만드는 목적으로 reactive-stack web framework로 non-blocking과 reactive stream을 지원한다. 특징 Single-Thread와 Non-Blocking 방식을 사용하여 적은 수의 스..
1. DAO : Data Access Object (= Repository) DB의 데이터에 접근하기 위한 객체로 DB에 접근하기 위한 로직과 비즈니스 로직을 분리 repository 패키지 실제로 DB에 접근하여 데이터를 CRUD하는 객체로 Service와 DB를 연결해주는 역할 인터페이스와 구현체를 만들어 CRUD 관련 기능을 구현하고 DI 해줌 SQL을 사용하여 DB에 접근한 후 적절한 CRUD API를 제공 MyBatis 등을 사용할 경우 커넥션 풀까지 제공되므로 별도로 만드는 경우는 적음 2. DTO : Data Transfer Object 계층 간 데이터 교환을 하기 위해 사용하는 객체로 로직을 가지지 않는 순수한 데이터 객체 DTO 패키지 getter, setter만 가짐 DB에서 데이터를 ..