(SpringBoot) QR 코드 생성 및 테스트(링크 이동) – zxing


(SpringBoot) QR 코드 생성 및 테스트(링크 이동) - zxing 1

1. 소개

몇 년 전에 시작된 COVID19 이후 많은 비대면 및 비접촉식 시스템이 만들어졌습니다.

(QR 인증, QR 결제…)

QR코드도 2000년 6월 표준이 된 오래된 기술이지만 코로나19로 인해 그 범위와 활용도가 높아진 것으로 보인다.

또한 옥외 광고, 모바일 앱, 웹사이트 내부 링크 등 사용처가 점점 많아지고 점점 활기를 띠고 있습니다.

1-1 바코드 또는 QR 코드?

과연 일반 대중의 입장에서 보면 “바코드와 QR 코드의 차이점은 무엇인가? 둘 다 똑같지 않니?”

일상 생활에서 QR 코드를 더 자주 사용하는 이유는 무엇입니까?

  • 바코드
    • 레이저(주사 물체)는 수평 방향으로 감지되어야 합니다.

    • 정보는 최대 20자까지 저장할 수 있습니다.

    • 바코드 “I” 높이 부분이 훼손된 경우에도 인식 가능
    • 단점 : 정보 저장량, 탐지율
  • QR 코드
    • 모든 방향(대각선, 전방, 후방 등)의 스캔을 감지합니다.

    • 최대 7089개의 숫자와 4296자의 정보를 저장할 수 있습니다.

    • 탐지율, 고속.
    • 암호화 및 위조 방지와 같은 보안 기능이 마련되어 있습니다.

    • 단점: QR 코드를 수정하거나 삭제할 수 없습니다.

– 일상생활에서 우리에게는 많은 정보를 저장할 수 있고 인식률이 빠르다는 장점이 있으며(속도의 나라),

많이 사용하는 방법이라고 생각합니다.

1-2 QR 코드 생성 방법

– 현재 QR 코드를 생성하는 방법은 이전보다 더 많으며 그 중 개발에 사용할 수 있는 몇 가지만 고려할 것입니다.

  1. Google QR 코드 API 어떻게 물어?
  2. 오픈 소스를 통해 로컬에서 구축되었습니다.

  3. 기타 QR코드 생성 서비스 제공 사이트(네이버, 어도비 등)

– 1번에 따라 Open API를 사용하기 위해서는 다음과 같은 많은 부분을 고려해야 합니다.

B. 각종 절차, 통신, 인증, 권한 부여 및 API 사양.

그러나 솔루션 2번을 사용하면 모두 직접 제어할 수 있어 편리하다.

(또한 Google API 지원이 언제 종료될지는 아무도 모릅니다.

)

이번 포스트에서는 솔루션 2를 사용하여 Spring Boot에서 QR 코드를 쉽게 생성하고 배포합니다.

2. ZXING – Google 오픈 소스

– 사용되는 오픈소스 “zxing”은 구글에서 제공하는 오픈소스입니다.

모바일, 웹 등에서 사용할 수 있습니다.

– GitHub: zxing 오픈 소스 공식 – Java용

* https://github.com/zxing/zxing

공식 문서로 이동하시면 보다 자세한 사양과 정보를 보실 수 있습니다.

3. QR 코드 테스트 생성 및 배포

3-1 라이브러리를 추가합니다.

-gradle

// QR Code - zxing
	implementation group: 'com.google.zxing', name: 'javase', version: '3.5.0'
	implementation group: 'com.google.zxing', name: 'core', version: '3.5.0'

3-2 요청 페이지

– 요청링크(사이트)만 구성하자.

* index.html 내부에 구성했습니다.

<div>
    <h3>내 티스토리 블로그 QR Code!
</h3> <a href="http://lucas-owner.qr/tistory">QR to Tistory!
!
</a> </div>

3-3 컨트롤러 – QR 생성 및 전달

package boot.bootprac.qr.controller;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

/************
 * @info : QR Code 생성 및 제공 Controller
 * @name : QrController
 * @date : 2023/03/24 5:32 PM
 * @version : 1.0.0
 * @Description :
 ************/
@RestController
@RequiredArgsConstructor
@Slf4j
public class QrController {


    @GetMapping("http://lucas-owner.qr/tistory")
    public ResponseEntity<byte()> qrToTistory() throws WriterException, IOException {
        int width = 200;
        int height = 200;
        String url = "https://lucas-owner.";

        // QR Code - BitMatrix: qr code 정보 생성
        BitMatrix encode = new MultiFormatWriter().encode(url, BarcodeFormat.QR_CODE, width, height);

        // QR Code - Image 생성. : 1회성으로 생성해야 하기 때문에, stream으로 Generate(1회성이 아니면 File로 작성 가능.)
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream(); //output Stream
            MatrixToImageWriter.writeToStream(encode, "PNG", out); //Bitmatrix, file.format, outputStream
            return ResponseEntity.ok()
                    .contentType(MediaType.IMAGE_PNG)
                    .body(out.toByteArray());

        }catch (Exception e){
            log.warn("QR Code OutputStream 도중 Excpetion 발생, {}", e.getMessage());
        }//catch

        return null;
    }

}

– HTML의 form 태그를 사용하여 가고자 하는 페이지의 주소를 매개변수로 얻을 수 있습니다.

* 여기서는 블로그 주소를 QR코드로 생성하기 위해 고정주소를 사용합니다.

– QR코드 이미지의 크기, 색상 등을 변경할 수 있습니다(커스텀).

MatrixToImageConfig custom = new MatrixToImageConfig(MatrixToImageConfig.BLACK, -1);

4차 시험

4-1 HTML로 작성된 링크에 요청을 보내자.


(SpringBoot) QR 코드 생성 및 테스트(링크 이동) - zxing 2
HTML-낮

4-2 Rest Controller에서 생성된 QR코드를 이미지로 확인할 수 있습니다.


(SpringBoot) QR 코드 생성 및 테스트(링크 이동) - zxing 3

4-3 휴대폰 카메라를 이용한 QR 감지도 확인됐고, 링크로 가는 것도 확인됐다.


(SpringBoot) QR 코드 생성 및 테스트(링크 이동) - zxing 4
휴대폰 QR 스캔


– QR코드 생성 기능을 사용하신다면 사용 가능한 기능을 더 테스트해보고 싶으신 분 이들 중 대부분은 이미 시장에 나와 있습니다.

(로그인, 결제, 기타 회원가입 등,,,)

– 단순히 웹페이지, 이미지, 정보를 요청하여 이용할 때 QR코드 기술을 활용하면 좋을 것 같습니다.