분류 전체보기 9

Redis 캐시와 객체 직렬화

문제 발생 배경Spring 애플리케이션에서 Redis를 사용하여 Hashtag 객체를 캐시할 때 발생한 직렬화 문제를 다룹니다.문제는 Hashtag 객체를 Redis에 저장하고, 저장된 데이터를 가져오는 과정에서 발생했습니다.Jackson의 직렬화 문제와 Redis에서 데이터를 올바르게 조회하는 과정이 문제가 되었습니다.문제 분석Redis 데이터 저장 타입 : Hashtag 서비스레이어에서 데이터가 Set 형식으로 반환하여 json 형식으로 직렬화와 역직렬화를 위한 적절한 설정 필요LocalDateTime과 같은 Java 8의 날짜/시간 타입을 직렬화 문제: Hashtag 객체에 포함된 LocalDateTime 필드가 Jackson이 기본적으로 처리할 수 없었습니다. 이를 해결하기 위해 jackson-..

카테고리 없음 2025.01.22

Jmeter Spring Security

Spring Boot 환경에서 Spring Security 가 적용된 상태에서 Jmeter 로 테스트 환경 셋팅 1.우선 쓰레드 그룹을 하나 만들어준다. 2. 로그인의 경우 쓰레드 그룹내에서 한번만 시도하면 되므로 Once Only Controller 아래에 Http Request 를 생성해준다.=> 사용자 수만큼 로그인이 실행된다. 3. 로그인을 하기 위해 post 형식으로 /login 을 진행한다. => 스프링 시큐리티에서 제공하는 기본 html form 을 사용하므로 'application/x-www-urlencoded' 방식을 통해 데이터를 웹 서버에 보낸다. Parameters 에 username 과 password 를 보내면 된다. csrf 토큰의 경우 security 설정 내에서 disabl..

카테고리 없음 2025.01.18

[Spring] AOP (Aspect Oriented Programming)

AOP란?AOP는 스프링 프레임워크에서 제공되는 모듈중 하나로, 관점 지향 프로그래밍을 구현하는 기술이다. 애플리케이션의 여러 모듈에서 공통적으로 발생하는 관심사를 분리하여 관리하고, 코드의 재사용성과 유지보수성을 향상 시키기 위해 사용.  AOP 주요 개념과 특징Aspect : 어플리케이션의 특정 관심사 Target : Aspect 를 적용하는 곳Advice : advice는 수행 할 행동, 실질적인 부가기능을 담은 구현체JointPoint : advice 가 실행되는 시점, PointCut : 어드바이스를 적용 할 결합 지점의 집합Weaving : weaving 은 aspect 를 적용하여 애플리케이션 코드에 삽입하는 행위Around : 타켓 메서드를 감싸서 호출 전후에 코드를 실행 할 수 있게 하..

spring 2025.01.15

[어드민] 데이터베이스 접근 로직

create database admin;use admin;grant all on `admin`.* to 'uno'@'localhost' with grant option; //admin 은 빽틱으로 검색한다.flush privileges;데이터 베이스는 공란으로 설정한다 => 멀티 모듈 프로젝트 이기 때문에 board 와 admin 데이터 베이스를 모두 사용 할 수 있는 효과UserAccountRepository 생성package com.fastcampus.projectboardadmin.repository;import com.fastcampus.projectboardadmin.domain.UserAccount;import org.springframework.data.jpa.repository.JpaRep..

[어드민] 도메인 설계

어드민 서비스의 필요한 도메인 설계  UserAccount domain 설계에서의 권한 설정package com.fastcampus.projectboardadmin.domain;import com.fastcampus.projectboardadmin.domain.constant.RoleType;import com.fastcampus.projectboardadmin.domain.converter.RoleTypesConverter;import jakarta.persistence.*;import lombok.Getter;import lombok.Setter;import lombok.ToString;import java.util.Collection;import java.util.LinkedHashSet;impor..

[어드민] 어드민 프로젝트 환경 셋팅

빈 프로젝트 생성 -> 스프링부트로 생성한 것이 아니라 기본 요소들이 없다.그중 하나가 JDK 설정JDK 란자바 개발 키트의 약자로 개발자들이 자바로 개발하는데 사용되는 SDK 키트라 생각하면 된다.jdk 안에는 자바를 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함되어 있고, 개발을 하려면 자바 프로그램도 실행 해줘야 하기 때문에 JRE 도 함께 포함되어 있다.모듈 형식으로 파일 생성위에서 빈 프로젝트로 파일을 생성한 이후, 모듈 형식으로 프로젝트 생성 Application 설정 파일 변환application.properties -> application.yml 로 수정기존 properties 파일은 ISO-8859-1 인코딩 방식으로 되어 있어 한글을 지원하지 안는다..

보안 기능 고도화 - Vault SpringBoot

Vault 란?hashicorp vault는 ID 기반의 비밀 및 암호화 관리 시스템 Vault는 인증 및 권한 부여 방식을 통해 암호화 서비스를 제공하여 비밀에 대한 안전하고, 감사 가능하며, 제한된 엑세스를 보장한다. 토큰, api키, 비밀번호, 암호화키, 인증서와 같은 것들을 통제 관리한다.작동 방식  Authenticate: Vault에서 인증(Authentication)은 클라이언트가 자신이 주장하는 본인임을 Vault가 확인할 수 있도록 정보를 제공하는 과정입니다. 클라이언트가 인증 방법(auth method)을 통해 인증을 받으면, 토큰이 생성되고 해당 토큰은 특정 정책(policy)과 연결됩니다.validate: Vault는 GitHub, LDAP, AppRole 등과 같은 신뢰할 수 있..

보안 기능 고도화 - 환경 변수의 사용

환경 변수(Enviornment Variables) 를 활용해 설정값을 외부로 분리한다. YAML 파일에 중요한 정보 노출을 숨길 수 있다. spring: datasource: url: ${LOCAL_DB_URL} username: ${LOCAL_DB_USERNAME} security: oauth2: client: registration: kakao: client-id: ${KAKAO_OAUTH_CLIENT_ID} client-secret: ${KAKAO_OAUTH_CLIENT_SECRET} 1: IDE 를 통한 환경 변수 주입 (운영체제에서 주입)    modify options -> environment variable..