반응형

UUID.randomUUID()로 UUID를 생성하는 방법도 있지만 아주아주아주 희박한 확률로 중복이 발생할수 있다고 하여

시간 기반으로 UUID를 생성하는것을 찾아보았다

 

// 기존 UUID
String fileName = UUID.randomUUID().toString().replace("-", "");

// 시간기반 UUID
String fileName = Generators.timeBasedGenerator().generate().toString().replace("-", "");

 

시간기반이라고 해도 혹시나 모를 중복을 체크하기 위해 10만개를 생성하여 체크했다

로그로 찍어서 sublime text 중복선택(Ctrl+d)으로 확인시 이상 없는것을 확인했다

 

참고자료

https://www.baeldung.com/java-generating-time-based-uuids

https://ciscoking.tistory.com/52

 

[IT꿀팁] Sublime Text(서브라임텍스트) 프로그램 소개 및 간편한 단축키 정리

Sublime Text 파이썬 API용으로 작성된 사유 크로스 플랫폼 소스 코드 편집기이다. 수많은 프로그래밍 언어와 마크업 언어를 지원하며 플러그인을 사용하여 사용자에 의해 기능을 확장할 수 있다.

ciscoking.tistory.com

 

반응형
반응형

환경설정은 한번 해두면 자주 할일이 없지만

그만큼 매번 설정때마다 까먹기 때문에 미래의 나를 위해 기록한다

 

git 설치

https://git-scm.com/download/win

위 사이트에서 비트에 맞는 파일을 다운받는다

여기서 헤멘게 이상하게 다운로드 된게 응용프로그램이 아닌 그냥 파일이 다운 받아져서 몇번이고 다시 설치했는데

혹시해서 그냥 설치한 파일 확장자를 .exe로 강제로 변경하니까 정상으로 설치프로그램이 실행되었다

 

JAVA 개발 때는 intelliJ를 썼는데 요즘은 vs code를 자주 사용하기 때문에 vs code를 기본에디터로 설정했다

초기 branch이름은 git에서 기본으로 제공하는 설정은 master이지만 내가 원하는 초기 branch이름(main)으로 설정 하기 위해서 아래와 같이 선택했다

 

 

git user등록

개발 폴더에 파워쉘을 띄워서 user 정보를 등록해준다

$ git config --global user.email "{email}"
$ git config --global user.name "{name}"

 

출처

애플코딩 (무료) 매우쉽게 알려주는 git & github

(무료) 매우쉽게 알려주는 git & github

반응형
반응형

setInterval(), clearInterval()

이름에서 유추할 수 있듯 특정 시간 간격으로 실행하는 함수이다

setInterval()로 인터벌을 설정하고 clearInterval()로 인터벌을 제거할 수 있다

 

예시로 인증번호 입력란을 인터벌 설정하여 10초 이내에 입력 하는 란을 활성화 하는 기능을 적용해보았다

 

view

<div id="otpGroup">
    <input type="text" id="inputOtp" name="inputOtp" placeholder="OTP" disabled="disabled">
    <button type="button" id="createOtpBtn">발송</button>
    <div id="otpMessage"></div>
</div>

js

$(document).ready(function(){
   $('#createOtpBtn').click(function(e) {
       $('#inputOtp').attr('disabled',false);
       $('#otpMessage').css('display', 'none');

        let timer = null;
        let isRunning = false;

      countdown(timer, isRunning);

   });
});

