분류 전체보기 480

☁️ AWS DynamoDB 기본 개념 공부

AWS DynamoDB 를 처음 접하는 작성자의 공부용 기록 페이지입니다.아마도 연초에? 감사하게도 회사에서 AWS DynamoDB 교육을 지원해주었습니다.해당 교육을 들었을 때는, NoSQL 도 익숙하지 않은 상황이었고 DDB가 가지는 특징들 또한 이해가 잘 가지않아 제대로 소화하지 못하고있었는데, 사내에서 DDB 를 주력 테이블로 하는 작은 서비스의 테이블 설계를 맡게 되어 AWS 공식문서 내용과 제 생각을 글로 정리해 보았습니다. [목차]AWS DynamoDB 란DynamoDB 스키마 구조DynamoDB 테이블 디자인 시 주의해야할 점RDMBS 와의 차이점DynamoDB Access PatternDynamoDB 성능을 제어하는 일반 원칙DynamoDB 파티션 키 설계 (DynamoDB PK, S..

DataBase/DynamoDB 2025.09.16

#100일 챌린지 - Fake it till you make it. | 오츠카 아미

"#100일 챌린지, 작은 도전이 만들어낸 큰 변화" 를 읽고 기억하고 싶은 책의 내용과 개인적인 생각을 정리한 글 입니다. 오랜만에 감명 깊은 책을 읽어 기록해 두고자 합니다.책을 좋아하시는 옆자리 동료분이 빌려주신 책이었고, 정말 가벼운 마음으로 읽었는데 생각보다 재밌고 의외의 동기부여를 얻을 수 있었던 추천할 만한 책입니다.주제는 AI, ChatGPT를 사용한 비전공자의 개발 여행기 혹은 성장기에 가깝지만, ChatGPT를 이용하여 성장하는 과정보다,그 과정에서 드러나는 저자의 행동과 생각이 재밌었습니다.저자는 준비가 된 사람이었고, 스스로의 장점과 결과물을 표현하는 것은 정말 중요하다는 걸 다시 한번 느낍니다.내 생각과 감정을 공개하는 건 무서운 일이지만, 꾸준한 용기가 필요하다는 걸 느끼며 책..

[SpringBoot] @TransactionalEventListener "AFTER_COMMIT" 의 Transaction 처리 범위

해당글은 spring boot3.4.x, kotiln 2.1.x 환경에서 작성되었습니다.굉장히 오랜만에 쓰는 글인데요.오늘은 Spring Boot 의 @TransactionlEventListener 를 사용했을 때, 이벤트는 발행되지만 Listener 가 이벤트를 수신받아 동작을 정상적으로 수행하지 못했던 이슈에 대해 간단하게 정리해보고자 합니다. [목차]문제 상황문제 원인 파악하기결론 및 해결방안1. 문제 상황정확하게는 이벤트의 수행시점을 After Commit 으로 두었을 때 문제가 생겼습니다.@TransactionlEventListener(phase = TransactionPhase.AFTER_COMMIT)하나의 트랜잭션에서 묶임이 필요하지 않은 로직에서 이벤트를 발행수신받은 리스너에서 로직 수행다..

Spring/Spring Boot 2025.06.23

[Spring Boot] RestClient 와 HTTPInterface 로 통신하기

코드는 Github 에 있습니다.RestClient Spring Boot 3.2.x Release 된 서비스입니다.RestClient 는 외부 서비스와 통신을 제공해주며, 기존의 WebClient 의 WebFlux에 대한 의존성에 대한 아쉬운점을 보안하여 나온 서비스 입니다.지금까지 제가 아는 Spring 에서 제공해주는 HTTP 호출 도구는 아래의 흐름을 가집니다.RestTemplate (2009. Spring 3.0 - Deprecated)WebClient (2017. spring 5.0에 도입)RestClient (2024.10. spring 6.1, spring boot 3.2)Spring 을 제외하고, HTTP 통신 라이브러리들은 아래와 같습니다.Apache HttpClient (2009)Net..

Spring/Spring Boot 2025.03.07

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님이 처음 인프랩에 들어가서 인원을 채용할 때 몆가지 기준을 세워 시니어를 뽑기로 결정했지만, 그 당시 인력풀이 너무 비쌌으며 마땅한 인재를 찾기..