Skip to content

Boost‐SwiftUI‐2024.11.12(화).md

유정주 JeongJu Yu edited this page Nov 12, 2024 · 4 revisions

원본 텍스트 파일

Boost‐SwiftUI‐2024.11.12(화).txt


스터디 시간 및 참여자

  • 2024.11.12 화 오후 9:02 ・ 98분 52초
  • 권승용 유정주 윤동주 이준복 이창준 홍승현
  • 클로버노트를 이용해 회의 내용을 기록하고, Claude를 이용해 요약, 편집했습니다.

[1] WWDC 세션 리뷰와 매크로 관련 토론

WWDC 세션 참석 후기

  • 참석자들이 WWDC 세션을 듣고 각자 다른 인상을 받음
    • 한 참석자는 실무에서 직접 사용하지 않아 크게 와닿지 않았다고 언급
    • CG(Core Graphics) 관련 내용이 재미있었다는 의견 제시
  • 새로운 개념들에 대한 첫 인상
    • 디클레어 뷰(Declare View)와 리졸브(Resolve) 개념을 처음 접함
    • 설명을 위해 의도적으로 키워드를 붙인 듯한 느낌이 있다는 의견

매크로 엔트리 관련 심층 논의

  • SwiftUI 빈센트의 유튜브 영상 참고
    • 13일 전에 업로드된 영상에서 매크로 엔트리 관련 내용을 다룸
    • 이를 통해 매크로 엔트리의 도입 배경을 이해
  • Environment 관련 개선사항
    • 기존 방식:
      • 구조체로 Environment Key 준수
      • Environment Values Extension 작성 필요
      • 상대적으로 복잡한 구현 과정
    • 매크로 사용 시:
      • 간단하게 구현 가능
      • 확장성이 좋음
      • 코드 작성량 감소

[2] 인터페이스 분리 원칙(ISP) 관련 토론

ISP의 기본 개념과 의미

  • 정의: 인터페이스를 너무 크게 잡지 말아야 한다는 원칙
  • 목적:
    • 클라이언트가 불필요한 인터페이스에 의존하지 않도록 함
    • 인터페이스를 작은 단위로 분리하여 유연성 확보

프로그래밍 언어별 ISP 구현 차이

  • Java의 경우:
    • 인터페이스라는 명확한 개념이 존재
    • 언어 차원에서 인터페이스 지원
  • Swift의 경우:
    • 프로토콜을 통해 ISP 구현
    • 프로토콜 합성을 통한 유연한 구현 가능
    • 작은 프로토콜들을 조합하여 사용 권장

추상화와 ISP의 관계

  • 추상화 가능한 객체는 모두 인터페이스로 볼 수 있다는 의견 제시
  • 객체지향 설계 원칙과의 연관성 논의
  • 실제 개발에서의 적용 방안 토론

프로토콜 사용의 실제적 이점

  • 코드의 모듈화 향상
  • 유지보수성 개선
  • 테스트 용이성 증가
  • 재사용성 향상

[3] 클린 아키텍처 원과 계층 구조 논의

클린 아키텍처 다이어그램 해석

  • 바깥쪽 원의 의미
    • UI와 서버가 외부 세계와 연결되는 지점
    • 의미론적으로는 맞지만 개발자 입장에서는 불확실한 표현이라는 의견
  • 계층 구조의 흐름
    • Entity부터 UI까지의 데이터 흐름 설명
    • 실제 구현시 고려사항 논의

[4] 패키지 분리와 모듈화에 대한 논의

패키지 분리 전략

  • API를 통해 데이터를 받아오는 패키지의 구조화 논의
    • 다른 서비스의 API를 처리하는 전용 패키지 필요성
    • 메인 프로젝트에서의 데이터 처리 방식 고민
  • DTO/VO 변환 관련 고려사항
    • 패키지에서 DTO를 VO로 변환하는 작업의 중복성 문제
    • 각 계층에서의 데이터 변환 필요성 검토

패키지 분리의 장단점

  • 장점:
    • 모듈 간 의존성 분리
    • 코드 재사용성 향상
    • 유지보수성 개선
  • 단점:
    • DTO/VO 변환 작업 중복 가능성
    • 개발 복잡도 증가
    • 팀 내 커뮤니케이션 비용 증가

