분류 전체보기 474

[DataBase] 트랜잭션 공부하기

안녕하세요 오늘은 트랜잭션에 대해서 공부해보고자 합니다. 공부하기 전에 목차를 정해야겠죠 [목차] 트랜잭션이란 트랜잭션이 필요한 이유 트랜잭션의 특징 트랜잭션의 격리 수준 트랜잭션의 격리 수준이 있는 이유 트랜잭션의 동작 과정 (Query) 시작!1. 트랜잭션이란 (Transaction)✔️ 트랜잭션의 사전적(개인적) 정의트랜잭션이란, 작업의 완전성을 보장해주기 위한 시스템입니다.어떤 작업을 처리하기위한 작은 작업단위들이 세팅되었을 때, 이 작업 세트들이 모두 논리적으로 묶여 하나의 작업 단위로 구성되어 모든 논리적인 작업이 성공되었을 때 -> 작업이 성공되었음을 관리하기 위한 시스템으로 이해됩니다.트랜잭션은 작업의 정합성을 지키기 위한 시스템입니다. ✔️ 트랜잭션이 필요한 이유1개의 작업을 완료하기 위..

DataBase/DB 2024.10.26

[Spring Boot] 다중 인스턴스에서 스케줄링 중복 실행 제어 하기 (@Scheduled Lock - shed lock)

다중 인스턴스 환경에서 스케줄링 중복 실행을 제어하는 @ShedLock 에 대해 정리하는 글입니다.코드는 깃허브에 있습니다. Spring 에서는 정해진 시간마다 지정한 메소드가 실행되도록 스케줄링 기능을 지원하는 @Scheduled 어노테이션이 존재합니다.이 스케줄링 기능을 Spring 에서 구현하였을 때, 단일 인스턴스 (1개 서버) 배포환경에서는 신경써줘야할게 없지만 다중 인스턴스 (n 개의 서버, scale-out) 배포 환경일 경우n 개의 인스턴스 환경에 배포되어있는 n 개의 프로그램이 특정 시간에 n 번의 스케줄링을 체크하여n 번의 기능을 수행합니다.즉, 중복이 일어날 수 있습니다.이러한 문제점을 해결하기 위해서는 아래와 같은 처리를 해주어야합니다.1번만 작업을 해도 된다.혹은 특정 스레드에서 ..

Spring/Spring Boot 2024.10.10

2024 항해 데브랩 후기

✔️ 2024.08.31일에 항해 데브랩 컨퍼런스에 다녀왔습니다.다양한 네트워킹 활동이 있었지만, 발표 세션만을 간단하게 정리하며 남겨보고자 합니다.[목차]AI와 자동화로 주니어 개발자 키우기 - 이동욱님책임 분리의 마법: 깔끔한 폴더 구조 만들기 - 테오님클린 아키텍처: 무한 성장하는 시스템의 비밀 - 허재님  1. AI 와 자동화로 주니어 개발자 키우기개발바닥의 연예인 - 인프랩 CTO 향로(이동욱)님의 발표였습니다.스타트업으로 시작한 서비스 회사에서, 인재풀을 확보하고 개발팀이 잘 성장하기 위해 고민했던 과정과 결과에 대해 이야기해 주셨습니다.이동욱 CTO님이 처음 인프랩에 들어가서 인원을 채용할 때 몆가지 기준을 세워 시니어를 뽑기로 결정했지만, 그 당시 인력풀이 너무 비쌌으며 마땅한 인재를 찾기..

동시성 제어 문제에 대한 고찰 (With. Spring, JAVA, MySQL, Redis, Kafka)

Spring 3.0, JAVA 17, MySQL 환경에서 문제를 풀어갑니다.코드는 ⚙️깃허브에 있습니다.동시 다발적인 호출에도 정확한 차감이 이뤄지도록 구현이 되어야 합니다.얼마전 받았던 기업과제의 요구사항 이었습니다.요점은 동시성 문제의 백엔드 관점에서의 해결인데, 동시성 문제를 직접 다뤄본 경험은 처음이라 공부를 조금 더 해보고자 합니다.이전에 정리했던 [🚀 재고시스템으로 알아보는 동시성이슈 해결방법] 과 겹치는 내용이 존재합니다. ✨ 이번 포스팅에서 공부해 볼 주제들 입니다.동시성 문제란 무엇인가동시성 문제를 해결하기 위해서는 무엇이 필요한가동시성 문제의 해결 방법들Thread Access LocksynchronizedRedis + kafkaDB Lock비관적 락낙관적 락네임드 락분산락 (Redi..

Spring/Spring Boot 2024.08.30

[한빛앤 MSA 세미나] 모니터링 | 강동호

한빛앤 MSA 세미나 강동호 연사님의 "서버 모니터링" 세미나를 듣고 정리한 글 입니다. 1. 모니터링 도입이 어려운 이유1) 개발하는데도 시간이 오래걸림요구사항 분석시스템 설계개발테스트 및 버그 수정코드 리뷰배포유지보수버그 수정2) 대부분은 재시작으로 해결할 수 있어서보통의 운영 서버의 부하 버그인 경우 재시작으로 해결이 가능3) 아직은 문제가 발생하지 않아서정확하지 않은 가용성 체크ex) 저번에 배포한 서비스도 Spring 인데, 동일하게 EC2 서버크기 세팅할게요잠재적 문제의 누적ex) 알파환경 에서는 선착순 테스트 진행했는데 정상적이었어요팀 리더의 반대“아직 사용자도 적은데 나중에 붙여도 늦지 않다”2. 모니터링의 중요성모니터링이란모니터링의 사전적 정의는 지속적인 감시, 관찰을 통해 상태나 가용성..

