분류 전체보기 57

세션 로그인 프로젝트 컴파일 시 로그인 끊김 해결 + RedisSession

세션 로그인으로 인증, 인가를 구현할 경우 세션은 컴파일할 때마다 로컬 메모리가 초기화되어 매번 로그인 세션이 날라가서 포스트맨이나 프론트를 통해 코드를 테스트할 때는 굉장히 불편하다. 스프링에서는 도커 설정으로 세션을 계속 유지할 수 있지만, 스프링 부트에선 그 기능이 되지 않아 레디스를 통해 세션을 저장하고그 세션을 계속 유지하여 프로젝트를 재실행해도 로그인 상태를 유지할 수 있도록 하고자 한다. 1. build.gradle 레디스 추가// Redisimplementation 'org.springframework.boot:spring-boot-starter-data-redis'implementation 'org.springframework.session:spring-session-data-redis'..

스프링부트 2025.07.15

린트 적용 후 프로젝트 실행 시마다 반영하기

1. 린트란?소스 코드에서 스타일 일관성 유지하고자 검사해주는 도구이다.그 외 추가적으로 아래와 같은 기능을 한다.코딩 스타일 일관성 유지팀 내에서 코드 스타일(들여쓰기, 공백, 중괄호 위치 등)을 통일하여 가독성 높임잠재적 버그 및 오류 탐지초기화하지 않은 변수 사용, null 가능성, 무의미한 코드, 잘못된 조건문 등개발자가 놓치기 쉬운 논리 오류 및 실수를 미리 알려줌불필요한 코드 제거 권장사용하지 않는 변수, 중복 코드, 쓸데없는 import 등 정리 유도코드 복잡도 관리함수 길이, 중첩 깊이, 복잡한 조건문 등을 검사해 가독성과 유지보수성 개선보안 취약점 점검SQL 인젝션, 경로 조작, 하드코딩된 민감정보 등 일부 보안 문제도 탐지 가능성능 문제 감지불필요한 객체 생성, 비효율적인 반복문, 리소..

스프링부트 2025.07.15

S3로 파일 관리하기

