액티브 스킬 53

<Flutter> VS Code에서 CLI로 프로젝트 생성 및 열기

⚡🕊️🧭 VS Code에서 터미널을 통해 플러터 프로젝트를 생성하고, 해당 프로젝트를 VS Code에 바로 띄우는 방법은 다음과 같습니다. $ cd [폴더경로] 프로젝트를 생성할 폴더로 이동 $ flutter create [프로젝트명] 플러터 프로젝트 생성 $ cd [프로젝트명] 프로젝트 폴더로 이동 $ code -r . VS Code 현재 창에서 프로젝트 실행 (새 창으로 열려면 code . 입력)

<Flutter> VS Code Java 버전 수정

⚡🕊️👾 SHA-1 키 확인 flutter 앱을 firebase에 연결하던 중 SHA-1 키를 확인하기 위해 다음과 같은 명령어를 입력했습니다. $ ./gradlew signingReport 하지만 아래와 같은 에러가 발생하여 원하는 값을 정상적으로 받아올 수 없었습니다. 'Android Gradle plugin requires Java 11 to run.' 자바 11 이상의 버전이 필요하다며 몇 가지 해결책을 친절하게 제시해 줍니다. 저는 JAVA_HOME 환경변수의 값을 수정하기로 결정했습니다. 환경변수는 VS Code 뿐만 아니라 다른 IDE를 사용하더라도 동일한 영향을 줄 수 있기 때문입니다. 내 PC > 속성 > '고급 시스템' 검색 > 고급 시스템 설정 보기 > '고급' 탭의 '환경 변수' >..

<Flutter> BottomNavigationBar 라벨 지우기

⚡🕊️🧭 BottomNavigationBar BottomNavigationBar 위젯은 label 속성이 필수인데, 이 label을 없애고 싶은 경우가 있습니다. showSelectedLabels, showUnselectedLabels 프로퍼티에 각각 false를 대입하면 label 없는 BottonNavigationBar를 만들 수 있습니다. 📌 https://api.flutter.dev/flutter/material/BottomNavigationBar-class.html BottomNavigationBar class - material library - Dart API A material widget that's displayed at the bottom of an app for selecting a..

<Flutter> PageController class

🎯⚡🕊️ PageView 플러터에서는 페이지 스크롤(스와이프)을 구현하기 위해 PageView 위젯을 사용합니다. PageView 위젯은 controller, children 2가지 인자를 기본적으로 사용합니다. (scrollDirection, reverse 등과 같은 매개변수를 통해 스크롤의 성질을 설정할 수도 있음) children 매개변수에는 예상하듯이 스크롤이 필요한 페이지들을 인자로 대입합니다. controller에는 PageController 인스턴스를 대입하게 됩니다. PageController PageController 인스턴스를 통해서 페이지 이동을 컨트롤할 수 있습니다. initialPage와 같은 프로퍼티를 통해서 PageView의 children 중에서 사용자에게 처음으로 노출될 페..

<Nest: 에러노트> QueryFailedError: Table 'user' already exists

QueryFailedError 네스트(NestJS)에서 MySQL을 연결하던 중 테이블이 이미 존재한다는 에러가 발생했습니다. ormconfig.json에서 synchronize 옵션과 migrationsRun 옵션이 충돌이 일으킨다는 힌트를 얻었습니다. synchronize 옵션이 true일 경우, 서버 구동시 테이블을 새로 생성합니다. migrationsRun 옵션이 true일 경우, 서버 구동시 마이그레이션을 자동 적용합니다. 해결방법 1. migrationsRun 옵션을 날려버립니다. 해결방법 2. synchronize, migrationsRun 옵션을 둘다 false로 합니다. (그럼 의미가 있나?...) 📌 https://stackoverflow.com/questions/62434734/typ..

액티브 스킬 2022.04.28

<노드> joi 라이브러리(validator) 에러: Cannot read property 'presence' of undefined

👾 joi 게시글 업로드시 제목, 작성자, 게시글 등의 타입 확인, 글자수 제한 같은 확인이 필요합니다. joi 라이브러리를 사용하면 이를 쉽게 구현할 수 있습니다. 1. 스키마를 정의합니다. (=검증에 필요한 내용 작성) 2. 옵션을 설정합니다. (=검증 방법에 대한 설정, 에러가 발생해도 나머지 데이터에 대한 검증을 계속할 것인지 등) 3. 에러 또는 결과를 받아와서 결과를 처리합니다. 위 코드와 같이 미들웨어로 작성한 경우 아래처럼 활용할 수 있습니다. Cannot read property 'presence' of undefined `"title" failed custom validation because Cannot read property 'presence' of undefined` 에러가 발생..

<Node.js> 쿠키-세션

🎯 { express-session } 언제 사용하나요? 주로 유저 데이터를 서버에 저장하여 페이지를 요청하는 사람이 인증된 유저인지 확인하기 위해 사용합니다. 왜 사용하나요? JWT 방식과 비교하여 보안성이 우수하다고 이야기하는 경우가 많습니다. 하지만 JWT의 보안성에 문제가 없다는 의견도 있기 때문에 다음에는 보안을 집중적으로 다루도록 하겠습니다. 무엇인가요? express-session 미들웨어를 활용한 서버측 데이터 저장 방식입니다. 어떻게 사용되나요? 1. 쿠키에 세션 아이디를 담아서 서버에 요청을 보냅니다. 2. express-session 미들웨어를 설정해 둡니다. 3. req.session.이름 객체를 통해 데이터를 저장하고 불러옵니다. Q. JWT vs 쿠키-세션 선택 기준은?

<Node.js> express.urlencoded가 필요한 이유

🎯 { express.urlencoded } 언제 사용하나요? express 서버로 POST 요청을 할 때 input 태그의 value를 전달하기 위해 사용합니다. 무엇인가요? 요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어주는 미들웨어입니다. 왜 사용하나요? 요청의 본문에 있는 데이터가 URL-encoded 형식의 문자열로 넘어오기 때문에 객체로의 변환이 필요합니다. cf) JSON 문자열로 넘어오는 경우 express.json() 미들웨어를 사용합니다. 어떻게 사용하나요? 예전에는 body-parser 패키지를 별도로 설치해야 했지만 express v4.16.0 부터 내장 라이브러리가 되었습니다. 1. POST 요청으로 input 태그의 값을 전달합니다(서버에서 name 속성으로 ..

<Node.js> __dirname 이해하고 가기

🚀 { __dirname } 무엇인가요? "__"는 자바스크립트에서 기본적으로 정의된 변수에 붙습니다. "dirname"은 directory와 name의 합성어입니다. 현재의 파일(file)이 위치한 폴더(directory)의 절대경로(absolute path)를 알려줍니다. cf) process.cwd()는 항상 프로젝트 폴더(directory)를 반환합니다. cf) __filename은 현재 파일명을 알려줍니다. 어떻게 사용하나요? __dirname는 환경 변수(environment variable)로써 따로 정의할 필요없이 사용할 수 있습니다. // index.js console.log(`process.cwd(): ${process.cwd()}`); console.log(`__dirname: ${_..

<Node.js> TypeError: expressHandlebars is not a function

⚔️ 노드의 뷰 엔진으로 handlebars를 적용하다가 아래와 같은 에러가 발생하였습니다. TypeError: expressHandlebars is not a function const expressHandlebars = require("express-handlebars"); app.engine( "handlebars", expressHandlebars({ defaultLayout: "main", }) ); 아래 둘 중 하나로 고치면 해결됩니다. const expressHandlebars = require("express-handlebars"); app.engine( "handlebars", expressHandlebars.engine({ defaultLayout: "main"..