개발 기술 블로그

iOS 텍스트필드와 델리게이트 패턴

텍스트필드는 입력에 관한 세심한 관리가 필요하다. 동작에 따른 뷰컨트롤러와의 상호작용을 위해 델리게이트 패턴을 사용한다.

  • 유저가 입력을 시작할때(활성화 할것인지)
  • 유저 입력 시작되고나서
  • 입력내용 전체삭제 할지 말지
  • 키보드의 엔터키가 눌렸을때 (다음 동작을 허락할지)
  • 입력이 끝났을때

Docker Compose

  • kubernetes와 같이 오케스트레이션 및 컨테이너화된 애플리케이션 관리에 널리 사용되는 도구이다.
  • 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구이며 YAML 파일을 사용하여 애플리케이션 서비스를 수행한다.
  • CLI를 이용하여 모든 서비스 라이프 사이클을 관리한다.
  • YAML 코드를 통하여 여러개의 docker run 및 네트워크 볼륨을 생성 할 수 있다.
    • compose로 실행된 컨테이너들은 독립된 네트워크로 컨테이너 간 통신이 가능하다.
  1. Dockerfile 작성 — 배포하고자 하는 애플리케이션 환경 정의 (선택)
  2. docker-compose.yaml을 통해 하나 이상의 컨테이너 서비스를 실행할 수 있도록 서비스 정의
  3. docker compose up 명령으로 YAML에 정의된 서비스를 시작하고 실행한다.
  • 서로 다른 OS 환경이라도 동일한 환경 구성이 가능하다. (이식성)
  • 동일한 환경 사용으로 개발환경 이슈 발생시 팀간 소통이 쉽다.
  • 복잡한 환경도 YAML 코드로 스크립트화 할 수 있어 휴먼에러 감소 및 자동화가 가능하다.
  • docker compose CLI를 이용하여 쉽게 “멀티 컨테이너 애플리케이션"을 관리 할 수 있다.
  • 동시에 다수의 컨테이너 서비스를 수행하는 경우(MSA) 자원 활용률이 순간 높아질 수 있다.
  • docker container에 관한 기술 이해도가 필요하여 진입 장벽이 높다.
  • YAML? Yet Another Markup Language or YAML ain’t markup language (Text file)
  • 사람이 쉽게 읽을 수 있는 데이터 직렬화 언어(위 → 아래)로 구성파일 작성에 주로 사용된다.
  • 쉽고 이해할 수 있도록 설계되어 프로그래밍 언어로 사용되거나, 클라우드 자동환경 배포 도구(IaC 환경 구성)로 많이 사용된다 (AWS CloudFormation, RedHat Ansible 등)
항목YAMLJSON
정식명칭YAML ain’t markup languageJavaScript Object Notation
주석사용 가능사용 불가
한글/유니코드그대로 사용 가능멀티바이트 문자는 인코딩 수행
주 용도환경 구성 등의 설정 파일API 작성 시 사용

YAML 예시

Docker DNS

  • Docker의 기본 docker0 bridge driver에는 DNS가 포함되어 있지 않음 → Docker0 bridge driver는 작동 안함
  • /etc/hostname
  • /etc/hosts
  • /etc/resolv.conf

Docker Volume

  • 디렉토리와 파일을 mount 가능
  • “호스트파일 시스템 절대경로”:”컨테이너 내부경로” 를 직접 mount
  • 사전에 연결할 파일 또는 디렉토리의 권한대로 연결된다, 존재하지 않으면 root권한으로 생성된다
  • 사전정의 없이 컨테이너 실행 시 자동으로 생성되고, 컨테이너 제거시 Bind mount가 자동으로 헤제된다 이때 생성된 호스트 디렉토리 데이터(file)는 보존된다
  • Bind monun 방법은 데이터를 Host의 지정된 디렉토리에서 관리한다.