두숟갈 스터디 - 6
무엇을 공부했나요? 이번 시간에는 지난 시간에 이어 Two Scoops of Django 8~9장 내용을 살펴보았습니다. 8장 함수기반 뷰와 클래스 기반 뷰 9장 함수 기반 뷰의 모범적인 이용 진홍님께서 8장을, 문수(미주)님께서 9장 요약 자료를 준비하였고, 남홍님께서 심화 자료를 준비하여 이번 스터디를 진행하였습니다. 이번 스터디부터 본격적으로 Django에 대해 다룬다는 느낌이 들었고, 어떻게 보면 난이도가 조금 올라간 듯 한 내용들도 보
두숟갈 스터디 - 5
무엇을 공부했나요? Two scoops of Django 7장은 Django의 쿼리 및 데이터베이스 레이어에 대해 공부하였습니다. 현주님께서 7장의 자료를 요약 및 설명해주셨고, 호성님께서 관련 심화 자료를 준비해 발표해주셨습니다. 스터디중 다루었던 이야기들은 아래와 같습니다. 7장 쿼리와 데이터베이스 레이어 장고에서는 여러 종류의 데이터를 데이터베이스 종류와는 독립적인 형태로 객체화 한다(ORM). 그리고 생성된 객체에는 상호 작용할 수 있는
두숟갈 스터디 - 4
무엇을 공부했나요? Two scoops of Django 6장은 Django에서 Model을 ‘올바르게’ 사용하는 법에 대한 내용이었습니다. 안영님께서 6장의 자료를 요약 및 설명해주셨고, 연태님께서 ‘데이터베이스 정규화’라는 심화 자료를 준비해 발표해주셨습니다. 그리고 김진홍님이 새로운 스터디 멤버로 합류하셨습니다. 스터디중 다루었던 이야기들은 아래와 같습니다. 6장 장고에서 모델 이용하기 모델은 충분히 깊이 생각해서 만들어야 한다 너무 큰
RabbitMQ로 메시지 손실 최소화 하는 법(1)
우리는 메시지를 발생한 후 받아서 처리하는 메시징 시스템의 도입이 필요했다. 물론 저장소를 이용하여 직접 구현하여도 되지만 이미 검증된 다양한 솔루션이 나와있기 때문에 적절히 선택을 하면 되었다. 솔루션을 도입하기 위해 몇가지 고려해야 할 사항은 아래와 같았다. - 다양한 플랫폼과 클라이언트 언어를 지원해야 한다. - 메시지 신뢰성을 높여주는 기능을 지원해야 한다. - UI관리 툴을 제공하여 쉽게 관리가 가능하도록 한다. RabbitMQ는 위의
두숟갈 스터디 - 3
무엇을 공부했나요? 이번 시간에는 지난 시간에 이어 Two Scoops of Django 4~5장 내용을 살펴보았습니다. 4장 Django 앱 디자인의 기본 5장 Setting과 requirement 파일 제가 4장을 미주님께서 5장을 정리하여 요약 자료를 준비하였고, 남홍님께서 심화 자료를 준비하여 조금 더 실제로 적용되는 사례들에 대해 설명해 주셨습니다. 중간중간에 발표자가 질문을 하기도 하고, 받기도 하면서 자유로운 토론과 함께 발표가 진
두숟갈 스터디 - 2
무엇을 공부했나요? Two Scoops of Django 1~3장 내용을 살펴보는 시간을 가졌습니다. 1장 코딩스타일 2장 최적화된 장고 환경 꾸미기 3장 어떻게 장고 프로젝트를 구성할 것인가 문수 님께서 1장부터 3장의 내용을 요약한 자료를 준비해주셨고, 스터디 시간에 직접 발표를 해주셨습니다. 각 장에 대한 요약이 끝나면 호성 님께서 심화발표 형식으로 실무 경험담, 8퍼센트에서의 적용방식에 대해서 공유해주셨습니다. 중간중간 궁금한 내용에 대
Couchbase Spring data repository 적용기(3)
Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저장소에 직접 access layer를 구현할 필요가 없도록 도와줍니다. 이러한 장점을 활용해 보기 위한 Repository 적용기를 소개합니다. 이번 마지막 3부에서는 Repository 커스텀 기능 추가를 이용해 Couchbase의 증분값을 보다 편하게 호출하는 방법과 주의점을 살펴보겠습니다. 1. 간단한 CRUD 기능, Cou
Couchbase Spring data repository 적용기(2)
Spring data는 custom object-mapping 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저장소에 직접 access layer를 구현할 필요가 없도록 도와줍니다. 이러한 장점을 활용해 보기 위한 Repository 적용기를 소개합니다. 이번 2부에서는 직접 생성해 조회해야 했던 ViewQuery를 spring-data-couchbase의 view 기반 쿼리 메소드를 이용하도록 수정하는 과정을 다룹니다. 1. 간단한 CR
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 추상화를 지원하고 이를 통해 개발자가 다양한 데이터 저
MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(1)
들어가며아마 모바일 App을 개발하는 분이라면 공감할 것입니다. “내 손 안의 작은 세상, 모바일 혁명", “모바일 커머스 시대"라는 말들에 맞추어, 손바닥 만한 화면에 들어가야 하는 수많은 코드, 갈수록 무거워지고 늘어나는, 결국엔 정리가 안되고 스파게티 코드로 변해가는 상황들… 늘어 놓으면 한도 끝도 없지만 이것만으로도 큰 문제고, 이런 식의 기술부채는 아마도 줄어들지 않고 더 많아지겠죠. 그래서 그동안 경험했었던 디자인 패턴들에 대해서 공
Util클래스 어디까지 써봤니? 일 편하게 하는 유틸성 클래스
게으른 개발자가 되어라라는 말이 있습니다. 이 말은 게으르게 일을 하라는 것이 아니라, 같은 일을 해도 좀 더 효율적으로 하라는 말입니다. 소프트웨어 개발은 정신노동이기 때문에 개발자는 자신의 리소스가 의미없이 쓰이지 않도록 효율적인 개발을 하려고 노력해야 합니다. 이를 위해 대부분의 개발자들은 반복적이거나 공통으로 쓰이는 기능들을 처리할 때 Util 클래스를 사용합니다. 잘 알려진 Java Util 클래스 - Java util - Spring
Delayed Replication을 이용해 유실된 데이터 빠르게 복구하기
지난 달, GIT 호스팅 서비스를 하는 gitlab.com에서 실수로 인해 5시간의 데이터가 유실되는 사고가 있었습니다. 원문 공지글: https://about.gitlab.com/2017/02/01/gitlab-dot-com-database-incident 번역본: 링크 참조인터넷 서비스를 할 때 가장 중요한 포인트는 서비스 자체에 있습니다만, 전체적인 서비스의 품질을 논할 때 빠지지 않는 것이 바로 '안정성'입니다. 서비스가 안정적이지 않으
Java8 Parallel Stream, 성능장애를 조심하세요!
Java8에서 최대 변경사항은 람다라고 할 수 있습니다. 람다식을 효과적으로 사용할 수 있도록 기존 API에 람다를 대폭 적용하였으며, 그 대표적인 인터페이스가 Stream입니다. 스트림 인터페이스는 컬렉션을 파이프 식으로 처리하도록 하면서 고차함수로 그 구조를 추상화합니다. 스트림을 사용하면서, 여러 줄의 코드로 작업했던 로직을 간편하게 처리 할 수 있게 되고, 가독성 또한 높아졌습니다. 특히 Parallel Stream은 병렬연산을 쉽고 간
ES플러그인 커스터마이징 (3)ㅎㅇㅇㅎ검색 대응하기
티몬의 자동완성ES플러그인 커스터마이징을 다루는 마지막 3부의 주제로 한글 검색에 필수적인 자모 분해 Filter에 대해 알아보겠습니다. 티몬에서는 사용자의 검색 편의성을 위해 질의어를 입력하면 연관된 검색어가 자동으로 추천되는 자동완성 서비스를 제공하고 있습니다. 현재 해당 서비스는 한글 자모 분석 로직이 API와 색인 배치에 함께 녹아 있어 API 개발자와 색인 배치 개발자가 로직을 동시에 개발해야 하는 문제가 있습니다. 추후 분석 방법 변
ES플러그인 커스터마이징 (2)핫딜 검색순위 조절하기
들어가며 티몬에서는 고객에게 검색 서비스를 제공하기 위해 검색엔진으로 엘라스틱 서치(Elasticsearch, 이하 ES)를 사용하고 있습니다. 고객과 기획자의 요구사항에 충족하는 검색 결과를 위해 티몬에서는 ES플러그인을 커스터마이징 하고 있습니다. 지난 1부에서는 특정 검색 키워드에 따라 제작형 컨텐츠를 추천하는 커스텀 분석기 플러그인의 개발 작업을 살펴보았습니다. 본 2부에서는 검색어에 따라 인기 딜이 동적으로 노출될 수 있도록 하는 Sc
ES플러그인 커스터마이징 (1)어떠한 검색어도 의미있는 추천을
들어가며예상하셨겠지만 티몬에서는 고객에게 검색 서비스를 제공하기 위해 검색엔진으로 엘라스틱 서치(Elasticsearch, 이하 ES)를 사용하고 있습니다. ES는 Solr와 같이 Lucene 을 기반으로 개발되었기 때문에 별다른 추가 기능 없이 그 자체로도 웬만한 검색 서비스는 구현할 수 있는 수준입니다. 하지만 티몬 같은 커머스 검색은 고객과 기획자의 요구 사항이 매우 다양하기 때문에, 이를 충족하기 위한 엔진의 Customizing은 필연
섬네일 생성 자동화 - 미션2. 처리속도 높이기
들어가며지난 글<섬네일 생성 자동화 - 미션1. 같은 이미지 골라내기>을 통해 섬네일 서버로의 요청을 줄이기 위한 노력을 살펴봤습니다. 이미지에 암호화 해싱을 적용해 이미지 자체를 구분하는 네임테그(해시값)를 만들고, 네임테그끼리의 비교를 통해 동일 이미지 여부를 판단할 수 있었습니다. 이번 글에서는 지난 1부를 통해 줄어든 요청 건수를 어떻게 하면 더 빠르게 처리할 수 있었는지 다루고자합니다. 섬네일 서버의 성능경우에 따라 다르겠지만, 섬네일
PostgreSQL 업그레이드 이야기
시작 모씨의 메인 데이터베이스는 PostgreSQL 입니다. 대부분의 데이터는 이곳에서 저장, 관리되고 있는데요, 최근에 데이터베이스 운용과 관련된 이슈가 발생하여 문제를 해결하는 과정에 대해 이야기를 해 보고자 합니다. 문제 인식 최근에 간헐적으로 데이터베이스의 커넥션이 꽉 차면서 서비스가 짧은 시간 느려지거나 멈추는 현상이 보고되기 시작 하였습니다.