분류 전체보기

    CoreData 개요 및 동시성

    CoreData 개요 및 동시성

    CoreData란?CoreData는 Apple에서 제공하는 객체 그래프(Object Graph) 및 영속성(Persistence) 관리 프레임워크입니다.SQLite를 기반으로 로컬 데이터베이스로도 사용할 수 있지만, 단순히 데이터베이스 기능뿐만 아니라 객체 간의 관계 관리, 상태 추적, 변경 감지, iCould 연동, Undo/Redo, Lazy Loading 등 다양한 기능을 제공합니다.객체 그래프란?객체 그래프란 참조를 통해 서로 연결되어 있는 객체들의 구조를 말합니다.아래 코드 예시를 보면 Person과 Dog는 서로 참조를 가지고 있고, 이를 도식화하면 그래프 형태로 나타낼 수 있습니다.CoreData는 이 객체들 사이의 관계를 정의하고, 이를 저장소에 관계형 데이터처럼 변환하여 저장합니다.cla..

    AWS EC2 npm run build 시 멈추는 문제

    AWS EC2 npm run build 시 멈추는 문제

    개인 프로젝트 서버를 AWS EC2 인스턴스에 배포하는 과정에서, 서버가 중간에 멈추는 문제를 마주했습니다.제가 사용 중인 인스턴스는 t2.micro 로, 즉 프리티어에서 제공되는 최소 사양 인스턴스였습니다.vCPU: 1개RAM: 1GB서버를 실행했을 때 반응이 없어 AWS 대시보드에서 확인해보니, CPU 사용량이 100%에 가까운 상태로 장시간 유지됨을 확인할 수 있었습니다. 또한 인스턴스에 접속해 top 명령어로 리소스 사용량을 확인한 결과, DB 서버(mysqld)가 메모리의 40% 이상을 점유하고 있는 상황으로 가용 메모리가 약 150MB 밖에 되지 않는 상황이었습니다. 이러한 리소스 부족으로 인해 Nest.js 서버를 실행하는 명령어인 npm run start 나, npm run build 시 ..

    Alamofire 기능 정리

    Alamofire 기능 정리

    Alamofire는 Swift 기반 HTTP 네트워킹 라이브러리로 URLSession을 래핑하여 네트워킹 코드를 쉽고 가독성 좋게 사용할 수 있는 다양한 기능들을 제공합니다.URLSession 기반 코드의 문제점기본적으로 Foundation에서 제공하는 URLSession을 직접 사용할 경우 다음과 같은 단점들이 존재했습니다.요청(Request)을 구성하는 코드가 장황하며, 가독성이 떨어짐반복되는 코드가 발생함(ex: 헤더 설정, 에러 핸들링, JSON 디코딩 등)네트워크 요청을 디버깅하거나 로그를 남기려면 기존 코드에 많은 수정이 필요아래 예시 코드는 HTTP 요청을 통해 User 정보를 가져오는 간단한 예시입니다.단순한 GET 요청임에도 불구하고, 에러 처리, 디코딩 등 코드가 복잡해집니다.guard..

    테스트 가능한 오디오 관리 객체 설계하기

    테스트 가능한 오디오 관리 객체 설계하기

    문제소리가 정상적으로 입, 출력되는지 테스트하기 위해선 오디오 인터페이스부터 기타까지 실제로 연결해야만 테스트 할 수 있는 환경이었고, 그 결과 비효율적인 작업이 반복되었습니다.원인 분석AudioManager가 너무 많은 역할을 하다보니 필연적으로 코드가 길어지게 되었습니다.mark 주석으로 역할을 구분해두었지만 함수 내에서 다른 함수를 호출할 수 있어 사이드 이펙트 발생 위험이 존재했습니다.또한 실제 장치를 연결하지 않고 테스트할 수 없는 환경이었습니다.final class AudioManager { static let shared = AudioManager() private var cancellables = Set() // 사용 가능한 입력 장치 목록 var availableIn..

    Audio 기본 지식 이해하기(Sample, Frame, Sampling Rate, Channel, Bit Depth)

    Audio 기본 지식 이해하기(Sample, Frame, Sampling Rate, Channel, Bit Depth)

    오디오 실시간 처리를 위해 AVAudioEngine에 대해 학습하려고 했더니 꼬리에 꼬리를 무는 배경 지식이 필요했다. AVAudioEngine -> AVAudioNode -> AVAudioPCMBuffer -> Frame -> Sample -> ... 위와 같은 순서로 배경 지식에 대한 의존성이 발생했다.이렇게 꼬리를 물며 학습해나가다 보니 오디오의 기본적인 개념에 도달하게 되었다. Frame은 뭐고 Sample은 뭘까..학부 시절에 배웠던 것 같지만, 너무나 희미했기에 처음부터 다시 정리해보기로 했다.아날로그 신호와 샘플링(Sampling)우리가 귀로 듣는 소리는 시간에 따라 연속적으로 변화하는 아날로그 신호이다. 이 소리를 디지털로 표현하려면, 숫자(수치)로 변환해야 하는데,이 때 사용하는 방법이 ..

    AVFAudio - AVAudioSession

    AVFAudio - AVAudioSession

    AVFAudio AVFAudio는 재생, 녹음, 오디오 처리와 같이 앱에서 시스템 오디오 동작을 구성할 때 사용하는 프레임워크 입니다.아래와 같이 다양한 클래스들이 존재하는데, 오늘은 AVAudioSeesion에 대해 학습해보려고 합니다. AVAudioSessionAn audio session acts as an intermediary between your app and the operating system — and, in turn, the underlying audio hardware. You use an audio session to communicate to the operating system the general nature of your app’s audio without detailing..