이번 글에서는 Spring Webflux + Kotlin 기술 스택에서 Request Binding Exeption에 대한 처리를 예제코드를 통해서 구현해 보도록 하겠습니다. Controller 처리 Controller에서는 @Valid annotation을 사용해서 request Object 대한 validation을 체크합니다. @ApiOperation("xxx") @GetMapping("/main") suspend fun getMainDeals( @Valid retrieveMainDealRequest: RetrieveMainDealRequest ) = superDealGoodsService.readSuperDealMain(retrieveMainDealRequest) validation 조건 vali..
개요 안녕하세요. 지마켓에서 개발자분 업무의 편의를 도모하기 위한 클라우드 플랫폼 업무를 담당하고 있는 김지형입니다. 이번 글에서는 API 관리형 서비스인 Red Hat 3Scale 제품을 이용해 개발 팀 간 멀티테넌시 구축을 위해 고려한 부분과, 실 적용 과정에 대해 글을 쓰고자 합니다. 멀티테넌시 (Multi-tenancy) 멀티테넌시 (Multi-tenancy)는 하나의 소프트웨어 어플리케이션을 여러 고객에게 일관된 경험으로 서비스할 수 있게 하는 아키텍처를 말합니다. 클라우드 컴퓨팅이 발전하면서 가상화 및 컨테이너화를 통해 각각의 고객이 분리된 각각의 데이터를 이용할 수 있게 되었고 동일한 호스트 노드 내 단일 인스턴스지만 각각 별도의 앱을 이용하는 것처럼 구현할 수 있게 되었습니다. 인프라 멀티..
안녕하세요. Fulfillment Engineering 팀의 백정현입니다. Thread에 개인 수납장이 있다는데 들어보셨나요? 이번 포스팅에서는 ThreadLocal에 대해서 가볍게 살펴보러 들어가 보겠습니다. ThreadLocal은 무엇인가요? 이름을 살펴보면 “Thread가 로컬 환경에서의 어떤 것과 연관이 있다.”라는 것을 가늠할 수 있습니다. 공식 문서에서는 java.lang 패키지에 있는 ThreadLocal 클래스를 다음과 같이 요약해서 설명할 수 있습니다. Thread에 대한 로컬 변수를 제공한다. 각각의 Thread가 변수에 대해서 독립적으로 접근할 수 있다. 그렇다면 우리는 ‘각자가 독립적으로 사용할 수 있는.. 로컬 변수(물품)’라고 생각하면, 이것에서 수납장을 연상할 수 있습니다. T..
Intro 안녕하세요. 사회복지학과 출신 개발자 Web Frontend팀의 이민하입니다. 저는 입사 4개월 차에 설레는 첫 업무를 받게 되었고 이내 운명을 느꼈습니다. 그것은 바로 제 전공과 관련된 a11y 개선 프로젝트였기 때문이죠. a11y? k8s 라는 말 들어보셨나요? 백엔드 개발자에게는 친숙한 Kubernetes의 줄임말입니다. 첫 글자 k와 마지막 글자 s 사이에 8개의 문자가 있어 k8s라고 표현합니다. 이를 숫자약어(Numeronym)라고 하는데요, 이 유래가 참 재미있습니다. 지금은 HP(Hewlett-Packard)사에 합병된 DEC(Digital Equipment Corporation) 사의 Jan Scherpenhuizen라는 직원이 입사하게 되었습니다. 전통적으로 이름을 이메일 계..
Sharded MySQL Cluster 도입 배경과 개발기 (부제: 우당탕탕 좌충우돌 개발기) 안녕하세요, 지마켓 Item Engineering 팀입니다. 저희는 지마켓 & 옥션의 상품 등록/관리와 관련된 플랫폼을 담당하고 있습니다! 저희 팀은 대량의 상품 데이터와 대규모 트래픽을 처리해야 하며 로직이 (꽤) 복잡한 부분이 있는 상품 데이터들을 운영하고 있습니다. MSSQL을 주로 사용하지만 이번에 샤딩 기법을 사용한 MySQL 클러스터를 도입하게 되었습니다! 이름하야 '루미큐브' 프로젝트! 하지만 해당 프로젝트를 진행하며 많은 시행착오가 있었는데요.. 왜 MySQL을 도입하게 되었는지, 샤딩 기법을 사용하고 있는데 샤딩이란 무엇인지, 샤딩을 쉽게 처리하기 위해 사용한 '샤딩스피어'란 무엇인지, 그리고 ..
안녕하세요 Data Platform Engineer 조광진입니다. 저희 Platform Technology 팀은 지난 수년간 On-premise Hadoop 기반의 빅데이터 플랫폼인 'Baikal' 이란 서비스를 사내에 제공하여 전사에서 활용되는 데이터의 수집, 적재, 분석에 대해 편의성을 제공하고 있습니다. 빅데이터 플랫폼 Baikal은 On-premise 에서 Cloud Lakehouse Platform으로 전환을 앞두고 있습니다. Cloud Lakehouse Platform으로 전환하기 앞서 On-premise Hadoop 기반인 Baikal에 대해 소개하고자 합니다. Gmarket Baikal Baikal 이란 이름은 잘 아시다시피 러시아 시베리아 남쪽의 있는 세계에서 가장 오래되고 깊은 담수호 ..
시뮬레이션 이전 글을 통해 테스트에 사용할 기록들을 캡처하여 확보했습니다. 이렇게 캡처한 내용을 바탕으로 mock service 를 띄워 이제는 시뮬레이션할 수 있습니다. 이제 테스트를 수행해 봅시다. hoverfly dashboard 에서 simulate 모드로 변경하거나 기록한 파일을 import 하여 hoverfly 를 재기동하면 테스트 환경으로 활용할 수 있습니다. 하지만 몇 가지 좀 더 수월한 테스트 조력을 원하였습니다. hoverfly 는 매우 디테일하게 기록하지만 실제 테스트에 적합한 동작은 덜 디테일하거나 추가적인 디테일이 필요할 수 있다. mocking 하는 서비스의 특징을 흉내 낼 때, 각 config 가 서비스 단위로 관리할 수 있는 게 편했다. hoverfly 는 가볍고 빠르다고 하..
OCR : Optical Character Recognition OCR은 손글씨로 작성되거나 인쇄된 종이 문서를 스캐너와 같은 디지털 영상 획득 장치로 이미지화한 것들로부터 문자(열)를 인식/추출 하는 이미지 분석 기술로부터 시작되었습니다. 최근에는 일상 생활에 스마트 폰이나 태블릿 같은 디지털 기기를 활용하는 문화가 대중화 되면서 이미지 편집 도구로 생성된 디지털 이미지나 디지털 카메라로 찍은 다양한 이미지에 포함된 문자(열)을 인식하는 기술로 발전하고 있습니다. OCR의 간략한 역사 컴퓨터가 개발되기 이전부터 이미 시각 기호를 문자에 대응시키려는 개념이 있었으며, 컴퓨터가 발명된 이후 다양한 활용 방법을 모색하기 시작하였고, 일반 사진을 컴퓨터에서 이용할 수 있도록 하는 디지털 이미지 표현/변환 기술..