모바일 앱의 싱크 서버가 필요해서, 백엔드를 구성하는 법을 공부하는 중.
DB는 Mongo db를 사용하기로 결정했고, 서버의 주 작성 언어를 자바스크립트(node, deno)로 할지, 코틀린(spring boot)으로 할지에 따라서 프레임웍이 달라지는데 둘 다 공부해 보기로 했다. 일단 자바 스크립트로 하는 공부를 했고, Node로 할까하다가 Deno로 하고 여러가지 공부 로그를 남긴다.
1. Mac에서 Mongo db 설치
GitHub - mongodb/homebrew-brew: The Official MongoDB Software Homebrew Tap
준비
$ brew update
설치
$ brew tap mongodb/brew
설치
$ brew install mongodb-community
버전 확인
$ mongod --version
db version v5.0.1
Build Info: {
"version": "5.0.1",
"gitVersion": "318fd9cabc59dc9651f3189b622af6e06ab6cd33",
"modules": [],
"allocator": "system",
"environment": {
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
서버 시작
$ brew services start mongodb-community
쉘 접속
$ mongo
2. Deno 설치
Deno - A secure runtime for JavaScript and TypeScript
$ brew install deno
$ deno --version
deno 1.12.2 (release, x86_64-apple-darwin)
v8 9.2.230.14
typescript 4.3.5
3. VisualStuiod Code 설치
Documentation for Visual Studio Code
deno plugin 설치
deno로 검색하여, 플러그인 id: denoland.vscode-deno 게시자: denoland 인 플러그인 설치.
4. Deno에서 Mongo db 접속하기
mongo@v0.24.0 | Deno 를 이용하기 (mongodb를 사용할 수 있는 여러 라이브러리가 있지만 스타가 많고 간단해보임)
에러 핸들링
Top-level 'await' expressions are only allowed when the 'module' option is set to 'esnext' or 'system', and the 'target' option is set to 'es2017' or higher.ts(1378)
>> Deno: VS Code typescript doesnt know ES6 - Stack Overflow
tsconfig.json 작성하여 아래처럼 저장
{
"compilerOptions": {
"module": "ESNext",
"target": "ES2020"
}
}
test.ts 작성
import { Bson, MongoClient } from "https://deno.land/x/mongo/mod.ts";
const client = new MongoClient();
//Connecting to a Local Database
await client.connect("mongodb://localhost:27017");
// Define collection
interface TSList {
_id: { $oid: string };
id: number
name: string;
}
const db = client.database("testdb");
const tslist = db.collection<TSList>("tslist");
const allTsList = await tslist.find().toArray()
console.log(allTsList)
실행하기
$ deno run --allow-net --unstable test.ts
[
{
_id: ObjectId2 {
[Symbol(id)]: Buffer2(12) [
97, 3, 176, 191, 205,
221, 45, 143, 227, 133,
14, 230
]
},
id: 1,
name: "user"
}
]
mongo 쉘에서 입력해 놓은 데이타를 제대로 불러왔다.
5. 파일 한개로 실행가능한 배포 파일 만들기
deno가 파일 한개로 배포가 가능하다고 하는데 가능한지 알아봤다. deno compile로 test라는 파일을 만들었는데 무려 72메가 용량이고, 실행하니 제대로 동작한다. deno가 설치되지 않은 곳에서도 실행이 되는지는 잘 모르겠다.
Compiling executables | Manual | Deno
$ deno compile --allow-net --unstable test.ts
Check file:///Users/user/djkim/test/test.ts
Bundle file:///Users/user/djkim/test/test.ts
Compile file:///Users/user/djkim/test/test.ts
Emit test
$./test
[
{
_id: ObjectId2 {
[Symbol(id)]: Buffer2(12) [
97, 3, 176, 191, 205,
221, 45, 143, 227, 133,
14, 230
]
},
id: 1,
name: "user"
}
]