Kongjak's IT Factory
WRITING / 41 POSTS

전체 글

개발/안드로이드

Offline-first: 네트워크 없이도 작동하는 앱 만들기

배경필자가 활동하고 있는 교내 동아리 BCSD에서는 코인이라는 교내 커뮤니티 서비스를 개발하고 있다. 최근 재학생들을 대상으로 만족도 및 의견에 대한 설문을 진행했고, 저번주 쯤 결과를 받아보게 되었다.PM을 통해 5개 정도의 핵심 인사이트를 도출했는데, 그 중 우리가 해결해야 할 문제가 있었다.앱 성능·접속 문제발생 빈도는 낮지만, 겪는 순간 다른 개선이 무의미해지는 유형의 문제기획 / 디자인 등 다른 직군에 관련 없이, 전적으로 우리 안드로이드 개발자들의 책임이었다.무엇이 문제인가실제로 어떤 문제가 발생하는지, 어떤 상황에서 발생하는지를 먼저 파악해야 했다.다행이도, 우리 팀에서는 Firebase Crashlytics로 크래시 로그를 수집하고 있었다.최근 1주일 사이의 크래시 로그를 보면, 200건이..

Read article ↗
개발/안드로이드

난독화와 R8 Full mode 적용하기

AGP 8.0부터는 R8의 Full mode가 기본적으로 활성화되었습니다.코인 프로젝트는 이미 AGP 8.0 이상을 사용하고 있었지만, R8 Full mode를 적용하지는 않고 있었습니다.본 글에서는 난독화 및 R8 Full mode를 적용하기 위한 선행 작업과, 적용 전후를 비교합니다.R8 Full modeR8은 크게 Compatibility mode와 Full mode로 나뉩니다.Full mode는 Compatibility mode보다 더 공격적으로 최적화를 수행하며, 추가적인 Proguard rules가 필요할 수 있습니다.Full mode의 자세한 차이점이 궁금하다면?R8 공식 문서에서 자세한 차이점을 확인할 수 있습니다.R8 Full mode, 왜 써요?공식 문서에서는 다음과 같은 언급이 있습니..

Read article ↗
공부/CS 스터디

[CS 스터디] 7주차 HTTP & DNS

