요즘 코로나라 앱에서 QR을 많이 사용하는데  QR Code 만드는 법을 봅시다.

 

www.npmjs.com/package/react-native-qrcode-svg

 

react-native-qrcode-svg

A QR Code generator for React Native based on react-native-svg and javascript-qrcode.

www.npmjs.com

위 라이브러리를 사용했습니다.

 

안드로이드

 

ios

 

 

yarn add react-native-svg react-native-qrcode-svg

yarn add react-native-svg react-native-qrcode-svg

 

npm i -S react-native-svg react-native-qrcode-svg

npm i -S react-native-svg react-native-qrcode-svg

으로 라이브러리를 install합니다.

 

react-native version이 <=0.59.X 라면 link를 꼭 해줘야합니다.

 

react-native link react-native-svg

react-native link react-native-svg

 

도큐먼트에 있는 example Code 들 입니다.

 

import QRCode from 'react-native-qrcode-svg';

// Simple usage, defaults for all but the value
render() {
  return (
    <QRCode
      value="http://awesome.link.qr"
    />
  );
};

 

// 30px logo from base64 string with transparent background
render() {
  let base64Logo = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAA..';
  return (
    <QRCode
      value="Just some string value"
      logo={{uri: base64Logo}}
      logoSize={30}
      logoBackgroundColor='transparent'
    />
  );
};

 

// 20% (default) sized logo from local file string with white logo backdrop
render() {
  let logoFromFile = require('../assets/logo.png');
  return (
    <QRCode
      value="Just some string value"
      logo={logoFromFile}
    />
  );
};

 

// get base64 string encode of the qrcode (currently logo is not included)
getDataURL() {
  this.svg.toDataURL(this.callback);
}

callback(dataURL) {
  console.log(dataURL);
}

render() {
  return (
    <QRCode
      value="Just some string value"
      getRef={(c) => (this.svg = c)}
    />
  );
}

 

등 다양한 형태로 쓸 수 있습니다.

저는 이렇게 사용했습니다.

 

 import QRCode from 'react-native-qrcode-svg';
 
 
 <View style={styles.qrCodeStyle}>
   <View>
     <QRCode
       size= {200}			  // 로고 사이즈 조절
       value={data.address}   // 실제 연결 될 주소 
       logoSize={300}		  
       logoBackgroundColor='transparent'
     />
   </View>
 </View>
 
 

그러면 QR Code가 나옵니다.

Props

NameDefaultDescription

size  - 렌더링 된 이미지의 크기(픽셀) 100 Size of rendered image in pixels
value - QR 코드 값 'this is a QR code' String Value of the QR code. Can also accept an array of segments as defined in Manual mode. Ex. [{ data: 'ABCDEFG', mode: 'alphanumeric' }, { data: '0123456', mode: 'numeric' }, { data: [253,254,255], mode: 'byte' }]
color - QR 코드의 색상 'black' Color of the QR code
backgroundColor - 배경색 'white' Color of the background
enableLinearGradient - Gradient 활성화, 비활성화 false enables or disables linear gradient
linearGradient - 선형 Gradient 만드는데 사용되는 2개의 RGB 색상 배열 ['rgb(255,0,0)','rgb(0,255,255)'] array of 2 rgb colors used to create the linear gradient
gradientDirection - 선형 Gradient의
방향
[170,0,0,0] the direction of the linear gradient
logo - 이미지 소스 개체 null Image source object. Ex. {uri: 'base64string'} or {require('pathToImage')}
logoSize - 각인된 로고의 크기 20% of size Size of the imprinted logo. Bigger logo = less error correction in QR code
logoBackgroundColor - 배경색 backgroundColor The logo gets a filled quadratic background with this color. Use 'transparent' if your logo already has its own backdrop.
logoMargin - margin 값 2 logo's distance to its wrapper
logoBorderRadius - Radius 값 0 the border-radius of logo image (Android is not supported)
quietZone - qr주변의 영역 0 quiet zone around the qr in pixels (useful when saving image to gallery)
getRef - svg참조 가져오기 null Get SVG ref for further usage
ecl - 오류 수정 수준 'M' Error correction level
onError(error) - 생성중 예외 발생 시 콜백 발생 undefined Callback fired when exception happened during the code generating process

