[16]Obfuscation 101 : 난독화, 프로가드, R8, 트랜스포머 APINAVER EngineeringObfuscation 101
: 난독화, 프로가드, R8, 트랜스포머 API
김용욱
카카오뱅크
영화와 커피를 좋아하는 은행원. 반지 원정대는 극장에서만 15번을 보았다. 데이터베이스를 전공했지만 급변하는 모바일 환경에 반해 안드로이드에 승선했고 Realm을 통해 모바일과 데이터베이스를 융합했다. 그후 새로운 가능성을 찾아 금융으로 왔다.
디자인 시스템에 직방 ZUIXNAVER EngineeringZUIX is a design system created by Zigbang's CTO team to standardize design across all of Zigbang's services. It uses React Native for responsive, multi-platform components and includes tools like Storybook for development and a design review infrastructure for validation. The deployment process involves code reviews, CI/CD pipelines, and publishing to a npm registry. Training and documentation is provided through tools like Google Classroom and Notion. The team aims to further develop ZUIX by improving the design review tools, adding end-to-end testing, and analyzing component usage. The goal is to solve Zigbang's unique challenges through an agile, collaborative approach between designers and developers.
서비스 운영을 위한 디자인시스템 프로젝트NAVER EngineeringThis document discusses Kakao's search platform front-end project. It describes the architecture of an integrated search service using microservices and the need for a design system due to fragmented UIs. It introduces the KST (Kakao Search Template) project for creating a design system including 200+ UI blocks and templates. The KST Builder, Logger, and Dashboard are discussed for managing templates, logging usage, and monitoring coverage. Maintaining a consistent design system is important for operating diverse search services and platforms.
BPL(Banksalad Product Language) 무야호NAVER EngineeringThis document discusses Banksalad Product Language (BPL), which is a method used at Banksalad to standardize UI text, elements, and components. It allows designers and developers to use consistent terms, while abstracting UI elements to different levels suitable for their roles. Examples of standardized elements are provided, as well as external resources that discuss concepts like tree shaking that are relevant to BPL. While BPL has benefits, the document considers whether there may be better approaches than BPL.
이번 생에 디자인 시스템은 처음이라NAVER EngineeringThis document summarizes a presentation about using Stitches, a React styling library, and Storybook for component design.
The presentation introduces Stitches as the styling library used for its support of React, easy usage, and themes. Key features of Stitches discussed include creating styled components, variants, and comparisons to other libraries.
Storybook is presented as a way to improve communication between designers and developers by allowing visualization of components alongside their stories. Clean communication through a shared Storybook is emphasized.
Reflections on initially creating a design system note the benefits of consistency and speed but also identify areas for improvement like documentation, process alignment, and understanding each other's roles. Establishing trust and understanding between
날고 있는 여러 비행기 넘나 들며 정비하기NAVER Engineering비행기 설계를 왜 통일 해야 할까?
디자인 시스템을 하는 이유
비행기들이 다 용도가 다르다...어떻게 설계하지?
맥락이 다른 페이지와 패턴
경유지까지 아직 멀었다... 언제 수리하지?
디자인 시스템을 적용하는 시점
엔지니어랑 얘기해서 정비해야하는데...어떻게 수리하지?
디자인 시스템을 적용하는 프로세스
비행기 설계가 바뀐걸 어떻게 알리지?
디자인 시스템의 전파
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기NAVER Engineering프로덕트 디자이너로 고통 받기
다양한 플랫폼에서 시스템 구축하며 고통 받기
디자인 가이드 정리하며 고통 받기
구현으로 고통 주기
한 치 앞도 몰라서 고통 받기
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드NAVER EngineeringThe document discusses Kotlin coroutines and how they can be used to write asynchronous code in a synchronous, sequential way. It explains what coroutines are, how they work internally using continuation-passing style (CPS) transformation and state machines, and compares them to callbacks. It also outlines some of the benefits of using coroutines, such as structured concurrency, light weight execution, built-in cancellation, and simplifying asynchronous code. Finally, it provides examples of how to use common coroutine builders like launch, async, and coroutineScope in a basic Android application with ViewModels.
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출NAVER EngineeringThis document contains the transcript from a presentation given by Wonsuk Lim from Naver on tips for debugging and analyzing Android applications. Some key tips discussed include fully utilizing the Android emulator's capabilities like 2-finger touch control, clipboard sharing between the emulator and host PC, and mocking locations. Advanced settings for the emulator like foldable and camera emulation are also covered. The presenter recommends ways to configure developer options and use tools like LeakCanary, the Android profiler, and Stetho for testing app stability. Methods for understanding the Android framework by reviewing system services and managers via AIDL files and logcat dumps are presented. Finally, reverse engineering tools like APK Extractor and decompilers are introduced.
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...NAVER Engineering200820 NAVER TECH CONCERT - 차성원
야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된 이야기
3. 제목: Android Kotlin을 통한 개발 전략
1. 기존 코드 어떻게 전환하고 확장할 것인가?
2. 넌 어느 별에서 왔니?(코틀린 주요기술의 근원)
- 람다와 함수형
- 프로퍼티와 함수
- 연산자 재정의
- Method Extension
- Pipe Filter Model
3. 자바에서 코틀린으로 볶환과정
- 멤버 변수의 초기화
- @Nullable 처리
- 중첩 클래스 쪼개기
- Optional(?.) 최적화
4. 코드 효율화를 위한 툴킷 정의와 활용
- 전역변수와 프로퍼티
- 연산자 재정의
- 고차함수 활용
5. 거버넌스의 필요성
6. 맺음말 : 어떤 프로그램이 될 것인가?
4. 1. Kotlin 어떻게 전환할 것인가?(1/3)
기존 코드를 어떻게 전환할 것인가?
바뀌는 부분만이라도 볶환해 가자?
새로 짜는 부분만?
BUT
헤어날 수 없는 자바
자바 스타일의 코틀린 코드
기존 자바 코드에서 호출이나 참조가 쉽지 많은 않다
언어는 습관이다.
컴퓨터 언어도 습관이다.
=> 잘 안 바뀐다
15. 3.1 멤버 변수의 초기화 방법(1)
init{}
초기값을 지정하지 않고, 이 함수에서 지정 가능
객체의 초기화 시에 값을 지정할 수 있음
lateinit
초기 값을 지정하지 않고 생략 후 나중에 대입
변수 접근시 초기화 여부를 확인하지 않음
by lazy (delegator)
사용 시점 초기화 됨
코드 블록으로 초기화 하므로 다른 처리 가능
Optional(?)
Null로 초기화 하고 나중에 값을 지정
23. 3.3 클래스의 중첩 최적화
Inner(nested) class 최소화
한 파일에 여래 개의 객체 선언 가능
중첩된 클래스는 복잡해 보임
객체 내에 또 객체를 선언하는 중첩을 사용할 이유가 없음
해당 파일에서만 사용하는 객체 앞에 private 으로 선언하여 사용 가능
24. 3.4 Optional(?.) 최적화
? 선언
꼭 필요한지 고려 해야 하라
init, late init, lazy 로 피할 수 있으면 피해라
!!는 확실히 검증된 경우만 사용하라
let, apply외 표준확장 함수
- 동일 변수에 2개 이상의 ?. 을 사용할 때
- 과용하면 오히려 코드 읽기가 어려워짐
Elvis(?:)
조건문 내에 쓰는 거? 좀 생각해 보자
26. 4.1 간결하게 하기 위한 요소들
패키지 레벨 전역 변수 함수
클래스와 관계 없이 변수나 상수를 정의할 수 있다.
서비스 코드 레벨에서 공유 되는 변수는 전역으로 사용해도 좋다
고차함수 정의(DSL스타일)
함수의 파라메터로 람다를 사용하는 고차함수 람다 식을 함수 호출 다음에 정의
함수의 조건 만족하면 코드블럭을 수행하는 방식
연산자
연산자를 통해 함수 호출 코드를 간결화 할 수 있다.
기존의 객체에 연산자를 추가 정의할 수 있다.
27. 4.2 패키지 Levels 선언 – Beyond Class Scope
Global Context
Application Context, Handler, ThreadPool, Resource etc
System Util Functions
Screen info, dp2px
isNetworkStatus, Package Info
Systems Managers
ConnectionManager, ActivityManager, WinowManager
WifiManager, etc
28. 4.2 패키지 Levels 선언 – 전역 변수(프로퍼티)
3가지 초기화(선언) 방식
- 단순변수
- 지연 초기화 된 변수
- Property
33. 4.4 Global 함수의 정의와 고차 함수
고차 함수(DSL 스타일)
- 함수의 람다 파라메터는 함수 다음에 코드 블록으로 정의할 수 있는 속성을
이용하게 특정한 조건을 만족하는 코드 블록을 정의할 수 있게 한다.
- DSL 함수와 동일한 이름의 프로퍼티나 함수 정의
Global 함수의 정의
- 안드로이드에서 제공하는 기능 중 반복적으로 사용되는 함수를 정의
- 서비스 코드 내에서 빈번하게 사용하는 코드의 정의
- 이 함수의 정의 목적은 짧은 코드임
37. 5. 팀 개발 공동 개발을 위한 거버넌스
필요성
- 너무 다양한 스타일이 존재한다.
- 개발자의 언어 이해 능력이 차이가 나므로 스타일을 어느 정도 정할 필요가 있다.
- “어떤 스타일은 사용하지 말라”의 가이드가 아니라 어떤 패턴의 코드에는 “어떤
스타일을 우선하여 사용하라”고 정의
- 시스템 클래스에 대한 함수확장이나 전역 변수의 대한 가이드 라인도 어느
정도는 필요