728x90

 

 

안녕하세요. 이번글은 합정역 5번 출구 기준으로 도보 5분거리에 위치한

태국음식점 심플리 타이에 다녀온 후기입니다.

 

 

 

 

여긴 네이버예약도 가능한 가게이기 때문에,

주말에는 미리 예약하고 여유롭게 가시는 것도 추천드려요!

 

https://store.naver.com/restaurants/detail?id=37309462

 

심플리타이 합정점 : 네이버

N예약 리뷰 14 · ★4.3 · 태국현지음식을 즐길 수 있는 타이요리전문점

store.naver.com

 

 

 

 

 

화요일 저녁 약속이 있어서 합정역 심플리타이에 가게 되었는데요.

먼저 도착하고 2인 자리에 앉아있었습니다.

 

 

]

메뉴는 2인세트 중 B 세트 - 커리소스 게, 새우 볶음밥, 파타이 를 시켰습니다.

음료도 같이 나오는 메뉴였는데요.

 

전체 메뉴 상세 사진은 하단에 전부 찍어놨습니다!

 

저는 커리소스 게가 생어거스틴의 뿌팟봉커리(소프트크랩을 커리에 볶아서 껍질채로 먹는 요리)하고

비슷할 줄 알고 시켰는데,

이건 껍질채로 먹는건 아니더라구요~ ㅋㅋㅋㅋ

 

대신 커리소스 게를 새우볶음밥하고 같이 비벼서 먹으면 맛있다는

직원분 추천이 있었는데, 맛있었습니다 :)

 

 

 

 

상세메뉴는 아래와 같습니다~

 

 

 

 

728x90
728x90

 

 

Title: Build a Modular Android App Architecture

Speaker(s): Yigit Boyar, Florina Muntenescu

 

 

1. 어떻게 모듈화된 안드로이드 앱 아키텍쳐를 구축할 것인가?

1) 왜 우리는 이를 구축해야하는가?

  (1) Scale 문제

      - 한두명이 아닌, 여러명이 공통 개발을 할 때, 각자의 담당하는 바를 간섭하지 않고 개발하기란(without stepping on each other's toes) 어렵다. 그래서 이를 방지하고자 이런 모듈들로 나눠서 만들 수 밖에 없다는 의미.

 

  (2) maintainability 유지보수성

      - 만약 monolithic application, 즉 하나의 거대한 아키텍쳐를 가진 앱을 마주하게 된다면? 안드로이드 개발자가 수십 수백개의 레이어들을 마주하게 되고 이를 파악하고 분석하는 것은 매우 어려운 일이다. 대신에, 만약 이 레이아웃들을 각 특징(feature)에 기반하여 그룹화 한다면, 용도의 파악이 용이진다. 또한 굉장히 길고 이상한 이름(weird name)으로 목록이 생기지 않는다. 

 

 

 

  (3) Faster compilation 빠른 컴파일

      - 왼쪽은 monolithic application의 예, 오른쪽은 modulaized application된 예다. 만약 '(designer_news_)comment.xml'라는 파일을 1개 수정했다고 가정 했을때, 컴파일시 커버 범위는 다음과 같다.

      

  (4) Faster CI(Continuous Integration) 빠른 지속적 통합

      - 만약 다음과 같은 모듈 구조를 가진 앱이 있다고 가정하자.

 

      - 이 중에서 module5를 수정 한다고 했을때, 변화가 올바른지 확인하기 위해서 테스트를 해야하는 부분은 오로지, module5가 depend 하고 있는 app부분만 확인하면 된다. 따라서 테스트를 할 때, 연관되지 않은 다른 부분들을 실행할 필요가 없다. 

      - 이에 대해서 '우리는 incremental CI이 없다!'라고 말할 수 있다. 그래서 AndroidX 개발에서 의존성 그래프에 대한 플러그인, 파일들이 변화된 위치와 해당 파일들이 포함된 모듈이 무엇인지에 대한 Git History를 알 수 있도록 하는 플러그인들을 작성했다. 그리고 영향받은 모듈들에 대한 모든 테스트를 실행하였다. 해당 작업에 대한 링크는 다음과 같다. http://goo.gle/androidx-dependency-tracker 

 

 

  (5) Good for business

      - APK 사이즈가 작아지는 장점이 있다. Play store의 통계에 따르면, APK 사이즈에 따라 사람들이 설치를 시작하고 중단하는 비율이 다음과 같다. 즉 앱의 사이즈가 작으면 보다 많은 이용자를 끌어들일 수 있다.

      - 또한 PM이 "내가 정말 멋진 라이브러리를 찾아가지고 왔어!"라고 아이디어를 들고 와도, 이것이 좋은지 안좋은지 싸울 필요가 없다. 다이나믹하게 개발하고 A/B 테스트를 진행하면 됨.

 

 

2) 그렇다면 어떻게 모듈화 할 것인가? feature or layer?

  (1) feature modularization

 


     + 참고: https://developer.android.com/studio/projects/android-library?hl=ko

      - 앱 모듈을 라이브러리 모듈로 변환할 때, 기존 앱 모듈의 build.gradle 파일을 열면 맨 위에 다음과 같이 표시 되어 있다.

