전체 글 172

[DevOps] React, gh-pages를 통해 웹 페이지를 배포해보자! (1)

나는 지금까지 프론트엔드 페이지를 서버에 올려서 nginx로 가리키는 형식으로 배포해왔다. 최근에 깃허브 액션을 공부하며 gh-pages라는 편리하고 서버 없이 배포할 수 있는 방법을 알게돼서 신세계를 경험했다. 잊어버리기 전에 기록해두자. 프로젝트 준비 나에게 가장 익숙한 리액트를 사용할 것이지만 어떤 프레임워크를 사용해도 상관 없다. npx create-react-app my-page code my-page 프로젝트 생성 후 깃허브 repository도 만들어서 올려놓자. gh-pages 패키지 설치 이제 배포하기 위한 npm 패키지를 설치해야 한다. npm install gh-pages --save-dev yarn add gh-pages --save-dev 둘중 사용하는 것으로 설치하자. 그 후 배..

[DevOps] github actions을 사용해서 CI/CD를 해보자! (4)

들어가기 전에 지난시간 test를 실패하게 만들어서 정상적으로 작동하지 않을 것이다. 이를 성공하도록 만들자. # test.py def test1(): assert 1+1 == 2 def test2(): assert 1+2 == 3 브랜치와 폴더 지금까지 작성한 워크플로우는 아무데나 push만 하면 작동하도록 만들었다. 이번에는 브랜치별로 나눠보고, 폴더별로 나누는 옵션을 적용해보자. 일단 temp 브랜치를 위한 워크플로우를 만들건데 이 브랜치를 위한 워크플로우를 main 브랜치에 만든다. # ./github/workflows/temp.yml name: temp branch on: push: branches: - temp jobs: job: runs-on: ubuntu-latest steps: - nam..

[DevOps] github actions을 사용해서 CI/CD를 해보자! (3)

테스트코드 우리는 개발을 하면서 이 코드가 올바르게 작동하는지 테스트코드를 작성하곤 한다. 심지어 TDD를 사용한다면 개발을 안한상태에서 테스트코드부터 작성한다. 이렇게 테스트코드를 작성하면 배포하기 전에 한번 돌려본 후 모든 테스트를 성공해야 배포를 할 수 있다. 그럼 테스트하는 workflow를 추가해보자. pip install -U pytest 우선 pytest로 테스트를 하기 위해 의존성을 설치한다. 그리고 테스트코드를 작성한다. # test.py (local) def test1(): assert 1+1 == 2 파일 이름은 pytest특성상 test가 포함되어야 하고 함수명도 마찬가지이다. 실행은 pytest test.py를 쓰면 된다. 일단 yml 파일을 작성하기 전에 테스트 작업은 꼭 ssh..

[DevOps] github actions을 사용해서 CI/CD를 해보자! (2)

main.yml 우선 지난시간에 작성한 yml파일부터 살펴보자. name: auto pull github actions에서 보일 이름을 정하는 부분이다. 원하는대로 지으면 된다. on: [push] 언제 이 워크플로우를 작동할지 정하는 코드이다. 어느 브랜치든 어떤 폴더든 푸시만하면 작동하게 설정했다. 옵션으로 push, pull request, issue를 정할 수 있고 브랜치별, 폴더별로도 정할 수 있다. jobs: build: name: Build runs-on: ubuntu-latest 이제 push가 되면 무슨 행동을 할 지 정해야한다. build: 라고 쓰여진 부분도 별칭이니 바꿔도 된다. 일단 이름을 Build라고 정했다. (실제 빌드하는 작업은 아니다) 그리고 그 작업을 수행할 서버를 gi..

[DevOps] github actions을 사용해서 CI/CD를 해보자! (1)

CI/CD은 빠르고 편리한 빌드/테스트/배포를 위한 과정을 의미한다. 이미 배포한 서비스를 업데이트하기 위해 git push를 하고 모든 테스트가 통과된다면 자동으로 배포가 되는 편리한 기능이다. 이를 위한 소프트웨어로 유명한 Jenkins, Bamboo등이 있다. 이러한 소프트웨어는 개인 서버에 설치가 되어 관리가 돼야 한다. 하지만 그 서버가 고장나거나 Jenkins가 다운된다면 난처한 상황이 생길것이다. 이를 위해 Github나 Gitlab에서 클라우드같이 컴퓨터를 대여해주는 식으로 CI/CD서비스를 제공해준다. 그 중 Github Action을 이용한 CI/CD를 알아볼 것이다. CI/CD가 없다면 1. 개발을 한다. 2. 테스트를 돌린다. 3. 테스트가 모두 통과된 것을 확인하고 원격 저장소에 ..

[알고리즘] Chat-GPT와 Problem Solving