Repository는 어느 모듈에 위치해야할까? (DIP. 고수준모듈, 저수준 모듈)

레이어드 아키텍쳐를 사용하는 단일 모듈 서비스를 멀티모듈로 나누는 과정에서,,, 시작된  Repository 는 과연 어디 모듈에 위치해야하는 가에 대한 주저리주저리 고민 정리 글입니다.코드 예시는 깃허브에 있습니다. 우선 다른 레퍼런스들을 보며, 현재 상황에 맞게 구성해본 구조는 아래와 같습니다,,이런 설계에서 Repository 는 core:domain 모듈에 들어가야하는가 core:Infra 에 들어가야하는가에 대한 매우 심도깊은 고민을 하고있습니다..ㅎ  [궁금한 것]고수준 모듈은 뭐고 저수준모듈은 무엇인가.왜 고수준 모듈이 저수준 모듈의 의존성을 가지면 안되는가그래서 Repository 는 어떤 모듈에 위치해야하는가 ~~ 에 대해 정리해봅니다! 1. 고수준 모듈과 저수준 모듈의 정의는 무엇일까?..

Spring/Spring Boot 2024.07.09

Spring Boot 에서 Redis Cache 사용하기

이번 포스팅에서는 이전 포스팅에서 못 다한 Spring Redis Cache 를 사용해보고자 합니다.코드는 Github 에 있습니다.💡Redis 묶음Redis 란 (특징, 주의점, 동작 구조)Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)✔️ Spring Boot 에서 Redis Cache 사용하기  [목차]Cache ManagerRedis Cacheconfig@Cachable@CachEvictCache hits 모니터링 종류Spring Cache AbstractionSpring 에서는 캐시 기능 자체에 대해서 특정 기술에 종속되지 않게 추상화를 제공합니다.AOP 를 이용한 어노테이션을 활용하여 특정 기술에 종속되지 않고, 애플리케이션에 캐싱 기능을 부여할..

Spring/Spring Boot 2024.07.02

Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)

본 포스팅은 다음과 같은 환경 아래에서 진행합니다. JDK 17, Spring Boot 3.x, Gradle 💡Redis 묶음Redis 란 (특징, 주의점, 동작 구조)✔️ Spring 에서 Redis 사용하기 (설정, In-memory DB, Transaction)Spring Boot 에서 Redis Cache 사용하기 이번 포스팅에서는 Spring 에서 제공하는 Spring Data Redis 를 사용하여 Redis 를 이용하는 방법에 대해 기록하고자 합니다.대부분의 내용이 Spring Data Redis 공식문서 내용 정리입니다. [목차]의존성추가Redis 연결Redis ConnectionRedisTemplateRedisTemplateStringRedisTemplateRedis Repository..

Spring/Spring Boot 2024.07.01

[한빛앤 MSA 세미나] 서비스 장애 잘 이해하고 대비하기 | 박순영

한빌앤 MSA 세미나 2-7 : 볼트업 CTO 박순영 연사님의 "서비스 장애 잘 이해하고 대비하기" 오프라인 세미나를 듣고 정리한 글 입니다.✔️ 세미나 Keyword : Reliability서비스 장애를 주제로 어떤 원인에 의해서 발생하는지 이해하고 정의 내리고, 이를 잘 대응할 수 있도록 해보자 [목차]어디까지 장애라고 볼 수 있을까?장애는 어떻게 잘 대응할 수 있을까?장애를 예방할 수 있을까?부록: 장애 대응의 2가지 사례(1) 장애의 정의 (어디까지 장애일까?)🧐 간단한 오류도 장애에 포함해야 할까? → 장애를 나누는 기준 1. 서비스 장애의 기준# 민감도와 심각도민감도 (범위)사용자 범위장애 발생 시 어떤 사용자까지 피해를 보고 있는가 (개발자, 내부자, 전체 사용자 등)→ 즉, 장애/오류를 ..