분류 전체보기 476

Spring Bean 공부하기 (Been 생명주기, Scope, 권장 사용 방법)

오늘은 지금까지 잘 모르고 사용했던 Spring Bean 에 대해 공부해보고자 합니다. [목차]Spring Bean 이란Bean 의 생명 주기와 Bean ScopeBean 의 사용 이유Spring Bean 의 권장 사용 방법1. Spring 에서의 Bean 이란Spring Framework 에서의 Bean 은 Spring Boot 의 핵심 기술 중 하나인 제어의 역전(IOC)와 의존성 주입(DI)와 밀첩한 관계를 가집니다.Spring Framework는 IOC Container 를 통해 객체 주입(생성)에 대한 의존성을 코드 구현부에서 직접 가져가는게 종속성 주입(DI)을 통해 객체의 호출부에서는 어떤 객체가 생성되는지 신경 쓰지 않게하여 객체간의 결합도를 낮춰 설계할 수 있도록 해주는 기술을 제공합니다..

Spring/Spring Boot 2025.01.29

Spring Boot WebClient Mocking 하기

상당히 오랜만에 글을 쓰네영반성하고 열심히 재밌게 다시 써보겠습니다 야호코드는 깃허브에 있습니다. 새로운 회사로 이직한지 1달이 되었습니다.여느 회사나 마찬가지로 제가 모르는 코드를 수정해야하기 때문에 테스트 코드는 저에게 필수적인데요.오늘은 Spring Boot WebFlux 와 함께 나온 WebClient 를 Mocking 하는 방법에 대해 기록해보고자 합니다. [목차]WebClient 를 Mocking 하려는 이유WebClient Mocking 방법1. WebClient를 Mocking 하려는 이유사실 WebClient 자체를 Mocking 하는 상황이 좋은 상황은 아니라고 생각합니다.코드단에서 더 좋은 방향은 WebClient 를 사용하는 부분을 추상화하고 호출부에서 추상화하는(or 책임을 가지는..

[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