도큐 먼트에 있는 이 부분을 잘 사용하면 custom 도 잘 될 것 같습니다 !

 

React-native 생체인식 적용하기

www.npmjs.com/package/react-native-touch-id

 

react-native-touch-id

React Native authentication with the native Touch ID popup.

www.npmjs.com

위에 라이브 러리를 사용

Install

npm i --save react-native-touch-id

npm i --save react-native-touch-id

or

yarn add react-native-touch-id

yarn add react-native-touch-id

Android

react-native version < 0.60 이면

 

react-native link react-native-touch-id

react-native link react-native-touch-id

 

으로 link 해준다.

AndroidManifest.xml

AndroidManifest.xml에

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

추가 -> 핸드폰 지문인식 권한 추가

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

코드

import TouchID from 'react-native-touch-id'; 


const optionalConfigObject = 
{   title: 'Authentication Required',  // 타이틀   
    imageColor: '#e00606',  // 지문인식 기본 컬러   
    imageErrorColor: '#ff0000',  // 지문인식 실패 컬러   
    sensorDescription: 'Touch sensor',  // 터치센서 
    description Text 변경   sensorErrorDescription: 'Failed', // 터치센서 Fail Text 변경   
    cancelText: 'Cancel', // Android // 취소버튼 Text 변경   
    fallbackLabel: 'Show Passcode',  // ios ( 비어있으면 레이블이 숨겨짐 )   
    unifiedErrors: false, // 통합 오류 메시지 사용 ( 기본값 false)   
    passcodeFallback: false  // ios-faceId / touch 사용할 수 없는 경우 기기비밀번호 사용여부 
    } 
    
    TouchID.authenticate('description', optionalConfigObject)
    .then(success => {     
    console.log("지문인식 성공"); // 지문인식 성공했을 때 코드를 넣으면 됨   
    })   	
    .catch(error => {     	
    console.log("지문인식 실패"); // 실패했을 때 코드를 넣으면 됨.   
    });

isSupported ()

import TouchID from 'react-native-touch-id'; 

const optionalConfigObject = {  
	unifiedErrors: false  // 통합 오류 메시지 사용 ( 기본값 false )
	passcodeFallback: false // true가 전달되면 기기가 touch id / face id 등에 등록되지 않은
    경우 isSupported에서 오류를 반환하도록 허용합니다. 
    그렇지 않으면 사용자가 등록되지 않은 경우에도 지원되는 방법 만 알려줍니다.(기본값 false) 
    } 
    
    
TouchID.isSupported(optionalConfigObject).then(biometryType => {
    // Success code 
    if (biometryType === 'FaceID'){         
    	console.log('faceId 지원')     
    } 
    else {     
    	console.log('TouchID 지원.');     
    }  
    })
    .catch(error => {
    	// Failure code
    	console.log(error); // 실패했을 때 에러 로그 찍어보기  
    });

 

 

이렇게 적용을 해보았습니다.

실제 s10에 적용한 생체인증 

 

객체지향 프로그래밍 ?

객체지향 프로그래밍 OOP 란 프로그램을 어떻게 설계하는지에 대한 방법론 중 하나이다.

단순히 데이터와 처리 방법으로 나누는 것이 아니라 수많은 객체라는 단위로 나누고 상호작용으로 서술하는 방식이다.

 

객체지향 프로그래밍 특성 4가지

1.추상화

  • 인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것 

2. 다형성

  • 어떤 변수,메소드가 상황에 따라 다른 결과를 내는 것

* 오버로딩(Overloading) : 하나의 클래스에서 메소드의 이름이 같지만, 파라메터가 다른 것* 오버라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의하여 코드의 재사용성을 높임

3. 캡슐화

  • 실제로 구현 부분을 외부에 드러나지 않도록 하는 것
  • 변수와 메소드를 하나로 묶음
  • 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근
  • ex) public, private, protected
    public : 클래스 외부에서 접근 가능
    private : 클래스 내부에서만 접근 가능
    protected : 상속받은 자식 클래스에서만 접근 가능

 

