728x90
반응형

gRPC란 무엇일까? 이를 알기 위해선 RPC를 먼저 알아봐야 한다.

 

RPC (Remote Procedure Call)

 

_RPC 메커니즘_

RPC는 API를 구축하는 접근 방식이다.

클라이언트 - 서버 간 상호 작용 방식으로, 원격 제어를 위한 코딩 없이 다른 주소 공간에서 함수나 프로시저를 실행할 수 있게 하는 프로세스간 통신 기술이다. 즉, 로컬 위치 혹은 원격 위치에 있는 기능을 수행할 수 있게 하는 것이다.

정리하자면, 원격으로 특정 함수나 프로시져를 호출할 수 있게 하는 것이다.

  • 교환이 간단하다.
  • 내용이 가볍다.
  • 따라서 프로그래밍 부담이 적고 속도가 빠르다.

 

방법

  • 양쪽의 인터페이스 규약을 IDL등의 언어로 정의
  • 해당 프로그래밍 언어가 부를 수 있는 형태의 코드로 생성

 

함수 - 프로시져

  • 함수: 입력값(input)에 따른 출력값(output)을 내보내는 것.
  • 프로시져: __명령 단위가 수행하는 절차__에 집중한 개념. 따라서 출력값은 없을 수도 있으며, 함수보다 큰 단위의 실행에 사용된다.

 

IDL (Interface Definition Language)

RPC는 IDL을 이용한다. IDL이란 인터페이스 정의 언어로, 어느 한 언어게 국한되지 않게 인터페이스를 표현하는 방법

  • 서버 호출 규약 정의
  • 함수명, 인자, 반환값에 대한 데이터 타입 지정

 

gRPC (Google Remote Procedure Call)

 

gRPC는 구글에서 개발한 RPC 기반의 통신 방식이다.

 

_gRPC 메커니즘_

왼쪽 service가 서버, 오른쪽 client가 클라이언트이다.

그리고 각각 프로그래밍 언어가 적혀있는 것은 서로 다른 언어들끼리도 통신할 수 있다는 것을 예시로 든 것이다.

 

특징

  • JSON 혹은 XML이 아닌 프로토콜 버퍼 기반의 메시지를 바이너리 형식으로 직렬화 통신
  • 프로토콜 버퍼로 원하는 메시지 타입을 미리 정의
  • HTTP/2를 사용하기 때문에, 요청-응답을 넘어 스트리밍도 지원

 

프로토버퍼 (Proto Buffer)

gRPC에서 통신하기 위해 서비스 인터페이스를 정의하는 방법.

  • 프로토 파일로 정의된 메세지 포맷들을 이용하여 직렬화(Serialize)
  • 프로토 파일을 토대로 받은 메세지를 역직렬화

 

RPC vs REST API

  • REST API는 JSON 혹은 XML 형식을 사용하여 통신하기에 크기가 크고 따라서 상대적으로 느리다.
  • REST API 서버는 클라이언트와 **엔드포인트(End Point)**를 공유한다. 반면 gRPC는 클라이언트와 __함수__를 공유한다.
  • REST API는 HTTP 상태 코드로 표시하는 반면, gRPC는 에러 코드를 사용한다.

 

장점

  • 속도가 빠름
  • 엄격한 타입 검사
  • 이중 스트리밍

 

단점

  • 엄격한 타입 검사 때문에 주기적으로 변경하고 업데이트하는 것이 부담이 될 수도 있다.
  • 부족한 생태계: 비교적 최근 기술이기 때문에 환경이 국한되어 있고 자료가 부족하다.
728x90
반응형

'백엔드 Backend' 카테고리의 다른 글

[결합도/응집도] 결합도와 응집도란  (0) 2024.10.24
악성코드 종류  (0) 2024.10.16
SOLID 원칙  (0) 2024.10.08
비동기 Asynchronous 란?  (0) 2024.10.04
[백엔드] REST API 란?  (0) 2024.09.27
728x90
반응형

 

본 과정은 Ubuntu 20.04 를 기준으로 작성되었습니다.

도커 설치

 

운영체제 패키지 업데이트

 

sudo apt-get update

 

 

필수 요소 설치

 

sudo apt-get install \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg \
  lsb-release -y

 

 

도커 GPG 키 설치

 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

 

Stable 버전 도커 설치

 

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

 