function countdown(timer, isRunning){
    let display = $("#otpMessage");
    let count = 10; //유효초

    let minutes, seconds, txt;
    timer = setInterval(function () {
        minutes = parseInt(count / 60, 10);
        seconds = parseInt(count % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        txt = "인증번호를 입력해주세요. ("+ minutes + ":" + seconds + ")";
        txt = display.text(txt);

        if (--count < 0) {
          clearInterval(timer);
          display.text("인증시간이 초과되었습니다.");
          display.css('color', 'red');
          $('#userOtp').attr('disabled', 'disabled');

          isRunning = false;
        }
    }, 1000);
    isRunning = true;
}

 

 

 

++ 위의 코드로 기능을 구현했을 때 버튼을 연달아 클릭할시 setInterval()이 중복으로 적용되어 메세지가 여러번 바뀌는 버그를 발견하였다

중복을 방지하기 위해 인터벌을 설정할 timer 변수를 전역변수로 담은 후 setInterval(timer ) 선언전에 clearInterval(timer )을 추가하였다

 

그렇게 수정한 js가 아래 코드이다

$(document).ready(function(){
    var timer;

   $('#otpBtn').click(function(e) {

        let display = $("#otpMessage");

       $('#userOtp').attr('disabled',false);
       display.removeClass('dp-none');
        display.css('color', '#007bff');

        //test code starts here
        const otpLength = 6;
        let otp = Math.random().toString().substr(2, otpLength);
        $('#createOtp').val(otp);
        $('#userOtp').val(otp);
        //test code ends here

        const count = 30;

        let min = parseInt(count / 60, 10);
        let sec = parseInt(count % 60, 10);

        function showMessage() {
            if(min == 0 && sec == 0) {
                clearInterval(timer);
                $('#userOtp').attr('disabled', 'disabled');
                display.text("인증시간이 초과되었습니다.");
                display.css('color', 'red');
                return;
            }
            min = min < 10 ? ("0" + min).slice(-2) : min;
            sec = sec < 10 ? ("0" + sec).slice(-2) : sec;
            display.text("인증번호를 입력해주세요. ("+ min + ":" + sec + ")");

            if(sec == 0) {
                min--;
                sec = 59;
            } else {
                sec--;
            }
        }

        clearInterval(timer);
        timer = setInterval(showMessage, 1000);
   });
}

 

 

 

참고자료

https://developer.mozilla.org/ko/docs/Web/API/setInterval

 

setInterval() - Web API | MDN

Window 및 Worker 인터페이스에서 제공되는 setInterval() 메서드는 각 호출 사이에 고정된 시간 지연으로 함수를 반복적으로 호출하거나 코드 스니펫을 실행합니다.

developer.mozilla.org

https://developer0809.tistory.com/149

 

[#. Javascript] 휴대폰, 이메일 인증번호 타이머

버튼을 클릭했을 때 인증번호를 입력할 수 있는 유효시간 타이머가 시작되고 버튼을 다시 클릭했을 시 유효시간 재시작 만료됐을 시 `시간초과`라는 alert와 텍스트가 노출된다 var timer = null; var i

developer0809.tistory.com

https://aljjabaegi.tistory.com/423

 

Javascript setInterval, clearInterval 함수의 즉시 종료에 대한 고찰, 해결방법 사용법

Javascript setInterval, clearInterval 함수의 즉시 종료에 대한 고찰, 해결방법 사용법 JavaScript 에서 setInterval 함수는 기준 간격을 두고 주기적으로 이벤트를 발생 시키고 싶을 때 사용합니다. 예를 들어 1

aljjabaegi.tistory.com

https://mongwani.tistory.com/15418897

 

[JavaScript + JQuery] setInterval 초기화 - 카운트다운 타이머 중복 적용 해결

후.. 진짜 고생했습니다. 이번에 해외 고객들의 메일 인증을 가입 후 진행하는게 아니라 가입전에 인증을 받아놓고 진행하기로 해서 그렇게 변경하는데요.. 카운트다운 타이머는 찾아서 복붙한

mongwani.tistory.com

 

반응형
반응형

랜덤숫자를 생성할때 Math.random()를 사용하게 되면 0~1 사이의 랜덤값이 나오게 된다

예제에서도 0.6126455291899326의 숫자가 생성되는데 소수점 이하의 숫자에서 n개의 숫자를 가져오기위해

substr(beginIndex, length) 로 가져오면 간단하게 랜덤 n개의 숫자를 가져올수 있다

$(document).ready(function(){
    createOtpNumber(6);
});

function createOtpNumber(n){
    let otp = Math.random();

    console.log("Math.random() :", otp);
    console.log("Math.random().toString().substr(2, n) :", otp.Math.random().toString().substr(2, n));
}

 

 

참고자료

https://stackoverflow.com/questions/21816595/how-to-generate-a-random-number-of-fixed-length-using-javascript

반응형
반응형

Create React App(CRA)

React로 Web Application을 개발하는데 필요한 모든 설정이 된 상태로 프로젝트를 만들어주는 기능

 

VS Code 터미널에 명령어 입력

npx create-react-app {project name}

패키지를 인스톨해야한다고 뜬다면 y를 입력하여 인스톨을 실행한다

완료되면 사진과 같이 엄청 긴 문구와 명령어 설명들이 나오고, 폴더 아래 내가 설정한 프로젝트명으로 생성된 것을 확인할 수 있다

 

터미널에 my-app 폴더로 들어가 애플리케이션을 실행하는 명령어를 실행했다

# 경로 변경
cd {path}
# 애플리케이션 실행
npm start

localhost:3000 웹사이트가 열렸다

 

 

출처 

인프런 - 소플님 '처음 만난 리액트(React)'

반응형
반응형

React 공식사이트

https://ko.legacy.reactjs.org/

 

React – 사용자 인터페이스를 만들기 위한 JavaScript 라이브러리

A JavaScript library for building user interfaces

ko.legacy.reactjs.org

 

React의 정의

공식사이트에는 사용자 인터페이스를 만들기 위한 Java Script 라이브러리라고 정의되어 있다

즉, Java Script에서 사용자 UI를 만들기 위해 자주 사용되는 기능들을 가져다 쓸수 있는 모음집이라고 할 수 있다

 

React의 장점

  • 빠른 업데이트(페이지가 변경 속도)와 렌더링 속도 - React는 virtual dom을 사용하여 변경사항이 있을때 dom 전체를 변경하는 것이 아니라 변경된 부분만 업데이트한 후 랜더링을 하기 때문에 페이지 변경 속도가 빠르다
  • Component 기반의 구조 - React에서는 모든 페이지가 Component(구성요소)로 구성되어 레고 처럼 각각의 Component를 조합하여 개발 할 수 있다
  • 재사용성 - 위에서 말한 것과 같이 Component 구조로 같은 컴포넌트를 다양한 곳에서 사용가능하며, 개발 시간이 단축되며, 유지보수가 용이하다 

 

React의 단점

  • 방대한 학습량 - 새로운 개념들이 많고, 버전 업데이트시 변경된 내용을 학습해야한다
  • 높은 상태관리 복잡도 - state라는 개념이 있는데 성능 향상을 위해 state를 잘 관리해야한다고 한다(이건 실제로 써봐야 알것 같다) 때문에 규모가 큰 프로젝트에서는 상태관리 라이브러리를 사용하기도 한다고 한다

 

 

출처

인프런 - 소플님 '처음 만난 리액트(React)'

반응형

'React' 카테고리의 다른 글

[React] Component 생성 및 사용  (0) 2023.09.09
[React] 프로젝트 생성 및 구조  (1) 2023.09.02
[React] Node.js 설치(Window)  (0) 2023.06.06
반응형

Node.js 설치

https://nodejs.org/en

 

위 링크에 접속하면 아래와 같은 화면이 뜨는데, 왼쪽은 안정화된 버전이고 오른쪽이 최신 버전이다

취향에 맞게 설치하면 되지만 보통은 안정화를 많이 설치한다

 

반응형

'React' 카테고리의 다른 글

[React] Component 생성 및 사용  (0) 2023.09.09
[React] 프로젝트 생성 및 구조  (1) 2023.09.02
[React] React 정의 및 장단점  (1) 2023.06.06

+ Recent posts