Skip to content

kwonhygge/mandart

Repository files navigation

만다르트

node js와 mongo db를 이용해서 REST API를 설계하고 계획표 웹페이지 만들기

메인

인덱스

만다라트란?

목표를 달성하기 위한 세부 목표를 정리하는 계획표이다. 아래는 이해를 돕기 위한 예시이다.

만다라트예시

1. 가장 큰 목표는 가운데에 적힌 '새로운취미'이다.

2. 그 주변의 8칸에 원하는 취미들(수영, 자전거 등)을 적는다.

3. 왼쪽 위부터 세부목표인 '수영'을 위한 8가지 달성방안을 적어나간다.
(ex)수영장 등록, 발차기 30분 ...)


페이지별 기능


구성은 아래와 같으며 마우스를 가져다 댔을 때 버튼의 아이콘이 돌아감

main


회원가입

  1. 비밀번호를 입력할 때 조건에 부합하는 지 체크해준다. (부합할 때는 초록색, 아닐때는 빨간색)

signup01

  1. 에러 메세지
이미 존재하는 이메일 두개의 패스워드가 매칭되지 않을 때 패스워드가 6자리 이하일 때
signup01 signup02 signup03

로그인

  1. 에러 메세지
패스워드가 맞지 않을 때 등록되지 않은 이메일
login01 login02
  1. 로그인이 되면 세션이 유지되며, 페이지마다 유효한 유저인지 체크함.

리스트

만들어진 계획표들의 목록을 볼 수 있는 페이지

  1. 예시 계획표 - 회원가입 후 자동으로 생성됨 list01

  2. 페이지 오른쪽 아래 플러스 버튼을 눌렀을 때 - 만다라트를 잘 몰라도 직관적으로 적어낼 수 있는 단계별 모달창들

list_modal01 1. 6가지 테마 중 하나를 고른다.
list_modal02 2. 계획표의 주제를 정한다.
list_modal03 3. 가장 큰 목표를 정한다.
list_modal04 4. 그것을 이루기 위한 세부 목표를 정한다.
list_modal05 5. 성공적으로 생성

추가페이지

위에서 만든 큰 목표의 세부 목표를 적는 페이지

create01

- input 박스를 눌렀을 때 커짐
- 안쪽과 바깥의 목표가 연동되어 있음
("재테크" 부분이 아래 위 모두 수정되는 것을 볼 수 있음)

create02

체크 버튼 클릭 - 생성/저장됨


수정

edit01

돋보기 버튼으로 들어가 내용 수정 가능

edit02

원하는 테마로 즉시 수정 가능


삭제

delete01

휴지통 버튼을 눌러 삭제


로그아웃

logout01

계정 아이콘을 누르고 로그아웃

반응형

모바일

  • rem을 사용하여 화면 크기별로 html 폰트 크기 적용(모바일, 태블릿, 노트북, 데스크탑)
  • list로 element를 나열해야 하는 부분에는 flex wrap 을 사용하여 줄바꿈 자동 적용
iphone01 iphone02 iphone04 iphone05
iphone06 iphone07 iphone08 iphone09

사용스택

  • 프론트엔드

    • 템플릿엔진(ejs) : 서버단에서 받은 데이터를 조작하기 용이함
  • 프레임워크

    • node, express : 비동기 프로그래밍 기반의 좋은 성능과 JSON을 지원하는 Javascript의 생산성, 활발한 커뮤니티 등의 장점을 가졌기 때문에 사용하게 되었다.
  • 데이터베이스

    • mongoDB : 지금은 데이터 구조가 정해져있지만 후에 다른 기능이 추가되면서 새롭게 구성해야 할 수도 있다. 따라서, 유연한 DB 스키마를 가지고 있는 No SQL을 이용할 필요성을 느꼈다.
  • 보안

    • passport : 검증된 미들웨어로 세션과 쿠키 등을 쉽게 처리할 수 있고, 후에 구글 로그인과 같은 다양한 OAuth 인증을 활용할 때 비교적 통일된 구조로 사용할 수 있다.
    • bcrypt: 사용자의 패스워드를 bcrypt 라이브러리로 암호화하여 안전하게 해싱하여 저장할 수 있다.
    • Google Oauth : 이미 잘 짜여진 로그인 API를 사용하여 더욱 안전하고 사용자에게 편리한 로그인을 구현할 수 있었다. (구현 중)
  • 디자인


DB

Mongo 스키마

  1. User Schema
const userSchema = new mongoose.Schema({
  email: String,
  password: String,
  date: {
    type: Date,
    default: Date.now,
  },
});
  1. Box Schema
const boxSchema = new mongoose.Schema({
  title: { type: String, required: true },
  objective: String,
  themeId: String,
  smallPlans: [{ objective: String, plans: Array }],
  createdBy: { type: mongoose.Schema.ObjectId, ref: 'user' },
  createdOn: { type: Date, default: Date.now },
});

DEMO

https://mandart.herokuapp.com/

About

Develop web app

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published