도커 엔진 설치

 

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

 

 

버전 확인

 

docker version

 

 

도커 컴포즈는 뭔데?

 

도커 컴포즈는 컨테이너 이미지를 빌드하고, 컨테이너 설정을 미리 할 수 있는 설계도이다.

빌드할 도커 파일을 설정하고, 컨테이너 이름 및 공개할 포트 번호, 네트워크 등을 미리 설정할 수 있다.

 

도커 컴포즈 설치

 

sudo curl -L "https://github.com/docker/compose/releases/download/v2.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

 

 

실행 권한 부여

 

sudo chmod +x /usr/local/bin/docker-compose

 

 

버전 확인

 

docker-compose --version

 

728x90
반응형

'데브옵스 devOps > Docker' 카테고리의 다른 글

[DOCKER] 도커 port / expose 에 대해  (1) 2024.10.21
[DOCKER] 도커 네트워크에 관하여  (0) 2024.10.18
[DOCKER] 헬스체크  (2) 2024.10.03
[Docker] 도커란?  (1) 2024.09.25
[Docker] Private 도커 허브와 크레덴셜  (7) 2024.09.24
728x90
반응형

 

도커는 리눅스의 격리 기술을 활용한 기술이다.

 

프로세스란?

프로세스? 프로세스가 무엇인가. 여기서 시작해야 도커에 대한 설명을 할 수 있겠다. 우리가 주로 컴퓨터에 설치하는 것들을 ‘프로그램‘이라고 한다. 카카오톡, 알약, 팟플레이어 등… 모든것이 프로그램이라고 할 수 있다. 하지만 프로그램은 설치되었다고 해서 실행되는 것이 아니다. 실행을 시켜야 그 프로그램을 사용할 수 있다. 정말 러프하게 설명하자면 ‘실행되고 있는 프로그램을 프로세스‘라고 한다. 조금 전문적으로 설명하자면 CPU가 작업을 처리하기 위해 ‘메모리에 올라가 있는 프로그램‘이라고 말할 수 있겠다.

 

그래서 프로세스가 도커랑 뭐?

자 이제 프로세스가 도커와 무슨 상관일까? 도커를 러프하게 설명하자면, 프로세스를 구동하고 있는 가상 머신이다. 오.. 그렇구나. 그런데 가상머신 VM과 도커랑 무슨 차이가 있길래 구별을 하는거냐? 이것 역시 러프하게 얘기하자면, VM은 모든 가상 머신에 각각 OS가 설치되어있다. 내 컴퓨터에 가상 머신이 4개가 돌아가고 있다 가정한다면, 4개의 컴퓨터가 하나의 컴퓨터 안에서 돌아가고 있다고 생각해도 무방하다. 때문에 무겁다. 하지만 도커는 호스트의 OS를 공유하기 때문에 가상머신에 비해 비교적 빠르고 가볍다.

 

도커의 구성 요소?

자 이제 그러면 도커를 구성하는 요소들에 대해 설명하겠다. 도커는 크게 호스트, 컨테이너로 구성된다. 호스트란 가상 머신을 지칭하는 거로, OS가 구동된다. 컨테이너는 이 호스트에서 하나 이상의 프로세스를 구동하고 있는 단위이다. 우리의 컴퓨터랑 똑같이 생각하면 이해가 빠를 것이다. 컴퓨터를 켜서 배경화면에 와서(호스트 접속) 프로그램을 실행하면(컨테이너 구동) 프로그램을 사용할 수 있다. 물론 이 예시에서 클라이언트는 빠졌지만.

 

도커를 이용하는 방법

그렇다면 도커 컨테이너를 구동시키기 위하여 어떻게 해야 할 것인가? 우선 도커 컨테이너는 이미지라는 것을 가져와 프로세스를 구동시킨다. 방법은 두가지가 있다. 첫번째는 Dockerfile을 통해 현재 로컬 호스트의 소스코드와 구동 환경들을 정적으로 이미지 빌드하여 사용하는 것이다. 이 경우 커스텀한 이미지를 만들어 사용할 수 있다는 장점이 있다. 두번째는 레지스트리에서 가져오는 것이다. 레지스트리가 무엇인가? 쉽게 말하자면 이미지를 온라인상에 업로드 한 저장창고 라고 생각하면 쉽다. 가장 대표적으로 도커 공식 레지스트리 docker hub가 있다.