요즘 Chat-GPT가 핫하다. 이 대화형 인공지능이 알고리즘 문제도 해결한다고 하는데 어디까지 해결할 수 있는지 궁금해서 백준 문제로 실험을 해봤다. 문제가 될까봐 실제 제출은 하지 않았고 정답이 맞는지는 내가 판단했다. 문제는 브론즈 5부터 한단계씩 올라가면서 내가 푼 문제들 중 한국어 문제 기준으로 테스트했다. B5 16394 홍익대학교 B4 16204 카드뽑기 주석까지 적는 여유가 보인다. B3 15917 노솔브 방지문제야!! B2 2954 창영이의 일기장 B1 5533 유니크 입력형식이 올바르지 않아 런타임에러가 났는데 풀이만 놓고 보면 정답이다. 입력형식이 복잡해서 그럴 수 있으니 좀 단순한 문제로 다시 시도했다. B1 1110 더하기 사이클 틀렸다. 표본이 적고 solved 난이도가 개인차에..

[암호학] 21. Massey-Omura

배경 돈을 금고에 담아 자물쇠로 잠근 후 다른 사람에게 보낸다고 가정하자. 그렇다면 받는 사람은 금고를 열기 위한 열쇠가 필요하다. 이 과정에서 어떤 방법으로든 열쇠에 대한 정보가 필요하다. "열쇠를 직접 전달한다.", "열쇠를 만드는 법을 전달한다."같은 방법이 있는데 이런 방법은 금고 외에 추가적인 정보 전달이 필요하다. 최악의 경우 열쇠를 직접 전달하는 과정에서 도난을 당할 수 있다. Massey-Omura (Three-pass Protocol)은 이런 문제를 해결한다. Process 정보를 암호화한 상태로 추가적인 정보전달 없이 송수신이 가능할까? 0. A가 B에게 금고에 넣은 돈을 전달하는 경우를 생각하자. (자물쇠 적용 X) 1. A가 금고에 돈을 넣은 후 자물쇠로 잠근 후 B에게 전달한다. ..

기타/암호학 2023.02.07

[암호학] 20. 소수 판정 (Primality Test)

지난시간 RSA를 위해 두 가지 문제점이 남아있었는데 빠른 거듭제곱은 해결했고 큰 소수 생성 문제가 남아있었다. 이를 해결해보자. 기본적인 소수 판정 $N$이 소수인지 판정한다고 하자. $1$~$\sqrt{N}$까지만 판별했을 때 나누어떨어지는 수 $d \le \sqrt{N}$가 있다면 $\frac{N}{d} \ge \sqrt{N}$ 역시 나누어 떨어지므로 $\sqrt{N}$까지 확인해보면 충분하다. $\sqrt{N}$은 이분탐색 등으로 $P$ 시간에 구할 수 있지만 위 로직은 시간복잡도가 $O(\sqrt{N})$이 나오므로 $\log N$의 입장으로 보면 $EXP$이다. 다항시간 판정법이 있어야 그나마 쓸만하니 그런 방법이 있는지 알아보자. 페르마의 소정리 $p$가 소수라면 $a^{p-1} \equiv..

기타/암호학 2023.02.03

[암호학] 19. RSA 암호

사전지식 (정수론) 유클리드 호제법 합동 페르마 소정리 중국인의 나머지 정리 오일러 피 함수 분할정복을 이용한 거듭제곱 대칭키 시스템 Key $p$ : 큰 소수 $e$ : 암호화 키 (홀수) $d$ : 복호화 키 (홀수) $ed \equiv 1 \mod p-1$ $\gcd(e, p-1) = 1$ 이렇게 3개의 키를 사용한 암호화 알고리즘을 사용한다. $p$는 큰 소수이기 때문에 홀수임이 자명하다. $C \equiv m^e \mod p$으로 암호화된 $C$를 구할 수 있다. ($m$은 원본 데이터) 반대로 $m \equiv C^d \mod p$로 복호화할 수 있다. $m = C^d = (m^e)^d = m^{ed} = m$임을 사용한 심플한 알고리즘이다. 문제점은 메시지를 보내는 sender와 그 메시지를..

기타/암호학 2023.01.31

[암호학] 18. NP-Complete

지난시간에 의하면 $P = NP$인지 모르기 때문에 암호가 불완전할 수 있다고 했다. 그래서 차라리 $NP$문제를 선택하고 Bob에게 힌트를 줘서 $P$로 만드는게 나을 수 있다. 그렇다면 $NP$문제중에 어려운걸 선택하면 될 것이다. 그런 문제셋을 $NP$-Complete라고 소개를 했었다. $NP$-Complete Class를 시간제한으로 봤을 때 위와 같이 나온다. ($D$, $E$와 유사하다. co-$NP$는 생각하지 말자) $NP$-Complete의 예시로 SAT가 있는데 이 문제가 핵심 역할을 할 것이다. Reduction Problem $A$의 입력 $a$를 $b$로 변환할 수 있다면 Problem $B$로 reduce할 수 있다. 우리가 알고리즘이나 수학문제를 풀 때 해당 문제를 변형해서 ..

기타/암호학 2023.01.27