Giter Club home page Giter Club logo

loopback-boards's Introduction

loopback-boad

.
├── Dockerfile
├── README.md
├── client
│   └── README.md
├── package.json
└── server
    ├── boot
    │   └── root.js
    ├── component-config.json
    ├── config.json
    ├── datasources.json
    ├── middleware.development.json
    ├── middleware.json
    ├── model-config.json
    └── server.js
  • 메모리디비
  • 유저 모댈 생성

loopback-boad

Loopback 게시판 만들기 (1)

Loopback 으로 게시판을 만드는 프로젝트를 진행하겠습니다. 앞선 포스팅에서 설명 드렸다시피 Loopback은 정말 빠르게 REST API를 만들어 낼 수 있습니다. 회원 가입, 로그인, 로그아웃, ACL, 설정 등 매번 구현해야 하는 귀찮은 로직들을 내부 Model을 사용해서 빠르게 만들 수 있습니다. 하지만 이렇게 말로 설명해 드리는 것보다 웹에 가장 간단한 게시판으로 포스팅을 진행하겠습니다.

Loopback 설치

$ npm install -g loopback-cli
  • 메모리디비
  • 유저 모댈 생성

게시판 프로젝트 생성

$ lb
? 애플리케이션 이름은 무엇입니까? loopback-board
? 프로젝트를 포함시킬 디렉토리 이름 입력: loopback-board
   create loopback-board/
     info 작업 디렉토리를 loopback-board(으)로 번경

? 사용하려는 LoopBack 버전은 무엇입니까? 3.x (current)
? 예상하는 애플리케이션 종류는 무엇입니까? api-server (A LoopBack API server with local User auth)
  • 터미널에서 원하시는 디렉토리 이동 이후 lb 명령어를 입력하고 프로젝트 설정을 이어 갑니다.
  • 버전은 최신 버전 3.X 버전을 선택합니다.
  • 애플리케이션 종류로는 api-server (A LoopBack API server with local User auth)를 택합니다.
  • 해당 종류를 택하면 내부 User 기반으로 로그인, 로그아웃, 회원 가입 등등 로직을 구현 해줍니다.

데이터베이스 연결

"db": {
    "name": "db",
    "connector": "memory",
    "file": "memoryDBFile"
  }
  • datasources.json 파일에 위의 내용을 추가합니다.
  • 본 포스팅에서는 설치 없이 사용할수 있는 메모리 In-memory db를 이용하겠습니다.
  • 데이터베이스를 memoryDBFile 파일에 저장하여 In-memory db를 편리하게 사용할 수 있습니다.

게시판 모델 생성

? 모델 이름 입력: board
? board을(를) 첨부할 데이터 소스 선택: db (memory)
? 모델 기본 클래스 선택 PersistedModel
? REST API를 통해 board을(를) 공개합니까? Yes
? 사용자 정의 복수형 양식(REST URL 빌드에 사용됨):
? 공통 모델 또는 서버만 해당? 공통
지금 일부 board 특성을 추가하십시오.

완료된 경우 비어 있는 특성 이름을 입력하십시오.
? 특성 이름: title
   invoke   loopback:property
? 특성 유형: string
? 필수 여부 Yes
? 기본값[없는 경우 공백으로 두기]:

다른 board 특성을 추가하십시오.
완료된 경우 비어 있는 특성 이름을 입력하십시오.
? 특성 이름: content
   invoke   loopback:property
? 특성 유형: string
? 필수 여부 Yes
  • Loppback의 핵심 개념인 Model을 생성합니다.
  • 위에서 설정한 db를 선택합니다.
  • 기타 설정들은 위의 예시와 동일하게 설정합니다.
  • 위의 작업을 진행하면 board.jsonproperties 항목에 추가 됩니다.

board.json

....
"properties": {
  "title": {
    "type": "string",
    "required": true
  },
  "content": {
    "type": "string",
    "required": true
  },
  "createdDt": {
    "type": "date",
    "required": false,
    "description": "생성 날짜",
    "defaultFn": "now"
  }
}
...
  • 위에서 작성한 title, content 프로퍼티가 추가되었습니다.
  • 모델을 생성할 때 프로퍼티를 생성할 수 있고, 직접 해당 모델의 json 파일에 작성할 수 있습니다.
  • createdDt 프로퍼티는 직접 작성합니다.
  • "defaultFn": "now" 옵션을 주면 현재 시간이 자동으로 입력됩니다.

