안녕하세요. SmilePay Engineering 팀 문한국입니다. 이번 포스팅에서는 Spring의 주요 특징 중 하나인 AOP를 이용하여 인증 로직을 구현한 예시와 Swagger를 활용하여 header를 자동으로 연동한 내용을 공유하려고 합니다. AOP 활용 하기 AOP는 기술 면접에서 Spring에 관한 부분에서 단골질문으로 나올 만큼 Spring에서는 중요한 개념이라고 생각합니다. 관점 지향 프로그래밍인 AOP(Aspect Oriented Programming)는 proxy 패턴을 활용한 기술로 공통된 기능을 구현하여, 필요한 상황에 사용할 수 있도록 하는 개념으로 코드의 중복을 피하고 기능을 모듈 형태로 사용할 수 있는 좋은 기능이라고 생각합니다. 아래 이미지는 AOP를 설명하기 위하여 많이 활용..
Gmarket의 유사이미지 추천 기능 파헤치기 안녕하세요 VIP & Vertical 팀 김윤제입니다. VIP 파트에서 상품 상세 페이지 및 리뷰 업무를 맡고 있습니다. 이번 블로깅에서는 Gmarket에서 사용하고 있는 유사이미지 추천 기능에 대해 소개하려 합니다. 유사이미지 추천 기능이란? Gmaket App에는 2022년 5월 유사이미지 추천 기능이 추가되었습니다. 유사이미지 추천 기능이란 방금 본 상품과 같은 상품 이미지가 아닌 '시각적으로 유사한' 이미지의 상품을 보여주는 것입니다. 이 기능이 생기면서 사용자는 유사한 상품을 보다 쉽게 찾을 수 있게 되었습니다. 유사이미지 추천 기능의 개발이 완료되기까지는 수많은 시간과 노력, 인내가 필요했다고 합니다. 아래에서 자세히 살펴보도록 하겠습니다. 유사이..
성능 테스트와 반복 성능 테스트는 실제 부하를 받는 환경과 동일한 환경에서 이뤄질수록 의미가 높습니다. 하지만 정말 운영환경과 동일한 환경을 여러 목적을 위해 유지하는 것은 팀이나 기업의 사정에 따라 쉬운 일은 아닙니다. 그렇다고 운영 중인 시스템에 영향을 미칠 수 있는 환경에서 성능을 테스트해 보는 것은 아주 위험천만한 일입니다. 만약, 성능을 확인하기 위해 운영환경과 아주 동일한 환경을 마련하기가 어렵다면 우리는 어떤 방법을 쓸 수 있을까요? 관련 글 성능 테스트를 위한 격리 - 단순한 모델 성능 테스트를 위한 격리 - hoverfly 성능 테스트를 위한 격리 - 시뮬레이션 미니어처 성능 테스트는 반복 수행해보기에는 부담스럽기는 합니다. 하지만 성능 테스트를 자주 수행할 수 있고 그 부담을 줄일 수 ..
격리 성능 테스트의 한 가지 곤란한 점은 그 영향력입니다. 다른 서비스나 테스트에 영향을 줄만한 부하는 모두를 곤란하게 합니다. 따라서, 가능하다면 테스트 영역을 격리하는 것이 좋습니다. 가장 좋은 격리는 전체 시스템을 테스트를 위해 한 벌 준비하는 것이지만 시스템이 커질수록 이는 부담입니다. 약간 현실적인 얘기를 하자면, 현실에서는 모든 팀이 테스트 용이한 배포본을 유지하지 않을 수도 있습니다. 이런 경우에도 격리가 가능할까요? 차선으로 선택할 수 있는 방식은 mock service 를 활용하는 것입니다. mock service 는 기능에 따라 해당 서비스의 latency 도 모사할 수 있습니다. 이러한 mock service 를 만드는 과정에 필요한 것은 흉내 낼 api 호출들을 마련하는 것입니다. ..
약간 특이한 자판기가 있습니다. Nickel(5¢, 센트), Dime(10¢), Quarter(25¢) 세 종류의 동전만 넣을 수 있고, 상품은 사과 주스와 오렌지 주스뿐이며 가격은 각각 30센트입니다. 그리고, 거스름 돈 기능이 없어서 30¢까지만 동전 투입이 가능합니다. 예를 들어, 25¢가 이미 들어있는 상태에서는 Nickel(5¢) 동전만 투입할 수 있습니다. Dime이나 Quarter 동전을 넣는다면 그대로 뱉어냅니다. 이런 자판기를 코드로 어떻게 구현해야 할까요? 객체지향에 익숙한 개발자라면 아래와 비슷한 방식으로 구현할지도 모릅니다. class VendingMachine { int numNickels; int numDimes; int numQuarters; OrangeJuice orangeJ..
안녕하세요 Mobile Application Team 에서 iOS 개발을 하고 있는 강수진입니다. 이번 글에서는 지마켓 iOS 프로젝트에서 사용하고 있는 프레임워크들의 관계와, Framework 에서 다른 Framework 를 사용할 때 Mach-O type 에 따른 주의 사항을 알아보겠습니다. 상황 Gmarket 에서 사용하고 있는 framework 는 다양하지만, 문제에 집중하기 위해 UI 와 Util 이라는 두 가지 framework 를 사용한다고 상황을 간략화해보겠습니다. 이때 Util.framework 는 유틸성 코드를 담고 있어서 UI.framework 에서도 사용합니다. 따라서 아래와 같이 사용 관계를 표현할 수 있습니다. 위 상황을 관리하기 위해 프레임워크들의 관계를 어떻게 설정할 수 있을..
안녕하세요. Carbon 팀 안세희입니다. 이 글은 Kafka 이벤트 모니터링을 진행하며 주니어 개발자로서 겪었던 트러블슈팅에 대한 이야기입니다. 여름에 입사하여 또 다른 계절인 겨울이 다가오는 시점에서 지난 미션을 떠올리며 공유드리고자 합니다. 같은 고민을 하시는 개발자분이 계신다면 부족한 내용일지라도 도움이 되었으면 좋겠습니다. 어떤 걸 모니터링해야 했을까? 해당 미션은 결제가 실패한 경우 발행되는 이벤트를 스트리밍 하여 10분 동안 3번 이상 주문에 실패한 구매자를 찾는 것이었습니다. 당시에 실제 운영하는 환경에서 Kafka를 사용해본 경험이 없어 Kafka에 집계와 모니터링을 얹은 보이지 않은 산을 마주한 기분이었습니다. 하지만 모르는 만큼 다양한 방법을 도입할 수 있다는 개발자의 패기로 아래와 ..
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; public Tv(String manufactur..