티몬 안드로이드 앱 RxAndroid 적용 사례
초기의 티몬 앱 화면 구성은 지금에 비하면 꽤 단순한 구조였습니다. 한 화면에서 특정 카테고리 상품 목록을 동일한 패턴으로 보여주고 배너 몇 개 들어가는 정도였으니까요. 하지만 더 나은 사용자 경험을 위해 한 화면에 다양한 타입의 뷰를 적용하기 시작했습니다. 슈퍼마트 탭의 홈 화면만 해도 이벤트 배너 목록, 슈퍼 프라이스 목록, 기획전 목록.. 등 노출되는 정보와 뷰가 다양해지면서 호출해야 하는 api도 많아졌습니다. 모든 api는 비동기로 호
AndroidMobilePerformanceUX/UI
Couchbase Spring data repository 적용기(3)
Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저장소에 직접 access layer를 구현할 필요가 없도록 도와줍니다. 이러한 장점을 활용해 보기 위한 Repository 적용기를 소개합니다. 이번 마지막 3부에서는 Repository 커스텀 기능 추가를 이용해 Couchbase의 증분값을 보다 편하게 호출하는 방법과 주의점을 살펴보겠습니다. 1. 간단한 CRUD 기능, Cou
BackendDatabaseSpring
Couchbase Spring data repository 적용기(2)
Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저장소에 직접 access layer를 구현할 필요가 없도록 도와줍니다. 이러한 장점을 활용해 보기 위한 Repository 적용기를 소개합니다. 이번 2부에서는 직접 생성해 조회해야 했던 ViewQuery를 spring-data-couchbase의 view 기반 쿼리 메소드를 이용하도록 수정하는 과정을 다룹니다. 1. 간단한 CR
BackendData EngineeringSpring
Couchbase Spring data repository 적용기(1)
Spring data project는 관계형, 비관계형, map-reduce 등의 다양한 데이터 저장소에 일관된 데이터 접근 방식을 제공하며, spring-data-mongodb, spring-data-jpa, spring-data-redis, spring-data-couchbase 등 다양한 서브 프로젝트로 이루어져 있습니다. Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저
BackendDatabaseSpring
MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(2)
들어가며지난 글을 통해 모바일에 어울리는 아키텍처를 찾아 보았습니다. MVC, MVVM 모두 좋은 아키텍처라 생각하지만, 개발을 하면서 개인적으로는 조금 아쉬웠던 부분이 있었습니다. 하여 이번 글에서는 지난 글 말미에 나왔던 질문들, - API를 요청해야 할 일이 많을텐데, 이런 애들은 모두 어디서 호출하지? - 모바일 특성상 화면들도 많이 필요한데 모두 그냥 호출하면 되는건가? - 만약 특정 화면을 필요로 하는 곳에서 각각 navigation
AndroidArchitectureFrontendMobileiOS
MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(1)
들어가며아마 모바일 App을 개발하는 분이라면 공감할 것입니다. “내 손 안의 작은 세상, 모바일 혁명", “모바일 커머스 시대"라는 말들에 맞추어, 손바닥 만한 화면에 들어가야 하는 수많은 코드, 갈수록 무거워지고 늘어나는, 결국엔 정리가 안되고 스파게티 코드로 변해가는 상황들… 늘어 놓으면 한도 끝도 없지만 이것만으로도 큰 문제고, 이런 식의 기술부채는 아마도 줄어들지 않고 더 많아지겠죠. 그래서 그동안 경험했었던 디자인 패턴들에 대해서 공
ArchitectureBackendFrontendMobileUX/UI
Util클래스 어디까지 써봤니? 일 편하게 하는 유틸성 클래스
게으른 개발자가 되어라라는 말이 있습니다. 이 말은 게으르게 일을 하라는 것이 아니라, 같은 일을 해도 좀 더 효율적으로 하라는 말입니다. 소프트웨어 개발은 정신노동이기 때문에 개발자는 자신의 리소스가 의미없이 쓰이지 않도록 효율적인 개발을 하려고 노력해야 합니다. 이를 위해 대부분의 개발자들은 반복적이거나 공통으로 쓰이는 기능들을 처리할 때 Util 클래스를 사용합니다. 잘 알려진 Java Util 클래스 - Java util - Spring
BackendJavaSpring
Delayed Replication을 이용해 유실된 데이터 빠르게 복구하기
지난 달, GIT 호스팅 서비스를 하는 gitlab.com에서 실수로 인해 5시간의 데이터가 유실되는 사고가 있었습니다. 원문 공지글: https://about.gitlab.com/2017/02/01/gitlab-dot-com-database-incident 번역본: 링크 참조인터넷 서비스를 할 때 가장 중요한 포인트는 서비스 자체에 있습니다만, 전체적인 서비스의 품질을 논할 때 빠지지 않는 것이 바로 '안정성'입니다. 서비스가 안정적이지 않으
BackendDatabaseMonitoringSecurity
Java8 Parallel Stream, 성능장애를 조심하세요!
Java8에서 최대 변경사항은 람다라고 할 수 있습니다. 람다식을 효과적으로 사용할 수 있도록 기존 API에 람다를 대폭 적용하였으며, 그 대표적인 인터페이스가 Stream입니다. 스트림 인터페이스는 컬렉션을 파이프 식으로 처리하도록 하면서 고차함수로 그 구조를 추상화합니다. 스트림을 사용하면서, 여러 줄의 코드로 작업했던 로직을 간편하게 처리 할 수 있게 되고, 가독성 또한 높아졌습니다. 특히 Parallel Stream은 병렬연산을 쉽고 간
BackendJavaPerformance
자바스크립트의 비동기 처리과정
들어가며안녕하세요. 티몬에서 이제 1년차가 된 신입 개발자입니다! 그 동안 업무를 하면서 배운 것들이 많은데요, 최근에는 티몬의 상품을 관리하는 운영시스템 화면을 개발하면서 자바스크립트를 많이 알게 되었습니다. 안타깝게도 전 자바스크립트를 잘 알지도 못하는 ‘자알못’이었기 때문에 개발하면서 많은 시행착오를 겪었는데요. 특히 기대와 다르게 실행되는 비동기 API 때문에 고생을 했더랬죠. 그래서 이번 포스팅에서는 자바스크립트의 실행 환경에 대해 살
FrontendJavaScriptPerformanceTools
응답없는 페이지가 되지 않게 하는 법 (feat. setTimeout)
들어가며웹 개발자라면 자바스크립트를 많이 사용하게 됩니다. 웹이 발전하면서, 예전에는 수십줄이면 충분했던 자바스크립트 코드가 이제는 수백, 수천줄 이상이 되었습니다. 클라이언트 개발을 하다보면, 오랜시간 동안 수행될 수 밖에 없는 기능을 구현해야 할 때가 있습니다. 웹 어플리케이션 서버와 주고받는 데이터 양이 매우 많거나, 서버에서 처리하기에는 부하가 심한 기능 같은 경우, 클라이언트 측에서 해당 기능을 수행하는게 효율적입니다. 하지만 브라우저
FrontendJavaScriptPerformanceTools
ES플러그인 커스터마이징 (3)ㅎㅇㅇㅎ검색 대응하기
티몬의 자동완성ES플러그인 커스터마이징을 다루는 마지막 3부의 주제로 한글 검색에 필수적인 자모 분해 Filter에 대해 알아보겠습니다. 티몬에서는 사용자의 검색 편의성을 위해 질의어를 입력하면 연관된 검색어가 자동으로 추천되는 자동완성 서비스를 제공하고 있습니다. 현재 해당 서비스는 한글 자모 분석 로직이 API와 색인 배치에 함께 녹아 있어 API 개발자와 색인 배치 개발자가 로직을 동시에 개발해야 하는 문제가 있습니다. 추후 분석 방법 변
BackendDevOpsMonitoringPerformanceTools
ES플러그인 커스터마이징 (2)핫딜 검색순위 조절하기
들어가며 티몬에서는 고객에게 검색 서비스를 제공하기 위해 검색엔진으로 엘라스틱 서치(Elasticsearch, 이하 ES)를 사용하고 있습니다. 고객과 기획자의 요구사항에 충족하는 검색 결과를 위해 티몬에서는 ES플러그인을 커스터마이징 하고 있습니다. 지난 1부에서는 특정 검색 키워드에 따라 제작형 컨텐츠를 추천하는 커스텀 분석기 플러그인의 개발 작업을 살펴보았습니다. 본 2부에서는 검색어에 따라 인기 딜이 동적으로 노출될 수 있도록 하는 Sc
BackendData AnalysisElasticsearchSearch
ES플러그인 커스터마이징 (1)어떠한 검색어도 의미있는 추천을
들어가며예상하셨겠지만 티몬에서는 고객에게 검색 서비스를 제공하기 위해 검색엔진으로 엘라스틱 서치(Elasticsearch, 이하 ES)를 사용하고 있습니다. ES는 Solr와 같이 Lucene 을 기반으로 개발되었기 때문에 별다른 추가 기능 없이 그 자체로도 웬만한 검색 서비스는 구현할 수 있는 수준입니다. 하지만 티몬 같은 커머스 검색은 고객과 기획자의 요구 사항이 매우 다양하기 때문에, 이를 충족하기 위한 엔진의 Customizing은 필연
BackendData AnalysisElasticsearchRecommendationSearch
섬네일 생성 자동화 - 미션2. 처리속도 높이기
들어가며지난 글<섬네일 생성 자동화 - 미션1. 같은 이미지 골라내기>을 통해 섬네일 서버로의 요청을 줄이기 위한 노력을 살펴봤습니다. 이미지에 암호화 해싱을 적용해 이미지 자체를 구분하는 네임테그(해시값)를 만들고, 네임테그끼리의 비교를 통해 동일 이미지 여부를 판단할 수 있었습니다. 이번 글에서는 지난 1부를 통해 줄어든 요청 건수를 어떻게 하면 더 빠르게 처리할 수 있었는지 다루고자합니다. 섬네일 서버의 성능경우에 따라 다르겠지만, 섬네일
BackendPerformanceTools