게시판 ACL 설정

$ lb acl
? ACL 항목을 적용할 모델 선택: (all existing models)
? ACL 범위 선택: 모든 메소드 및 특성
? 액세스 유형 선택: All (match all types)
? 역할 선택 All users
? 적용할 권한 선택 Explicitly deny access
  • Loopback은 ACL 설정도 간편합니다.
  • lb acl 명령어로 작업을 진행합니다.
  • 위 설정은 모든 모델에 대한 ACL 거부하는 설정입니다.
  • 일단 막아 놓고 하나하나 풀어주는게 보안에 안전합니다.
$ lb acl
? ACL 항목을 적용할 모델 선택: board
? ACL 범위 선택: 모든 메소드 및 특성
? 액세스 유형 선택: Read
? 역할 선택 All users
? 적용할 권한 선택 Explicitly grant access
  • board에 대한 ACL 설정을 진행합니다.
  • 모든 사용자는 board를 읽을 수 있습니다.
  • 로그인하지 않은 사용자도 게시글을 볼 수 있게하는 설정입니다.
$ lb acl
? ACL 항목을 적용할 모델 선택: board
? ACL 범위 선택: 단일 메소드
? 메소드 이름 입력 create
? 역할 선택 Any authenticated user
? 적용할 권한 선택 Explicitly grant access
  • 로그인한 사용자만이 board를 작성할 수 있습니다.

게시판 ACL 설정 코드

...
"acls": [
    {
      "accessType": "*",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "DENY"
    },
    {
      "accessType": "EXECUTE",
      "principalType": "ROLE",
      "principalId": "$authenticated",
      "permission": "ALLOW",
      "property": "create"
    },
    {
      "accessType": "READ",
      "principalType": "ROLE",
      "principalId": "$everyone",
      "permission": "ALLOW"
    },
    {
      "accessType": "WRITE",
      "principalType": "ROLE",
      "principalId": "$owner",
      "permission": "ALLOW"
    }
  ],
...
  • 위의 ACL 작업을 진행하면 board.json 파일에 "acls" 위와 같이 추가된것을 확인할 수 있습니다.
  • "accessType": "WRITE",은 수동으로 작성합니다.
  • 해당 조건은 해당 글의 소유자만이 접근할 수 있는 설정입니다.
  • 해당 글에 수정, 삭제에 관련 ACL 설정으로 보시면 편합니다.

회원 가입

{
  "username": "yun",
  "email": "[email protected]",
  "password":"123123"
}
  • 해당 회원 가입을 Swagger 문서를 통해서 진행합니다.

로그인

{
  "email": "[email protected]",
  "password":"123123"
}
  • 로그인에 성공하면 AccessToken 값을 리턴 받습니다.
  • 상단의 토큰 화면에 이 값을 입력합니다.

게시글 작성

{
  "title": "게시글",
  "content": "내용 블라...."
}

비 로그인 사용자가 게시글을 작성할 경우

{
  "error": {
    "statusCode": 401,
    "name": "Error",
    "message": "Authorization Required",
    "code": "AUTHORIZATION_REQUIRED",
    "stack": "Error: Authorization Required...
  }
}
  • 접근권한에 대한 에러 메세지를 포함하여 statusCode 401를 리턴 합니다.

게시글 조회

마무리

Loopback을 통해서 정말 간단하게 게시판을 만들어 보았습니다. 처음 Loopback을 공부할때는 In-memory DB를 추천합니다. 별다른 설정없이 데이터베이스 설정을 완료 할수 있습니다. 또한 ORM을 지원하기 때문에 이후에 다른 데이터베이스로 크게 무리 없이 변경 가능합니다. 앞으로도 Loopback 관련된 주제를 포스팅 진행해보겠습니다.

loopback-boards's People

Contributors

cheese10yun avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.