docker-compose를 이용하여 다수의 spring boot 프로젝트 연결하기 Part 1 : docker-compose를 이용하여 로컬 개발환경 구성하기 Part 2 : docker-compose를 이용하여 다수의 spring boot 프로젝트 연결하기 개요 Part1에서 소개한 예제에서는 하나의 git repo로 구성된 java 멀티 프로젝트를 docker-compose를 이용하여 구성했습니다. 이번 Part2에서는 다른 git repo의 어플리케이션을 이용하여 Part1에서 생성했던 backend 서버 어플리케이션과 함께 동작하도록 구성해보겠습니다. 편의상 Part 2의 프로젝트는 frontend로 예제를 작성하였습니다. 개발 블로그에서 소개하는 코드들은 gmarket-techblog-fron..
안녕하세요. Seller & SD Engineering 팀 박명훈입니다. 지난번의 전략편에 이어 이번에는 실제 서비스 전략에 대해서 이야기하려고 합니다. 실제 서비스를 배포하며 사용했던 전략, 그리고 그 과정에 대해서 이번 글에 서술합니다. 달리는 인증 서비스의 NoSQL을 바꾸자. - 전략편 달리는 인증 서비스의 NoSQL을 바꾸자. - 실전편 배포 전략과 설계 지난 전략편에서 이야기했듯이 서비스에 이슈가 없이 배포하기 위해서 여러 스텝으로 작업을 분리했습니다. 이를 도식화시키면 다음과 같습니다. 1차 배포 1차적으로는 도식에서의 1 ~ 3번까지의 작업입니다. 배포 서버 판매자 페이지 관리자 페이지 배포 사항 Couchbase의 데이터를 MongoDB, MSSQL로 마이그레이션 합니다. 기존에 Couc..
안녕하세요. Seller & SD Engineering 팀 박명훈입니다. 최근 개발자로서 직접 기안한 프로젝트를 완료했습니다. 팀에서는 Couchbase를 통해 인증 서비스의 데이터를 제공하고 있었는데, 낮은 사용성 이슈와 비즈니스 정책, 서비스 관리의 여러 이유로 인해 불편함이 많았고, 이로 인해 기획자들이 업무를 진행할 때 성능 이슈로 인해 거의 사용이 불가능할 정도로 문제가 많았습니다. 대표적인 예시로 검색을 하면 5분씩 걸렸습니다. Couchbase는 MongoDB와 같이 Key-Document 구조를 가진 NoSQL 입니다. 이번 기회에 개선을 진행하며 기존의 문제를 해결하고, 성능적으로나 서비스적으로 아쉬웠던 부분을 개선했습니다. 그 과정과 결과에 대해서는 내용이 많아 크게 전략편과 실전 편으..
안녕하세요. Shopping Service Backend팀 안재열입니다. 저희 팀에서는 여러 팀에서 세심하게 생성하고 관리한 상품과 관련된 데이터를 고객에게 적절하게 가공하여 상품 목록 정보를 제공하는 API를 개발하는 업무를 담당하고 있습니다. 이 과정에서 다양한 모듈을 결합하여 데이터를 가공하는 작업들을 수행하게 됩니다. 그러한 작업 중 통합 테스트를 진행하게 되는데요, 이번 글에서는 TestContainers를 활용한 통합 테스트 작성 방법에 대해 알아보겠습니다. 통합테스트는 무엇인가요? 통합 테스트(Integration Test)란, 서로 다른 부분들이 원활하게 작동하는지 확인하기 위해 여러 모듈을 같이 테스트하는 과정입니다. 여기서 모듈은 웹서버, WAS, DBMS, 메시지 브로커, 파일서버 등..
안녕하세요. Club & Discount Engineering 팀에서 지마켓 할인/쿠폰 개발 업무를 맡고 있는 윤영택입니다. 저희 팀은 할인/쿠폰/수수료 등 돈과 관련된 도메인을 다루다 보니 코드를 작성할 때 BigDecimal 타입을 굉장히 많이 쓰고 있습니다. 본 포스팅을 통해 BigDecimal을 사용해야 하는 이유와 개념, 그리고 사용법을 간단하게 소개해보고자 합니다. 1. 서론 float와 double의 문제점 여러분은 혹시 소수(decimal)를 다룰 때 다음과 같은 경험이 있으신가요? 아래 코드를 보면 특정 조건에 맞춰 함수가 실행되는 것을 기대했는데, 실제론 실행되지 않습니다. 결괏값을 출력해보면 기대와 다른 값이 나오는 것을 확인할 수 있습니다. double a = 0.1; double ..
docker-compose를 이용하여 로컬 개발환경 구성하기 Part 1 : docker-compose를 이용하여 로컬 개발환경 구성하기 Part 2 : docker-compose를 이용하여 spring boot 프로젝트 연결하기(예정) 배경 최근 Gmarket Member Engineering 팀에서 Quilt - 로그인 개선 프로젝트를 진행하였습니다. 기존 닷넷 기반의 레거시 어플리케이션을 Java + Container 기반으로 전환하는 것을 시작으로, 수년간 쌓여온 기술 부채를 해결하고 보다 나은 회원 인증 체계를 개발하기 위한 첫 발을 내디뎠습니다. 이를 위하여 저희 팀에서는 지속 가능 하고 확장 가능한 개발환경 구성을 고민하였고, docker를 로컬 개발환경 구성에 이용했습니다. 그동안 Java..
들어가기 전에 안녕하세요, Shopping Service API팀 강희정입니다. 작년 여름쯤 입사하여 낯선 환경과 도메인에 적응하고, 새롭게 접한 기술들을 익혀 가느라 정신없는 나날을 보냈습니다. 업무가 어느 정도 적응되었나 싶을 겨울쯤, 저에게 굉장히 낯선 업무가 주어졌습니다. Master/Slave 구조의 Redis에서 Cluster 구조의 Redis로 migration 되니, 관련 코드 작업을 진행해 주세요. 업무를 받자마자 저는, 이런 생각을 했던 것 같습니다. 큰일 났다. 하나도 모르겠는데 어떡하지? 전통적인 SQL 방식의 RDBMS만 사용해 본 제게 Redis는 굉장히 낯선 존재였습니다. Redis도 모르겠는데 Cluster 구조로 migration하라는 코드를 작성하라니, 어디서부터 어떻게 ..
안녕하세요. Item Engineering 팀 박상윤입니다. 이번 글에서는 상품 엑셀 등록 서비스 개발하고 컨슈머에서 사용할 API Rate Limiter 개발하면서 발생한 이슈를 정리한 글입니다. 이 글은 아래와 같이 구성되어 있습니다. API Rate Limiter 도입 필요성 API Rate Limiter 적용 API Rate Limiter 동시성 문제 Lua script 실행시켜서 atomic 연산을 보장하도록 개선 정리 1. API Rate Limiter 도입 필요성 상품 엑셀 등록 서비스는 상품 정보를 엑셀에 입력하여 최대 500개의 상품을 동시에 등록할 수 있는 서비스입니다. 상품 엑셀 등록 서비스는 엑셀을 파싱 해서 상품등록 모델로 생성시켜 주는 프로듀서와 등록 모델을 수신해서 상품 등록 ..