OSI 5 ~ 7계층이전 글에서는 OSI 1 ~ 3계층과 TCP/UDP에 대해 알아봤다.이번에는 그 위에 있는 5 ~ 7계층과, 웹 요청에서 중요한 DNS와 HTTP에 대해 알아보려고 한다.OSI 5 ~ 7계층은 다음과 같다.5계층: 세션 계층6계층: 표현 계층7계층: 응용 계층5계층: 세션 계층 (Session Layer)세션 계층은 통신하는 두 장치 사이의 연결 상태를 관리하는 계층이다.여기서 말하는 세션은 클라이언트와 서버가 데이터를 주고받기 위해 유지하는 논리적인 연결을 뜻한다.세션 계층은 연결을 생성하고, 유지하고, 종료하는 역할을 한다.예를 들어, 로그인 상태 유지나 화상 회의 연결처럼 일정 시간 동안 통신 상태를 유지해야 하는 경우 세션 개념이 사용된다.6계층: 표현 계층 (Presentat..

Read article ↗
공부/CS 스터디

[CS 스터디] 6주차 TCP/UDP

TCP (Transmission Control Protocol)TCP 프로토콜은 연결 지향형 프로토콜로, 데이터 순서 보장, 재전송, 흐름 제어, 혼잡 제어 등을 제공한다.3-way handshaking을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.UDP (User Datagram Protocol)UDP 프로토콜은 비연결 지향형 프로토콜로, 데이터를 빠르게 전송하는데 초점을 둔다.TCP vs UDP TCPUDP신뢰성높음낮음순서 보장보장함보장하지 않음재전송지원미지원흐름 제어지원미지원혼잡 제어지원미지원속도상대적으로 느림빠름사용HTTP, FTP, SSHDNS, DHCP, 스트리밍3-way handshakingTCP는 데이터를 주고받기 전에 연결을 설정하는데, 이 과정을 3-..

Read article ↗
공부/CS 스터디

[CS 스터디] 5주차 OSI 1 ~ 3 계층

OSI 1 ~ 3 계층OSI는 Open System Interconnection Reference Model 의 약자로, 국제 표준화 기구인 ISO에서 개발한 네트워크 모델이다.7계층으로 이루어져 있으며, 아래와 같이 각 계층은 분리되어 있다.7계층: 응용 계층6계층: 표현 계층5계층: 세션 계층4계층: 전송 계층3계층: 네트워크 계층2계층: 데이터 링크 계층1계층: 물리 계층이 중 오늘은 1계층부터 3계층을 알아보려고 한다.1계층: 물리 계층 (Physical Layer)1계층은 OSI 7계층 중 가장 아래에 있는 계층으로, 물리적 매체를 통해 데이터를 전기적, 광학적으로 전송하는 것을 담당한다.허브허브는 근거리의 장비들을 연결하는 물리계층에 속하는 중계 장비이다.전기 신호를 증폭하는 기능을 가지고 있..

Read article ↗
공부/CS 스터디

[CS 스터디] 4주차 동기화, 메모리

동기화동기화란, 여러 프로세스 혹은 스레드에서 하나의 공유 자원에 접근 할 때, 접근 순서를 보장해주는 방식이 동기화이다.동기화가 필요한 이유여러 프로세스 혹은 스레드가 하나의 자원에 접근할 때, Race condition이 발생하게 되는데, 이를 해결하기 위해서는 동기화가 필요하다.Race condition (경쟁 상태)Race condition은 여러 프로세스 혹은 스레드가 하나의 자원에 동시에 접근할 때, 서로 자원을 선점하려 경쟁하는 것을 뜻한다.이 과정에서 실행마다 순서가 달라지게 되고, 이는 일관되지 못한 결과를 만들어낸다import kotlin.concurrent.threadvar counter = 0fun main() { val threads = List(1000) { t..

Read article ↗
공부/CS 스터디

[CS 스터디] 3주차 CPU 스케줄링과 IPC

CPU 스케줄링선점형 VS 비선점형CPU 스케줄러는 선점형(Preemptive)과 비선점형(Non-Preemptive)으로 구분할 수 있다.두 스케줄링은 자원을 빼앗길 수 있느냐 빼앗기지 않느냐에 따라 구분할 수 있다.먼저, 선점형 스케줄링은 자원을 다른 프로세스에 빼앗길 수 있다.실행중이던 프로세스가 자원을 빼앗기면 어떻게 될까?자원이 없으면, 프로세스를 실행할 수 없기 때문에 현재 작업을 저장하게 되고, 이 과정에서 잦은 Context Switching이 발생한다.또한, 선점형 스케줄링은 응답성이 높다는 장점이 있다.만약 더 높은 우선순위를 가진 프로세스가 생성된다면, 선점형 스케줄링은 기존 프로세스의 자원을 회수하고, 새로운 프로세스에게 할당할 수 있다.이렇게 되면, 우선순위가 높은 프로세스는 기다..

Read article ↗
공부/CS 스터디

[CS 스터디] 2주차 커널 동작과 인터럽트

CS 스터디 2주차 - 커널 동작과 인터럽트커널 모드커널 모드는 말 그대로 커널에서 실행하는 모드로, 다음과 같은 특징을 가진다.모든 하드웨어에 직접 접근 가능모든 CPU 명령어 실행 가능운영체제가 커널 모드로 실행됨유저 모드유저 모드는 userspace에서 동작하는 모드로, 다음과 같은 특징을 가진다.하드웨어에 직접 접근 불가제한된 CPU 명령어 실행 가능일반 애플리케이션이 기본적으로 유저 모드로 실행됨그렇다면, 유저 모드에서 실행중이던 애플리케이션이 네트워크 처리, 파일 입출력 등 하드웨어에 직접 접근하는 등, 유저 모드 권한 밖의 작업을 하려면 어떻게 동작할까?이때 애플리케이션은 시스템 콜 (System Call)을 사용한다.시스템 콜시스템 콜을 애플리케이션이 커널 기능을 요청할 때 사용하는 인터페..

Read article ↗