728x90
반응형
728x90
반응형

호화 방식에는 크게 두 가지가 존재한다.

양방향 암호화와 단방향 암호화가 바로 그것이다.

 

단방향 알고리즘

단방향 알고리즘은 암호화는 가능하지만 복호화는 불가능한 방식이다.

데이터의 진위여부는 확인하고 싶으나, 데이터 내부의 privacy는 지키고 싶을 때 사용

전자 서명에서 많이 사용한다.

대표적으로 HASH 방식에 기반한 알고리즘들이 있다.

 

MDC 방식: Modification Detection. 키 없음

- SHA, MD5, HAVAL, ...

 

MAC 방식 (메시지 인증, 디지털 서명): Message Authentication. 키 있음

- HVAC, NMAC, ...

 

양방향 알고리즘

양방향 알고리즘은 암호화가 가능하고 복호화도 가능한 방식이다.

크게 **대칭키 방식** **비대칭키 방식**이 있다.

 

대칭키 방식

 

_대칭키 방식_

데이터 암호 목적

암호화 키 == 복호화 키

 

Stream 방식

 

_Stream 방식_

1bit씩 연산. XOR 연산. H/W 구현 용이

예시

  • True Random: OTPad
  • Psuedo Random: RC4(PPTP, WEP, TKIP)

 

Block 방식

 

_Block 방식_

2bit 이상 묶음 연산. S/W 구현 용이

예시

  • Festel: DES
  • SPN: **AES**
  • 기타: IDEA

 

단점

  1. 키가 탈취되었을 때, 모든 정보가 털린다.
  2. 안전하게 사용하기 위해서는 모든 사용자가 서로 다른 키를 가져야 하므로 키 관리를 어떻게 할 것인가? 라는 문제에 대한 고민 필요.
  3. 키를 안전하게 주고 받는 방법에 대한 고민 필요.

 

비대칭키 방식

 

_공개키 방식_

 

대칭키 교환 용도

암호화 키 != 복호화 키

 

예시

  1. client가 private key/public key를 암호화하여 server에 전달
  2. server가 전달받은 public key로 평문을 암호화하여 client에게 전달
  3. server로부터 전달받은 암호를 client가 가진 private key로 복호화

 

종류

  • 인수분해방식: RSA(디지털서명)
  • 이산대수: DH(키교환), DSA(디지털서명)
  • 타원곡선방정식: ECC

 

참고 링크

728x90
반응형

'백엔드 Backend > 암호화' 카테고리의 다른 글

[암호화] 암호화 - 1  (1) 2024.09.24
728x90
반응형

보안을 위해서라면 암호화는 중요하다.

 

해시 계열

 

해시(Hash)

해시는 암호화 과정이라고 하기에는 어렵고 보안이 이미 뚫린 바가 있으나,

암호화 기법과 함께 사용하여 시너지를 발휘할 수 있다.

 

  •  임의의 크기를 가진 데이터를 하나의 고정된 데이터로 변환시킨 것
  • 예시: "12345" -> 고정 길이 해시 값

 

MD5 (Message Digest algorithm 5)

RFC1321로 지정된 128비트의 해시 함수.

본 데이터가 다를지라도 같은 해시 값이 생성(충돌) 되고 이미 보안이 뚫린 바가 있기에, 보안 관련 용도로는 사용하지 않음.

  • 원프로그램 / 파일 무결성 검사할 때 사용
  • 32개의 16진수로 이루어진 해시 값 생성 (16^32)

 

SHA (Secure Hash Algorithm)

서로 관련된 암호학적 해시 함수들의 모음.

  • TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜에서 채택
  • 원본 데이터의 작은 변화에도 해시 값의 변동이 매우 큼
  • SHA-2 계열 알고리즘은 현재까지 많이 쓰이고,SHA-256 / SHA-512가 널리 쓰임

 

 

암호화 알고리즘

 

Adaptive Key Derivation Dunction

  • 다이제스트(해시화된 데이터)를 생성할 때 **Salting**과 **Key-Stretching**을 반복하여 공격자가 유추할 수 없게 보안의 강도를 선택할 수 있는 함수
  • Salting: 해시 함수 실행 전 원문에 임의의 문자를 덧붙여 보안성을 높이는 기법
  • Key-Stretching: 입력한 패스워드의 다이제스트를 생성하고, 생성된 다이제스트를 입력값으로 하여 다이제스트를 생성하는 것을 반복하는 기법

 