apply plugin: 'com.android.application'

      - 이를 다음처럼 플러그인 할당을 변경하고 sync를 맞춘다.

apply plugin: 'com.android.library'

      - 모듈의 전체 구조는 동일하게 유지되지만, 이제 Android 라이브러리로 작동하며 빌드에서 이제 APK 대신 AAR 파일이 생성됩니다.

 

 

 

app은 application으로 plugin하고, module은 library로 plugin한다
app은 module1이라는 라이브러리에 의존한다. 즉, app은 module1으로부터 코드와 리소스를 접근한다.
그러나 다른 모듈들은 dynamic feature modules일 수 있다. dynamic feature modules들은 dynamic delivery를 경유하여 로딩되는 on-demand code로 사용될 수 있다. 

 

dynamic feature modules은 app에 의존한다. 즉, app으로부터 코드와 리소스를 접근한다.
app은 이런 모듈들을 build.gradle 파일에 dynamic feature modules로 선언한다.
여기서 중요한 점은, app은 사실 module2와 module3에 의존하지 않는다는 점이다. 이는 이 app 안의 feature module의 메인 제약(restriction)이다. 그래서 app이 실제로는 코드와 리소스를 접근하지 않음에도, 이 옵션은 feature modules의 on-demand delivery를 허용한다. dynamic delivery를 통해서, 사용자는 요구에 따라 동적인 특징들(dynamic features)을 다운로드하고 설치할 수 있다.

 

요구에 의해 꺼지는 modules은 당신의 APK의 부분으로써 자동적으로 추가된다. 그리고 만약 당신이 on-demand delivery를 enable 한다면, 이것은 Google Play Store로부터 해당 모듈의 다운로드를 관리할 필요가 있다는 것을 의미한다.

 

공유된 코드와 리소스는 코어 라이브러리의 부분이 된다. 

 

on-demand delivered modules의 이점은 3rd-party 라이브러리를 의존할 수 있다는 것이다. 그리고 정말로 모듈에 다운로딩 될 때만 다운로드 된다.  이는 APK 사이즈를 줄일 수 있다는 것을 의미한다. 

 

하지만 어떻게 우리는 dynamic feature module인 것과 아닌 것을 결정하는가? 이를 위해, 화자는 80/20 원리(80%의 유저가 app의 20%를 사용한다)를 설명한다.
그렇다면, app의 나머지 80%는 app의 core flow 부분이 아니다. 이를 expert features 혹은 paid features라고 하자. 이 features는 나중에 다운받아질 수 있다.

 

