DDD Study 2기 : 네번째 개발 직군 세션

DDD
9 min readJun 24, 2019

Occupation Session Part.4

안녕하세요, DDD.입니다!

오늘도 무더위 속에서 저희 DDD 팀원들과 직군 세션을 진행하였습니다. :D

이번 세션은 6월 15일 진행 되었으며,
각각 안드로이드, iOS, Server 로 진행하였습니다.

각 파트별 주제를 공개합니다!

Android

  • ReactiveX, Scheduler 관리(발표자 : 김지훈)
  • Android Project에 ReactiveX 적용해보기(발표자 : 민경운)

iOS

  • Siri Shortcuts(발표자 : 박성준(고댑))

Server

  • C++ 입문(발표자 : 최경환)
  • LogStash(발표자 : 지은경)

Dev — Android

ReactiveX, Scheduler 관리
발표자 : 김지훈

스케줄러란?

  • Rxjava에서 제공하는 스레드를 관리하는 클래스
  • 용도별로 적절히 스레드를 관리하는 클래스 제공
  • 직접 스레드를 관리하는 번거로움을 해결

왜 필요한가?

  • 안드로이드는 싱글 스레드 모델
  • 처리하는데 시간이 오래걸리는 네트워크/파일 입출력 등은 별도의 스레드로 분리해서 작업 해야 한다

어떻게 사용하는가?

  • subscribeOn(), observeOn() 사용하여 어떤 스레드에서 수행할지 정의해준다
  • 별도로 지정하지 않으면 메인 스레드에서 동작

Android Project에 ReactiveX 적용해보기
발표자 : 민경운

클린 아키텍처를 베이스로 간단한 API 호출 후
DataBinding 까지 연결된 프로세스를 시나리오로 가정하여 진행 하였습니다.

Api Response Type Single을 사용한 이유

Single 은 Observable 과는 다르게 onSuccess(item)onError(throwable)만을 가진다.
비동기 처리 후 결과만을 반환해야 하는 경우, 즉 위와 같이 dao 등을 통해 데이터를 비동기로 불러오고자 하는 경우에 적절하다.

Single.fromCallable(dao::getUsers)
.subscribeOn(Schedulers.io())
.subscribe(users -> {
// Next Step
}, throwable -> {
// Error handling
});

concatMap을 사용한 이유

ConcatMap은 flatMap과 거의 비슷하게 동작하지만 처음에 방출된 아이템의 순서를 유지하고 있습니다.
하지만 큰 단점을 가지고 있는데요.
연속해서 아이템이 방출 되더라도 이전에 방출된 아이템이 아직 처리 중이라면 끝날 때까지 계속해서 기다리게 됩니다.
현재 케이스는 첫번째 UseCase가 성공해야지 두번째 UseCase가 실행되어야 되는 상황이라 concatMap을 사용했습니다.
결국은 상황마다 flatMap, concatMap, switchMap 을 선택해서 사용하면 됩니다.

Dev — iOS

Siri Shortcuts
발표자 : 박성준(고댑)

  • Siri Shortcuts이란?
  • Creating Shortcuts
  • Shortcut APIs
  • Siri 제안
  • Demo 실습

[Siri Shortcut이란?]

Siri Shortcuts은 iOS12의 새로운 기능으로써 기존의 SiriKit과 Shortcut 기능의 결합입니다.

명령어 만으로 앱의 특정 기능을 실행 시킬 수 있는 기능

[Creating Shortcuts]

Shortcut을 만들기 위해서는 3단계의 작업으로 구분된다.

Define: 언제, 어떤 Shortcut을 사용할 지, 앱 안에 정의한다.

Donate: 사용자들이 Shortcut 기능을 사용하기 위해, 개발자가 정의한 시나리오를 사용자의 Shortcut에 donate한다.

Handle: 제공된 Shortcut의 Response 또는 다음 Action에 대해 Handling 할 수 있다.

기존의 SiriKit은 Built-In 기능만 사용할 수 있는 단점이 있었다.

허나 Shortcut의 기능이 합쳐지며, 어떠한 기능이던지 Siri를 사용한 Shortcut으로 개발이 가능해졌다.

[Siri 제안]

아무래도 사용자들은 외부에서의 음성 인식 사용을 꺼려하는 경향이 있다.

그래서 사용자들이 굳이 음성인식으로 말하지 않고, 터치 한번으로 Shortcut 기능을 사용할 수 있도록 하는 Siri 제안이라는 기술이 주목받고 있다.

특정 시간대에 반복적으로 사용한 Shortcut에 대해서 Siri가 사용자의 앱 사용 패턴을 학습하고, 이를 통해 해당 시간대의 잠금화면을 통해 Shortcut을 사용할 것을 제안한다.

예를 들어 월요일과 화요일 점심 시간에 도시락이라는 Shortcut을 사용한다면, 수요일 점심에 Siri는 잠금화면을 통해 도시락 Shortcut을 사용할 것을 제안한다.

