기술 블로그 모음

국내 IT 기업들의 기술 블로그 글을 한 곳에서 모아보세요

전체 프론트엔드 백엔드 데브옵스 AI 아키텍처 DB 기타
Java APM에 대하여
티몬
Java APM에 대하여

이 문서의 목적 APM, 특히 Java APM에 대한 개략적인 내용과 주요 용어, 개념 등에 대해 참고할 수 있는 자료를 제공한다. 들어가며... 어플리케이션을 개발하고 운영하는데에 있어서, 모니터링은 선택이 아닌 필수로 자리잡고 있습니다. APM은 이런 니즈를 충족시켜주는 도구 중 하나로서, 실시간으로 어플리케이션의 상태를 모니터링할 뿐만 아니라 집...

Spring boot - 설정파일로 AspectJ PointCut 지정하기
티몬
Spring boot - 설정파일로 AspectJ PointCut 지정하기

AspectJ 라고 하면 Advice, Pointcut, Weaving 등 다양한 개념이 등장하지만 이 글의 주제는 포인트컷을 설정파일로 빼는것이므로 AOP 에 대한 내용은 아래 링크를 참고 부탁드립니다. Aspect Oriented Programming with Spring Spring AOP와 AspectJ 비교하기 Spring 에서 Aop는 Be...

오래된 Legacy 기술을 만났을 때 우리가 대처하는 방법, 무정지 서비스로 ELK 신규 노드 증설하는 삽질 경험
티몬
오래된 Legacy 기술을 만났을 때 우리가 대처하는 방법, 무정지 서비스로 ELK 신규 노드 증설하는 삽질 경험

안녕하세요 티몬 서비스 개발 1팀에서 근무하고 있는 이순우입니다. 서비스 개발팀은 티몬에서 제공하는 상품 서비스가 안정적으로 운영될 수 있도록 개선, 신규 개발, 장애 처리 등을 지원하고 있습니다. 최근에는 코로나19로 인하여 비대면(Untact) 소비가 화두로 떠오르고 있습니다. 언택트란? 언택트란 접촉(contact)을 뜻하는 콘택트에 언(un)이...

고객 행동 기반 실시간 딥 뉴럴 추천 시스템 : ForYou
티몬
고객 행동 기반 실시간 딥 뉴럴 추천 시스템 : ForYou

(User behavior based Real-time Deep Neural Recommendation System on E-commerce : ForYou) 안녕하세요. 데이터랩의 김한태 입니다. 딥러닝 기술을 이용한 실시간 개인화 추천 서비스인 “ForYou”.”이런 상품 찾아다니셨조?” 구좌의 개발 내용에 대해 소개하고자 합니다. ForYou 딥...

Java 대용량 엑셀 업로드
티몬
Java 대용량 엑셀 업로드

웹 서비스를 통해 사용자로부터 데이터를 입력 받는 입장에서, 중복된 유형의 데이터를 대량으로 입력 받기 위해, 엑셀 파일 업로드를 이용하는 경우는 흔하게 사용되고 있는 방법입니다. 티몬 시스템에서도 엑셀 템플릿을 제공해주고, 템플릿에 데이터를 추가하여 업로드 처리하는 기능을 종종 사용하고 있는데요. 대량의 건수가 존재하는 엑셀 파일 업로드에서 몇 가지...

딥러닝을 이용해 상품 이미지에서 색상 속성을 추출하기
티몬
딥러닝을 이용해 상품 이미지에서 색상 속성을 추출하기

들어가며… 최근 IT 기업을 중심으로 딥러닝 기술을 실제 서비스에 잘 활용하는 사례가 늘어가는 추세이고, 이러한 경향은 비단 IT 기술 기업뿐만 아니라 과학기술, 의료, 예술, 이커머스 등 다양한 분야로 확대되고 있습니다. 실제로 티몬에서도 딥러닝 기술을 다양한 곳에 활용하고 있는데요, 이번 포스팅에서는 이러한 활용 사례 중 한 가지를 소개합니다. 티...

자동실행추적기
티몬
자동실행추적기

안녕하세요. 티몬의 모바일 개발 유닛에 소속된 김병주라고 합니다. 이번 주제는 티몬 앱의 플레이 스토어에 리뷰로 자주 등장하는 자동 실행 이슈에 대한 처리 과정에 대해 이야기 하려 합니다. 티몬 앱의 자동실행? 처음 이 이슈를 접한 건 18년 4월 초 였습니다. 플레이 스토어의 티몬 앱 유저 리뷰를 보는 도중 티몬 앱이 강제로 자동 실행된다는 이슈가 ...

