[iOS / macOS] apple OS, CS, Network 면접 질문

2024. 12. 29. 07:42🍏/OS

문제 리스트 가져온 곳

 

GitHub - JeaSungLEE/iOSInterviewquestions: 👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리

👨🏻‍💻👩🏻‍💻iOS 면접에 나올 질문들 총 정리 . Contribute to JeaSungLEE/iOSInterviewquestions development by creating an account on GitHub.

github.com

 

 

레벨 0

  1. 컴퓨터 시스템에서 CPU, RAM, 저장 장치의 역할과 이들이 어떻게 상호 작용하는지 설명해주세요.
    • CPU와 메모리 간의 데이터 교환은 어떻게 이루어지나요?
    • 버스(Bus)란 무엇이며, 어떤 종류가 있나요?
    • 더보기
      CPU(Central Processing Unit)
      컴퓨터의 핵심 처리 장치, 명령어를 해석하고 실행.
      프로그램 실행, 산술 연산, 논리 연산, 데이터 이동 등의 작업 수행.
      macOS나 iOS에서는 Apple 실리콘(M1, M2 등)이 CPU 역할을 함.
      - RAM에서 데이터를 읽거나 저장, 저장 장치에서 필요한 데이터를 RAM으로 로드하여 실행.

      RAM(Random Access Memory)
      실행 중인 앱과 작업 데이터를 임시로 저장.
      CPU가 빠르게 접근할 수 있는 고속 데이터 저장소로 작동
      시스템의 '작업 공간' 역할을 수행
      - RAM은 전원이 꺼지면 사라짐(휘발성) 때문에 저장 장치와 데이터가 연계

      Storage(SSD/HDD)
      데이터와 프로그램을 영구적으로 저장
      macOS와 iOS에는 SSD를 주로 사용.
      - 시스템이 부팅될 때 OS와 앱 데이터를 SSD에서 RAM으로 로드. CPU 작업 후, 결과 데이터 다시 저장.
      - 가상 메모리로도 사용 RAM이 부족할 때 데이터의 임시 저장소로 동작.

      CPU <-> 메모리 간의 데이터 교환
      - 레지스터(Register) : CPU 내부의 초고속 저장 장치, 즉각적인 계산 및 처리를 위해 데이터 저장.
      - 캐시(Cache) : CPU와 RAM 사이의 중간 저장소, 자주 사용되는 데이터를 저장해 CPU 접근 속도 향상. L1 > L2 > L3
      - 시스템 버스(System Bus) : CPU와 RAM 간 데이터 교환을 위한 경로

      데이터 교환 과정
      1. CPU는 명령 실행을 위해 필요한 데이터를 RAM에서 요청
      2. RAM은 해당 데이터를 버스를 통해 CPU로 전송
      3. CPU는 데이터를 처리하고 결과를 RAM으로 다시 저장하거나, 다른 하드웨어로 전송.

      버스(Bus)란 ? 
      1. 데이터 버스 (데이터의 실제 전송을 담당, CPU, RAM, 저장 장치간 데이터를 송수신) = 양방향
      2. 주소 버스 (데이터가 어디로 전송되어야 하는지, 어디에서 읽어와야하는지 주소 지정 CPU가 특정 메모리 위치나 장치를 지정할 때 사용) = 단방향
      3. 제어 버스 (데이터 전송 방식 및 작업을 제어, 읽기/쓰기 신호, 인터럽트 신호, 클럭 신호 등이 포함) = 양방향 | 단방향

      Apple 실리콘에서는 통합 메모리 아키텍처 (UMA, Unified Memory Architecture)를 사용.
      - CPU, GPU, NPU 등이 단일 메모리 풀을 공유하여 데이터 이동 속도를 크게 향상.
      - 데이터 교환 시 버스 병목 현상이 줄어들고 성능과 전력 효율이 높아짐.
  2. 캐시 메모리의 개념과 역할에 대해 설명해주세요.
    • 캐시의 지역성(Locality) 원리에 대해 설명해주세요.
    • 더보기
      개념
      - 캐시 메모리는 CPU와 주 메모리(RAM) 사이에 위치한 고속 메모리.
      - 자주 사용되거나 앞으로 사용될 가능성이 높은 데이터를 임시 저장하여 CPU의 작업 속도를 높이는 역할
      - M1, M2에도 L1,L2,L3캐시가 CPU내부 또는 근처에 배치되어 고속 데이터 액세스를 지원

      역할 
      - CPU 속도 향상 (RAM보다 훨씬 빠름)
      - 자주 사용하는 데이터 제공 (최근 접근한 데이터 또는 명령어를 저장)
      - 효율성 향상 (데이터 전송 횟수 감소, CPU가 RAM 접근을 최소화 하도록 도움)

      캐시의 동작원리는 CPU가 RAM에서 필요한 데이터를 찾기전에 캐시에서 해당 주소의 자료가 있는지 먼저 검색하는 것.

      지역성(Locality)
      - 시간 지역성 : 최근에 접근한 데이터는 곧 다시 접근될 가능성이 높다는 원리.(반복문의 동일한 변수, 최근 실행된 명령어)
      - 공간 지역성 : 현재 접근한 데이터 근처의 데이터도 곧 접근될 가능성이 높다는 원리.(배열 순회, 코드 실행)
  3. CPU 아키텍처의 종류(예: ARM, x86)와 각 특징에 대해 설명해주세요.
    • 더보기
      ARM(Advanced RISC Machine)
      - 모바일 장치, 임베디드 시스템, IoT 장치에서 주로 사용, Apple Silicon(M1, M2)과 같은 고성능 데스크탑,랩탑에서도 사용.
      특징
      - 효율적인 전력 소비, 배터리 기반 장치에 특히 유리.
      - 고성능 설계 : 높은 클럭과 병렬 처리
      - 확장성 : 저전력 IoT 장치에서 고성능 서버까지 다양한 응용 환경
      - ARM 라이센스 모델. ARM은 자체적으로 CPU를 제조하지 않음, 설계를 라이센스 형태로 제공.
      - 스마트폰, 태블릿, 스마트워치, 애플 실리콘 기반 Mac등에서 사용

      x86(Intel, AMD기반 CISC 아키텍처)
      - 데스크탑, 랩탑, 서버 등 고 성능 장치에서 사용
      - 복잡한 명령어 세트: 다양한 명령어를 지원 프로그래밍이 유연하지만, 명령어 처리 복잡성 증가
      - 고성능 : 고속 캐시, 고성능 병렬 처리 지원
      - 전력 소모 : RISC 기반 CPU보다 전력 소모가 많아 모바일 환경에서는 적합하지 않음.
      - 하위 호환성 : x86 명령어 세트(8086)와 호환성 유지.
      - Windows PC, 서버, 고성능 워크스테이션, 게임 콘솔

      x64(x86-64, AMD64)
      - x86의 확장 버전, 64비트 명령어 지원 CPU 아키텍처.
      - AMD가 최초 개발, 현재는 intel도 채택
      - 확장된 주소 공간 : 32비트 시스템의 한계(4GB 메모리)에서 벗어나 최대 18엑사바이트(이론상) 메모리 주소 공간 지원
      - 64비트 레지스터로 대량의 데이터 처리와 연산 속도 향상
      - 하위 호환성 : 32비트 응용 프로그램과의 호환성 유지
      - 서버 및 워크스테이션에 최적화 : 데이터 집약적 작업에 적합
      - 현대 데스크탑, 랩탑, 서버 시스템에 사용.

      RISC-V
      - 오픈소스 RISC 기반 아키텍처 : 설계가 공개되어 있어 누구나 CPU 설계를 자유롭게 구현 가능
      - 확장성과 맞춤화 용이, ARM대비 유연. 생태계가 초기단계.
      - 임베디드 장치, 연구 목적으로 주로 사용.

      PowerPC
      - IBM, Motorola, Apple이 공동 개발한 RISC 기반 아키텍처.
      - Apple이 과거 PowerPC를 Mac에 사용했으나 현재는 ARM 기반으로 전환
      - 에너지 효율적이지만 ARM에 밀려 현재 사장

      SPARC
      - 오라클에서 서버용으로 개발한 RISC 기반 아키텍처
      - 서버 및 고성능 연산작업에 최적화. 
      - 현대에는 점차 사용감소.
    • 더보기
      ARM vs x86 비교
      RISC / CISC
      전력 효율성 매우 높음 / 상대적으로 낮음
      모바일, 저전력 장치 최적화 / 고성능 데스크탑 및 서버에 적합
      IoT에서 서버까지 / PC, 서버, 워크스테이션
      ARM 생태계 전용 / 광범위한 호환성 제공
      스마트폰, 태블릿, Apple Silicon / Windows PC, 게임 콘솔, 서버
  4. iOS 기기에서 사용되는 AP(Application Processor)의 특징과 역할에 대해 설명해주세요.
    • SoC(System on a Chip)의 개념은 무엇인가요?
    • 더보기
      AP(Application Processor) 는 스마트폰이나 태블릿 같은 디바이스에서 실행되는 애플리케이션과 운영체제를 처리하는 핵심 프로세서. iOS 기기에서는 Apple Silicon(A series, M series)이 AP 역할을 수행.
      AP의 특징 
      - 고성능 및 저전력 : iOS기기는 배터리 기반으로 동작. AP는 전력 소모를 최소화 하며 높은 성능 제공
      AppleSilicon의 경우 빅 리틀 구조(Big.LITTLE)를 채택하여 고성능 코어와 저전력 코어를 조합.
      - AP는 CPU뿐만 아니라, GPU, Neural Engine(NPU), ISP(image Signal Processor), DSP등을 하나의 칩으로 통합하여 다기능 지원
      - ARM 기반
      - 전용 가속기 : Neural Engine 및 Secure Enclave 같은 전용 모듈 포함.
      - 통합 메모리(UMA) : CPU, GPU, NPU 등이 단일 메모리를 공유, 데이터 전송속도를 극대화 성능 병목현상 줄임.

      AP의 역할
      - 중앙 처리 역할 : iOS에서 실행되는 앱과 시스템 서비스를 처리, 사용자 입력, 멀티태스킹, 네트워크 통신 등을 관리
      - 그래픽 처리: 내장 GPU를 통해 고화질 그래픽 및 UI렌더링 처리.
      - AI/ML 연산 : Neural Engine은 사진 인식, 음성 명령 처리, 번역 등 머신러닝 작업 가속화.
      - 멀티미디어 처리 : ISP는 카메라에서 캡처한 이미지를 처리, 고품질 동영상 녹화 및 편집 지원.
      - 보안 및 개인정보 보호 : Secure Enclave는 생체인식, 암호화 키 관리 등을 처리.
      - 전력 관리 : 저전력 설계와 고효율 고커 사용으로 배터리 수명 최적화
    • 더보기
      SoC(System on a Chip)란 CPU, GPU, 메모리 컨트롤러, ISP, DSP, NPU, 모뎀, 전력 관리 모듈 등 다양한 하드웨어 기능을 하나의 칩에 통합한 시스템. AP는 SoC의 핵심 구성 요소 중 하나. 

      M1은 CPU가 아니고 SoC이다. M1은 여러개의 칩이 하나의 거대한 실리콘 패키지에 넣어진 전체적인 시스템이다. CPU는 그 중 하나다. 

      왜 SoC를 쓰느냐 ?
      - 단일 칩에 여러 구성요소를 집적하여 크기를 줄이고 성능을 향상
      - 여러 칩을 개별적으로 사용하는 것 보다 전력 소모가 적음(배터리 기반에서는 특히 중요한 설계)
      - 공간 절약(SoC는 작은 공간에서 높은 성능을 제공, 스마트폰 및 태블릿 같은 소형 기기에서 필수적)
      - 고속 데이터 처리 (칩 내부 구성 요소간 데이터 전송 거리가 짧아 대역폭과 속도가 향상됨)

      AP와 SoC의 관계
      - AP는 SoC의 핵심 컴퓨팅 유닛으로, CPU와 GPU와 포함된 중앙 처리 장치.
      - 전략에 따라 AP에는 Modem, VPU, DSP, ISP 등도 포함할 수 있다.

      Apple의 SoC설계
      - A 시리즈 (A15, A16 등), M 시리즈 (M1, M2등)는 SoC설계의 대표적인 사례
      - 애플 SoC의 주요 특징 : 통합 메모리 아키텍처로 CPU, GPU, NPU가 단일 메모리를 공유.
      - ISP, Neural Engine, Secure Enclave 등을 포함하여 기능 별 최적화
      - 배터리 효율 극대화 및 고성능 제공
  5. 운영체제의 역할과 iOS의 운영체제 구조에 대해 설명해주세요.
    • 더보기
      운영체제의 주요 역할
      프로세스 관리:
      - 애플리케이션의 실행 및 스케줄링 관리.
      - 프로세스 간의 자원 경쟁을 조정.

      메모리 관리:
      - 프로그램 실행에 필요한 메모리를 할당 및 해제.
      - 물리적 메모리와 가상 메모리 관리.

      저장장치 관리:
      - 파일 시스템 제공 및 데이터 읽기/쓰기 조작 지원.

      디바이스 관리:
      - 입력 장치(터치스크린, 키보드)와 출력 장치(디스플레이, 스피커) 간 데이터 흐름 관리.

      보안 및 보호:
      - 데이터 무결성과 애플리케이션 간의 격리를 보장.
      - 권한 제어를 통해 시스템의 무단 접근 방지.

      네트워킹:
      - 인터넷 및 네트워크 통신 지원.
    • iOS의 샌드박스 구조는 어떻게 동작하나요?
      • 더보기
        https://developer.apple.com/documentation/security/app-sandbox#//apple_ref/doc/uid/TP40011183
        AppSandbox는 커널 수준에서 강제 적용되는 macOS의 접근 제어 기술
        앱이 손상된 경우, 시스템과 사용자 데이터의 손상을 억제하기 위해 macOS앱의 리소스 및 사용자 데이터에 대한 액세스를 제한하는 것.

        동작 : 각 앱에 마다 취약한 리소스에 대한 접근을 제한함으로써, App SandBox는 해커가 앱의 보안 구멍을 뚫었을 경우 사용자 데이터의 도난, 손상, 삭제, 시스템 하드웨어의 해킹에 대한 마지막 방어선을 구축합니다.

        예를들어, SandBoxed App은 다음 리소스 중 하나를 사용하려면 그 의도를 명시적으로 명시해야 합니다.

        Hardware (Camera, Microphone, USB, Printer)
        Network Connections (Inbound or Outbound)
        App Data (Calendar, Location, Contacts)
        User Files (Downloads, Pictures, Music, Movies, User Selected Files)
        프로젝트 정의에서 명시적으로 요청되지 않은 리소스에 대한 접근은 런타임 시 시스템에 의해 거절됩니다.

        만일 Sketch App을 만든다면, 개발자는 자신이 만든 App이 절대 Microphone에 대한 접근을 하지 않을거란걸 알고 있고, 그냥 단순히 접근에 대해 요청하지 않으면 된다. 그리고 시스템 또한 App이 그런 요청을 한다면 거절해야 한다는 것도 알고 있는 것이다.
    • 커널(Kernel)의 역할은 무엇인가요?
      • 더보기
        커널은 Darwin 기반으로 동작하며 XNU 커널을 사용합니다. HW <-> SW간의 중재자로 작동

        - 프로세스 생성, 종료, 스케쥴링, 격리.
        - 메모리 관리, 보호
        - 디바이스 드라이버 관리, 하드웨어 제어, 표준 인터페이스 제공
        - 파일 시스템 관리
        - 보안 관리
        - 네트워크 관리
        - 전력 관리
        - 인터럽트 처리

        특징
        - 샌드박스 기반 보안
        - 모놀리식 구조
    • 다중 태스킹(Multitasking)은 어떻게 지원되나요?
      • 더보기
        운영체제 레벨에서 Multitasking의 지원 방식

        1. App Lifecycle 관리
        운영체제는 앱의 상태를 관리하여 멀티태스킹을 지원합니다. iOS 앱은 다음과 같은 상태를 가집니다:

        Foreground (Active): 사용자가 현재 사용 중인 앱으로 CPU와 메모리 리소스가 우선적으로 할당됩니다.
        Foreground (Inactive): 앱이 활성화되었지만 사용자와 상호작용하지 않는 상태(예: 전화 수신).
        Background: 앱이 화면에서 사라졌지만 제한적인 작업을 수행 가능.
        Suspended: 앱이 백그라운드에서 대기 중이며, 메모리만 유지하고 CPU를 사용하지 않음.

        2. Background Execution
        iOS는 운영체제 레벨에서 특정 유형의 백그라운드 작업을 제한적으로 허용합니다:

        지속적 작업: 오디오 재생(음악 앱), VoIP 연결 유지(전화 앱), 위치 서비스(GPS).
        백그라운드 Fetch: 운영체제가 네트워크 상태와 전력 상황을 고려해 앱이 데이터를 새로고침하도록 호출.
        백그라운드 전송: 파일 다운로드 및 업로드를 네트워크 연결 상태에 따라 처리.

        3. Task Scheduling
        iOS의 커널은 태스크 스케줄링을 통해 멀티태스킹을 구현합니다:

        CPU 리소스를 효율적으로 분배하여 앱들이 동시에 실행되는 것처럼 보이도록 지원.
        낮은 우선순위의 작업은 일시 중단되거나 느리게 처리.

        4. Grand Central Dispatch (GCD)와 Thread Management
        iOS는 비동기 작업 및 멀티스레딩을 효과적으로 지원하기 위해 GCD와 NSOperation을 사용합니다:

        GCD를 통해 작업을 메인 스레드, 백그라운드 스레드, 또는 우선순위 큐에서 실행.
        멀티스레드 환경에서 각 작업을 효율적으로 관리하여 충돌과 자원 경쟁을 방지.

        5. 샌드박스 환경
        iOS 운영체제는 샌드박스를 통해 앱 간의 격리를 유지하여 보안과 안정성을 강화:

        각 앱은 자신의 데이터와 리소스에만 접근 가능.
        멀티태스킹 환경에서도 샌드박스를 통해 앱 간 간섭을 방지.

        운영체제 제공 Multitasking API
        운영체제는 멀티태스킹을 지원하기 위해 다양한 API를 제공합니다:

        Background Tasks: UIApplication의 beginBackgroundTask 메서드를 사용해 앱이 제한된 시간 동안 작업 수행. 작업이 완료되지 않으면 iOS가 작업을 종료.
        Background Fetch: iOS는 적절한 시점에 앱을 백그라운드에서 실행하여 데이터를 새로고침.
        Push Notifications: 원격 푸시 알림을 통해 백그라운드에서 특정 작업 트리거.
        NSURLSession: 네트워크 파일 다운로드 및 업로드를 백그라운드에서 실행.
        Location Services: GPS와 같은 위치 기반 서비스를 제공하며, 백그라운드에서도 동작 가능.

        Multitasking 제약
        운영체제는 다음과 같은 제약을 통해 배터리와 성능 효율성을 보장합니다:

        리소스 관리: 운영체제가 필요에 따라 메모리 부족 시 백그라운드 앱을 강제로 종료(Suspended 상태에서 제거).
        백그라운드 시간 제한: 백그라운드 작업은 제한된 시간 내에 완료되어야 하며, 그렇지 않으면 운영체제가 작업을 강제 중단.
        정책 기반 실행: 네트워크, 전력 상태 등을 고려하여 작업 우선순위 조정.

        결론
        iOS 운영체제는 멀티태스킹을 지원하기 위해 태스크 스케줄링, 백그라운드 작업 관리, 샌드박스 환경, 효율적인 API를 제공하며, 제한적이고 최적화된 방식으로 구현됩니다. 이를 통해 사용자는 여러 앱을 동시에 실행하는 것처럼 느끼며, 운영체제는 배터리와 시스템 자원의 효율성을 유지합니다.
  6. 프로세스와 스레드의 차이점, 그리고 iOS에서의 프로세스와 스레드 관리 방법에 대해 설명해주세요.
    • 멀티스레딩이 필요한 이유는 무엇인가요?
    • iOS에서 GCD(Grand Central Dispatch)는 어떤 역할을 하나요?
    • 더보기
      프로세스와 스레드의 차이점
      1. 프로세스 (Process)
      정의: 실행 중인 프로그램의 인스턴스. 독립적인 메모리 공간과 시스템 리소스를 가짐.
      특징:
      - 서로 독립적인 메모리 공간을 사용.
      - 운영체제에서 관리하는 가장 큰 작업 단위.
      - 프로세스 간 데이터 공유는 어렵고, IPC(Inter-Process Communication)와 같은 별도 메커니즘 필요.
      - 시스템 자원 소모가 큼(컨텍스트 스위칭 비용 높음).

      2. 스레드 (Thread)
      정의: 프로세스 내부에서 실행되는 작업의 단위. 한 프로세스에 여러 스레드가 포함될 수 있음.
      특징:
      - 같은 프로세스 내에서 메모리와 자원을 공유.
      - CPU의 실행 단위로, 여러 스레드가 병렬로 실행 가능.
      - 가볍고, 생성 및 컨텍스트 스위칭 비용이 낮음.
      - 동기화 문제를 처리해야 함(예: Deadlock, Race Condition).

      iOS에서 프로세스와 스레드 관리 방법
      1. 프로세스 관리
      - iOS는 앱마다 독립적인 샌드박스 환경에서 실행되는 프로세스를 생성.
      - App Lifecycle을 통해 프로세스 상태를 관리:
        - Foreground, Background, Suspended 상태로 전환.
        - 시스템 메모리 부족 시, 우선순위가 낮은 프로세스를 종료.

      2. 스레드 관리
      iOS는 프로세스 내부에서 멀티스레드를 지원하며, Thread Safety와 성능 최적화에 중점을 둠.

      주요 스레드:
      - Main Thread: UI 업데이트와 사용자 이벤트 처리 담당.
      - Background Threads: 네트워크 작업, 파일 처리 등 CPU 집약적인 작업 수행.

      멀티스레드 구현:
      - NSThread: iOS에서 기본 스레드 관리 클래스(직접 제어).
      - NSOperationQueue: 비동기 작업 관리.
      - GCD(Grand Central Dispatch): 비동기 작업 처리와 병렬 실행을 위한 API.

      멀티스레딩이 필요한 이유
      1. 성능 향상:
      - 멀티코어 CPU를 활용하여 여러 작업을 병렬로 처리.
      - 작업 속도 향상.

      2. UI 응답성 유지:
      - 무거운 작업(네트워크 요청, 데이터 처리)을 백그라운드 스레드에서 처리하여 UI가 멈추지 않도록 유지.

      3. 효율적인 리소스 사용:
      - 동일한 프로세스 내에서 여러 작업을 독립적으로 실행하여 CPU 자원을 효율적으로 활용.

      4. 복잡한 작업 처리:
      - 데이터 처리, 네트워크 통신, 애니메이션 등 다중 작업을 동시에 처리해야 하는 경우.

      iOS에서 GCD(Grand Central Dispatch)의 역할
      1. GCD란?
      Grand Central Dispatch(GCD)는 비동기 작업 처리와 병렬 프로그래밍을 쉽게 구현할 수 있도록 Apple이 제공하는 라이브러리입니다.
      멀티코어 프로세서를 효율적으로 활용하여 작업을 관리하고 실행.

      2. GCD의 주요 역할
      1. 작업 큐(Dispatch Queue) 관리:
       - 작업을 큐에 추가하고, 운영체제가 적절한 시점에 해당 작업을 실행.
       - 두 가지 큐:
          - Serial Queue: 한 번에 하나의 작업 실행.
          - Concurrent Queue: 여러 작업을 병렬로 실행.

      2. 비동기 작업 지원:
       - async를 통해 작업을 비동기로 실행.
       - UI 작업과 백그라운드 작업을 분리하여 응답성을 유지.

      3. 병렬 프로그래밍 지원:
       - 멀티코어 시스템에서 작업을 병렬로 분산 처리하여 성능 최적화.

      4. Main Thread 관리:
       -  DispatchQueue.main.async를 사용하여 UI 업데이트를 메인 스레드에서 안전하게 수행.

      5. 작업 그룹(Dispatch Group):
       - 여러 작업을 그룹화하여 작업 완료를 한 번에 처리 가능.

      6. 동기화 지원:
       - sync와 semaphore를 통해 작업의 순서를 제어하고, 스레드 안전성을 유지.

      iOS에서 GCD를 사용하는 이유
      1. 코드 간결화:
       - 스레드 생성 및 관리의 복잡성을 줄이고, 간결한 코드로 멀티스레딩 구현 가능.
      2. 성능 최적화:
       - 시스템 리소스를 효율적으로 사용하며, 멀티코어 CPU의 성능을 극대화.
      3. 안전성:
       - 작업 우선순위와 큐를 통해 스레드 충돌과 동기화 문제를 예방.
      4. 편리한 비동기 작업:
       - UI 작업과 백그라운드 작업 간 분리를 손쉽게 구현.

      결론
      - 프로세스는 독립적 작업 단위로, 앱이 실행되는 환경을 제공하며, 스레드는 프로세스 내에서 실행되는 작업 단위로, 성능과 병렬성을 지원합니다.
      - iOS는 App Lifecycle, 멀티스레드 지원 API, 그리고 GCD를 통해 멀티태스킹과 멀티스레딩을 효율적으로 관리하며, 성능과 사용자 경험을 동시에 최적화합니다.
  7. 메모리 관리 기법 중 iOS에서 사용되는 방식과 그 특징에 대해 설명해주세요.
    • 자동 참조 카운팅(ARC)은 어떻게 동작하나요?
    • Garbage Collection과의 차이는 무엇인가요?
    • 더보기
      객체가 생성되면 참조 카운트가 1로 설정되고, 새로운 변수에 할당되거나 다른 객체에서 참초 될 때마다 카운트가 증가.
      더이상 참조하지 않으면 참조 감소, 참조 카운트가 0이되면 메모리에서 자동 해제.

      컴파일러 기반 메모리 관리이며, 실시간 해제가 가능하고, 가비지 컬렉션과 비교하였을때 오버헤드가 적다.(해제 시점을 컴파일 타임에 결정하므로)
      강한 참조가 순환 구조를 형성하게 되면 메모리 누수가 발생할 수 있다.
  8. iOS의 샌드박스(Sandbox) 개념과 역할, 그리고 앱 간 데이터 공유 방법에 대해 설명해주세요.
    • URL 스킴(URL Scheme)을 이용한 앱 간 통신은 어떻게 이루어지나요?
    • 앱 그룹(App Group)을 활용하여 데이터 공유를 하는 방법은 무엇인가요?
    • 더보기
      1. 샌드박스 개념과 역할은 위에서 다룸.
      2. iOS에서 앱 간 데이터 공유 방법
      2-1. URL 스킴(URL Scheme)을 이용한 앱 간 통신
      개념:
      - URL 스킴은 앱 간 통신을 가능하게 하는 방법으로, 한 앱이 다른 앱을 호출하거나 데이터를 전달할 수 있습니다.
      호출받는 앱은 미리 등록된 URL 스킴을 통해 데이터를 처리합니다.

      URL 스킴 등록: 호출받는 앱은 Info.plist 파일에 URL 스킴을 등록합니다:
      호출: myapp://parameter=value로 실행.
      데이터 처리: 호출 받는 앱 델리게이트에서 url.scheme으로 들어오는 메서드를 구현하면 됨.

      2-2. 앱 그룹(App Group)을 활용한 데이터 공유
      개념:
      - 앱 그룹은 동일한 개발자가 서명한 앱 간에 데이터를 공유할 수 있는 샌드박스 컨테이너를 제공합니다.
      - 공유 컨테이너를 통해 UserDefaults, 파일, 데이터를 공유 가능.

      구현 방식:
      1. 앱 그룹 설정:
      Xcode의 Signing & Capabilities에서 "App Groups"를 활성화하고 그룹을 추가합니다.
      ( 예: group.com.example.mygroup )
      2. UserDefaults를 통한 데이터 공유 UserDefaults(suiteName: "group.com.example.mygroup")
      3. 파일을 통한 데이터 공유: 공유 컨테이너 경로에 파일을 저장하고 읽습니다

      장점:
      - 파일, UserDefaults 등 다양한 방법으로 데이터를 공유 가능.
      - 동일 개발자 계정에서만 사용 가능하므로 보안이 강화됨.

      제한사항:
      - 다른 개발자의 앱과는 데이터 공유 불가.

      3. 결론
      샌드박스의 개념과 역할: iOS의 샌드박스는 앱 간 간섭을 방지하고 데이터를 보호하는 강력한 보안 모델입니다.
      앱 간 데이터 공유 방법:
      1. URL 스킴:
      - 간단한 데이터 전달에 적합하지만, 복잡한 데이터 처리에는 부적합.
      2. App Group:
      - 동일 개발자 계정 내 앱 간 파일 및 UserDefaults 공유에 적합하며 보안성이 높음.

      iOS에서는 앱 간 데이터 공유를 지원하면서도 샌드박스 모델과 권한 시스템을 통해 보안과 프라이버시를 철저히 보호합니다.
  9. iOS에서의 메모리 구조와 관리 방식에 대해 자세히 설명해주세요.
    • 힙(Heap)과 스택(Stack)의 차이점은 무엇인가요?
    • 더보기
      iOS에서의 메모리 구조와 관리 방식
      iOS에서의 메모리는 크게 커널 메모리(Kernel Memory)와 사용자 메모리(User Memory)로 나뉩니다. 사용자 메모리는 앱이 실행되는 동안 사용하는 공간으로, 앱의 데이터와 실행 흐름을 관리합니다. 메모리 관리는 자동 참조 카운팅(ARC)와 운영체제의 효율적인 메모리 관리 정책을 통해 이루어집니다.

      1. iOS의 메모리 구조
      1-1. 메모리 영역
      iOS 앱이 사용하는 메모리는 보통 다음과 같은 영역으로 나뉩니다:
      1. 코드(Code/Text) 영역:
      - 실행 코드와 상수 데이터(문자열 리터럴 등)를 저장.
      - 컴파일 과정에서 생성, 읽기 전용(read-only) 메모리.

      2. 데이터(Data) 영역:
      - 전역 변수와 정적 변수를 저장.
      - 초기화된 데이터와 초기화되지 않은 데이터로 나뉨.
      - 앱 실행 시 할당되고 앱 종료시 해제되며, 읽기 쓰기가 가능

      3. 힙(Heap):
      - 동적으로 할당되는 메모리 영역.
      - 메모리 크기가 가변적이며, 런타임에 사용.
      - 개발자가 직접 메모리를 할당하고 해제해야 했으나, iOS에서는 ARC가 이를 자동으로 관리.

      4. 스택(Stack):
      - 함수 호출 시 사용되는 지역 변수와 매개변수를 저장.
      - LIFO(Last In, First Out) 구조로, 함수가 종료되면 해당 스택 프레임이 제거됨.

      0. 커널 영역:
      - 운영체제의 핵심 데이터를 저장하는 공간으로, 앱은 접근할 수 없음.

      힙 vs 스택
      데이터의 크기를 모르거나 스택에 저장하기엔 큰 데이터의 경우에는 힙에 할당하고 그 외엔 스택에 할당하면됨.
      인스턴스, 클로저 등 자동으로 힙에 할당되는 것 되에 직접 할당할 경우.

      메모리 관리 방식 - MRC, ARC가 있는데 잘 사용해야한다. 
      ARC는 자동 참조의 카운트를 세준다는거지 메모리를 직접 관리해준다는 뜻이 아니기 때문, 그렇기 떄문에 비소유, 약한 참조(unowned, weak)를 잘 사용해야한다.
  10. 네트워크 프로토콜 스택과 iOS에서의 네트워크 통신 방식에 대해 설명해주세요.
    • 더보기
      1. iOS의 네트워크 프로토콜 스택
      iOS의 네트워크 프로토콜 스택은 일반적인 TCP/IP 모델과 비슷한 구조를 가지며, 다음과 같은 주요 계층으로 구성됩니다:

      1-1. 애플리케이션 계층
      프로토콜: HTTP/HTTPS, WebSocket, FTP, DNS 등
      설명: 앱이 사용하는 프로토콜이 정의된 계층으로, 주로 URLSession, Alamofire 같은 API가 이 계층에서 동작합니다.

      1-2. 전송 계층
      프로토콜: TCP, UDP
      설명: 데이터를 신뢰성 있게 전송하기 위해 TCP와 같은 연결 지향 프로토콜을 사용하거나, 실시간 성능이 중요한 경우 UDP를 사용합니다.

      1-3. 네트워크 계층
      프로토콜: IP (IPv4, IPv6)
      설명: 데이터를 라우팅하고 전송 경로를 설정하며, iOS는 IPv6를 기본적으로 지원합니다.

      1-4. 링크 계층
      프로토콜: Wi-Fi, LTE, Bluetooth, Ethernet
      설명: 물리적 네트워크 인터페이스와의 통신을 처리합니다. iOS는 Wi-Fi와 셀룰러 네트워크를 기본적으로 지원하며, Bluetooth는 BLE 프로토콜을 통해 데이터 전송을 제공합니다.

      2. iOS에서의 네트워크 통신 방식
      iOS에서 네트워크 통신은 주로 Foundation 프레임워크의 네트워크 API를 통해 수행됩니다. 이는 애플리케이션 개발자가 네트워크 작업을 쉽게 구현할 수 있도록 설계되었습니다.

      URLSession
      - HTTP/HTTPS 요청 및 파일 다운로드, 업로드
      - 세션 기반의 요청, 응답 처리. 비동기식 작업을 기본으로. 델리게이트와 completion handler활용
      - 백그라운드 네트워킹 지원

      CFNetwork
      - 낮은 수준의 네트워크 작업
      - BSD 소켓과 유사한 방식으로 동작. 커스텀 프로토콜을 다룰 때 사용.

      Network 프레임워크
      - TCP/UDP 및 NWConnection, NWPathMonitor를 통한 세부적인 네트워크 관리
      - Swift기반의 API, Modern Networking을 지원.
      - 연결의 안정성 및 네트워크 경로 모니터링.
      - 멀티패스 네트워킹(Multipath Protocol) 지원

      MultipeerConnectivity
      - Wi-Fi, Bluetooth를 활용한 피어 간 통신
      - 기기간 연결을 쉽게 설정, 게임, 협업 앱 등에서 주로 사용.

      3. iOS에서의 네트워크 보안 및 최적화
      1. ATS(App Transport Security): 앱에서 HTTPS를 기본으로 사용하도록 강제하여, 보안 강화를 위해 TLS 1.2이상의 프로토콜을 요구

      2. TLS(Transport Layer Security): 데이터 암호화를 통해 안전한 네트워크 통신 보장. ATS 정책의 일환, HTTP 요청은 HTTPS로 변환됨.

      3. 네트워크 최적화
      - 리소스관리: URLSessionConfiguration을 통해 네트워크 호출 빈도, 캐싱, 타임아웃 등을 조정.
      - 배터리 효율성: URLSession의 백그라운드 전송 모드 활용.
      - 네트워크 모니터링: Network 프레임워크를 통해 네트워크 상태를 감지하고 연결 경로 최적화.
  11. HTTP와 HTTPS의 차이점, 그리고 iOS에서의 보안 통신 방법에 대해 설명해주세요.
    • SSL/TLS의 동작 원리는 무엇인가요?
    • 더보기
      HTTP는 암호화 하지 않은 프로토콜 vs HTTPS는 SSL또는 TLS로 암호화한 프로토콜
      80 포트 vs 443포트
      평문 vs 암호문 통신
      인증 vs 서버 인증서(certificate)
      속도 (암호화 과정이 없어서 빠름) vs 상대적으로 느림
      일반적인 웹사이트에서는 http를 사용해도 상관은없다. / 민감한 정보가 오가는 웹사이트는 https

      iOS에서의 보안 통신 방법.
      1. ATS(https요구, 예외에 따라 info.plist에 설정)

      2. iOS의 URLSession 및 Network 프레임워크는 기본적으로 TLS를 통해 암호화된 통신을 지원해준다.
       - SSL, TLS는 데이터 암호화 및 통신을 가능하게 해주는 프로토콜이다.
      3. 인증서 핀닝 (certificate pinning) 
      4. keychain을 이용한 보안 데이터 저장

      SSL/TLS의 동작 원리
      SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 암호화된 통신을 제공하는 프로토콜로, HTTPS의 핵심 기술입니다.

      1. SSL/TLS의 주요 목적

      기밀성(Confidentiality): 데이터 암호화.
      무결성(Integrity): 데이터 변조 방지.
      인증(Authentication): 서버와 클라이언트 신원 확인.
      2. SSL/TLS의 동작 과정 (Handshake 과정)

      클라이언트 Hello:
      클라이언트가 서버에 연결 요청.
      지원하는 TLS 버전, 암호화 알고리즘(Cipher Suite), 난수(Random Number) 등을 전달.
      서버 Hello:
      서버가 TLS 버전과 암호화 알고리즘을 선택.
      서버 인증서를 클라이언트에게 전달.
      서버 인증 및 키 교환:
      클라이언트는 서버 인증서를 검증.
      서버는 클라이언트가 사용할 공개키(Public Key)를 제공.
      클라이언트는 대칭키(Symmetric Key)를 생성하고 서버의 공개키로 암호화하여 전달.
      세션 키 설정:
      서버는 클라이언트가 전달한 데이터를 복호화하여 대칭키를 얻음.
      클라이언트와 서버는 동일한 대칭키를 공유.
      암호화된 통신 시작:
      세션 키를 사용하여 데이터를 암호화하고 안전하게 통신.
      SSL/TLS에서 사용하는 암호화 방식
      대칭 암호화 (Symmetric Encryption):
      하나의 키를 사용하여 암호화 및 복호화.
      통신 속도가 빠름.
      비대칭 암호화 (Asymmetric Encryption):
      공개키(Public Key)와 개인키(Private Key)를 사용.
      안전한 키 교환에 사용되며, 속도가 느림.
      해시 함수 (Hash Function):
      데이터 무결성 검증.
      MD5, SHA-256 등 사용.
  12. 컴퓨터 네트워킹에서 OSI 7계층 모델에 대해 설명해주세요.
    • 각 계층의 역할과 프로토콜은 무엇인가요?
    • TCP/IP 모델과 OSI 모델의 차이점은 무엇인가요?
    • 더보기
      1. 물리 계층 - 통신 케이블, 리피터, 허브 등 물리적으로 연결되는 계층 (어떤 데이터든 신경 안쓰고 전송됨)
      2. 데이터 링크 계층 - 맥주소를 가지고 통신 하는 브릿지나 스위치 (프로토콜을 사용하여 에러검출, 재전송,흐름제어)
      3. 네트워크 계층 - 데이터를 목적지까진 가장 안전하고 빠르게 전달되는 기능 == 라우팅 (주소부여 ip, 경로설정 route)
      3.1 IP 계층 (네트워크 계층에 속함)
      - 에러제어 및 흐름제어 기능이 없음 -> 신뢰성을 확보하려면 상위 전송 계층에 의존. 
      - 비연결성 데이터 그램 방식으로 전달되는 프로토콜 
      4. 전송(TCP/UDP) - stateful, connection oriented.
      - 패킷 생성 및 전송
      4.1 TCP 
      - 신뢰성 있음, 연결지향적
      4.2 UDP
      - 신뢰성 없음, 비연결성
      - 순서화되지 않은 Datagram 서비스 제공
      - 실시간 응용 및 멀티캐스팅 가능
      - 헤더 단순
      5. 세션 계층(Session Layer)
      - 데이터가 통신하기 위한 논리적 연결
      - 동시 송수신(duplex), 반이중 방식(half-duplex), 전이중 방식(full duplex)
      - TCP/IP 세션을 만들고 없애는 책임을 진다.
      6. 표현 계층(Presentation Layer)
      - 데이터 표현이 상이한 응용 프로세스의 독립성을 제공, 암호화.
      - MIME 인코딩이나 암호화 등의 동작
      - EBCDIC로 인코딩된 문서를 ASCII로 변경해주는 것 등, 데이터가 TEXT인지, 그림인지 GIF, JPG의 구분
      7. 응용 계층(Application Layer)
      - HTTP, FTP, SMTP, POP3, IMAP, Telnet 등과 같은 프로토콜
      - 텔넷 같은 가상 터미널
      - 네트워크 소프트웨어 UI부분, 사용자의 입출력 부분
      7.1 HTTP
      - 요청 및 응답의 구조
      - 메세지 교환 형태의 프로토콜
      - 트랜잭션 중심의 비연결성 프로토콜
      - 전송계층 프로토콜 및 사용 포트 번호
      - http 표준

      TCP/IP 모델과 OSI 모델의 차이점은 
      TCP/IP 모델은 실제 인터넷 토인에 사용되며, 효율성과 실용성을 강조하였다.
      OSI 모델은 네트워크 설계와 문제 해결 시 참조 모델로 유용하다.

      TCP/IP 모델 (L1,L2,L3,L4)
      1. 네트워크 액세스 계층 (브릿지, 스위치) OSI의 데이터 링크, 물리 계층이 묶인것.
      2. 인터넷 계층 (라우터) OSI의 인터넷 계층과 동일
      3. 전송 계층 (게이트웨이) OSI의 전송 계층과 동일
      4. 응용 계층 (앱 교환을 위한 계층) OSI의 응용, 표현, 세션이 묶인것.
  13. HTTP 프로토콜의 특징과 HTTP/1.1과 HTTP/2의 차이점을 설명해주세요.
    • HTTP의 무상태(Stateless) 성질은 무엇이며, 어떻게 극복하나요?
    • HTTP/2에서 추가된 주요 기능은 무엇인가요?
    • HTTP/3에서 추가된 기능은 무엇인가요?
    • 더보기
      http 프로토콜의 특징
      1. 무상태성 - 서버는 클라이언트의 이전 요청에 대해 정보를 저장하지 않으며, 클라이언트가 매 요청마다 필요한 정보를 포함해야 한다.
      2. 텍스트 기반 - 요청과 응답이 사람이 읽기 쉬운 텍스트 형태로 전송해야한다.
      3. 비연결성 - 요청, 응답이 완료되면 연결이 종료된다 (keep-alive 예외)
      4. 유연성 - 다양한 데이터 타입 전송가능 (html, json, xml등), 확장 가능한 헤더 구조
      5. 응용 계층 프로토콜 - 데이터 전송을 담당하며, 하위 계층에 의존한다.

      무상태성의 극복
      - 쿠키, 세션, JWT, 캐시

      http/2 추가 주요 기능
      Keep-Alive를 사용하지 않아도, 단일 tcp연결에 멀티플렉싱을 지원한다.
      load 컨텐츠의 우선순위를 지정 가능하다. 
      헤더 압축
      서버 푸시
      바이너리 프로토콜

      http/3 추가 주요기능
      QUIC 프로토콜 (TCP 대신 UDP 기반의 새로운 전송 프로토콜인 QUIC 사용)
      0-RTT (연결 초기화시 Round Trip Time)을 줄여 빠른 데이터 전송
      내재적 멀티플렉싱 (HOL Blocking 완전 해결)
      TLS 1.3 통합
      패킷 손실 복구 개선 (QUIC의 패킷 손실 복구 메커니즘으로 안정성과 성능 개선)

  14. TCP와 UDP의 특징과 차이점에 대해 설명해주세요.
    • 연결 지향형 프로토콜과 비연결 지향형 프로토콜은 무엇인가요?
    • TCP의 3-way handshake 과정은 어떻게 이루어지나요?
    • 어떤 상황에서 UDP를 사용하는 것이 적합한가요?
    • 더보기
      연결 지향 TCP (신뢰성이 높음 데이터의 전송 보장)
      - 데이터의 순서를 보장
      - 요류 검출 및 재전송
      - 비교적 느림 (연결 설정 및 신회성 보장 작업)

      비연결 지향 UDP (신뢰성이 낮음 데이터의 전송을 보장하지 않음)
      - 데이터 순서를 보장하지 않음
      - 오류 검출은 가능하나, 재전송은 없다.
      - 빠름 (연결 설정 작업 없음)
      - 신뢰성보다는 속도와 실시간성이 중요한 경우 적합. 스트리밍, VoIP, IoT 기기 통신

      데이터 전송 전에 송수신자 간 연결을 설정하기 때문에 연결 지향형이라고 불림.

      TCP의 3way handshake는 데이터 전송 전에 syn, syn-ack, ack 신호를 주고 받음으로써 서로 연결
  15. 소켓 통신에 대해 설명해주세요.
    • 더보기
      소켓 통신은 네트워크 상의 두 호스트 간에 데이터 교환을 가능하게 하는 통신 방식이다.
      소켓은 네트워크에서 데이터를 주고 받는 종단점 역할을 하며, 클라이언트 서버간의 데이터 송수신을 위한 기본 인터페이스를 제공.

      - 소켓 (Socket): 네트워크 상에서 데이터를 주고받기 위해 생성된 인터페이스, IP 주소와 포트 번호로 특정 프로세서스를 식별.
      - 클라이언트와 서버
      - 포트 번호
      - 프로토콜: 소켓 통신은 주로 TCP(신뢰성)와 UDP(속도) 프로토콜을 사용.

      소켓 통신의 동작 방식
      1. 서버 소켓 생성, 클라이언트 소켓 생성
      2. 서버 바인딩 (서버는 서버 소켓을 특정 IP주소와 포트 번호에 바인딩하여 클라이언트 요청을 수신할 준비를 함)
      3. 서버 리스닝 (서버는 클라이언트 요청을 기다림)
      4. 클라이언트 연결 (클라이언트가 서버 IP주소와 포트를 사용하여 연결 요청)
      5. 데이터 송수신 (연결이 수립되면 클라이언트와 서버간 데이터 전송 시작)
      6. 연결 종료 (데이터 송수신이 완료되면 소켓 연결 종료)
  16. REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요.
    • iOS에서 URLSession을 사용하여 네트워크 요청을 보내는 방법은 무엇인가요?
    • 더보기
      1. RESTful API의 핵심 개념 이해
      간단한 설명으로는 REST API는 누구도 알아볼 수 있는 방식으로 작성 하는 것이다.

      1-1. REST의 기본 원칙
      REST(Representational State Transfer)는 다음과 같은 설계 원칙을 따릅니다:

      1. 자원(Resource): API는 자원을 표현하며, 자원은 고유한 URI로 식별됩니다.
      예: /users/123, /products/45.

      2. 표현(Representation): 자원은 여러 형태(JSON, XML 등)로 표현될 수 있습니다.
      클라이언트와 서버 간 데이터 교환 형식은 HTTP 헤더(Content-Type, Accept)를 통해 결정됩니다.

      3. HTTP 요청 메서드(Method): 각 HTTP 메서드는 특정 작업을 수행하기 위한 표준화된 의미를 가집니다.
      GET: 자원의 조회(Read).
      POST: 자원의 생성(Create).
      PUT: 자원의 전체 업데이트(Update/Replace).
      PATCH: 자원의 일부 업데이트(Update).
      DELETE: 자원의 삭제(Delete).

      3. 상태 코드(Status Code): 서버는 요청 결과를 상태 코드로 클라이언트에 전달합니다.
      2xx: 성공 (예: 200 OK, 201 Created).
      4xx: 클라이언트 오류 (예: 400 Bad Request, 404 Not Found).
      5xx: 서버 오류 (예: 500 Internal Server Error).

      4. 무상태성(Statelessness): 서버는 요청 간 상태를 유지하지 않습니다.
      모든 요청은 독립적이며, 필요한 모든 정보는 요청에 포함되어야 합니다.

      5. 캐싱(Caching): 자원의 캐싱을 통해 성능을 최적화할 수 있습니다.
      HTTP 헤더(Cache-Control, ETag)를 활용하여 클라이언트와 서버 간 데이터 재사용 가능.

      6. 계층화된 시스템(Layered System):
      클라이언트는 서버의 내부 구현(데이터베이스, 비즈니스 로직 등)에 의존하지 않습니다.

      iOS에서 네트워크 요청 및 응답 처리 방법.
      URLSession을 사용하여 네트워크 요청을 보내는 방법.
      1. 비동기 네트워크 요청
      - Completion Handler 또는 Delegate 패턴을 통해 처리
      2. 백그라운드 작업 지원
      - URLSessionConfiguration 백그라운드 설정 (대용량 파일 다운로드/업로드 가능)
      3. 네트워크 캐싱
      - URLCache를 활용하여 캐싱
      REST API 요청 시의 주요 포인트
      1. 에러처리
      2. 네트워크 응답 처리
      3. 보안
  17. REST API에서 HTTP 메서드들의 차이점을 설명해주세요.
    • GET과 POST의 차이점은 무엇인가요?
    • 더보기
      HTTP 요청 메서드(Method): 각 HTTP 메서드는 특정 작업을 수행하기 위한 표준화된 의미를 가집니다.
      GET: 자원의 조회(Read).
      POST: 자원의 생성(Create).
      PUT: 자원의 전체 업데이트(Update/Replace).
      PATCH: 자원의 일부 업데이트(Update).
      DELETE: 자원의 삭제(Delete).
  18. HTTP 상태 코드에 대해서 설명해주세요.
    • 더보기
      상태 코드(Status Code): 서버는 요청 결과를 상태 코드로 클라이언트에 전달합니다.
      2xx: 성공 (예: 200 OK, 201 Created).
      4xx: 클라이언트 오류 (예: 400 Bad Request, 404 Not Found).
      5xx: 서버 오류 (예: 500 Internal Server Error).
  19. iOS에서 이미지 파일 포맷(PNG, JPEG 등)과 각 포맷의 특징에 대해 설명해주세요.
    • PNG와 JPEG의 차이점은 무엇인가요?
    • 더보기
      1. PNG (Portable Network Graphics)
      특징:
      - 무손실 압축을 사용하여 이미지 품질 손상을 방지.
      - 알파 채널(투명도)을 지원.
      - 높은 품질의 그래픽 및 아이콘에 적합.
      - 파일 크기가 JPEG보다 상대적으로 큼.
      장점:
      - 이미지 품질이 뛰어나며 투명도를 지원.
      - 반복 저장 시 품질 손실이 없음.
      단점:
      - 압축률이 낮아 파일 크기가 큼.
      - 사진보다는 그래픽, 로고, 아이콘 등 선명한 이미지에 적합.

      2. JPEG (Joint Photographic Experts Group)
      특징:
      - 손실 압축을 사용하여 이미지 파일 크기를 줄임.
      - 투명도를 지원하지 않음.
      - 사진과 같이 색상이 풍부한 이미지에 적합.
      장점:
      - 파일 크기가 작아 저장 및 전송에 유리.
      - 사진과 같이 색상이 다양한 이미지에 최적화.
      단점:
      - 반복 저장 시 품질이 점차 손실됨.
      - 그래픽, 텍스트와 같이 선명도가 중요한 이미지에는 부적합.

      3. HEIF/HEIC (High Efficiency Image Format)
      특징:
      - iOS 11 이상에서 기본 이미지 포맷으로 사용.
      - HEVC (High Efficiency Video Codec) 기반의 고효율 이미지 포맷.
      - JPEG보다 더 작은 파일 크기로 동일한 품질 제공.
      - 투명도 및 애니메이션 지원 가능.
      장점:
      - 저장 공간 절약.
      - 고화질 이미지를 더 작은 크기로 저장.
      단점:
      - 일부 플랫폼에서 호환성 문제가 있을 수 있음.

  20. PNG 파일이 어떻게 저장되고 구성되는지 설명해주세요.
    • 더보기
      PNG는 파일 구조가 체계적으로 설계되어 있으며, IHDR, IDAT, IEND와 같은 주요 청크를 통해 이미지 데이터를 효율적으로 저장합니다. 무손실 압축과 투명도 지원은 PNG를 고품질 그래픽 및 UI 요소에 적합한 포맷으로 만듭니다.
    • 더보기
      1. PNG 파일의 저장 구조
      PNG 파일은 여러 개의 청크(Chunk)로 구성된 구조를 가지고 있으며, 각 청크는 특정한 메타데이터나 이미지 데이터를 저장합니다. 기본 구조는 다음과 같습니다:

      [ PNG Signature ][ Chunk1 ][ Chunk2 ]...[ ChunkN ]

      1.1. PNG 시그니처

      파일 시작부: 항상 고정된 8바이트.
      PNG 파일임을 식별하기 위해 사용.
      시그니처 값: 89 50 4E 47 0D 0A 1A 0A (16진수).
      1.2. 청크 구조

      PNG 파일은 청크의 조합으로 구성되며, 각 청크는 4개의 필드로 이루어져 있습니다:

      Length (4바이트):
      청크 데이터의 길이를 나타냅니다.
      최대 길이는 2^31 - 1 (4GB).
      Type (4바이트):
      청크의 유형을 나타냅니다.
      예: IHDR, IDAT, IEND 등.
      Data (가변 길이):
      청크의 실제 데이터.
      CRC (4바이트):
      데이터의 무결성을 확인하기 위한 체크섬.
      2. 주요 청크의 종류
      2.1. IHDR (Image Header)

      PNG 파일의 첫 번째 청크.
      이미지의 기본 정보를 저장.
      데이터:
      이미지 너비와 높이 (4바이트씩, 총 8바이트).
      비트 깊이 (1바이트): 1, 2, 4, 8, 16 중 하나.
      컬러 타입 (1바이트):
      0: 그레이스케일.
      2: RGB.
      3: 색상 팔레트.
      4: 그레이스케일 + 알파.
      6: RGBA.
      압축 방식 (1바이트): 항상 0 (DEFLATE 압축).
      필터 방식 (1바이트): 항상 0.
      인터레이스 방식 (1바이트): 0 (없음), 1 (Adam7).
      2.2. IDAT (Image Data)

      실제 이미지 데이터를 저장.
      데이터를 DEFLATE 압축 방식으로 저장.
      여러 개의 IDAT 청크가 존재할 수 있으며, 데이터를 연결하여 이미지 복원.
      2.3. IEND (Image End)

      PNG 파일의 끝을 나타내는 청크.
      데이터 필드는 비어 있음(길이가 0).
      2.4. PLTE (Palette)

      색상 팔레트를 저장.
      컬러 타입이 3 (팔레트 기반)인 경우 필수.
      2.5. tEXt / zTXt / iTXt (Text Metadata)

      이미지와 함께 저장되는 텍스트 정보를 포함.
      제목, 저작권 정보 등을 저장.
      2.6. gAMA (Gamma)

      감마 보정 정보를 저장.
      디스플레이 장치에서 밝기를 조정할 때 사용.
      2.7. tRNS (Transparency)

      투명도 정보 저장.
      팔레트 이미지에서 특정 색상을 투명하게 설정하거나, 비팔레트 이미지의 알파 채널 정보를 제공.
      3. 압축 방식
      3.1. DEFLATE 압축

      PNG는 DEFLATE 알고리즘을 사용하여 무손실 압축을 수행.
      DEFLATE는 두 가지 기법을 결합:
      LZ77: 중복된 데이터 스트링을 제거.
      허프만 코딩: 데이터를 고효율로 인코딩.
      3.2. 필터링

      이미지 데이터를 압축하기 전, 각 스캔라인에 대해 필터링을 수행.
      필터링은 스캔라인의 데이터 패턴을 단순화하여 압축 효율을 높임.
      필터 타입:
      None: 필터링 없음.
      Sub: 이전 픽셀 값을 기반으로 필터링.
      Up: 이전 행의 동일 위치 픽셀을 기준.
      Average: Sub와 Up의 평균.
      Paeth: 예측 알고리즘 기반.
      4. 투명도 지원
      PNG는 투명도를 지원하기 위해 알파 채널과 tRNS 청크를 사용합니다:

      알파 채널 (RGBA):
      각 픽셀에 투명도 값을 추가하여 반투명 효과 구현.
      tRNS 청크:
      팔레트 기반 이미지에서 특정 색상을 투명하게 설정.
  21. iOS에서 메모리 사이즈와 관련된 개념과 고려 사항에 대해 설명해주세요.
    • 메모리 정렬(Alignment)이 성능에 미치는 영향은 무엇인가요?
    • 더보기
      1. 메모리 페이지와 페이징
      메모리 페이지: 메모리는 고정된 크기(4KB 또는 16KB)의 페이지로 나뉨.
      페이지 폴트: 사용 중인 데이터가 메모리에 없을 경우 디스크에서 메모리로 로드하는 과정, 과도한 페이지 폴트는 성능 저하를 초래.

      2. 메모리 압축 (Memory Pressure)
      iOS는 메모리 리소스가 제한적이므로, 시스템에서 메모리 압박을 감지하면 앱에 경고를 보냄.
      대응 방법: 캐시 정리, 불필요한 객체 해제.
      UIApplication.didReceiveMemoryWarningNotification을 통해 메모리 경고를 처리.

      3. 메모리 정렬(Alignment)과 성능
      3.1. 메모리 정렬(Alignment)이란?
      정렬은 메모리에서 데이터가 적절한 바이트 경계(Alignment Boundary)에 맞게 저장되는 것을 의미.
      프로세서는 정렬된 데이터에 접근할 때 더 빠르고 효율적으로 처리 가능.

      정렬 기준: 데이터 타입 크기에 따라 정렬 경계가 다름.
      예: int32는 4바이트 경계, int64는 8바이트 경계.

      3.2. 잘못된 정렬이 성능에 미치는 영향
      미정렬된 데이터 (Unaligned Access): 프로세서는 데이터를 정렬된 주소에서 읽을 때 더 빠름.
      미정렬 데이터에 접근하면 CPU는 여러 번의 메모리 접근 작업을 수행, 성능 저하 발생.

      캐시 미스(Cache Miss): 데이터가 정렬되지 않으면 캐시 성능이 저하될 가능성 증가.
      메모리 접근 속도: 정렬된 데이터는 메모리 대역폭을 효율적으로 사용하여 접근 속도가 빨라짐.

      3.3. 정렬을 위한 데이터 패딩
      메모리 정렬을 보장하기 위해 데이터 사이에 패딩(Padding)을 삽입.
      예: struct Aligned {
          var a: UInt8  // 1 byte
          var b: UInt32 // 4 bytes
      } // a와 b 사이에 3바이트의 패딩 삽입

      4. 메모리 정렬과 iOS에서의 고려 사항
      1. 데이터 구조 최적화:
      - 구조체를 설계할 때 메모리 정렬을 고려하여 성능 최적화.
      - 큰 데이터 타입부터 작은 데이터 타입 순서로 정렬.
      2. NSData와 UnsafePointer: 정렬되지 않은 데이터 처리 시 효율성을 위해 정렬을 강제.
      3. 컴파일러의 정렬 최적화: Swift 컴파일러는 기본적으로 메모리 정렬을 최적화하지만, 직접 설계 시 정렬 고려 필요.
      4. 멀티스레딩과 메모리 동기화: 미정렬 데이터 접근은 멀티스레드 환경에서 동기화 문제를 초래할 수 있음.


  22. iOS 디바이스의 메모리 제약과 앱 메모리 제한에 대해 설명해주세요.
    • 메모리 경고(Memory Warning)가 발생하면 어떤 조치를 취해야 하나요?
    • 더보기
      iOS 디바이스는 메모리 제약이 있어서 앱을 설계할 때 이를 고려해야 한다. 각 앱은 시스템 메모리와 디바이스의 하드웨어에 따라 메모리 제한이 다르다. 일반적으로 iOS는 앱에 대해서 고정된 메모리 할당량을 두고 있으며, 이 한계를 초과하면 앱이 강제로 종료될 수 있다.

      기본적으로 150MB에서 2GB까지 메모리를 사용할 수 있으며, 이는 디바이스의 종류와 상태에 따라 달라질 수 있다. 앱이 한계를 초과한 경우 메모리 경고를 보내고 UIApplication.didReceiveMemoryWarningNotification 이 경고를 처리하지 않으면 앱이 종료될 수 있다.
  23. 알고리즘의 시간 복잡도와 공간 복잡도의 개념, 그리고 빅오 표기법에 대해 설명해주세요.
    • O(n)과 O(log n)의 차이는 무엇인가요?
    • 더보기
      https://chanhhh.tistory.com/215

      시간 복잡도는 수행횟수에 따른 복잡성을 나타내고, 공간 복잡도는 얼만큼 해당하는 메모리 공간을 차지하느냐 이다.

      시간 복잡도는 빅오 표기법은 최악의 경우를 상정하여 걸리는 횟수를 나타낸다.
      O(n)은 작업을 수행할 때 n번의 최악의 경우의 수행횟수를 뜻하고, O(log n)은 작업을 수행했을때 걸리는 최악의 경우의 수행 횟수가 log n이라는 뜻. 여기에서 log n은 n의 절반에 해당한다.
  24. 자주 사용되는 정렬 알고리즘(예: 퀵 정렬, 병합 정렬)의 동작 원리와 시간 복잡도를 설명해주세요.
    • 더보기
      iOS에서 Swift 배열의 sort() 메서드는 Timsort 알고리즘을 사용
      - Merge Sort와 Insertion Sort를 결합한 정렬 알고리즘
      - 데이터의 정렬 상태를 분석하여 최적의 방법으로 정렬. 이미 정렬된 구간(Runs)이 많을 경우 효율적으로 동작
      동작 원리
      1. Runs 탐색
       - 입력 배열에서 정렬된 연속 구간을 식별
      2. Runs 최소 길이 보장
       - 너무 짧을 경우 insertion Sort로 확장해서 최소 길이 이상으로 만듬 (최소 길이는 32~64정도)
      3. Merge
       - 머지소트 방식으로 Runs를 병합. 병합 과정에서 이진 삽입 기법을 사용하여 최적의 위치에 삽입
      4. 병합 최적화
       - 병합 중 불필요한 작업을 줄이기 위해 Runs의 길이 비율을 조정

      평균 시간 복잡도 : O(n log n)
      최선 시간 복잡도 : O(n)
      최악 시간 복잡도 : O(n log n)
  25. 이진 탐색의 원리와 시간 복잡도에 대해 설명해주세요.
    • 더보기
      이미 정렬된 경우에만 사용할 수 있으며, 탐색 범위를 절반씩 줄여나가 탐색하는것.
      시간 복잡도는 O(log n)
  26. 동적 프로그래밍(Dynamic Programming)의 개념을 설명해주세요.
    • 더보기
      큰 문제를 작은 문제로 나눌 수 있는 경우, 작은 문제에서 구한 정답이 그것을 포함하는 큰 문제에서 동일한 경우
      문제의 최적 해를 구하여 결과를 저장하고 이를 필요할 때 재사용하는 식으로 문제를 해결하는 것.
      top down 방식, bottom up 방식 등이 있으며 점화식을 통하여 문제를 해결 할 수 있다.
  27. 자료구조의 종류와 iOS 개발에서 자주 사용되는 자료구조에 대해 설명해주세요.
    • 더보기
      1. 선형 자료구조
      - 배열, 연결 리스트, 스택, 큐
      2. 비선형 자료구조
      - 트리, 그래프
      3. 해시 구조
      - 해시 테이블, 딕셔너리
      4. 파일 구조
      - B-트리 B+트리, 인덱싱 구조

      Swift 표준 라이브러리를 통해 다양한 자료구조를 제공. 가장 자주쓰이는 것은 배열, 딕셔너리, Set 등이 있다.

      iOS에서 자료구조를 선택할 때의 고려 사항
      1. 데이터 특성: 데이터가 순서가 중요한가? 중복이 허용되는가?
      2. 성능 요구사항: 삽입, 삭제, 검색 중 어떤 작업이 중요한가?
      3. 메모리 사용량: 메모리 제한 내에서 자료구조를 선택해야 함.
      4. 실제 사용 사례: 예: 네트워크 응답 데이터를 처리할 때는 딕셔너리(JSON 구조), 목록 데이터를 처리할 때는 배열.
  28. 배열, 연결 리스트, 스택, 큐의 특징과 iOS에서의 구현 방법을 설명해주세요.
  29. 해시 테이블의 개념과 충돌 해결 방법을 설명해주세요.
  30. 암호화와 보안의 기본 개념, 그리고 iOS 앱 보안을 위한 방안에 대해 설명해주세요.
  31. 가상 메모리(Virtual Memory)의 개념과 동작 원리에 대해 설명해주세요.
    • 더보기
      가상 메모리는 물리적 메모리 RAM의 한계를 극복하기 위하여 운영체제가 제공하는 메모리 관리 기법. 가상 메모리는 디스크 저장 공간의 일부를 메모리 처럼 활용하는 것.

      가상 메모리의 주요 개념
      1. 가상 주소(Virtual Address): 프로그램이 접근하는 주소는 실제 물리 메모리 주소가 아닌 가상 주소로 표현됩니다.
      2. 물리 주소(Physical Address): 가상 주소는 운영체제와 MMU(Memory Management Unit)에 의해 물리 주소로 변환되어 실제 메모리에 매핑됩니다.
      3. 페이지(Page): 가상 메모리는 일정 크기의 블록(페이지)으로 나뉘어 관리됩니다. 일반적으로 페이지 크기는 4KB 또는 16KB입니다.
      4. 페이지 테이블(Page Table): 가상 주소와 물리 주소 간 매핑 정보를 저장하는 데이터 구조.
      5. 스왑 공간(Swap Space): 디스크의 일부를 가상 메모리의 일부로 사용하여, 물리 메모리가 부족할 때 데이터를 디스크로 이동.

      가상 메모리의 동작 원리
      1. 가상 주소와 물리 주소 변환: 프로그램은 가상 주소를 통해 데이터를 요청.
       -> MMU(Memory Management Unit)는 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환.
      2. 페이지 요청과 페이지 폴트: 프로그램이 요청한 페이지가 물리 메모리에 없으면 페이지 폴트(Page Fault)가 발생.
       -> 페이지 폴트 발생 시, 운영체제는 요청한 페이지를 디스크의 스왑 공간에서 물리 메모리로 로드.
      3. 페이지 교체(Page Replacement): 물리 메모리가 가득 차면, 사용되지 않는 페이지를 선택해 스왑 공간으로 이동.
      4. 페이지 교체 알고리즘:
       - FIFO(First In, First Out): 가장 오래된 페이지를 교체.
       - LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 페이지를 교체.
       - LFU(Least Frequently Used): 사용 빈도가 가장 적은 페이지를 교체.
      5. 캐시 역할: 자주 사용하는 페이지를 물리 메모리에 유지하여 성능 향상.
  32. 데이터베이스의 종류와 iOS에서 주로 사용되는 데이터베이스에 대해 설명해주세요.
    • 더보기
      관계형(RDBMS) - MySQL, PostgreSQL, SQLite
      비관계형(NoSQL) - MongoDB, FB
      키-값 - Redis

      iOS에서 주로 사용하는 DB는 SQLite, CoreData(orm), realm
      경량형 db, 데이터 관리 프레임워크, 모바일 최적화 경량 db
  33. 싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요?
    • 더보기
      싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하고, 앱 전체에서 동일한 인스턴스를 공유할 수 있도록 보장하는 디자인 패턴. 
      목적 - 전역적으로 접근 가능한 객체를 제공, 하나의 인스턴스를 공유하여 리소스 낭비를 줄이고 일관된 상태를 유지.

      싱글톤 패턴의 특징
      1. 단일 인스턴스 보장: 애플리케이션 실행 동안 하나의 객체만 존재.
      2. 전역 접근 가능: 모든 코드에서 동일한 인스턴스에 접근.
      3. Lazy Initialization: 인스턴스가 처음 접근될 때 초기화. 필요할 때 인스턴스를 생성하여 메모리 낭비를 방지.
      4. Thread-Safe 보장: 멀티스레드 환경에서도 안전하게 "싱글톤 생성"하도록 설계.

      static을 사용하여 프로그램이 실행될 때 메모리에 로드되고, 전역적으로 관리된다.
      static let 이여서 데이터 영역 적재 Thread-safe를 보장받는다. 한 번 초기화 되면 불변한다.
      객체를 전역으로 관리하며, 상태를 공유할 수 있음

      싱글톤 패턴의 사용 사례
      1. 앱의 전역 상태 관리
      앱의 전역 상태를 관리할 때, 싱글톤 패턴을 활용하면 한 곳에서 상태를 쉽게 제어 가능.
      예: UIApplication.shared, UserDefaults.standard.

      2. 네트워크 관리
      네트워크 요청을 처리하는 URLSession 같은 객체는 싱글톤으로 구현하여 전역적으로 사용.

      3. 데이터베이스 연결
      데이터베이스 연결 객체는 앱 전역에서 하나만 존재해야 효율적.
      예: Core Data의 NSPersistentContainer.

      4. 설정 또는 구성 관리
      앱 설정, 테마, 또는 공통적으로 사용되는 데이터 관리에 유용.
      예: ConfigurationManager.

      5. 로그 관리
      로그 기록 객체는 앱 전체에서 한 곳에 기록되어야 함.


      let screen = UIScreen.main
      let userDefault = UserDefaults.standard
      let application = UIApplication.shared
      let fileManager = FileManager.default
      let notification = NotificationCenter.default

      장점
      - 한 번의 Instance만 생성하므로 메모리 낭비를 방지할 수 있음
      - Singleton Instance는 전역 Instance로 다른 클래스들과 자원 공유가 쉬움
      - DBCP(DataBase Connection Pool)처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에서 많이 사용 (쓰레드풀, 캐시, 대화상자, 사용자 설정, 레지스트리 설정, 로그 기록 객체등)

      단점
      - Singleton Instance가 너무 많은 일을 하거나, 많은 데이터를 공유시킬 경우 다른 클래스의 Instance들 간 결합도가 높아져  "개방=폐쇄" 원칙을 위배함 (객체 지향 설계 원칙 어긋남)
      - 따라서 수정과 테스트가 어려워짐 
  34. Swift에서 싱글톤 패턴을 구현할 때 멀티스레드에 대해서 어떻게 고려해야 하나요?
  35. Array와 List의 차이점이 무엇인지 설명해주세요.
    • 더보기
      메모리에 연속적 or 비연속

 

 


 