PBKDF2 (Password-Based Key Derivation Function)

해시 함수의 컨테이너 역할을 하는 함수

  • 검증된 해시함수만을 사용
  • 해시함수와 salt를 적용하여 해시함수의 반복 횟수를 지정하여 암호화
  • 가장 많이 사용되는 ISO 표준에 적합한 알고리즘

 

Bcrypt

패스워드 해싱 함수 (Blowfish 암호 기반)

  • 현재까지 가장 강력한 암호화 알고리즘
  • 해시화 반복횟수를 늘려 연산속도를 늦출 수 있어, 연산 능력이 강화된 Brute-Force 공격에 대비 가능

 

Blowfish 알고리즘

- 32비트 ~ 448비트의 가변길이의 키를 이용하는 비밀키 블록암호

 

Brute-Force

- 랜덤한 값을 무차별적으로 대입하여 해시 알고리즘의 원본 데이터를 알아내는 공격 기법

 

Scrypt

PBKDF2와 유사한 함수

  • 다이제스를 생성할 때 메모리 오버헤드를 갖도록 설계되어 Brute-Force 시도 시 병렬화 처리 어려움
  • Bcrypt보다 더 경쟁력 있다고 평가 됨

 

Seed

한국인터넷진흥원(KISA)에서 개발한 128비트의 대칭키 블록 암호 알고리즘

728x90
반응형

'백엔드 Backend > 암호화' 카테고리의 다른 글

[암호화] 암호화 - 2  (0) 2024.09.25
728x90
반응형

 

본 글은 Ubuntu 20.04 를 기준으로 작성되었습니다.

 

도커 이미지 허브

도커 이미지는 빌드되어 정적인 상태로 관리된다. 때문에 저장장치에 이미지를 업로드하여 url을 통해 내려 받아 와 사용할 수 있다. 이른바 CI/CD 의 일종으로 볼 수 있을 것 같다. 그런데 개인적인 프로젝트나, 회사 내부 프로젝트일 경우 이미지는 내부에서 관리되어야 하고 유출되면 곤란하다. 때문에 도커 이미지 레지스트리 관리 오픈소스 툴인 harbor 를 이용해 이미지를 관리해 왔다.

 

보안

이미지를 업로드한 저장소에 접근하기 위해선 저장소 접근 권한을 통해 로그인을 해야 한다. 그런데 리눅스 기반의 운영체제에서 (다른 운영체제는 잘 모르겠다) docker login 명령어를 통해 접근하려고 하면, 로컬에 해당 민감정보가 저장되어 버린다는 끔찍한 문제점이 존재한다. 때문에 도커에서도 공식적으로 이러한 방식이 아닌 credential을 이용해 접근하라고 권고하고 있다.

 

Docker Credential

