전체 글

Choices nudge me onward, towards Dannaward
iOS/UIKit

iOS 개발 swift로 연월(년, 월)만 설정할 수 있는 UIPickerView 커스텀 하기

생각보다 개발을 하다보면 pickerView를 쓸 일이 꽤 많은 것 같다. 그래서 보통 피커뷰로 날짜를 설정하려고 하면 iOS에서 기본으로 제공하는 UIDatePicker을 사용하는데, 예쁘고 간편하긴 하지만 커스텀이 제한적이라 실제로 서비스에서 사용해본 적은 많이 없는 것 같다. 대신 커스텀이 용이한 UIPickerView로 UIDatePicker를 흉내내는 방식의 구현을 자주 사용한다. iOS 프로젝트 개발에서 생각보다 많을 것 같지만, 한글로 된 블로그 글이 몇 개 없는 것 같아 정리해보는 오늘의 주제는 아래처럼 정했다. UIPickerView로 년, 월만 선택 가능한 피커 만들기 구현 방법 1. 텍스트필드 얹기 피커뷰를 뷰에 컴포넌트로 얹을 수도 있지만, 보통은 코드로 많이 생성한다. (뇌피셜로는..

iOS/Unity + iOS

[iOS+Unity] 유니티 뷰 위에 Native iOS UI 얹고 효율적으로 관리하기

유니티에서도 꽤나 괜찮은 크로스플랫폼 빌드를 지원하고 있다. 물론, iOS 플랫폼도 예외는 아니다. 설정도 그닥 어렵지 않고 클릭 몇 번이면 유니티에서 작성한 코드가 iOS 앱으로 빌드된다. 하지만, 하나 무시할 수 없는 문제가 있다. 유니티는 게임엔진이지, UI에 최적화 되어 있는 것은 아니기 때문에 유니티에서 작업한 UI는 어쩔 수 없이 조금 뿌옇게 화면에 보이게 된다. 유니티가 최근 새로 밀고 있는 UI Toolkit도 예외는 아니다. 문제가 되는 건 구현해야 하는 게 게임 형식의 앱이 아닌 일반 앱의 UI를 가져야 할 때다. 3D 뷰가 필요하지만 게임이 아닌 심플한 메타버스 형식의 앱들이 그 예시가 될 수 있을 것 같다. 이렇게 유니티로만 만들어진 게임이 아닌 앱들의 UI는 섬세하지 않은 눈을 가..

Backend

Node.js + TypeScript를 heroku로 배포하기

서버는 항상 배포가 일이다.. 남의 컴퓨터를 쓰는 일은 역시 쉽지 않다. 웹 프론트엔드 개발 후 vercel로 배포를 하면서 버튼 하나로 배포 되는 건 진짜 신세계다 생각하고 있었는데, 몇 달 전 서버에서는 heroku가 간편한 배포를 지원하고 있다는 걸 알게 되었다. https://www.heroku.com 다양하게 커스텀하기에는 한계가 있지만 간편하게 서버를 띄우고 싶을 땐 꽤 유용하다. 무려 https로 배포해준다. 환경 설정 헤로쿠 가입 만약 헤로쿠가 처음이라면 여기로 들어가서 가입하면 된다. 앱 생성 바로 create new app을 눌러 앱을 생성한다. 만약 계정에 앱이 하나도 없는 상태라면 조금 더 큰 버튼으로 떴던 기억이 난다. 어떻게 생겼든 create new app이라고 쓰인 버튼을 눌..

iOS/Unity + iOS

Unity에서 Swift 코드 쓰기 & iOS native API 사용하기 (feat. HealthKit)

Unity가 다양한 플랫폼과의 호환을 거의 완벽할 정도로 구사하고 있긴 하지만, 아무래도 코드 내에 native 코드가 필요할 때가 아예 없는 건 아닙니다. 특정 OS에서 프레임워크 API로 내려주고 있는 코드를 쓰고 싶을 때, 즉 iOS의 경우에는 -Kit 형태로 이름이 붙은 HomeKit, HealthKit, MapKit, ARKit 등등의 프레임워크를 쓰는 경우가 좋은 예시가 될 것 같습니다. Unity로 개발하던 중에 iOS의 HealthKit과 연동해 기기 사용자의 건강 정보를 읽고 업데이트 하고 싶었는데, 한글 자료는 물론 외국 자료도 마땅치 않더라구요. 그래서 작성하는 글입니다. 기본적으로 Unity 프로젝트에 Swift 코드를 임베드 하는 방법을 설명하고, HealthKit 연동 방법까지 ..

개발 잡기술

개발 협업에서 Git & GitKraken 사용하기

깃과 깃크라켄 사용법을 가장 기초부터 실전 활용법까지 설명하고 있습니다. 깃이란? 깃은 버전 관리 시스템! 기말과제, 기말과제최종, 기말과제최최종, 기말과제진짜최종, 기말과제이게찐임 이렇게 네이밍 해보신 적 있으신가요? 내용을 덧붙이거나 수정하면서 새로운 파일을 만드는 건데, 우리는 이걸 조금 더 고급스러운 단어로 '버전 관리'라고 합니다. 깃은 바로 이 버전 관리를 도와주는 시스템입니다! 협업에 사용하는 깃 우리가 깃을 사용할 때 gitHub 등의 원격 깃저장소를 사용하는데, 이 점 덕분에 우리가 협업할 때에도 깃을 사용하게 됩니다. gitHub는 우리가 git을 인터넷(원격) 상에 올려두고 각자의 컴퓨터(로컬)에 그 파일을 다운받아 작업 후 변경 내용을 다시 인터넷(원격)으로 올리는 방식으로 깃을 관..

iOS/UIKit

Swift로 인스타그램 스토리 하트 파티클 애니메이션 만들기

인스타그램을 하면서 항상 궁금했다. 내 스토리에 친구들이 하트를 눌러보면 보이는 저 하트가 올라가는 애니메이션은 어떻게 구현한 걸까? 유니티로는 파티클 애니메이션을 구현해 본 적이 있는데, Swift로 네이티브 iOS 앱을 만들 때는 어떻게 만들어야 할지 감도 안 왔다. 이것저것 찾아보니 방법에는 크게 두 가지가 있었다. CAEmitterLayer와 SpriteKit에 포함되어 있는 SKEmitterNode다. SKEmitterNode 위에서 잠깐 설명했듯, Swift로 게임을 만들 수 있게 지원하는 SpriteKit에 포함되어 있다. 인스펙터에서 실제 파티클이 생성되는 모습을 보며 값들을 조정해줄 수 있어 편리하다. 하지만 UIView에 올리기 위해서는 SKView라는 SpriteKit의 뷰를 하나 만..

Archive/우아한테크러닝

우아한테크러닝 4기 "나만의 노션 만들기(feat.시니어봇)" 2차시

우아한테크러닝4기 미니노션 만들기의 2차시가 끝났습니다. 이번에는 우리가 1달 간 어떤 서비스를 만들 것인지 기획을 확정하고, 그 목표를 달성하기 위해 어떤 기능을 넣을 것인지, 어떤 프레임워크를 이용해 개발할 것인지 이야기를 나눠보았습니다. 아래는 제가 정리한 내용입니다! 기술 난제 기술 난제 파악 기술 난제를 파악해야 한다! 해본 적이 있어서 이렇게 이렇게 하면 된다 그림이 그려지는 것 간단할 거 같은데 해본 적은 없어서 얼마나 걸릴 줄도 모르고 어떻게 하는지 그림이 그려지지 않는 것 → 이 둘을 구분할 것 해본 적이 있지만 다르게 시도해보고 싶은 게 있는지 생각 똑같은 방식으로만 하면 발전이 없다. 그니까 새로운 방법을 생각해볼 것. 이전에 했던 방식에 장점만 있는 건 아니니까 또 어떻게 시도해볼 ..

Archive/BOJ

백준 18870번: 좌표 압축

www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 구현 언어: 파이썬 import sys input = sys.stdin.readline n = int(input()) num_set = set() nums = list(map(int, input().split())) num_set = sorted(set(nums)) num_dic = {value: index for index, value in enumerate(..

Archive/BOJ

백준 7785번: 회사에 있는 사람

www.acmicpc.net/problem/7785 구현 언어: 파이썬 import sys input = sys.stdin.readline n = int(input()) people = {} for i in range(n): name, status = input().split() if status == 'enter': people[name] = '' elif status == 'leave': del(people[name]) for name in sorted(people.keys(), reverse=True): print(name) 시도 횟수: 1 구현 포인트: 간단한 문제였다. 탐색과 삽입, 삭제가 많이 일어나야 하는 문제라 가장 시간적으로 유리한 딕셔너리로 구현했다. 입력이 끝나면 딕셔너리에 남은 ke..

Archive/BOJ

백준 18115번: 카드 놓기

www.acmicpc.net/problem/18115 18115번: 카드 놓기 수현이는 카드 기술을 연습하고 있다. 수현이의 손에 들린 카드를 하나씩 내려놓아 바닥에 쌓으려고 한다. 수현이가 쓸 수 있는 기술은 다음 3가지다. 제일 위의 카드 1장을 바닥에 내려놓는다. www.acmicpc.net 구현 언어: 파이썬 import sys from collections import deque input = sys.stdin.readline n = int(input()) orders = list(map(int, input().split())) # 스택이라 deque 대신 list original = deque() # 양방향에서 데이터를 넣어야 해서 덱 for i in range(1, n+1): curr = o..

Danna 다나
toward, dannaward