캐싱 전략을 활용한 Redis와 Spring boot
·
데이터베이스/Redis
캐싱과 캐싱의 필요성💡 캐싱(Caching) 자주 사용되는 데이터를 더 빠른 캐시(Cache)에 저장하는 기법을 일컫는 용어Cache? Cache는 CPU 내부의 작은 하드웨어로, 지역성(Locality)의 원칙에 따라 자주 접근하게 되는 데이터를 저장해두는 임시(휘발성) 기억 장치다.  기본적으로 영속성을 위해 파일시스템(디스크)에 저장하고, 빠른 활용을 위해 메모리(RAM)에 저장한다면, 정말 많이 사용되는 데이터가 캐시에 저장된다. 캐시의 목적과 방식을 적용해, 빈번하게 접근하게 되는 데이터베이스의 데이터를 Redis 등의 인메모리 데이터베이스에 저장을 함으로서 데이터를 조회하는데 걸리는 시간과 자원을 감소시키는 기술을 캐싱이라고 한다. 웹 브라우저에서는 자주 바뀌지 않는 이미지 등을 브라우저 캐..
Spring Boot와 Redis로 Session Clustering 간단 구현
·
데이터베이스/Redis
HttpSessionHttp는 stateless한 특징을 지니기 때문에 각각의 요청이 독립적으로 이루어지며, 서버는 요청의 순서를 저장하지 않는다. 이렇게 된다면 서버는 동일한 클라이언트의 요청이라도 구분하지 못하게 되며 문제가 발생할 수 있다.이를 해결하고자 서버는 클라이언트의 session ID를 유지하고, 클라이언트는 session ID를 쿠키에 담아 저장하며, 요청에 같이 session ID를 담아 보낸다.즉, 이전에 요청을 보낸 클라이언트를 기억하는 상태를 유지하는 것을 세션이라고 한다.💡 그런데 만약, 사용자가 늘어서 하나의 서버로는 사용자의 요청을 감당하기 어려워지면 어떡할까? 여러 개의 서버를 동작시켜, 각 서버들에게 요청을 분산(Load Balancing)하여 부하를 줄일 수 있다. 이..
[CI/CD] Github Actions, AWS ECS/ECR 트러블슈팅
·
infra/CI & CD
💡 Git Push 만으로 서버를 업데이트하고 자동 배포할 수 있도록 구성한다. ( Github Actions, EC2 ECR/ECS 를 사용 )문제 상황AWS ECR 등록 + ECS 클러스터, 서비스, Task 및 로드밸런서를 구성한 상태 + .github/workflows/.yml 파일 작성 완료 (ECS 템플릿 사용)MySQL DB를 사용하고, Spring Boot 어플리케이션을 배포하려고 한다.Dockerfile이 올바르게 작성되었고, AWS RDS를 배포한 후 로컬에서 Connection을 확인해 본 결과 정상이다.Github Actions의 workflow가 초록색 체크 표시가 뜨며 아무런 문제가 없다.다만 AWS 클러스터의 서비스의 Task가 실패한 상황 시도Cloud Watch에서 로그를..
Gitlab-CI, Github Actions와 AWS ECS를 이용한 CI/CD 구축
·
infra/CI & CD
Gitlab그룹을 만들고, 프로젝트를 만든다.인텔리제이와 연동하고 싶으면 깃랩 액세스 토큰을 발급받아 인텔리제이에 등록해준다.간단한 테스트용 컨트롤러 하나 만들어 준다.@RestControllerpublic class SampleController { @GetMapping("/sample") public String sample() { return "hello world"; }}  AWS ECS/ECRconsole > ECR(Elastic Container Registry) > repositoy 생성 console > ECS(Elastic Container Service) > 클러스터 생성project-cluster를 생성하다가 실패했다.클러스터 생성 중에 다른 짓을 하면 종..
CI/CD와 AWS ECS 개념
·
infra
CI/CD란?지속적 통합 CI (Continuous Integration)코드 변경이 발생할 때마다 (git push를 통해 감지), 이 코드가 전체 시스템과 잘 어우러지는지 자동으로 빌드하고 테스트하는 프로세스이다. 이를 통해 코드 품질을 유지하고 이슈를 조기에 발견할 수 있다.지속적 배포 CD (Continuous Delivery)CD는 CI의 결과물을 사용자에게 자동으로 배포하는 프로세스이다. 코드 변경이 통합되고 테스트를 통과하면, 이를 자동으로 배포한다. CI/CD를 구성해야 하는 이유 ❗변경된 코드에 대한 피드백이 빠르다. 즉각적으로 빌드 및 테스트 결과를 확인할 수 있어 개발자가 이를 인지하고 수정할 수 있다.빌드, 테스트, 배포 과정이 자동화되어 수작업을 줄이고, _인적 오류를 방지_할 수..
Docker & Docker Compose - Basic
·
infra/docker
Docker💡 애플리케이션을 쉽게 만들고, 테스트하고, 배포할 수 있게 도와주는 소프트웨어 플랫폼으로 애플리케이션을 컨테이너라는 가볍고 이식성 있는 패키지로 실행할 수 있다. 주요 특징컨테이너화: 애플리케이션과 필요한 모든 것을 하나의 패키지로 묶어 어디서든 실행할 수 있다.경량: Docker는 운영 체제의 커널을 공유하므로, 가상 머신보다 훨씬 가볍고 빠르게 실행된다.이식성: 다양한 환경에서 동일한 실행 환경을 보장한다. Docker 컨테이너는 어디서든 동일하게 실행된다. 예를 들어, 개발자의 로컬 컴퓨터에서 테스트 서버, 운영 서버까지 동일하게 동작한다.확장성: Docker를 사용하면 여러 개의 컨테이너를 효율적으로 관리하고 쉽게 확장할 수 있다. 주요 용어 및 개념이미지(Image): 애플리케이션..
MSA project - 프로젝트 환경 세팅
·
project/MSA-side
프로젝트 개요🏁 Goal: MSA 구성, Redis 캐싱, Docker 기반 CI/CD 구성MSA 아키텍처를 직접 구성Eureka, Ribbon 을 이용해서 분산처리 시스템을 구성MSA 환경에서 병목 현상이 발생 하여도 쉽게 오류가 나는 부분을 찾을 수 있도록 구성Redis 캐싱 적용Docker 사용, Git Push 만으로 서버에 자동으로 업데이트 구성🤔 notification : 과제 요구 사항 패키지명 규칙과 포트 규칙 준수패키지명은 msa_exam 으로 설정, 유레카 서버는 19090 포트로 실행게이트웨이 서비스는 msa_exam.gateway 패키지로 추가하고 19091 포트로 실행상품 서비스를 msa_exam.product 패키지로 추가하고 19093,19094 포트로 실행주문 서비스를 m..
Redis 기초 및 Spring Boot 연동
·
데이터베이스/Redis
Redis 공식문서: https://redis.io/docs/latest/ Docs redis.ioREDIS(REmote DIctionary Server)💡 key-value 형식의 NoSQL 인메모리 데이터베이스" data-ke-type="html">HTML 삽입미리보기할 수 없는 소스Redis를 사용하는 이유MySQL 같은 관계형 데이터베이스는 파일시스템(SSD, HDD)에 데이터를 저장해서 서비스가 종료되어도 영구적으로 데이터를 유지할 수 있다.하지만, 데이터가 영구적으로 저장될 필요가 없고 일시적으로 저장되어야 할 상황이 있다면?세션이나 로그인 정보, 장바구니에 상품을 담는 기능 등… 사용자의 행동에 따라 데이터의 수정이 빈번하고 영구적으로 반영될 필요가 없다.기존의 관계형 데이터베이스는 파일시..
@Transactional 최적화
·
project/poppin-server
팝핀(Poppin) 프로젝트 회고@Transactional이 무분별하게 사용되는 것을 방지하고자 트랜잭션 최적화 작업을 일부 수행했다.@Transactional특정 메서드나 클래스에서 수행되는 트랜잭션 관리를 위해 사용하는 어노테이션이다.해당 어노테이션을 선언하면 런타임 중 트랜잭션에 오류가 발생하면 트랜잭션이 롤백(rollback)되고 변경 사항이 모두 취소된다.이는 트랜잭션의 ACID 성질 중 원자성(Atomicity)과 관련이 있다.여러 개의 작업을 하나로 묶은 논리적 단위가 트랜잭션이 되는데 이 작업들 중 하나라도 실패하면 모든 작업을 실패한 것으로 간주하고 트랜잭션이 실행되기 전으로 돌아간다.반면, 모든 작업이 성공하면 커밋(commit)되고 변경사항이 반영된다.둘 중 어느 것을 사용해야 할까❓..
Refresh Token Rotation을 통한 보안 강화
·
project/poppin-server
팝핀(Poppin) 프로젝트 회고Refresh Token서버와 클라이언트는 토큰을 주고 받으며 인증과 인가를 처리할 수 있다.Refresh Token은 Access Token이 만료되었을 때, 새로 재발급 해주는 열쇠가 된다.Access Token은 보통 짧은 만료 기간을 가지는 반면, Refresh Token은 상대적으로 긴 만료 기간을 가진다.만약 Access Token이 긴 만료 시간을 가지게 되면, 탈취당하여 악의적인 공격에 사용될 수 있다.포스트맨에서 API 테스트를 할 때 만료되지 않은 토큰을 헤더의 Authorization Bearer에 집어넣는다.즉, API 명세를 알고 해당 토큰을 가지고 있는 누구나 필요로 하는 서버 자원을 가져올 수 있는 것이다.이러한 토큰은 발급한 후 삭제가 불가능하..
조원준입니다
'분류 전체보기' 카테고리의 글 목록 (3 Page)