전체 글

7년차 Backend / Frontend 개발자의 기술 블로그
보통 웹개발을 하게 되면 민감한 정보는 암호화 해서 DB에 저장하게 된다. 개인적으로는 비밀번호 같이 복호화가 필요 없는건 SHA-256, 이름이나 파일명 같은 복호화가 필요한 데이터는 AES-256을 사용해서 암호화하고 있다. 너무 흔한 방식이라 대부분 같은 방식을 사용하고 있을거라고 생각된다. SHA는 해시함수라 항상 같은 길이의 결과물이 떨어져서 DB 컬럼 길이를 정할때 고민없이 정할 수 있다. 하지만 AES를 하게 되면 길이가 늘어나기 때문에 고민을 안 할수가 없다. AES는 기본적으로는 블록암호화함수라 입력값과 출력값의 길이가 동일하다. 다만, 패딩이 붙기 때문에 실제 길이보다 살짝 늘어나게 된다. 여기에 흔히 암호화 후 base64 인코딩해서 저장하는 경우가 많은데 base64까지 하게 되면 ..
React 개발을 시작하면서 PHP로 Restfull API 서버를 구성했다. React는 dev 모드로 로컬호스트에서 실행되고 있고, 서버는 실서버를 바라보게 설정했다. api 서버도 로컬에 테스트로 열어놓으면 좋겠지만 PHP로 구성되어 있어서 (Spring이면 로컬에서 돌렸을텐데) 귀찮음에 항복하고 실서버를 바라보게 설정해버렸다. 로컬호스트에서 실행되는 스크립트가 실제 도메인을 가진 서버를 바라보고 있으니 당연히 CORS 에러가 발생했다. *CORS에 대한 글 그런데 Access-Control-Allow-Origin 헤더를 넣어도 GET을 제외한 POST, PUT, DELETE에서 CORS에러가 발생하고 있었다. 그 이유는 React에서 api를 호출하기 위해 Axios를 사용하고 있었는데, Axio..
· IT 기기
기존에 DS118을 쓰고 있었는데, 이번에 DS920+로 업그레이드 하게 되었다. DS118을 구매하기로 결정했을때 간과했던 부분이 있었는데, 바로 1베이 모델이라는 것이였다. 쓰다보니 내 모든 파일이 나스에 저장되어있는데 하드가 고장이라도 나면 골치아파진다는 것을 뒤늦게 깨달았다. 그래서 1년 전부터 DS220+, DS420+, DS720+, DS920+를 고려리스트에 넣고 고민하고 있었다. 아무리 빨라도 올해 9월쯤 출시할 거라고 생각하고 언제 나오나, 하드가 고장나기 전까진 나오겠지, 하며 마음만 졸이고 있었는데, 갑자기 출시를 한다는 소식을 들어서 큰맘 먹고 DS920+로 구매를 결정하게 되었다. DS118을 구매할때는 예산 때문에 고민했다면, 이번에는 예산보다는 성능을 보고 결정했다. DS118..
리디페이퍼 3세대 (이하 리페삼) 루팅 스크립트는 이미 다른 분이 만들어주셨지만 당연하지만 업데이트 하면 루팅이 풀려버린다. 그래서 OTA 업데이트 시에 자동 재루팅되는 리커버리 제작을 시도했고, 여태까지는 magisk 설치용 boot.img 설치까진 성공했지만 그 이후 정상 부팅하는 방법을 몰라 미완성이였다. 하지만 개고생한 끝에 성공했다. 결국 안드로이드 소스코드를 열어보고서야 답을 찾았다. 내가 안드로이드 소스코드를 열어보는 날이 오다니ㅋㅋㅋ 단, 리커버리에서 재부팅한 이후 업데이트 프로세스가 제대로 진행되는지는 확인을 못했다. 테스트 진행 과정이 /system/build.prop 의 버전 코드만 낮추고 진행하는거라 그냥 순정 리커버리에서 업데이트만 시도했을 때는 이미 설치되어있는 버전이라고 스킵하..
참고 링크 https://adnoctum.tistory.com/544 http://www.moneybook.co.kr/pages/542845 정규표현식은 기본적으로 마지막 조건에 대해서 여러개가 일치하면 전부 가져오게 된다. ?filename=1406100586522_img.JPG&expires=1573486297&credential=asdf 이런 값에서 /filename=(.+)\\&/g 이런 조건으로 가져오게 되면 filename=1406100586522_img.JPG&expires=1573486297& 여기까지 가져오게 된다. .+ 메타문자에서 모든 문자열을 체크해버리고, &로 끝나는 마지막까지 전부 가져오게 되는 것이다. 즉, 조건이 만족되는 곳의 끝까지 가져와버린다. 이것을 최대 매치, 혹은 탐..
JavaScript에는 많은 정렬 함수가 있지만, 우리가 흔히 보는 파일 정렬 순서와는 결과가 좀 다르다. Electron으로 파일 관련 프로젝트를 개발하다 파일 정렬 때문에 골머리를 앓았다. 앞서 이야기한 것처럼JavaScript에는 많은 정렬 함수가 있지만 윈도우 탐색기에서 보는 정렬 순서와는 결과가 좀 다르다. JavaScript로는 이런 결과가 흔히 나타난다. var arr = ["filename 0.txt","filename 1.txt","filename 9.txt","filename 10.txt","filename 11.txt"]; arr.sort(); console.log(arr); // 0: "filename 0.txt" // 1: "filename 1.txt" // 2: "filename..
참고 링크 : https://github.com/electron-userland/electron-builder/issues/3473 Electron 으로 빌드하면 Nsis 인스톨러 exe가 결과물로 떨어진다. 인스톨러가 아닌 portable exe로 빌드하고 싶으면 아래 명령어를 사용하면 된다. npx electron-builder build --win portable 이렇게 하면 exe만 달랑 떨어지게 된다. 긴 명령어가 아닌 package.json을 활용해서 간단하게 빌드하고 싶으면 아래처럼 설정을 변경해주면 된다. package.json 파일의 build 명령을 portable 명령어로 대체한 설정이다. 다른 변경 점 없이 32비트와 64비트에 대해 portable 옵션만 추가했다. "build:w..
Electron 초기 설정 https://suwoni-codelab.com/electron/2017/04/17/Electron-distribution/ Electron 시작하면서 build 단계에서 에러가 발생했다. C:\Users\UserName\Documents\Electron_WorkSpace\electron-quick-start>npm run build:win > electron-quick-start@1.0.0 build:win C:\Users\UserName\Documents\Electron_WorkSpace\electron-quick-start > npm run build:win32 && npm run build:win64 > electron-quick-start@1.0.0 build:win3..
2019-04-30 17:05 최초 작성 아파치 시작/종료 시점에 스크립트를 실행해야할 필요성이 생겼다. 시작/종료 시 추가적인 작업이 필요했다. 그러던 중 리눅스 서비스에 추가적인 옵션 등록으로 해결 가능하다는 사실을 발견했다. 리눅스 서비스 옵션이기 때문에 해당 파일만 잘 선택한다면 아파치가 아닌 Nginx도 같은 방법으로 설정 가능하다. 참고 링크 https://unix.stackexchange.com/questions/368271/how-can-i-run-a-command-upon-a-systemd-service-unit-being-disabled https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStopPost= ..
2019-04-18 14:54 최초 작성 차기버전 개발 시작에 앞서 새로운 설치 패키지를 만들며 PHP 버전을 7.3.4로 올렸다. (기존 7.2.6) 인터넷에 떠도는 글은 많지만 대부분 7.0 혹은 7.2를 대상으로 한 글이기 때문에 7.3에는 사용할 수 없었다. 혹은 아파치 기반이라 PHP를 설치하려고 하면 의존성으로 httpd가 묶여있어 사용할 수가 없었다. 그러던 중 아래와 같은 글을 찾아서 설치 과정을 기록한다. Nginx + PHP 7.1 연동 - https://cjwoov.tistory.com/7 PHP 7.3 Repository - https://blog.remirepo.net/post/2018/12/10/Install-PHP-7.3-on-CentOS-RHEL-or-Fedora Nginx ..
HuiYa
by HuiYa