Apple UMA

 

https://www.crocus.co.kr/1366

Apple Silicon이 빠른 이유. SoC (UMA)

 

애플 M1 칩의 비밀 - Unified Memory, 통합 메모리

"통합 메모리"가 Apple의 M1 ARM Mac 속도를 높이는 방법 애플은 각각의 부품 컴포넌트가 (메모리 등) 어떻게 랩탑에서 실재하고 다른 컴포넌트와 상호 작용하는지에 대해 재정의 했는데요, 최근에

cpro95.tistory.com

SoC와 모바일 AP

 

CPU가 아니라 모바일 AP라 불리는 이유?

스마트폰은 이제 몸의 일부분이라고 해도 과언이 아닐 정도로 우리 생활에 밀접한 전자제품입니다

news.skhynix.co.kr


앱 SandBox

 

App Sandbox | Apple Developer Documentation

Restrict access to system resources and user data in macOS apps to contain damage if an app becomes compromised.

developer.apple.com

 

커널

 

Kernel Architecture Overview

Kernel Architecture Overview OS X provides many benefits to the Macintosh user and developer communities. These benefits include improved reliability and performance, enhanced networking features, an object-based system programming interface, and increased

developer.apple.com

 

알고리즘에서의 복잡도 + 빅오 표기법

 

[Swift] 복잡도 / Complexity

알고리즘의 성능을 나타내는 척도. 시간 복잡도와 공간 복잡도로 나눌 수 있다. - 시간 복잡도: 알고리즘을 위해 필요한 연산의 횟수 - 공간 복잡도: 알고리즘을 위해 필요한 메모리의 양 빅오 표

chanhhh.tistory.com