- [공식 레포지토리](https://github.com/docker/docker-credential-helpers

Credential은 로컬에 그대로 저장하는 것이 아닌, 암호화 시키고 사용할 때 인증을 해서 접근 권한을 가져와 사용할 수 있게 해 준다. 어떤 능력자 분이 설치하는 스크립트를 공유해 주셔서 이를 공유해본다.

 

- [스크립트 원문](https://geoffhudik.com/tech/2020/09/15/docker-pass-credential-helper-on-ubuntu/)

#!/bin/sh
# Sets up a docker credential helper so docker login credentials are not stored encoded in base64 plain text.
# Uses the pass secret service as the credentials store.
#
# If previously logged in w/o cred helper, docker logout <registry> under each user or remove ~/.docker/config.json.
#
# For Swarm use just run once on a manager.
# Script written for use on Ubuntu.
# Run elevated logged in as the target user.
# To remove cred helper:
#   - delete /usr/local/bin/docker-credential-pass
#   - remove '{ "credsStore": "pass" }' from ~/.docker/config.json
# Ensure executable in git:
# git update-index --chmod=+x path/docker-credentials.sh
if ! [ $(id -u) = 0 ]; then
   echo "This script must be run as root"
   exit 1
fi
# Install dependencies - jq more optional for existing varying configuration in ~/.docker/config.json.
apt update && apt-get -y install gnupg2 pass rng-tools jq
# Check for later releases at https://github.com/docker/docker-credential-helpers/releases
version="v0.6.3"
archive="docker-credential-pass-$version-amd64.tar.gz"
url="https://github.com/docker/docker-credential-helpers/releases/download/$version/$archive"
# Download cred helper, unpack, make executable, move it where it'll be found
wget $url \
    && tar -xf $archive \
    && chmod +x docker-credential-pass \
    && mv -f docker-credential-pass /usr/local/bin/
# Done with the archive
rm -f $archive
config_path=~/.docker
config_filename=$config_path/config.json
# Could assume config.json isn't there or overwrite regardless and not use jq (or sed etc.)
# echo '{ "credsStore": "pass" }' > $config_filename
if [ ! -f $config_filename ]
then
    if [ ! -d $config_path ]
    then
        mkdir -p $config_path
    fi
    # Create default docker config file if it doesn't exist (never logged in etc.). Empty is fine currently.
    cat > $config_filename <<EOL
{
}
EOL
    echo "$config_filename created with defaults"
else
    echo "$config_filename already exists"
fi
# Whether config is new or existing, read into variable for easier file redirection (cat > truncate timing)
config_json=`cat $config_filename`
if [ -z "$config_json" ]; then
    # Empty file will prevent jq from working
    $config_json="{}"
fi
# Update Docker config to set the credential store. Used sed before but messy / edge cases.
echo "$config_json" | jq --arg credsStore pass '. + {credsStore: $credsStore}' > $config_filename
# Output / verify contents
echo "$config_filename:"
cat $config_filename | jq
# Help with entropy to prevent gpg2 full key generation hang
# Feeds data from a random number generator to the kernel's random number entropy pool
rngd -r /dev/urandom
# To cleanup extras from multiple runs: gpg --delete-secret-key <key-id>; gpg --delete-key <key-id>
echo "Generating GPG key, accept defaults but consider key size to 2048, supply user info"
gpg2 --full-generate-key
echo "Adjusting permissions"
sudo chown -R $USER:$USER ~/.gnupg
sudo find ~/.gnupg -type d -exec chmod 700 {} \;
sudo find ~/.gnupg -type f -exec chmod 600 {} \;
# List keys
gpg2 -k
# Grab target key
key=$(gpg2 --list-secret-keys | grep uid -B 1 | head -n 1 | sed 's/^ *//g')
echo "Initializing pass with key $key"
pass init $key
# Image can't be found when Swarm attempts to pull later if a pass phrase is here.
echo "Do not set a passphrase for this step (*IMPORTANT*)"
pass insert docker-credential-helpers/docker-pass-initialized-check
# Optionally show password but mask ***
# pass show docker-credential-helpers/docker-pass-initialized-check | sed -e 's/\(.\)/\*/g'
echo "Docker credential password list (empty initially):"
docker-credential-pass list
echo "Done. Ready to test. Run: docker login <registry>"
echo "After login run: docker-credential-pass list; cat ~/.docker/config.json; pass show"

 

도메인 등록

도커 로그인을 진행해서 도메인을 등록한다.

sudo docker login <docker hub | registry address>
>>username:
>>password:
>> succeed

 

리스트 업

sudo docker-credential-pass list
>> {"example.com":"username"}

 

활성화

아래 명령어를 입력하면 위에서 인증 키를 생성할 때 입력한 패스워드를 입력할 수 있는 창이 뜰 것이다. 이후에 저장소에 접근하면 정상적으로 가능해진다.

sudo pass ls docker-credential-helpers/docker-pass-initialized-check
728x90
반응형

'데브옵스 devOps > Docker' 카테고리의 다른 글

[DOCKER] 도커 port / expose 에 대해  (1) 2024.10.21
[DOCKER] 도커 네트워크에 관하여  (0) 2024.10.18
[DOCKER] 헬스체크  (2) 2024.10.03
[Docker] 도커 및 도커 컴포즈 설치  (0) 2024.09.25
[Docker] 도커란?  (1) 2024.09.25
728x90
반응형

스프링(Spring) 프레임워크

  • 엔터 프라이즈 어플리케이션 개발을 위해 만들어진 경량 프레임워크
  • 특징
    • POJO (Plain Old Java Object)
    • 모듈식 프레임워크
    • 높은 확장성, 범용성, 광범위한 생태계
    • 경량급 오픈소스 프레임워크

POJO Plain Old Java Object

  • POJO: 특정 기술에 종속되지 않는 순수 자바 객체
  • 모든 스프링 어플리케이션은 POJO 객체와 스프링 컨테이너를 포함한다.
  • POJO 클래스를 개발하고, 스프링 컨테이너는 이 POJO 객체들을 관리한다.
    • 스프링 컨테이너는 이 POJO 객체들의 생성, 의존성 주입, 생명주기를 관리한다.
  • 스프링 컨테이너가 관리하는 객체를 Bean 이라고 한다.
  • 스프링 컨테이너: o.s.Context.ApplicationContext 인터페이스를 구현한 구현 클래스

스프링 프레임워크의 세가지 핵심 요소

  • 의존성 주입 (Depenency Injection)
    • 런타임 시점에 의존성을 주입함으로써, 객체간 종속성을 유동적으로 하기 위함
  • 관점 지향 프로그래밍 (AOP: Aespect Oriented Programming)
    • 기능적 요구사항과 비기능적 요구사항 분리
  • 서비스 추상화 (Service Abstraction)

용어 정리

  • Bean: 스프링 컨테이너가 관리하는 객체
  • POJO: 특정 기술에 종속되지 않은 순수 자바 객체
  • 도메인: 소프트웨어 상에서 해결해야 할 비즈니스 영역의 문제
  • 기능적 요구 사항: 사용자에게 직접 서비스하는 기능을 정리한 것
  • 비기능적 요구 사항: 서비스 기능은 아니고, 개발에 필요한 기능을 정리한 것
    • 예시: 로그 남기기, RDBMS 트랜잭션 시작 & 커밋하는 코드
    • 다시 말하자면, 사용자가 알 수 없는 내용
728x90
반응형
728x90
반응형

오랜만에 돌아왔습니다~

최근에 개발자용으로 풀린 ios11을 폰에 올려봤습니다. 매번 남들보다 먼저 올리는 것 같네요.

우선 결론을 말씀드리자면 대만족입니다. 물론 아직 데모버전이라 아직 조금 불안정한 부분은 있지만 추가된 기능들이 그러한 부분들을 모두 커버하네요.




첫째. 아이콘이 바꼈습니다.​


상당히 깔끔해졌습니다. 그리고 예쁘네요 ㅋㅋ
앱스토어 레이아웃과 디자인도 바꼇습니다.





두번째. 화면 아래에서 올리는 부분의 레이아웃이 바꼈는데 너무 편해졌습니다.


특히 제 폰은 5se라 3d터치가 안되서 셀룰러 데이터를 끄러 설정청까지 들어가기가 참 불편했습니다. 그런데 이제 화면을 아래에서 올리면 와이파이 블루투스 셀룰러데이터 등 전부를 컨트롤할 수 있게 되었습니다.




셋째. 메모에 많은 기능이 추가되었습니다. 메모 어플에서 표를 작성하는 것도 가능해졌습니다.


신기하죠.
그리고 거의 워드에 버금가는 글 작성 기능도 생겼습니다.


참 마음에 드네요.




넷째. 기본 기능으로 화면을 녹화할 수 있게 되었네요.


레이아웃에서 동그란 부분을 꾸윽 누르고 있으면 설정에서 마이크를 키고 끌 수도 있습니다.

어래 화면 녹화했는데 모바일로 작성해서 그런가 동영상 첨부가 안되네요. 컴퓨터로 가능할 때 첨가하겠습니다.

추가로 예전에는 화면을 위에서 내리면 상단바가 내려왔지만 이제는 잠금화면이 내려오네요. 이거는 좋은지 아직 잘 모르겠습니다.

그리고 가장 마음에 드는 기능은드디어!!! 애플의 기본 사진 어플에서 gif. 즉 ​​​​​짤이 재생됩니다!!! 그동안 짤을 보기 위해선 gif뷰어 어플을 받아서 따로 봐야하지 않았습니까?! 이제 저희는 자유입니다!!


아직 더 알아봐야 할 게 많은 것 같습니다.
그래도 이번 Ios11 많은 것들이 추가된 것 같습니다. (애플이 드디어 일을 한다!!) 정식버전의 런칭이 기대되네요.

​​

728x90
반응형

+ Recent posts