실제 적용 사례와 고민점

  • 기존 프로젝트에서 패키지 분리 경험 공유
    • 하나의 프로젝트를 패키지로 분리하는 과정의 어려움
    • 팀원들 간의 협업 방식 변화
  • 패키지 분리 결정 기준
    • 프로젝트 규모
    • 팀 구성원의 역량
    • 유지보수 용이성
    • 재사용 가능성

코드 구조화 관련 조언

  • 프로젝트 초기 단계에서는 작은 규모로 시작
  • 필요에 따라 점진적으로 모듈화 진행
  • 팀의 현재 상황과 리소스를 고려한 결정 필요
  • 데드라인과 실용성 사이의 균형 고려

경험자의 조언

  • 실무에서의 모듈화 경험 공유
  • 신입/주니어 개발자의 성장 관점에서의 조언
    • 기술적 선택의 이유를 명확히 할 것
    • 현재와 미래의 트레이드오프 고려
    • 실무 경험을 통한 판단력 향상
  • 면접 상황에서의 활용 방안
    • 모듈화 경험을 구체적 사례로 설명
    • 의사결정 과정과 고민점 공유
    • 기술적 성장 과정 표현

[5] 개발자 면접 경험 공유

면접에서 다룬 주요 기술 질문들

  • Task와 Task.detached의 차이점
    • 캔슬 전파 방식의 차이
    • Task Local Values 공유 여부
  • 구조체와 메모리 관리
    • Reference Counting 관련 질문
    • 메모리 해제 메커니즘

면접 준비와 대응 전략

  • 스터디에서 다룬 내용의 중요성
  • 실제 면접 상황에서의 답변 방식
  • 예상치 못한 질문에 대한 대처 방법

[6] SDK 개발 관련 네트워크 안정성 논의

네트워크 안정성 요구사항

  • 데이터 전송 시 안정성 확보 필요
    • 오류 발생 시 리트라이 처리
    • 불안정한 네트워크 상황에서의 데이터 전송 보장
    • 백그라운드 상태에서의 처리 방안

네트워크 성능 개선 방안

  • 두 가지 주요 접근 방식:
    • 타임아웃 시간 조정
    • 데이터 객체 크기 최적화
  • 백엔드 연동 고려사항:
    • API 분리 시 비용 대비 효과 분석
    • DB 구조 변경 필요성 검토

테스트 전략

  • 다양한 테스트 방법 제안:
    • 코드 레벨 테스트
    • 시뮬레이터를 통한 네트워크 상태 테스트
      • 3G/LTE 전환 상황 테스트
      • Wi-Fi/셀룰러 전환 테스트
  • 실제 사용 환경 시뮬레이션:
    • 엘리베이터 상황 등 극단적 케이스 테스트
    • 앱 백그라운드 전환 시 동작 확인

SDK 사용자 고려사항

  • 사용자 커스터마이즈 옵션 제공:
    • 타임아웃 설정 가능하도록 구현
    • 지역별 네트워크 환경에 따른 최적화 옵션
  • 글로벌 서비스 고려사항:
    • 국가별 네트워크 환경 차이 대응
    • 유연한 설정 옵션 제공

[7] 디자인 시스템 패키지 관련 질문

폰트 등록 관련 이슈

  • 폰트 레지스터 함수 구현 방식
    • 중복 등록 문제
    • 로그 출력 이슈 처리
  • 실제 사용 시 고려사항:
    • 다중 호출 허용 여부
    • 에러 처리 방식

로컬라이제이션 관리

  • 패키지별 독립적인 로컬라이제이션 파일 관리
    • 각 패키지에서 사용되는 문자열만 포함
    • 중복 방지를 위한 전략
  • 구현 방식:
    • 패키지별 독립적인 문자열 관리
    • 네임스페이스 분리

Reference Counting 관련 설명

  • 스태틱 함수와 인스턴스 차이
    • 레퍼런스 카운팅이 필요없는 경우
    • 타입 함수 접근 방식
  • 메모리 관리 관점:
    • 인스턴스 생성 없이 코드 레벨 접근
    • 스태틱 함수의 특성 이해
Clone this wiki locally