4.상속성

  • 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
  • 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
  • 상속은 캡슐화를 유지, 클래스의 재사용이 용이하도록 해 준다.

객체지향의 5원칙 ( SOLID )

< CLean Code >의 저자, 로버트 마틴이 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 패더스가 SOLID라는 약어로 소개한 것!

S (SRP : Single Responsibility Principle)

한 클래스는 하나의 책임만 가져야 한다.

O (OCP : Open/Closed Principle)

확장에는 열려(Open) 있으나, 변경에는 닫혀(Closed)있어야 한다.

L (LSP : Liskov’s Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

I (ISP : Interface Segregation Principle)

특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

D (DIP : ependency Inversion Principle)

추상화에 의존한다. 구체화에 의존하면 안된다.

 

출처 : velog.io/@ygh7687/OOP%EC%9D%98-5%EC%9B%90%EC%B9%99%EA%B3%BC-4%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%84%B1

 

📚OOP의 5원칙과 4가지 특성

Object-Oriented Programming 의 줄임말객체 지향 프로그래밍 방식입력을 받아 명시된 순서대로만 처리하고 결과를 내는 방식절차적 프로그래밍 방식의 개선된 형태프로그램을 함수단위로 나누고 함수

velog.io

 

웹 개발자로써 "브라우저 렌더링 과정을 말해주세요!" 라고 질문을 받았을 때 답변을 확실하게 못하는 개발자라고 생각해서 하나하나 적어봅니다.

 

렌더링?

우리가 흔히 렌더링 렌더링 하는 렌더링은 HTML, CSS, JS 등을 브라우저에서 보여주는 과정이라고 생각하면 됩니다.

브라우저 별로 렌더링

출처: https://en.wikipedia.org/wiki/Comparison_of_browser_engines

엔진이 다릅니다 !  구글 -> 블링크, 사파리 -> 웹킷 이라고 적혀있네요!

 

그럼 렌더링과정은? 

1. HTML, CSS 를 다운로드 합니다.

2. 다운받은 html, css => Object Model로 만듭니다.

HTML => DOM , CSS => CSSOM

HTML => DOM 으로 DOM (Document Object Model)

 

CSS => CSSOM( CSS Object Model)
DOM 과 CSSOM 이용해서 Render Tree를 생성합니다.

모든 요소들이 다 화면에 표현되는 건 아닙니다.

 

3. 레이아웃

*뷰포트(Viewport) 내에서 각 노드들의 정확한 위치와 크기를 계산 합니다.
즉 , 브라우저 화면의 어떤위치에 어떤크기로 출력될지 계산 하는 단계라고 할수 있습니다.

 

*뷰포트(Viewport) 그래픽이 표시되는 브라우저의 영역 , 크기 (사진 참조)
뷰포트는 모바일의 경우 디스플레이의 크기 , PC의 경우 브라우저 창의 크기에 따라 달라집니다.

 

속성은 px보다는 %로 주는게 좋다고 생각합니다.

 

4. Paint

Layout 계산이 완료 되면 요소들을 실제 화면에 그리게 됩니다.

 

  1. 주소창에 구글 입력 .
  2. 구글 서버로 찾아간다.
  3. DNS가 연결해줄 곳을 찾음 (DNS - 실제 서버가 어디있는지 알고 있는 서버)
  4. 서버에서 HTML 파일을 클라이언트로 보냄.
  5. HTML 파일 파싱 및 DOM Tree 생성
  6. link 태그를 만나 css 파싱 및 CSSOM 트리 생성
  7. DOM , CSSOM 합쳐 Render Tree 생성
    (8. JavaScript를 만나면? HTML파서는 JS 코드를 실행하기 위해 파싱 중단
  8. JS 엔진실행 및 JS코드 파싱)   

 

이 순서로 진행된다고 합니다.

하나하나 다시 공부해보니까 재밌고 좋은 것 같습니다.

 

출처 : velog.io/@st2702/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%9D%98-%EB%A0%8C%EB%8D%94%EB%A7%81-%EA%B3%BC%EC%A0%95

+ Recent posts