✍️ 서론Pumble은 로컬 회원가입 과정에서 다음과 같이 사용자의 메일로 인증 번호를 전송하고 이를 검증한다.이를 위해 인증 메일 전송/인증 코드 검증을 구현하고자 했다. 👾 목표1. 6자리의 인증코드를 생성하여, 이를 사용자 메일 주소에 전송한다.2. 인증코드는 일정 시간동안만 보관한다.3. 사용자가 입력한 코드와 저장해두었던 인증코드가 동일한지 확인한다.4. 동일하다면 회원가입 절차로 넘어간다. ☘️ 진행이번엔 메일을 보내는 것까지 포스팅할 예정이다.1. Gmail IMAP 허용먼저 인증 메일을 보내고자 하는 주소의 설정에서 IMAP을 허용하도록 한다. Gmail로 들어가 우측 상단의 설정을 누른다. 설정을 누르면 나오는 Quick settings에서 `See all settings`를 선택한다..
Project
🧐 상황이전에 졸업 프로젝트 발표용으로 급하게 안드로이드-라즈베리파이 블루투스 통신을 만들었었다. 그땐 잘 되길래 그 코드를 그대로 iOS로 바꿔서 실행하려고 했다. 그런데 안드로이드의 블루투스 터미널 어플에선 잘만 되는 블루투스 통신이 iOS로 넘어오기만 하면 먹통이 됐다. 어플로 블루투스가 활성화까지는 되는데 라즈베리파이 기기를 찾지 못했다. 👻 문제코드가 잘못됐나 싶어서 이리저리 바꿔보고 GPT랑 진지한 대화도 나눠봤는데 GPT가 계속 bluez나 bluepy를 이용한 코드만 준다는 사실을 알게 됐다. 전에 그걸로 코드를 짜보려다가 잘 안 됐던 기억이 있어서 GPT한테 클래식 블루투스로는 안 되냐고 물었더니 이런 답을 줬다.애초에 블루투스 클래식 연결이 불가능했다..혹시나 라즈베리파이를 MFi..
내가 만들고자 하는 것은 블루투스로 제어가 가능한 무드등이다.이는 곧 마우스와 키보드, hdmi 선이 없어도 프로그램이 동작해야함을 의미한다. 고려해야 할 것은 프로그램을 실행하기 이전에 블루투스 인터페이스의 검색과 페어링을 활성화 시켜주는sudo hciconfig hci0 piscan의 실행을 선행해야 한다는 것이다. 1. sudo nano /etc/rc.localrc.local 파일은 부팅 시 등록되어있는 명령어를 자동 실행해준다. 2. if문과 exit 사이에 실행할 코드 입력나는 바보같이 exit 밑에 코드를 넣어놓고 계속 왜 안되지 하고 있었다...#!/bin/sh -e#(중략)_IP=${hostname -I} || trueif [ "$_IP" ]; then printf "My IP addres..
블루투스로 제어가 가능한 무드등을 제작하기 위해 라즈베리파이에 관련 라이브러리를 설치할 필요가 있었다.파이썬에서 bluetooth를 import 하려면 pip로 pybluez를 설치해야 했다.sudo pip pybluez로 설치하려 했는데 다음과 같은 에러가 났다.Collecting PyBluez Using cached PyBluez-0.23.tar.gz (97 kB) Preparing metadata (setup.py) ... error error: subprocess-exited-with-error × python setup.py egg_info did not run successfully. │ exit code: 1 ╰─> [1 lines of output] error in Py..
Pumble은 이더리움 기반 Dapp이다.우리는 최대한 바로 사용 가능한 수준의 앱을 구현하고자 했기에 기왕이면 스마트 컨트랙트를 외부로 배포해서 써보기로 했다.하지만 컨트랙트도 처음 작성해보는 입장이고 지갑도 얇디 얇은 대학생이기에 바로 메인넷에 배포하는건 무리라고 판단해 테스트넷에 배포해서 구현을 해보기로 결정했다. INFURA에서 API Key를 발급받고 메타마스크 연결까지 해서 배포를 눌렀는데ValueError: insufficient funds for gas * price + value 라는 에러가 떴다. 찾아보니 배포에도 가스가 필요하기 때문에 배포하고자 하는 테스트넷의 이더가 필요하다고 한다.INFURA 사이트의 Faucet은 메인넷에서의 활동 기록이 필요하다길래 귀찮아서 조건이 까다롭지 ..
/추후작성예정/
✍️ 서론 덕타운은 기숙사 어플인만큼 리스트뷰가 많다. 그런데 보다시피 같은 리스트뷰더라도 형식이 매번 다르다. 나는 각 셀을 열과 행의 묶음으로 보았고 그렇다면 테이블로 표현하는 것이 좋겠다고 생각했다. 그리고 여러 화면에서 쓰니 이를 컴포넌트로 만들고자 했다. 여기서 셀이란 위의 그림의 빨간 테두리이다.(그냥 나 혼자 그렇게 칭한다.) 사진 속 셀은 주황색 선을 기준으로 행이 나뉘고 연두색 선을 기준으로 첫번째 행에서 열이 나뉜다. 👾 목표 여러 화면에서 활용 가능한 테이블 컴포넌트를 만들자! ☘️ 진행 과정 테이블에 채워질 내용들은 대체적으로 서버에서 받아온 배열 속 값들이다. 따라서 컴포넌트는 배열을 받아야한다. 또한 각 테이블에 채워질 내용은 페이지마다 형식이 다르므로 이를 지정할 클래스명이 필..
🧐 상황 데모데이 이후로 퀸텟 API를 돌려보는 경우는 거의 없었다. 프론트 분들도 딱히 별말씀이 없으셔서 이제까지 따로 살펴보지 않았다. 그런데 최근 토큰 기반 인증을 도입하면서 미들웨어 테스트를 돌려보는데 ??? endOfWeek 값이 이상하다. 한 주의 시작이 11월 27일이면 그 주의 마지막은 12월 3일이어야 하지 않는가..! 급하게 달력을 확인해보니 일자가 틀린 건 아닌 것 같았다. 그 말인 즉, 날짜를 구하는 과정에서 달은 그대로 두고 일만 바뀐 것으로 추측할 수 있다. 날짜를 구하는 함수는 다음과 같다. function getWeekRange() { const KST = moment().tz('Asia/Seoul'); const day = KST.day(); // 요일 (0: 일요일, 1:..
🧐 상황 외박신청란에서는 폼 작성 후 신청하기 -> 확인 순으로 버튼을 누르면 폼에 작성한 내용이 백엔드로 전달된다. 이때 성공적으로 전송이 된다면 성공이 됐다는 알림과 함께 화면이 새로고침이 되게 하고 싶었다. useNavigate를 이용해 화면을 이동하니 같은 페이지로 이동하면 되지 않을까 싶었다. fetch(apiUrl, request) .then((response) => { if (response.ok) return response; else throw new Error(response.errorMessage); }) .then(() => { navigate('/stayout'); setModalIsOpen(false); alert("외박 신청이 전송되었습니다."); }) .catch((error..