순차적으로 실행하지 않아도 되는 네트워킹을 요청할 때 병렬로 요청하면 시간을 단축시킬 수 있는데 기존에는 DispatchGroup에 enter함수로 Task를 추가 하고 완료되면 leave 함수로 완료되었다는 신호를 주어서 모두 완료되었을 때 notify 함수로 처리할 수 있었습니다.
DispatchGroup 병렬 코드
func requestLegacyParallel() {
let group = DispatchGroup()
var results = [Bool]()
let startTime = Date()
print("시작 (DispatchGroup)")
for _ in 0..<3 {
group.enter()
Task {
let result = await self.networking()
results.append(result)
group.leave()
}
}
group.notify(queue: .main) {
let endTime = Date()
let duration = endTime.timeIntervalSince(startTime)
print("종료 (DispatchGroup) : 걸린 시간 \(duration)초")
print("결과: \(results)")
}
}
Swift Concurrency 순차적 코드 예시
func requestConcurrency() {
Task {
let startTime = Date()
print("시작 (순차)")
let a1 = await self.networking()
let a2 = await self.networking()
let a3 = await self.networking()
let result = [a1, a2, a3]
let endTime = Date()
let duration = endTime.timeIntervalSince(startTime)
print("종료 : 걸린 시간 \(duration)초")
print("결과: \(results)")
}
}
Swift Concurrency 병렬 코드 예시
func requestConcurrencyParallel() {
Task {
let startTime = Date()
print("시작 (병렬)")
async let a1 = self.networking()
async let a2 = self.networking()
async let a3 = self.networking()
let results = await (a1, a2, a3)
let endTime = Date()
let duration = endTime.timeIntervalSince(startTime)
print("종료 (병렬) : 걸린 시간 \(duration)초")
print("결과: \(results)")
}
}
걸린 시간을 확인해보면 DispatchGroup, async let 구문은 당연히 병렬요청으로 인해 순차적으로 실행한 코드가 빠르지만 애플에서는 Concurrency를 권장하기 때문에 병렬로 작성시 async let을 사용하도록 해야겠습니다.
SQL 데이터 조회 구문에 대해서 복습하는 시간을 가졌습니다.
SELECT 구문의 집계함수에 대해서 헷갈리는 부분이 있었는 데 여러 데이터셋이 하나의 데이터셋으로 합쳐진다는 개념이 이해하는 데 도움이 되었습니다.
여러 테이블을 조합해도 결과는 하나의 테이블만 추출
키워드 : SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, JOIN ~ ON, LEFT JOIN ~ ON, Count(), AVG(), MIN(), MAX()
옵시디언은 마크다운문법을 활용하여 노트를 작성하고 관리하는 데 사용되는 앱인데 기존에 로컬에서만 사용할 수 있고 원격동기화를 위해서는 유료화여서 사용할 예정이였다가 검색해보니 Github, Dropbox, GoogleDrive등 다양한 클라우드 저장소를 활용하여 무료로도 원격동기화를 할 수 있어서 설정을 했습니다.
옵시디언을 먼저 완전 삭제를 해주었습니다.
완전 삭제 방법
# find / 루트 디렉토리부터 전체 검색 시작
# -iname "*obsidian*" 대소문자 구분 없이 obsidian이 들어간 파일/폴더 이름 검색
# 2>/dev/null 권한 오류 메시지는 무시하고 깔끔하게 결과만 출력
$ sudo find / -iname "*obsidian*" 2>/dev/null
# -iname "obs*" 대소문자 구분 없이 obs가 들어간 이름 검색
$ sudo find / -iname "*obs*" 2>/dev/null
그리고 저는 Git 플러그인과 Github, Remotly Save 플러그인과 Dropbox를 연동해주었습니다.
옵시디언 Sync 유료요금제가 안정적이고 매번 플러그인 설정도 해주는 부분은 번거롭지만 옵시디언을 조금 더 익숙해지면 고민해봐야겠습니다.
번외로 맥에서 캐시용량이 증가하는 느낌이 있어 검토를 해봐야할 것 같습니다.