유사하게, OnBoarding과 같이 나중에 삭제될 수 있는 feature도 있을 수 있다. 그래서 onDemand는 fase가 될 것이다. 이처럼 약간의 공간을 청소할 수 있다. 
그렇다면 About Screen과 같은 app의 core flow가 아닌 경우를 이야기 하자. 이 경우는 on demand이어야 하는가, 아니어야하는가? dynamic feature여야 하는가 아닌가? 이에 화자는 이처럼 작은 경우, Aout Screan에 즉각적인 접근이 되는 것을 원한다면 안드로이드 라이브러리쪽인게 보다 좋을 것이라 이야기 한다. 만약 좋은 사용자 경험을 확실하게 하고 싶고, 사용자가 이걸 기다리게 하는 것을 원하지 않는다면 말이다. 물론 간단한 about과 같이 dynamic feature module이 가져오는 모든 트러블이 가치있지는 않다.
이제 다른 접근으로, 격자(Plaid) 화면 형태인 뉴스 어플리케이션 샘플에 대해 이야기 해보자. 이 앱은 3개의 다른 소스(디자이너 뉴스, 디자이너 커뮤니티 dribbble, Product hunt 서비스)부터 데이터를 합친다. 각각의 소스는 각자의 표현방법과 비지니스 로직을 가진다. 우리가 원하는 것은 on-demand delivery에 대한 가능성이다. 우리가 원할 때마다 이와 같은 데이터들을 다운로드하는게 가능 해야하고, 다른 것들이 추가 될 수 있어야한다.   

 

즉 이는 디자이너 뉴스나 dribble이 dynamic feature module임을 의미한다. 

 

하지만 search나 about과 같은 것을 우리는 보게 되는데, 이것들은 on-demand delivery로부터 이득을 볼 수 없다. 그래서 우리는 이걸 library module로 남겨둔다.

 

 

 

  (2) feature modularization

 

앞서 말한 격자(Plaid) 화면의 Features들은 어떤 종류의 사용자 features을 가지고, 어떤 기술을 필요로 하는가? (그림과 같이) 우선 뉴스 스트림에 대한 지속성과 이를 fetch하는 API 클라이언트 및 feed UI가 있어야한다. 복수의 뉴스 프로바이더들, 프로바이더에 따른 커스텀 스타일, 권한, 사람들이 스토리에 대해 투표와 코멘트하는 기능들..... 등이 필요하다. 이에 대한 아키텍쳐는 아래와 같을 것이다.
그렇다면 이와 같은 구조, layering의 종류로부터 어떻게 우리가 이점을 얻을 수 있을까? 한가지 옵션은 isolation이다. 

 

 

모듈에 대하여 말할 때, 어떤 한 모듈이 다른 모듈에 의존적이라면 이는 'API' 혹은 'Implementation'이라고 말할 수 있다. API의 경우: 모듈A에게 모듈B에 의존적인 API가 있다면, 이는 B로부터 제공받는 모든 public 기능들은 B로부터 제공받는다는 것이다. 즉 A에 의존하는 모듈들도 B의 public api에 접근할 수 있다. 하지만 implementation의 경우, A에 의존적인 모듈들은 B를 볼 수 없고, B에 대하여 알아야만 한다.

 

 

+ 내가 해석을 해놓고도 개떡같아서 무슨 말인가 싶어서 차이점에 대해 찾아보았다.

   https://tjandroid.blogspot.com/2018/11/api-implementation.html 블로그에 따르면, 

  • api: 의존 라이브러리 수정시 본 모듈을 의존하고 있는 모듈들 또한 재빌드
    • A(api) <- B <- C 의 경우 C 에서 A 를 접근할 수 있음
    • A 수정시 B 와 C 모두 재빌드
  • implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드
    • A(implementation) <- B <- C 의 경우 C 에서 A 를 접근할 수 없음
    • A 수정시 B 까지 재빌드

 

 

- 해석중

 

 

Reference

 

https://www.youtube.com/watch?v=PZBg5DIzNww

 

728x90
728x90

 