1. S3로 가서 Create 버킷 버킷명에서는 대문자 _ . 등 포함되지 않아야한다.안되는 것들)myBucket, my_bucket, 191.110.23 (IP형식), my.buc.ket 등이 있다. 그 외 기타 설정은 세팅하지 않고 생성을 한다. * 처음 생성할 때 Region을 서울로 둬야 한다. 그리고 설정을 안했기 때문에 접근이 막혀있다.이 부분은 정책을 변경해야 한다.생성한 버킷에서 권한에 들어가서 퍼블릭 액세스 차단 해제버킷 정책 편집 클릭 후 읽기 권한 정책을 다음과 같이 추가하였다. /*를 통해 모든 읽기 권한{"Version": "2012-10-17","Statement": [{"Sid": "Statement1","Effect": "Allow","Principal": "*","Actio..

AWS 2025.06.20

캐싱 이용하기 (인메모리 캐시, Redis)

캐싱을 통해 자주 사용하는 조회에 대하여 검색 속도를 높일 수 있다.그 방법 중에서 인메모리 캐시 사용과 레디스를 비교하고자 한다. 속도 면에서는 인메모리 > 레디스 > 캐싱 없음 순으로 빠르고왜 인메모리가 가장 빠르냐고 하면 레디스의 경우는 추가적으로 Redis 서버와의 통신이 필요하기에 외부를 한 번 거치지만 인메모리는 JVM 내부 저장 공간에 저장하기에 속도 면에서 가장 빠르다. 레디스는 속도가 더 느린데 왜 사용될까?1. 분산 서버 환경에서 인스턴스 공유가 가능2. 다양한 자료구조 방식 (Memcached는 String 타입만 지원) 레디스 세팅spring.data.redis.port=6379spring.data.redis.host=localhostspring.data.redis.password=..

스프링부트 2025.06.03

소셜 카카오 로그인 구현하기

요구사항 : 개발 기능 중에 카카오 채널 추가로 반드시 메시지를 보내야 하는 기능이 있기 때문에 일반 로그인과 그 외 기타 소셜 로그인은 구현 하지 않음 카카오 애플리케이션 등록 절차카카오 디밸로프 접속내 애플리케이션 만들기 (앱 이름, 회사명, 카테고리 본인 편한대로)대시보드에서 카카오 로그인 설정하기 (상태 ON, RedirectURL http://localhost:8080/login/oauth2/code/kakao, http://localhost:3000/login/oauth2/code/kakao)비지니스 - 앱 아이콘 등록(등록해야 이메일 정보 받아올 수 있음, 앱 이미지에 아무 파일 용량 맞춰서 넣고 비즈앱 전환)앱키 REST API키가 client-id 키, 설정이나 URL에 사용함플랫폼 ..

스프링부트 2025.06.03

Elastic Load Balancer를 왜 사용할까?

로드 밸랜서는 트래픽은 관리해주는 역할을 한다.사용자와 EC2 인스턴스 사이에 위치 하에 EC2에 접근할 때 요청을 받아서 분산을 시켜 서버의 부화를 나누도록 한다. 로드 밸랜서를 쓰는 이유- 요청 분산- 단일 액세스 포인트 공개 (test.com 이 있다면 하나의 액세스 포인트를 제공함,하나의 DNS만 씀, DNS를 다루는 Router 53과 연동)- 인스턴스 헬스 체크- HTTPS 제공 (ACM과 연동)- 고가용성 제공- 공개, 내부 트래픽 분리 (EC2에 바로 접근하는 것을 막을 수 있음) ELB 종류- Classic Load Blancer : 거의 사용하지 않음- ** Application Load Balancer : URL 쿼리스트링 기준으로 요청을 보냄 (웹 개발에 사용할 것)- Network..

AWS 2025.05.14

EBS(Elastic Block Store)를 만들어서 백업하기

EBS는 EC2는 인스턴스의 백업하기 위해 사용된다.인스턴스를 터미네이트하면 사라지는데 백업을 했다면 데이터 유지가 가능하다.EBS는 하나의 인스턴스에 장착가능하고 하나의 인스턴스는 여러 개의 EBS에 장착될 수 있다. (USB라 생각하면 됨)EBS는 하나의 AZ에서만 사용할 수 있다. us-east-1a에서 만들면 여기서만 사용할 수 있음다른 AZ에서 사용하고 싶은 경우에는 스냅샷을 생성하고 다른 AZ에서 새로운 EBS로 복원한다. 일종의 복제 방식이다. EBS는 인스턴스의 스토리지에 Block Device에서 확인할 수 있다. 혹은 탭에서 EBS -> 볼륨그리고 볼륨 생성을 통해 다음과 같이 볼륨을 생성한다.(기존 EC2의 볼륨은 us-east-1c이다.)새롭게 볼륨이 생성된 것을 확인하면 체크를 하..

AWS 2025.05.14

EC2 활용하여 클라우드 생성하기

EC2를 활용하여 클라우드 서버를 실행하고자 한다. 1. 콘솔에서 EC2 검색 후 인스턴스 생성 클릭인스턴스란 스토리지라고 생각하면 된다. 인스턴스 이름 설정 -> OS Image (ubuntu 22.04) -> t2.micro -> key pair 생성 후 RSA 암호화의 .pem 파일로 생성 우분투와 t2.mircro 모델은 프리 티어로 사용할 수 있어 실제 개발이 아닌 연습용으로 사용하기 좋다.키페어는 없어도 되지만 인스턴스에 연결하기 위한 비밀번호이기에 만들어준다. 만들면 .pem 파일이 다운로드되는데이 파일을 통해 연결할 수 있으니 잘 보관해야한다. 인스턴스가 생성되면 인스턴스 탭에서 다음과 같이 생성된 것을 볼 수 있다.인스턴스 ID를 클릭해서 세부 정보를 보면 다음과 같이 IP 주소가 할당된..

AWS 2025.05.14

IAM + MFA 설정하기

IAM이란 Identity and Acess Managerment의 약자이고 역할은 AWS 스토리지의 접근과 권한을 관리해준다. IAM의 주요 키워드는 USER, GROUP, POLICY가 있다.유저는 AWS에 접근할 수 있는 유저를 만들어서 접근할 수 있도록 해준다.그룹은 이 유저들에 대해 공통된 권한을 효율적으로 관리할 수 있도록 해준다.폴리시는 말 그대로 권한이고 유저나 그룹에 어떤 그룹을 부여할 지 정할 수 있도록 한다.유저는 그룹에 속하지 않을 수 도 있고 여러 그룹에 속할 수 있다.권한의 경우는 최소한의 권한만 주어 해킹 혹은 문제 예방할 수 있도록 해야한다. IAM 정책은 JSON으로 쓰여진 권한 문서이고 리소스에 대한 정의를 나타낸다.{ "Version": "2012-10-17",..

AWS 2025.05.13

CI/CD란?

CI/CD란 지속적인 통합, 서비스 제공, 배포이다. 왜 CI/CD가 나왔을까?과거에는 폭포수 모델을 통해 개발을 진행하였다.이 과정에서 한 대의 서버에 배포하기 위해 기존 서버를 클러스터에서 분리하고 서버 종료 후 WAR 파일 변경 후 다시 서버를 클러스터에 연결하여 배포하는 과정을 번거로운 과정을 진행하였다. (과정 반복)만약 여기서 발견하지 못한 오류가 추후에 발견된다면 다시 배포해야 하는 일이 발생한다. (시간, 비용 추가적으로 듦)그리고 현대에는 애자일의 스크럼(특정 주기마다 기능 출시)을 통해 개발을 진행하는 경우가 많다. (특정 주기마다 개발, 테스트 및 출시)만약 여기서 테스트 및 기능 출시에 긴 시간이 소요 되고 위와 같은 방식으로 배포를 진행한다면 빠르게 배포하는 것이 불가능하다.이러한..

도커 2025.05.07