Home
Slowly but Surely
Cancel

도커와 VM

본 글에서는 VM 기술에서 도커가 탄생하기까지와, 도커가 컨테이너 자원을 어떻게 할당하는 지에 대해서 다루는 글입니다. VM 기술의 장점과 단점 하나의 서버에서 여러개의 컴퓨팅 환경을 구동하기 위해서는 어떻게 해야할까? 이를 위해서 사용된 것이 Virtual Machine, 즉 가상 머신 기술이다. 호스트와 다른 운영체제, 다른 환경...

더블 클릭 요청 방지하기 - RateLimiter

레주마블 프로젝트를 개발하면서 발생한 문제와 트러블 슈팅을 공유하고자합니다. 문제 상황 레주마블 프로젝트의 핵심 서비스인 면접 예상 질문 생성은 다음과 같이 사용자 이력서와 각종 정보를 입력한 후, 결과 생성 버튼으로 백엔드 서버에 요청하게 됩니다. 그러나 이때, 짧은 순간에 더블 클릭시 요청이 두번 가는 문제가 발생했는데요. 사용자는 한 ...

내가 생각하는 지속 성장 가능한 코드

시중에는 많은 좋은 책들이 있다. 많은 사람들에게 언급되어진 ‘클린 코드’부터, 개인적으로 읽고 코드를 작성하는데 좋은 영감을 준 내 코드가 그렇게 이상한가요?가 나에겐 그렇다. 나는 남들과 마찬가지로 Java, Spring을 사용하는 것을 거리낌 없이 사용 했고, 다른 언어와 프레임워크를 사용한다는 선택지를 검토할 필요성을 느끼지 못했다. ...

핵심 로직이 부가 로직에 영향을 받는 강결합 문제 트러블 슈팅

레주마블 프로젝트를 진행하면서 생성된 면접 예상 질문을 다루는 로직에서 코루틴을 사용한 경험을 공유하고자합니다. 문제 발생 개발중인 레주마블 프로젝트의 면접 예상 질문 서비스는 다음과 같은 흐름으로 수행됩니다. 1. 클라이언트 요청 2. OpenAi API를 통해 ChatCompletion 요청 3. 결과 데이터를 DTO로 바인딩 4. 응답 ...

Redis를 사용한 분산락의 주의점과 보완 전략

이전에 분산락을 구현하기 위해 레디스를 사용했습니다. 레디스는 스프링 서버와 통신을 할 경우 TCP/IP 기반의 네트워크 통신을 통해 데이터를 주고받습니다. 그러나 여기에 두가지 문제점이 발생할 수 있습니다. 네트워크가 문제가 있을 때 레디스를 사용할 수 없다. 레디스 서버가 내려갔을 때, 동시성 문제가 다시 발생...

동시성 문제를 해결하기 위한 캐시 미스와 데이터베이스 부하 관리 전략

저는 주로 캐시를 사용할 경우 Look Aside 패턴으로 요청이 캐시를 먼저 바라보게 하는 편입니다. 그러나 이 방법은 캐시에 데이터가 없을 경우 DB에 질의를 하기 때문에, 동시에 여러 요청이 같은 키에 대해서 조회를 할 경우 Cache Stampede 문제가 발생합니다. 그렇게 되면 DB는 병목 현상의 원인이 되며,즉 SPOF가 될 수 있습니...

테스트시 ControllerAdvice에 의해 예외가 잡히지 않는 경우

컨트롤러 테스트를 진행 중, 실패 테스트를 모킹으로 구현하게 되었고, 그 중 발생한 문제에 대해 다루고 있습니다. AS-IS 주로 모킹을 사용해서 API 테스트를 구현하고 있습니다. 우선 테스트 속도가 빠르며, 이는 실제 DB 커넥션과 같이 네트워크를 타지 않기 때문입니다. 그리고 CI를 통한 지속적인 통합 환경에서도 어떤 환경에 종속되지 않고...

잃어버린 SRP를 찾아서 - 퍼사드 패턴 적용기

면접 예상 질문 서비스를 구현하면서 Controller 단에 많은 서비스 인터페이스가 사용되게 되었고, 이를 개선하고자 Facade패턴을 적용하게 된 글을 공유하고자합니다. AS-IS 우선 이번 글에서 다루게 된 클래스, ResumeController입니다. @RestController class ResumeController( private...

Real MySQL 8.0 - 트랜잭션과 잠금

Real MySQL 8.0의 챕터 5. 트랜잭션과 잠금을 읽고 나중에 기억할만한 것들을 정리한 글입니다. 주관적으로 느꼈을 때 필요하다고 생각한 것들만 정리한 것이기에, 본 책에는 더 많은 개념이 서술되어있습니다. 꼭 본 책을 읽어보시길 권장합니다. 서론 트랜잭션은 작업의 원자성을 보장해주는 것, 보장해주지 못할 경우 Partial update...

OpenFeign을 활용한 외부 API 호출

레주마블 프로젝트를 진행하면서, 외부 API를 요청하는 로직이 있었고, 이에 대해서 기존의 RestTemplate을 사용하지 않고 선언형 HTTP Client인 Spring Cloud OpenFeign을 통해 외부 API 호출을 한 경험을 공유하고자 합니다. RestTemplate @Service class InterviewQuestionSer...