안녕하세요. 오늘은 갤럭시 스토어에서 판매하고 있는 '셀럽알람'에 대한 글을 가지고 왔습니다. :)

 

- 내가 좋아하는 케이팝 스타의 목소리로 아침에 일어난다면?
   삼성의 갤럭시 스토어에서 구매가 가능한 셀럽알람!

 

 

 

 갤럭시 스토어에서 '셀럽알람'이라고 검색을 하면,

아래처럼 케이팝스타들의 TSA를 구매할 수 있게끔 나오는데요

 

 

 

- 프리뷰로는 여자친구의 은하가 셋팅되어있구요

 

 

- 워너원 출신의 강다니엘 / 박지훈

 

- 뉴이스트의 민현

- 에이핑크의 손나은

 

 

그 외에도 GOT7, ITZY, 아스트로, 몬스타엑스, 세븐틴 등 유명 그룹들이 존재합니다.

 

 

* 셋팅 방법!

- '시계' 혹은 알람으로 접근 -> '알람음'에서 빅스비알람으로 원하는 보이스를 설정하면 됩니다. :)

 

728x90
728x90

안녕하세요. 직접 플레이해보고 작성하는 두번째 모바일 게임 리뷰. 이번엔 "퍼스트 서머너"에 대해 작성합니다.

해당 게임은 스케인글로브 개발, 라인게임즈 서비스인 게임입니다.

 

 

1. 왜 타이틀이 '퍼스트 서머너'인가? - 게임 배경 스토리

해당 게임의 배경은 '저주받은 세상'입니다. 저주의 근원인 다크홀과 함께 악의가 세상에 창궐하고 저주가 가득해졌다고 합니다. 그 가운데 '검은 뱀'만이 저주와 맞설 유일한 존재라고 하네요. 그리고 저주받은 세상에서 마물을 부리는 강력한 이들이 등장하는데, 다크홀에 맞서는 영웅들을 '어둠의 소환사'라고 합니다. 그래서인지 본래 해당 게임의 선 타이틀이 '다크 서머너'이었다고 하는데, 정식 출시에서는 First Summoner 첫번째 소환자라고 타이틀이 변경된 것은 메인화면의 붉은 머리 여자 캐릭터 '레이첼'을 강조하기 위한 것으로 여겨지네요. 

 

 

주인공 레이첼은 천부적인 재능을 가지고 있었으나 전사로써 인정을 받지 못한 주인공이라고 하는데요. '기억의 조각' 1편에 따르면, 사실은 전사의 왕국 발잠의 공주였으나, 차기 국왕인 왕자 이더스에게 미움을 받았다고 합니다. 

 

 

어찌 되었든 게임의 맨 처음 장면은 레이첼이 검은 뱀을 찾기 위해 죽음을 두려워하지 않고 전투에 임하는 상황입니다. 목숨이 위태로운 상황에서 레이첼의 모습을 본 '아젤룸'이라는 존재가 레이첼의 영혼을 대가로 검은뱀의 수하가 되게끔 계약을 합니다. 

 

 

아젤룸에 따르면, '검은 뱀'은 '다크홀'의 함정에 빠져 봉인 당한 모양입니다. 그리하여 각 5개의 구역마다 존재하는 다크홀을 찾아 수문장을 죽이고 '검은 뱀'의 봉인을 해제하는 것이 이 게임의 메인 퀘스트입니다.

 

 

 

2. 양산형 게임과 차별을 두겠다! 세로형 수동 전투!... 그러나 노가다?

아무래도 마물을 부리는 소환사가 주인공이다보니, 마물 소환 카드를 수집하고, 강화해서 덱을 짜는게 기본입니다. 

 

그리고 해당 덱으로 전투 스테이지에 돌입하면, 마치 라인게임즈의 다른 게임 '드래곤 플라이트'처럼 세로형 전투가 진행됩니다. 아래에서 위로 올라간다는 점이 동일하네요. 