[Demo 실습]

Github API를 사용해 내 Github Profile 정보를 Siri Shortcut으로 불러올 수 있는 데모앱을 세션 시간에 구현해보았습니다.

Dev — Server

C++ 입문
발표자 : 최경환

C++

어셈블리어로 운영체제를 만들기는 까다롭다. 그래서 나온게 C언어다. 그런데 이것도 사용하기가 불편하고 결점들이 많다. 그래서 또 나온게 C++이다.

C++ 장점

사용자가 메모리 관리를 직접해서 그에 따른 퍼포먼스가 나온다.
그로 인해 임베디드 시스템에서 많이 사용.
또한 OS의 커널자체가 C언어나 C++로 이루어져 있다.

C++ 단점

메모리 관리를 직접해서 코드가 어려워지고 메모리 할당을 못해주면 메모리 수도 생기고 이를 막기 위해 break를 걸어서 하나하나 메모리 할당을 확인한다.
생산성이 없다.
같은 성능을 코딩했을 때 코드 양이 다른 언어에 비해 많다.
C++언어의 입지가 애매해졌다.
stackOverHead가 많이 발생(프로그램이 죽을 수 있다). 대입연산.. 복사생성자
→ 복사생성자 .. C++ 자체가 주소값을 참조받다 보니까 클래스마다 동적할당을 하는 경우가 많아진다.
이렇게 되면 원치않은 메모리 할당이 생성되기도 한다.

modern C++

C++의 단점을 보완해서 나옴.
새로운 기능 추가
기존 라이브러리 개편. (현재진행형)

* auto 초기값을 바탕으로 자료형을 자동으로 결정 (단, 변수 초기화시에만 사용 가능.)
* lamda
ex) [my_mod] (int v_) -> int()
[] : 게시자 — 외부 변수를 가져다 쓸 때 싸용
() : 전달 인자
-> : 반환 타입
{} : 함수 몸통

* rvalue/move 복수생성자의 오버헤드를 줄여주는 것. 자신과 동일한 객체를 생성하고 move는 메모리 할당 x.
* smartpointer
ex) std::unique_ptr<int> ptr1 (new int(5));

* boost modern C++이 대부분 boost의 기능을 가져다 씀.

* casablanca Restful SDK. restful한 디자인을 하기위해 만든 라이브러리. (MS에서 만듬.) github의 정리가 잘 되어있음. 단점) 리눅스로 개발할 땐 설치과정이 복잡. sample code가 거의 없다.

LogStash
발표자 : 지은경

개요

  • 실시간 파이프라인 기능을 가진 데이터 수집 엔진.
  • 데이터를 입력받고 필터로 원하는 데이터를 필터링
  • 빅 데이터에서도 데이터를 가공하는데도 많이 사용
  • 엘라스틱서치와 궁합이 잘맞다

아키텍쳐

  • input(데이터 수신)
  • output(데이터 전송)
  • filter(데이터 가공)

왜 사용할까?

  • 개발할 때나 운영할 때 로그를 수집해서 분석해야 한다.
    하지만 공통/일관된 형식이 없고 여러가지 단점을 때문에 logstash로 해결이 가능해서 많이 사용한다.
  • instance 별로 다중 input을 할 수 있다. 원하는 형태로 가공 가능. 원하는 목적지에 전달 가능.
  • 다양한 input plugin을 지원. (network TCP/UDP을 기본적으로 사용)
  • beats(대용량 데이터를 한번에 받을 수 있다)와도 많이 사용
  • 저장소를 선택해서 데이터를 전송. (어떻게 쓰냐에 따라 다르다)
  • codec지원
  • 플러그형 파이프라인 아키텍쳐, 파이프라인 설정파일
  • filters 여러가지 원하는 형태로 데이터 커스터마이징 가능. (GROK — 미리 정의된 정규식 패턴을 통해서 데이터를 보기편하게 추출 / GEOIP — IP주소로부터 위치정보를 얻어옴. <grok다음에 사용해야 한다.> / DATE — timstamp를 log에 존재하는 날짜필드 값으로 변경해줌.)

사용법

  • logstash execution model
  • java 7 이상의 버전이 설치되어 있어야 한다.
  • docker 로도 사용가능.

벌써 다음 직군세션이 DDD 2기 직군 세션 마지막이네요.

마지막까지 프로젝트에 최선을 다해서 유종의 미를 거두길 바라겠습니다. :D

다음 세션에서 만나요, DDD는 또 찾아옵니다!

페이스북 https://www.facebook.com/dddstudy

문의 메일 dddstudy1@gmail.com

작성자 : 민경운

--

--

DDD
DDD

Written by DDD

Dynamic Developer Designer | 개발자와 디자이너가 함께하는 IT 동아리

No responses yet