Gmarket의 유사이미지 추천 기능 파헤치기
Gmarket의 유사이미지 추천 기능 파헤치기 안녕하세요 VIP & Vertical 팀 김윤제입니다. VIP 파트에서 상품 상세 페이지 및 리뷰 업무를 맡고 있습니다. 이번 블로깅에서는 Gmarket에서 사용하고 있는 유사이미지 추천 기능에 대해 소개하려 합니다. 유사이미지 추천 기능이란? Gmaket App에는 2022년 5월 유사이미지 추천 기능이 추가되었습니다. 유사이미지 추천 기능이란 방금 본 상품과 같은 상품 이미지가 아닌 '시각적으로 유사한' 이미지의 상품을 보여주는 것입니다. 이 기능이 생기면서 사용자는 유사한 상품을 보다 쉽게 찾을 수 있게 되었습니다. 유사이미지 추천 기능의 개발이 완료되기까지는 수많은 시간과 노력, 인내가 필요했다고 합니다. 아래에서 자세히 살펴보도록 하겠습니다. 유사이..
AI/MLFrontendUX/UI
전체 읽기 →성능 테스트를 위한 격리 - 단순한 모델
성능 테스트와 반복 성능 테스트는 실제 부하를 받는 환경과 동일한 환경에서 이뤄질수록 의미가 높습니다. 하지만 정말 운영환경과 동일한 환경을 여러 목적을 위해 유지하는 것은 팀이나 기업의 사정에 따라 쉬운 일은 아닙니다. 그렇다고 운영 중인 시스템에 영향을 미칠 수 있는 환경에서 성능을 테스트해 보는 것은 아주 위험천만한 일입니다. 만약, 성능을 확인하기 위해 운영환경과 아주 동일한 환경을 마련하기가 어렵다면 우리는 어떤 방법을 쓸 수 있을까요? 관련 글 성능 테스트를 위한 격리 - 단순한 모델 성능 테스트를 위한 격리 - hoverfly 성능 테스트를 위한 격리 - 시뮬레이션 미니어처 성능 테스트는 반복 수행해보기에는 부담스럽기는 합니다. 하지만 성능 테스트를 자주 수행할 수 있고 그 부담을 줄일 수 ..
BackendDevOpsTesting
전체 읽기 →성능 테스트를 위한 격리 - hoverfly
격리 성능 테스트의 한 가지 곤란한 점은 그 영향력입니다. 다른 서비스나 테스트에 영향을 줄만한 부하는 모두를 곤란하게 합니다. 따라서, 가능하다면 테스트 영역을 격리하는 것이 좋습니다. 가장 좋은 격리는 전체 시스템을 테스트를 위해 한 벌 준비하는 것이지만 시스템이 커질수록 이는 부담입니다. 약간 현실적인 얘기를 하자면, 현실에서는 모든 팀이 테스트 용이한 배포본을 유지하지 않을 수도 있습니다. 이런 경우에도 격리가 가능할까요? 차선으로 선택할 수 있는 방식은 mock service 를 활용하는 것입니다. mock service 는 기능에 따라 해당 서비스의 latency 도 모사할 수 있습니다. 이러한 mock service 를 만드는 과정에 필요한 것은 흉내 낼 api 호출들을 마련하는 것입니다. ..
BackendTestingTools
전체 읽기 →Spring Statemachine 이론부터 토이 프로젝트까지
약간 특이한 자판기가 있습니다. Nickel(5¢, 센트), Dime(10¢), Quarter(25¢) 세 종류의 동전만 넣을 수 있고, 상품은 사과 주스와 오렌지 주스뿐이며 가격은 각각 30센트입니다. 그리고, 거스름 돈 기능이 없어서 30¢까지만 동전 투입이 가능합니다. 예를 들어, 25¢가 이미 들어있는 상태에서는 Nickel(5¢) 동전만 투입할 수 있습니다. Dime이나 Quarter 동전을 넣는다면 그대로 뱉어냅니다. 이런 자판기를 코드로 어떻게 구현해야 할까요? 객체지향에 익숙한 개발자라면 아래와 비슷한 방식으로 구현할지도 모릅니다. class VendingMachine { int numNickels; int numDimes; int numQuarters; OrangeJuice orangeJ..
AI/MLBackendTools
전체 읽기 →iOS Framework 에서 다른 Framework 사용시 Mach-O type 에 따른 주의 사항
안녕하세요 Mobile Application Team 에서 iOS 개발을 하고 있는 강수진입니다.이번 글에서는 지마켓 iOS 프로젝트에서 사용하고 있는 프레임워크들의 관계와, Framework 에서 다른 Framework 를 사용할 때 Mach-O type 에 따른 주의 사항을 알아보겠습니다.상황Gmarket 에서 사용하고 있는 framework 는 다양하지만, 문제에 집중하기 위해 UI 와 Util 이라는 두 가지 framework 를 사용한다고 상황을 간략화해보겠습니다.이때 Util.framework 는 유틸성 코드를 담고 있어서 UI.framework 에서도 사용합니다. 따라서 아래와 같이 사용 관계를 표현할 수 있습니다.위 상황을 관리하기 위해 프레임워크들의 관계를 어떻게 설정할 수 있을까요?하나..
ArchitectureMobileTools
전체 읽기 →Kafka 이벤트 모니터링이란.. (먼산)
안녕하세요. Carbon 팀 안세희입니다. 이 글은 Kafka 이벤트 모니터링을 진행하며 주니어 개발자로서 겪었던 트러블슈팅에 대한 이야기입니다. 여름에 입사하여 또 다른 계절인 겨울이 다가오는 시점에서 지난 미션을 떠올리며 공유드리고자 합니다. 같은 고민을 하시는 개발자분이 계신다면 부족한 내용일지라도 도움이 되었으면 좋겠습니다. 어떤 걸 모니터링해야 했을까? 해당 미션은 결제가 실패한 경우 발행되는 이벤트를 스트리밍 하여 10분 동안 3번 이상 주문에 실패한 구매자를 찾는 것이었습니다. 당시에 실제 운영하는 환경에서 Kafka를 사용해본 경험이 없어 Kafka에 집계와 모니터링을 얹은 보이지 않은 산을 마주한 기분이었습니다. 하지만 모르는 만큼 다양한 방법을 도입할 수 있다는 개발자의 패기로 아래와 ..
BackendDevOpsTools
전체 읽기 →Java Generic 을 파헤쳐보자 - 활용편
Java Generic 시리즈 마지막 포스팅입니다.이번에는 Java Generic 을 활용하는 여러 가지 상황들에 대해 살펴보겠습니다.이번 포스팅에서도 개념편, 심화편 에서 사용했던 예제를 활용해보겠습니다.public class Electronics { private String manufacturer; public Electronics(String manufacturer) { this.manufacturer = manufacturer; } public String getManufacturer() { return manufacturer; }}public class Tv extends Electronics { private String title; ..
BackendTestingTools
전체 읽기 →Java의 날짜, 시간에 대한 기본적인 정책
안녕하세요. Seller & SD Engineering 팀의 박명훈입니다. 오늘은 자바의 기본적인 Date와 Time API에 대해서 간략하게 정리합니다. Date와 Time API에 대해서 많이 사용을 하고 있으나 이에 대해 좀 더 상세하고 어떤 경우에 어떤 값을 쓰는지에 대한 고찰이 부족하다고 생각하여, 이에 대해 정리합니다. 기존 Java의 날짜 API의 문제.Java 8 이전에 사용하던 Date 관련 클래스는 Date, Calendar, SimpleDateFormat 등이 있었으나, 많은 문제가 있어 자바 8 버전 이후부터는 새로운 날짜 관련 API를 제공합니다.기존 클래스들의 문제는 다음과 같습니다. 1. 부적절한 클래스와 메서드 이름을 가집니다.Date 클래스의 경우, TimeStamp 방식으..
BackendTestingTools
전체 읽기 →로그인 비밀번호를 지켜라
안녕하세요. SmilePay Engineering 팀 문한국입니다. 이번 글에서는 스마일페이의 보안성 강화를 위하여 로그인 비밀번호 암호화를 도입한 사례를 공유하려고 합니다. 선정 배경스마일페이는 고객의 결제와 관련된 업무를 하다보니 보안을 상당히 중요시 합니다. 그래서 로그인 비밀번호의 경우도 HTTPS 통신을 통한 SSL 보안과 더불어 RSA 암호화를 통해 로그인 비밀번호를 암호화 후 통신하고 있습니다.HTTPS 의 경우 네트워크 구간에서는 비밀번호의 암호화가 이루어지나, 네트워크 전송 전 구간에서의 보안은 취약하였습니다. 아래 그림은 로그인 비밀번호 암호화를 도입하기 전 브라우저 개발자 도구 네트워크 탭을 캡쳐한 것입니다. 로그인 버튼을 눌렀을 때 개발자 도구 네트워크 탭에 찍힌 것과 같이 비밀..
BackendInfraSecurity
전체 읽기 →한눈에 파악하는 데이터 (탐색적 데이터 분석)
소개안녕하세요:) 지마켓에서 데이터로 여러 가지 흥미로운 개발을 하고 있는 한한주입니다.이번에 소개해 드릴 내용은 탐색적 데이터 분석 흔히 EDA(Exploratory Data Analysis)라고 불리는 분석기법에 대한 내용입니다. 처음 정제되지 않은 대용량 데이터를 마주하면 정신이 혼미해 지기 쉽습니다^^; 이럴 때 데이터 형태를 정의하고 탐색적 분석을 통해 시각화하면 좀 더 친근하게 데이터 분석을 시작할 수 있습니다. 그럼 Start! EDA란?위키백과에 따르면 EDA는 미국의 저명한 통계학자가 창안한 자료 분석 방법론입니다. 기존의 통계학이 정보의 추출에서 가설 검정 등에 치우쳐 자료가 가지고 있는 본연의 의미를 찾는데 어려움이 있어, 이를 보완하고자 주어진 자료만 가지고도 충분한 정보를 찾을 수..
AI/MLDatabaseTools
전체 읽기 →지마켓 대기열 시스템 파헤치기
안녕하세요 VIP & Vertical 팀 김윤제입니다.VIP 파트에서 상품 상세 페이지 및 리뷰 업무를 맡고 있습니다.이번 블로깅에서는 Auction, Gmarket에서 사용하고 있는 대기열 시스템인 Redcarpet에 대해 소개하려 합니다. RedcarpetRedcarpet은 Auction, Gmarket의 대기열 시스템으로 일시적으로 많은 트래픽이 발생하는 서비스에과도한 트래픽의 유입을 방지해 주고 시스템을 보호합니다. 대기열 시스템 Redcarpet의 이름은 대형 홀 등의 줄을 서서 기다리는 곳에 깔린 레드카펫에서 유래되었습니다.Redcarpet의 도입이유 Big Smile Day, Big Sale 등의 이벤트 또는 인기 있는 상품에 대해 트래픽이 몰리는 순간이 있습니다. 이렇게 순간적으로 높은 트..
BackendInfraTools
전체 읽기 →인증/인가는 어디에 어떻게 구현해야 할까?
안녕하세요 Post-tx & Accounting팀 권우석입니다.최근 온보딩 프로젝트를 함께했던 Shopping Service API팀의 김도훈님의 제안으로 회원가입/로그인 API를 간단하게 구현하는 토이 프로젝트를 진행하고 있는데요. 이번 글에서는 토이 프로젝트를 진행하며 고민했던 아래 주제에 대해 다뤄보려고 합니다. 1. 인증/인가를 어떻게 구현할 것인가?2. 인증/인가 로직을 어디에 구현할 것인가? 인증과 인가란?인증이란 사용자의 신원을 검증하는 프로세스를 뜻합니다. 가장 간단한 예시로는 ID와 PW를 통해 로그인하는 행위를 인증이라 할 수 있죠. 인가는 인증 이후의 프로세스입니다. 인증된 사용자가 어떠한 자원에 접근할 수 있는지를 확인하는 절차가 바로 인가이죠. 로그인을 예시로 들었듯이 거의 모든 ..
BackendSecurity
전체 읽기 →Netflix Hystrix를 이용한 MSA 회복성 패턴 톺아보기
MSA 환경에서의 장애 양상 우리는 장애를 피할 수 없습니다. 아무리 실력이 좋은 소프트웨어 개발자라 할지라도 완전무결한 시스템을 만들 수 없습니다. 물론 우리도 여러 방법으로 장애에 대응하고 있었습니다. 서버를 클러스터링하여 일부 서버에 문제가 발생하더라도 클라이언트는 정상 동작중인 다른 서버를 이용할 수 있습니다. 인프라를 분산 구축하는 것도 이러한 전통적인 장애 대응방식 중 하나입니다. 우리는 서버 클러스터링, 인프라 분산 구축과 같은 기존의 장애 대응 방식은 시스템의 완전한 실패를 대비하여 설계되었다는 것에 주목해야 합니다. 하드웨어 장비에 문제가 생겨 서버에 전원 공급이 안되거나 자연재해로 인해 데이터 센터의 데이터가 유실된 경우라면 이런 기존의 장애 대응 방식으로 우리는 큰 도움을 받을 수 있..
BackendDevOpsInfra
전체 읽기 →레거시 시스템의 성능과 정합성 두 마리 토끼 잡기
적은 리소스 적당한 효과 개발자는 종종 레거시 시스템이나 코드를 마주할 때가 있습니다. "레거시" 는 양면적이어서 잘 돌아가고 있는 시스템이면서도 앞으로의 요구사항 변경에 수용력이 부족해 보이는 시스템이기도 합니다. 이러한 레거시와의 공존은 필연적이면서도 효과적인 공존을 위한 부단한 아이디어들을 필요로 하기도 합니다. 보통 레거시 시스템을 대할 때면 이런 문장을 머리에 두고 생각합니다. "적은 리소스만 들여서 적당한 효과를 얻을 방법이 없을까?" 항상 이런 접근만이 답이 되진 않지만 레거시 시스템은 우리에게 친절하지만은 않습니다. 조금 까탈스러운 제약이나 조건들을 가지고 있죠. 조금 지난 미션이지만 재미있게 해결했던 사례를 한번 소개하고자 합니다. 레거시 시스템 소개 우리 팀의 주요 역할은 주문 시스템의..
ArchitectureBackendTools
전체 읽기 →프로젝트 관리를 위한 JIRA 활용기
안녕하세요 Data Platform Engineer 조광진입니다.2019년에 지마켓 Data Platform 팀에 합류하여 데이터 플랫폼에 관련된 다양한 업무를 진행하고 있습니다.저희 팀에서 하는 업무에 대해 간단하게 설명드리면 글 전반적인 내용에 도움이 될 것 같아 먼저 소개하도록 하겠습니다.Hadoop 기반의 빅데이터 플랫폼인 Data Lake 활용을 통해 전사에서 활용되는 데이터의 수집, 적재, 분석에 대해 직 간접적으로 도움을 드리고 있으며, 비정형 데이터를 다양하게 활용하기 위한 Redis, Elastic Search, MongoDB 데이터 플랫폼도 운영하고 있습니다. Data Platform 팀이 사용하는 기술 스택은 아래와 같습니다.팀 목표는 사용자들에게 안정적이고 편리한 데이터 플랫폼을 제..
BackendDatabaseTools
전체 읽기 →짧고 굵게 지마켓 API Gateway 사용하기
안녕하세요. 지마켓에서 개발자분 업무의 편의를 도모하기 위한 클라우드 플랫폼 업무를 담당하고 있는 김지형입니다.저희 지마켓 개발 플랫폼으로서 몇 가지가 존재하는데 Fusion이라는 Openshift, Kubernetes 기반의 컨테이너 플랫폼을 개발자 분들께서 주로 이용하시지만, API 통합 관리 도구로서 API Gateway 플랫폼도 존재합니다. Nginx 프로그램을 붙여서 로드밸런싱이나 페이지 요청을 처리하는 팀이 많겠지만, Nginx Controller까지 붙여서 API 관리까지 하기에는 다소 벅찰 수 있다고 생각합니다. 본 API Gateway 이용도 API 관리의 한 가지 선택지로서 이용해볼 수 있다는 것을 알리기 위해, 또한 타사에서도 API Gateway를 적용하고자 하는 팀을 대상으로 글을..
BackendDevOpsTools
전체 읽기 →가볍게 시작하는 Databricks Community Edition 환경설정 for Spark
소개안녕하세요:) 지마켓에서 데이터로 여러 가지 흥미로운 개발을 하고 있는 한한주입니다.이번에 소개해 드릴 내용은 Databricks Community Edition에 대한 기본적인 설정과 사용법에 대한 내용입니다.Databricks Community Edition에서 제공하는 클라우드 환경을 사용하면 간단하게 Spark 작업환경을 만들 수 있어 Spark를 공부하고자 하거나 간단하게 테스트를 할 때 매우 유용합니다. (사실 제가 유용하게 사용했습니다^^;; 독자분들도 유용하게 사용하시기를 바라며..)이번 블로그에서는 Databricks Community Edition을 사용하여 무료로 간단히 Spark환경을 만들어 보도록 하겠습니다.그럼 Start!Databricks들어가기 앞서 먼저 Databrick..
AI/MLBackendDatabaseTools
전체 읽기 →유용한 테스트 코드 작성 팁
안녕하세요. SmilePay Engineering 팀 문한국입니다. 저는 이번 포스팅을 통하여 Junit Test 코드 작성시 유용한 몇 가지 팁을 공유하려고 합니다. 우선적으로 꿀팁 테스트 코드를 작성하기 위한 적당한 코드가 필요했습니다. (TDD로 테스트 코드를 먼저 작성해보면 좋았겠지만 이해를 돕기에는 적당한 코드를 제공하고 순서대로 테스트 코드를 작성해 보는 게 도움이 되겠다고 생각했습니다.) 홀짝 게임 어떤 프로그램을 짜보는게 간단하면서 테스트 코드를 소개하기에 적당할까 고민하다가 저는 어릴 적 동네 문방구에서 했던 홀짝 게임이 떠올랐습니다. 게임의 룰은 간단합니다. 1. 사용자는 홀과 짝 중 하나를 선택하고 게임을 시작합니다. 2. 게임기에서는 랜덤으로 홀과 짝이 나옵니다. 3. 내가 선택한 ..
TestingTools
전체 읽기 →KafkaItemReader 적용기
KafkaItemReader 적용기안녕하세요 VIP & Vertical 팀 김윤제입니다.VIP 파트에서 상품 상세 페이지 및 리뷰 업무를 맡고 있습니다.최근 리뷰 개편 작업에 Kafka 도입을 해보며 주니어 개발자로서 겪고 배운 내용을 공유드리기 위해 작성했습니다.부족하게 쓴 내용일지라도 도움이 되었으면 좋겠습니다. Kafka를 선택한 이유제가 속한 VIP & Vertical팀 (VIP 파트)에서 Kafka를 사용하게 된 이유는 크게 다음과 같이 두 가지 이유가 있었습니다.RDB의 부하 조절을 위해 미들웨어인 메시징 플랫폼을 두어 데이터를 처리Review 등록 이후에 같은 데이터를 가지고 여러 가지 작업(Junk 판독, Review Summary) 등의 배치 작업을 하는 병렬 프로세싱을 원했습니다. (..
BackendDevOpsTools
전체 읽기 →Spock in Maven
안녕하세요. 저는 지마켓에서 백엔드 시스템을 개발하고 있는 양승권이라고 합니다. 이번에 저희 시스템 중 Maven으로 개발되어있는 시스템들에 Spock framework를 적용한 경험을 공유하고자 합니다. 하고 싶었던 것 신규 프로젝트를 진행하게 되면서 새로운 기능을 개발할 일이 생겼는데, Maven 프로젝트 라서 그런지 Test 쪽이 좀 부족한 상황이었습니다. 그래서 이 참에 한번 이 프로젝트에 적용해보고 다른 Maven 프로젝트에도 적용해보자고 생각했습니다. 아래와 같은 내용을 해보고 싶은 내용들을 도출하였습니다. Spock library를 활용하여 좀 더 직관적인 테스트를 해보자. Spock의 Groovy로 Test code를 작성해보자. 프로필 별로 구분하여 단위/통합 테스트를 구분하여 수행해보자..
BackendTestingTools
전체 읽기 →