이전에 했던 보스레이브와 같은 게임과 달리, 자동전투모드가 없습니다. 또한 행동력이나 스테미너가 별도로 없습니다. 즉, 유저가 수동전투를 하고 싶은 만큼 계속할 수 있다는 점. 플레이하고 잠시동안이나마 이점에 대해 매력을 느끼긴 했습니다. 마치 옛날에 하던 온라인 RPG 게임을 핸드폰으로 하는 기분이었거든요.

 

그러나 자동전투가 없는 만큼, 게임 자체가 단조롭고 쉽습니다.

덱 편성에서 코스트 제한이 없기 때문에, 필요한 카드는 자유롭게 사용 가능합니다. 물론, 해당 카드마다 소비 마나가 있기 때문에 나름 생각은 해야하지만... 그것도 한두번 익숙해지면, 각 스테이지마다 진입 전에 출몰 몬스터가 무엇인지 미리 알 수 있기 때문에 대응하기 쉽습니다. 수동전투라서 집중해야하는 것 치고는.... 무덤덤하게 반복적으로 주인공 안죽게 뒤에 배치하고 궁수 먼저 죽이고 효율 좋은 애들 꾹꾹 누르고 끝...? 하다보면 수동전투의 매력보다는 자동도 아닌데 귀찮아서 영혼없어지는 노가다로 변질됩니다.

 

 

3. 전투 이외의 부분에서 아쉬운 것이...

1) NPC 일러스트도 미려한데... 친밀도 시스템도 있긴한데... 

주인공이 '레노머스' 마을에 진입하고 나면, 해당 마을의 상인들이 NPC로 나타납니다. 처음엔 카드 상인 루네와 보석 상인 레빌만 있다가, 하피로, 기브아, 카자브 등등 클랜 시스템과 더불어 더 생깁니다. 각 NPC들은 거래, 제작 등의 역할과 더불어 퀘스트를 주인공에게 의뢰하고, 이 의뢰를 수행하고 나면 친밀도가 높아집니다. (하트 표시로 확인 가능)

 

 

일러스트가 참 제 취향으로 맘에 들지만, 딱히 움직이는 것도 아니고, 다른 장면이라던가 포즈가 바뀐다던가 하지도 않습니다. 밋밋하게 멘트만 바뀝니다. 친밀도가 높아져도 웃는 표정 하나 짓는게 아니라 하트뿅뿅 이펙트만.... 그러다보니 전투 외적인 재미는 딱히 없네요. 반복적으로 노가다해서 강화하고 레벨업하고...

 

2) 독창적 스토리라더니, 스토리의 어느 부분에 몰입해야할지 도통 모르겠는 안일함

 

해금하는 스토리도 사실 '독창적 스토리'라는 타이틀 치고는 어둠의 다크니스입니다. 좀 유치한 느낌이 있다보니 적극적으로 해금하고 싶을 정도의 깊이가 느껴지는 스토리가 아닙니다. 세계관에 대해서는 애니메이션으로 강조하면서 굉장히 신경 썼는데, 정작 주인공 레이첼에 대한 이야기는 텍스트로만 그쳐버려 흥미를 주는 요소가 별로 없습니다.

이거 무슨 플레이어는 저주에 빠진 세계에 어둠의 반복 노가다만 하라는건지... 여자주인공 레이첼은 벗겨놓았으니 그만인건지... 어디에 어떻게 스토리적으로 몰입하라는 건지 모르겠네요. 정말 마련해 놓은 독창적인 면이란게 있는진 모르겠는데, 그걸 보여주기 전에 이미 초반 스토리가 재미 없습니다. 이점 참 안타깝네요 ㅠㅠ

 

 

+ 7월에 나와서 어째 좀 된 게임인데, 9월자 기준으로 아직 '사전계약' 선물이란걸 주네요.

코스튬으로 '영웅의 결속'이란 코스튬을 줍니다.

 

728x90

+ Recent posts