[Flutter] 이미지 리사이징 및 압축
·
Flutter
이미지 최적화를 직접 구현하는 이유지금까지 나는 구현에 집중해왔다. Flutter로 프로젝트를 진행하며 이미지 캐싱이나 압축이 필요할 때면 자연스럽게 검증된 외부 패키지를 가져다 썼다. 하지만 문득 이런 의문이 들었다."패키지 안에서는 어떤 일이 일어나고 있을까? 내 앱은 정말 최적화되어 있는 걸까?"라이브러리는 편리하지만, 내부 동작 원리를 모른 채 사용하면 lag이 발생했을 때 대응하기 어렵다. 특히 이미지는 모바일 앱 리소스 중 가장 큰 비중을 차지하며 비용(Firebase Storage)과 직관적으로 연결되는 부분이다. 그래서 나는 이번에 이미지 관련 모든 패키지를 걷어내고, 직접 최적화 엔진을 구축해보기로 했다.혹자는 이렇게 물을지도 모른다."패키지의 내부 로직을 잘 이해하고 사용하면 되는 거 ..
[Flutter] Memory Profiling
·
Flutter
Memory Profiling이미지 최적화 기능을 직접 구축하기로 마음먹은 후, 가장 먼저 해야 할 일은 역설적으로 기능을 구현하는 것이 아니라 현재 상태를 측정하는 것이었다. 막연히 "패키지를 쓰지 않으니까 가벼워질 거야"라는 추측은 엔지니어로서 위험한 접근이기 때문이다. 이미지 압축 및 캐싱에 관련된 이야기는 다음에 작성해보겠다.프로파일링이 필요한 이유어떤 기술적 의사결정을 내렸을 때, 그 결과가 성공적이었음을 증명하려면 객관적인 지표가 필요하다. 특히 이번 이미지 최적화 작업은 다음 두 가지 지표를 개선하는 것이 핵심 목표다.메모리 점유율(Memory Footprint): 최적화 전, 무거운 패키지와 단순 메모리 캐시를 사용할 때의 RAM 사용량을 기록한다. 이후 직접 만든 LRU 기반 엔진이 이를..
[Flutter] 소프트웨어 엔지니어링
·
Flutter
플러터 엔지니어링 책을 읽게된 계기지금까지 모바일 개발을 진행하면서 책을 읽으면 개발을 진행한 경험이 많이 없다.공식문서와 블로그, AI 등 인터넷에서 개발 관련 자료들을 찾아 학습하였고 그것을 개발에 대입하였다.하지만 플러터라는 프레임워크에 대해서 깊게 들어가본 경험이 없다고 생각한다.이런 부분의 아쉬움을 달래기 위해 플러터 엔지니어링이라는 책을 구매하였다.중급자를 위한 책이며, 아키텍처와 엔지니어링에 초점을 맞춰져 있는 책이다.또한, 애플리케이션 개발 생명주기(LIfe-Cycle), 아키텍처, 설계, 보안 테스트, CI/CD, Native 연동 방식, 위젯 구성 원리등 초급자가 어려울만한 내용들을 주제로 다루고 있다.이 책의 대상 독자는책의 첫부분을 보면 작가와 번역가들의 말이 나온다.그 내용은 플러..
[코딩테스트] [2239] 스도쿠
·
알고리즘/Recursion
스도쿠시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율2 초256 MB29907144371035845.706%문제스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자.위 그림은 참 잘도 스도쿠 퍼즐을 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다.하다 만 스도쿠 퍼즐이 주어졌을 때, 마저 끝내는 프로그램을 작성하시오.입력9개의 줄에 9개의 숫자로 보드가 입력된다...
[코딩테스트] [9663] N - Queen
·
알고리즘/Recursion
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율10 초128 MB137746669524296046.911%문제N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다.N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 N이 주어진다. (1 ≤ N 출력첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다.문제풀이행렬에 퀸을 놓았을 때, 서로를 공격할 수 없는 상태가 되도록 배치하는 문제퀸이 놓여있는 좌표에 직선과 대각선이 만들어지는 구간에 아무것도 없어야 한다.1 ≤ N ≤ 15전체 경우의 수를 출력하자.문제 분석퀸은 하나의 행에 하나만 존재할 수 있다. (가로 세로 줄을 공격할 수 있기 때문)재귀함수 탐색..
[코딩테스트] [10597] 순열장난 & [2661] 좋은수열
·
알고리즘/Recursion
순열장난시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율1 초256 MB58831876137630.742%문제kriii는 1부터 N까지의 수로 이루어진 순열을 파일로 저장해 놓았다. 모든 수는 10진수로 이루어져 있고, 모두 공백으로 분리되어 있다.그런데 sujin이 그 파일의 모든 공백을 지워버렸다!kriii가 순열을 복구하도록 도와주자.입력첫 줄에 공백이 사라진 kriii의 수열이 주어진다.kriii의 순열은 최소 1개 최대 50개의 수로 이루어져 있다.출력복구된 수열을 출력한다. 공백을 잊으면 안 된다.복구한 수열의 경우가 여러 가지 일 경우, 그 중 하나를 출력한다.문제 풀이이 문제는 1부터 N까지수 로 이루어진 무작위 순열이다이때 공백이 모두 제거된 상태이고 중복되는 숫자가 없도록 순열을 ..
[코딩테스트] [17136] 색종이 붙이기
·
알고리즘/Recursion
색종이 붙이기시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율1 초512 MB3034712213696636.721%문제과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다.색종이를 크기가 10×10인 종이 위에 붙이려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 0 또는 1이 적혀 있다. 1이 적힌 칸은 모두 색종이로 덮여져야 한다. 색종이를 붙일 때는 종이의 경계 밖으로 나가서는 안되고, 겹쳐도 안 된다. 또, 칸의 경계와 일치하게 붙여야 한다. 0이 적힌 칸에는 색종이가 있으면 안 된다.종이가 주어졌을 때, 1이 적힌 모든 칸을 붙이는데 필요한..
[Swift] WebView와 데이터 통신하는 두 가지 방법
·
Swift/정리
웹뷰와 데이터 통신 학습하게 된 이유Swift로 앱을 개발하면서 웹뷰(WKWebView)를 도입해야 하는 상황이 생겼고, 자연스럽게 네이티브 앱과 웹뷰 간의 데이터 통신 방법을 학습하게 되었다. 단순히 웹 콘텐츠를 앱 내에 띄우는 것에서 그치지 않고, 사용자 인증 정보, 세션, 사용자 식별자(uuid) 등 다양한 데이터를 웹뷰와 안전하게 주고받아야 하는 요구가 많아졌다.. 특히, 최근에는 앱 내에서 로그인한 사용자의 정보를 웹뷰로 전달하거나, 웹뷰에서 발생한 이벤트를 앱으로 다시 전달받아야 하는 복잡한 상호작용이 필요했습니다. 이런 요구를 해결하기 위해, Swift의 WKWebView가 제공하는 여러 데이터 통신 방식과 그 내부 동작 원리를 직접 실습하였음. 🍪 쿠키(Cookie) 설정을 통한 데이터..
[Flutter] Repository Pattern (with 인터페이스)
·
Flutter
Repository Pattern 학습학습하려는 이유현재 Flutter로 개발 중인 프로젝트 ‘풀밭’은 현재 Firebase의 Cloud Firestore를 활용해 클라이언트와 서버 간 데이터 송수신 및 저장을 담당하고 있다.위 이미지는 플러터 공식 문서에 있는 MVVM 아키텍처이고 아래는 풀밭의 아키텍처이다.[View] [ViewModel] [Repository] [Service (Firebase)]풀밭에서는 User, Notice, Recruit, Post, Campus 등 다양한 데이터베이스 컬렉션을 사용하며, 이에 따라 여러 개의 store를 다루는 코드가 구현되어 있다.하지만 만약 추후에 Firebase가 아닌 AWS, Supabase 등 다른 백엔드 서비스로 데이터 소스를 변경해야 하는 ..
[코딩테스트] [1987] 알파벳
·
알고리즘/Recursion
퇴각검색재귀를 이용해 모든 가능한 경우를 탐색하는 알고리즘일반적인 재귀랑 다른 점은?답을 찾는 도중에 최적해의 가능성이 없어지면 탐색을 중단가능성이 있는 경우 유망하다 라고 표현함최악의 경우 완전탐색이 되지만, 랜덤성이 있는 데이터에서는 평균적인 시간 소요가 낮아짐.예시알파벳시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율2 초256 MB142950443312680728.565%문제세로 R$R$칸, 가로 C$C$칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1$1$행 1$1$열) 에는 말이 놓여 있다.말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 ..
[코딩테스트] [16198] 에너지 모으기 & [2800] 괄호 제거 & [7490] 0 만들기
·
알고리즘/Recursion
[16198] 에너지 모으기 성공시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율1 초512 MB65974967402476.270%문제N개의 에너지 구슬이 일렬로 놓여져 있고, 에너지 구슬을 이용해서 에너지를 모으려고 한다.i번째 에너지 구슬의 무게는 Wi이고, 에너지를 모으는 방법은 다음과 같으며, 반복해서 사용할 수 있다.에너지 구슬 하나를 고른다. 고른 에너지 구슬의 번호를 x라고 한다. 단, 첫 번째와 마지막 에너지 구슬은 고를 수 없다.x번째 에너지 구슬을 제거한다.W × W의 에너지를 모을 수 있다.x+1x-1N을 1 감소시키고, 에너지 구슬을 1번부터 N번까지로 다시 번호를 매긴다. 번호는 첫 구슬이 1번, 다음 구슬이 2번, ... 과 같이 매겨야 한다.N과 에너지 구슬의 무게가 주어..
[코딩테스트] [2529] 부등호 & [9095] 1,2,3 더하기 & [12101] 1,2,3 더하기 2
·
알고리즘/Recursion
[2529] 부등호시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율1 초256 MB31504186331267758.215%문제두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시된 부등호 순서열 A가 다음과 같다고 하자.A ⇒ 부등호 기호 앞뒤에 넣을 수 있는 숫자는 0부터 9까지의 정수이며 선택된 숫자는 모두 달라야 한다. 아래는 부등호 순서열 A를 만족시키는 한 예이다.3 1 7 0이 상황에서 부등호 기호를 제거한 뒤, 숫자를 모두 붙이면 하나의 수를 만들 수 있는데 이 수를 주어진 부등호 관계를 만족시키는 정수라고 한다. 그런데 주어진 부등호 관계를 만족..
[코딩테스트] [1759] 암호 만들기 & [10971] 외판원 순회 2 & [14888] 연산자 끼워넣기
·
알고리즘/Recursion
[1759] 암호 만들기시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율2 초128 MB85939412702828044.931%문제바로 어제 최백준 조교가 방 열쇠를 주머니에 넣은 채 깜빡하고 서울로 가 버리는 황당한 상황에 직면한 조교들은, 702호에 새로운 보안 시스템을 설치하기로 하였다. 이 보안 시스템은 열쇠가 아닌 암호로 동작하게 되어 있는 시스템이다.암호는 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음(a, e, i, o, u)과 최소 두 개의 자음으로 구성되어 있다고 알려져 있다. 또한 정렬된 문자열을 선호하는 조교들의 성향으로 미루어 보아 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라고 추측된다. 즉, abc는 가능성이 있는 암호이지만 bac는 그..
[Computer Science] [시스템 프로그래밍] 파일 다루기
·
Computer Science/System Programming
시스템 프로그래밍운영체제, 하드웨어와의 상호작용을 프로그래밍 하는 것커널이 제공하는 기능을 직접 제공받으며 low-level에서 동작하는 프로그램을 작성하는 것커널이 제공하는 기능: 시스템 콜 주로 활용운영체제, 네트워크 파트에서 학습한 내용을 소스코드 레벨에서 관측해보자.타 프로그래밍 언어를 이용하더라도 공통적으로 사용될 시스템 프로그래밍 개념파일 입출력프로세스간 통신소켓 프로그래밍파일 디스크립터프로세스는 운영체제로부터 파일을 할당받는다. 이걸 어떻게 구분할 수 있을까?파일을 식별하기 위해 운영체제로부터 할당 받은 정보입출력장치, 파이프, 소켓도 파일 디스크립터로 식별마치 위에 장치들을 파일로 다룬다.일반적으로 0이상의 정수 형태프로세스가 파일을 열거나 생성할 때 운영체제는 해당 파일에 대한 파일 디스..
[코딩테스트] [1182] 부분수열의 합 & [2758] 로또 & [1208] 부분 수열의 합2
·
알고리즘/Recursion
[1182] 부분수열의 합시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율2 초256 MB99180449482929243.323%문제N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수를 구하는 프로그램을 작성하시오.입력첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.출력첫째 줄에 합이 S가 되는 부분수열의 개수를 출력한다.문제 풀이이 알고리즘의 문제풀이는 수열이 있을때 크기가 양수인 부분수열중에서 그 수열의 원소가 더한 값이 S가 되는 경우의 수를 구하..