Java 대용량 엑셀 다운로드 기능 구현
티몬
Java 대용량 엑셀 다운로드 기능 구현

개발을 하다 보면 종종 운영에서 엑셀 다운로드 기능에 대한 요구가 있는데, 이번에 Java에서 엑셀 다운로드를 구현하는 방법에 대해 알아보겠습니다. Java에서 엑셀 다운로드 기능을 위해 자주 쓰이는 방식으로 JXLS 라이브러리를 이용한 방식과 POI 라이브러리를 이용한 방식이 있습니다. ( ‘제이엑셀’, ‘포이’ 라고들 읽죠 ㅎㅎ) 1. JXLS 라...

티몬 라이브 플랫폼 제작기
티몬
티몬 라이브 플랫폼 제작기

티몬 라이브 플랫폼 제작기 신사업개발랩 김영은 여러분, 스마트폰으로 동영상 많이 보시나요? 출퇴근길에 오며 가며 보면 많은 사람들이 유튜브로 콘텐츠를 보거나 생중계 스포츠, 좋아하는 TV 프로그램을 봅니다. 티몬 앱을 들어와보시면 이미지 대신 동영상으로 설명을 대신하는 상품들도 많아졌죠. 그렇다면 라이브 동영상을 보며 상품을 사는 건 어떨까요? 이미 ...

티몬의 단계별 테스트 접근과 협업
티몬
티몬의 단계별 테스트 접근과 협업

안녕하세요. 티몬의 품질/테스트 조직인 QE유닛 소속 정상인이라고 합니다. 오늘은 티몬에서 수행하고 있는 단계별 테스트 접근과 협업에 대해서 소개하려고 합니다. (☞티몬의QE란?) 단계별 테스트(*) 접근이란? 소프트웨어 개발(SDLC, Software Development LifeCycle)이 그런 것처럼 소프트웨어 테스팅 또한 계획과 설계, 수행과...

ThreadLocal과 ThreadPool
티몬
ThreadLocal과 ThreadPool

외부 딜연동 프로젝트를 진행하면서 다음과 같은 니즈가 있었습니다. "모든 요청과 응답에 대해서 기록을 남기자." 모든 요청과 응답은 결국 코드상에서 메서드 호출 파라미터와 리턴 결과로 볼 수 있습니다. 로그 기록이 필요한 메서드에 @Snapshot 어노테이션을 구현하여 달아준다면 로깅이 필요한 메서드 진입 시점에 AOP에 의해 요청값을 얻고, join...

Developer와 Quality Engineer, 어떻게 일해야 할까?
티몬
Developer와 Quality Engineer, 어떻게 일해야 할까?

들어가며 저는 QE로서 약 10년 동안 일을 했습니다. QE로 일하면서 개발자에 대한 꿈을 키웠고, 늦은 나이에 전향을 하는 것이 쉬운 선택은 아니었지만 더 늦기 전에 도전하여 현재 티몬에서 서비스 개발자 2년차로 임하고 있습니다. 처음 개발자가 되고 소스코드를 보았을 때, 그제서야 개발자들의 고충이 이해되었습니다. 주문이 일어나는 약 1초 사이에 엄...

QE는 무슨 일을 하는 사람일까요?
티몬
QE는 무슨 일을 하는 사람일까요?

QA 해주세요. 우리 주변에서 자주 들을 수 있는 업무 요청입니다. 제 생각이지만 한국에 있는 소프트웨어 회사라면 그 어디에서든 사용할 것 같습니다. 그런데 QA 해 달라는 말은 어떤 의미일까요? 이 요청을 받은 QE1)는 무슨 일을 시작하면 되는 걸까요? 오늘 글은 이러한 자문으로 시작합니다. 1) 티몬 CTO조직에서는 QA 담당자를 QE(QA + ...

실시간 항공권 검색 서비스, 이렇게 만들었어요!
티몬
실시간 항공권 검색 서비스, 이렇게 만들었어요!

티몬에 실시간 항공권 검색 서비스가 있다는 사실! 아시나요? : ) 티몬에서는 정해진 구간에 대한 항공권을 ‘딜’ 형태로 판매하는 상품도 있고, 내가 원하는 날짜와 여행지를 선택하여 항공권을 검색하는 ‘실시간 항공권 검색’ 서비스도 제공하고 있답니다. ▼ 항공권 검색 서비스에 대한 이용 방법은 여기서 확인해보세요! 항공권 검색 서비스 앞에 [실시간]이...

[알쓸신팁-부록] Javascript 성능 저하 방지법
티몬
[알쓸신팁-부록] Javascript 성능 저하 방지법

