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..
Android DiffUtil 이해하기 안녕하세요 Mobile Application 팀 전계원입니다. DiffUtil 은 androidx 패키지에 포함되어 두 리스트 간의 차이를 계산하고, 새로운 리스트로 변경하기 위한 작업목록을 반영하는 것에 도움을 주는 유틸리티 클래스입니다. 현재 G마켓에는 상당히 많은 영역에서 리스트를 업데이트하기 위해 DiffUtil 을 사용하고 있습니다. G마켓에 입사하기 전에는 DiffUtil 에 대해 들어보기만 했지만, 입사 후 G마켓에 적용된 코드를 이해하기 위해 개인적으로 공부를 했었습니다. 이번 글을 통해서 DiffUtil 에 대해 공부한 내용을 공유드리고자 합니다. 1. Before DiffUtil - notify 패밀리 샘플 코드와 함께 RecyclerView.Ad..
안녕하세요. 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..
버그와 함께 알아보는 RecyclerView 에서 wrap_content 사용을 조심해야 하는 이유 안녕하세요. G마켓에서의 첫 돌이 지난 Mobile Application 팀 전계원입니다. 작년 여름, 지마켓 내부코드 리팩토링 과정에서 버그를 만났었습니다. 버그의 원인을 이해하기 위해 분석하고 공부했던 내용들을 이번 글을 통해 공유해보고자 합니다. 0. 프롤로그 - 버그 발견 G마켓 Mobile Application 팀에서는 원활한 유지보수와 Android 시장의 개발 트렌드를 따라가기 위해 리팩토링 작업을 매우 권장하고 있습니다. 당시 신규 입사자였던 저도 G마켓의 코드에 빠르게 적용하기 위해 코드를 분석하며 간단한 화면 리팩토링 프로젝트를 진행했었습니다. 그리고 개발한 내용을 홀로 테스트하던 중 이..