Front 개발을 하다가 작은 실수 하나로 화면의 성능이 확 떨어지게 되는 경우들이 있습니다. 이런 상황을 미연에 방지하기 위하여, 간단한 3가지 방법을 알려드립니다.1. 전역변수 및 Element를 지역변수화 하여 캐싱 먼저 지역변수를 활용하는 방법입니다.(무슨 말인지 0.1도 모르겠네요.ㅠ^ㅠ) 역시 개발자는 코드로 이야기를 해야겠죠~ㅎㅎ위의 코드...

[알쓸신팁] 서버 개발자가 알아두면 쓸데 있는 신비한 Front팁!
티몬
[알쓸신팁] 서버 개발자가 알아두면 쓸데 있는 신비한 Front팁!

시대가 갈수록 Server 개발자는 API 위주의 개발을 하고, Front는 Front 전문 개발자의 영역으로 굳어지고 있습니다. 티몬 또한 이와 다르지 않게 기존 PHP 소스 이외에 Java API로 전환되는 화면은 점차 Front와 Server의 영역이 확연히 구분되고 있습니다. 하지만, 기존 소스 수정 또는 각종 어드민 등의 개발에서는 여전히 서...

RabbitMQ로 메시지 손실 최소화 하는 법(1)
티몬
RabbitMQ로 메시지 손실 최소화 하는 법(1)

우리는 메시지를 발생한 후 받아서 처리하는 메시징 시스템의 도입이 필요했다. 물론 저장소를 이용하여 직접 구현하여도 되지만 이미 검증된 다양한 솔루션이 나와있기 때문에 적절히 선택을 하면 되었다. 솔루션을 도입하기 위해 몇가지 고려해야 할 사항은 아래와 같았다. - 다양한 플랫폼과 클라이언트 언어를 지원해야 한다. - 메시지 신뢰성을 높여주는 기능을 ...

소소한 자바 이야기 - Number와 Locale
티몬
소소한 자바 이야기 - Number와 Locale

국제화(internationalization, i18n), 현지화(localization, l10n)에 대한 어떤 프로그래밍 언어나 플랫폼의 지원정보는 많이 접하게 되는데요. 실제 이를 활용할 일은 조금 드문 것 같습니다. 그래서 예전에 진행했던 인도네시아 유저 대상의 상점 프로젝트를 진행할 때 있었던 에피소드를 소개할까 하는데요. 회원팀, 빌링팀에서...

티몬 안드로이드 앱 RxAndroid 적용 사례
티몬
티몬 안드로이드 앱 RxAndroid 적용 사례

초기의 티몬 앱 화면 구성은 지금에 비하면 꽤 단순한 구조였습니다. 한 화면에서 특정 카테고리 상품 목록을 동일한 패턴으로 보여주고 배너 몇 개 들어가는 정도였으니까요. 하지만 더 나은 사용자 경험을 위해 한 화면에 다양한 타입의 뷰를 적용하기 시작했습니다. 슈퍼마트 탭의 홈 화면만 해도 이벤트 배너 목록, 슈퍼 프라이스 목록, 기획전 목록.. 등 노...

Couchbase Spring data repository 적용기(3)
티몬
Couchbase Spring data repository 적용기(3)

Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저장소에 직접 access layer를 구현할 필요가 없도록 도와줍니다. 이러한 장점을 활용해 보기 위한 Repository 적용기를 소개합니다. 이번 마지막 3부에서는 Repository 커스텀 기능 추가를 이용해 Couchbase의 증...

Couchbase Spring data repository 적용기(2)
티몬
Couchbase Spring data repository 적용기(2)

Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저장소에 직접 access layer를 구현할 필요가 없도록 도와줍니다. 이러한 장점을 활용해 보기 위한 Repository 적용기를 소개합니다. 이번 2부에서는 직접 생성해 조회해야 했던 ViewQuery를 spring-data-couc...

Couchbase Spring data repository 적용기(1)
티몬
Couchbase Spring data repository 적용기(1)

Spring data project는 관계형, 비관계형, map-reduce 등의 다양한 데이터 저장소에 일관된 데이터 접근 방식을 제공하며, spring-data-mongodb, spring-data-jpa, spring-data-redis, spring-data-couchbase 등 다양한 서브 프로젝트로 이루어져 있습니다. Spring data는...

MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(2)
티몬
MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(2)

들어가며지난 글을 통해 모바일에 어울리는 아키텍처를 찾아 보았습니다. MVC, MVVM 모두 좋은 아키텍처라 생각하지만, 개발을 하면서 개인적으로는 조금 아쉬웠던 부분이 있었습니다. 하여 이번 글에서는 지난 글 말미에 나왔던 질문들, - API를 요청해야 할 일이 많을텐데, 이런 애들은 모두 어디서 호출하지? - 모바일 특성상 화면들도 많이 필요한데 ...

MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(1)
티몬
MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(1)

들어가며아마 모바일 App을 개발하는 분이라면 공감할 것입니다. “내 손 안의 작은 세상, 모바일 혁명", “모바일 커머스 시대"라는 말들에 맞추어, 손바닥 만한 화면에 들어가야 하는 수많은 코드, 갈수록 무거워지고 늘어나는, 결국엔 정리가 안되고 스파게티 코드로 변해가는 상황들… 늘어 놓으면 한도 끝도 없지만 이것만으로도 큰 문제고, 이런 식의 기술...

Util클래스 어디까지 써봤니? 일 편하게 하는 유틸성 클래스
티몬
Util클래스 어디까지 써봤니? 일 편하게 하는 유틸성 클래스

게으른 개발자가 되어라라는 말이 있습니다. 이 말은 게으르게 일을 하라는 것이 아니라, 같은 일을 해도 좀 더 효율적으로 하라는 말입니다. 소프트웨어 개발은 정신노동이기 때문에 개발자는 자신의 리소스가 의미없이 쓰이지 않도록 효율적인 개발을 하려고 노력해야 합니다. 이를 위해 대부분의 개발자들은 반복적이거나 공통으로 쓰이는 기능들을 처리할 때 Util...

Delayed Replication을 이용해 유실된 데이터 빠르게 복구하기
티몬
Delayed Replication을 이용해 유실된 데이터 빠르게 복구하기

지난 달, GIT 호스팅 서비스를 하는 gitlab.com에서 실수로 인해 5시간의 데이터가 유실되는 사고가 있었습니다. 원문 공지글: https://about.gitlab.com/2017/02/01/gitlab-dot-com-database-incident 번역본: 링크 참조인터넷 서비스를 할 때 가장 중요한 포인트는 서비스 자체에 있습니다만, 전체...

Java8 Parallel Stream, 성능장애를 조심하세요!
티몬
Java8 Parallel Stream, 성능장애를 조심하세요!

Java8에서 최대 변경사항은 람다라고 할 수 있습니다. 람다식을 효과적으로 사용할 수 있도록 기존 API에 람다를 대폭 적용하였으며, 그 대표적인 인터페이스가 Stream입니다. 스트림 인터페이스는 컬렉션을 파이프 식으로 처리하도록 하면서 고차함수로 그 구조를 추상화합니다. 스트림을 사용하면서, 여러 줄의 코드로 작업했던 로직을 간편하게 처리 할 수...

자바스크립트의 비동기 처리과정
티몬
자바스크립트의 비동기 처리과정

들어가며안녕하세요. 티몬에서 이제 1년차가 된 신입 개발자입니다! 그 동안 업무를 하면서 배운 것들이 많은데요, 최근에는 티몬의 상품을 관리하는 운영시스템 화면을 개발하면서 자바스크립트를 많이 알게 되었습니다. 안타깝게도 전 자바스크립트를 잘 알지도 못하는 ‘자알못’이었기 때문에 개발하면서 많은 시행착오를 겪었는데요. 특히 기대와 다르게 실행되는 비동...

응답없는 페이지가 되지 않게 하는 법 (feat. setTimeout)
티몬
응답없는 페이지가 되지 않게 하는 법 (feat. setTimeout)

들어가며웹 개발자라면 자바스크립트를 많이 사용하게 됩니다. 웹이 발전하면서, 예전에는 수십줄이면 충분했던 자바스크립트 코드가 이제는 수백, 수천줄 이상이 되었습니다. 클라이언트 개발을 하다보면, 오랜시간 동안 수행될 수 밖에 없는 기능을 구현해야 할 때가 있습니다. 웹 어플리케이션 서버와 주고받는 데이터 양이 매우 많거나, 서버에서 처리하기에는 부하가...

ES플러그인 커스터마이징 (3)ㅎㅇㅇㅎ검색 대응하기
티몬
ES플러그인 커스터마이징 (3)ㅎㅇㅇㅎ검색 대응하기

티몬의 자동완성ES플러그인 커스터마이징을 다루는 마지막 3부의 주제로 한글 검색에 필수적인 자모 분해 Filter에 대해 알아보겠습니다. 티몬에서는 사용자의 검색 편의성을 위해 질의어를 입력하면 연관된 검색어가 자동으로 추천되는 자동완성 서비스를 제공하고 있습니다. 현재 해당 서비스는 한글 자모 분석 로직이 API와 색인 배치에 함께 녹아 있어 API...