2021.01.07

로그인 오류가 언제부턴가 나기 시작했었다.

처음에는 대소문자만 구분을 못하는 건 줄 알았는데, 알고 보니 bcrypt의 compare 함수 부분에서

오류가 있었다. 정확히 말하자면 return 값에 오류가 있어 비밀번호를 제대로 입력하지 않아도 로그인이

되어버리는 현상이 있었다. 

compare 함수의 위치를 User.js(model) 에서 passport.js 로 옮기니 해결되었다.

자세한 이유는 확실히 알게 되면 포스팅할 예정이다.

( 이것 때문에 3시간이나 골머리를 앓았다...)

 

추가된 개발 상황

 - 로그인 오류 수정

 

추가할 기능

 - 댓글의 수정 및 삭제

 - 대댓글 기능

 

원래 User.js에 위치한 compare 함수

 

passport.js로 compare 함수를 이동한 모습

 

 

nodejs와 mongoDB를 활용한 간단한 게시판 만들기를 진행해 보았습니다.

CSS와 JS는 bootstrap의 힘을 빌려서 작성했습니다. 개발도구로는 vscode를 사용했습니다.

코드는 아래의 저장소에서 볼 수 있습니다.

처음 공부하고, 만들어 보는 페이지라서 가독성과 클린 코드, 문법 등은

부족합니다.

그 점 양해 부탁드립니다.

github.com/holicAZ/Nodejs

 

holicAZ/Nodejs

Contribute to holicAZ/Nodejs development by creating an account on GitHub.

github.com

 

'개발일지 > 게시판 만들기' 카테고리의 다른 글

게시판 만들기 #6  (0) 2021.01.21
게시판 만들기 #5  (0) 2021.01.14
게시판 만들기 #4  (0) 2021.01.13
게시판 만들기 #2  (0) 2021.01.06
[2020.12.01 ~ ] 게시판 만들기 #1  (0) 2021.01.05

2021.01.06

게시판의 댓글 작성 기능까지 구현을 완료했다.

작성 외의 수정, 삭제, 대댓글 등은 추후 추가할 예정이다.

댓글은 Comment 라는 새로운 스키마의 생성과

User 와 Post 둘 다 관계를 설정해 줘야 해서 좀 까다로웠다.

 

 

추가된 개발 상황

 - 댓글 기능 추가

 

추가할 기능

 - 댓글의 수정 및 삭제

 - 대댓글

 - 비밀번호 오류가 발생 수정 예정

 

 

댓글 기능 추가

 

MongoDB 생성된 모습

 

 

nodejs와 mongoDB를 활용한 간단한 게시판 만들기를 진행해 보았습니다.

CSS와 JS는 bootstrap의 힘을 빌려서 작성했습니다. 개발도구로는 vscode를 사용했습니다.

코드는 아래의 저장소에서 볼 수 있습니다.

처음 공부하고, 만들어 보는 페이지라서 가독성과 클린 코드, 문법 등은

부족합니다.

그 점 양해 부탁드립니다.

github.com/holicAZ/Nodejs

 

holicAZ/Nodejs

Contribute to holicAZ/Nodejs development by creating an account on GitHub.

github.com

 

'개발일지 > 게시판 만들기' 카테고리의 다른 글

게시판 만들기 #6  (0) 2021.01.21
게시판 만들기 #5  (0) 2021.01.14
게시판 만들기 #4  (0) 2021.01.13
게시판 만들기 #3  (0) 2021.01.07
[2020.12.01 ~ ] 게시판 만들기 #1  (0) 2021.01.05

2021.01.05

처음부터 개발일지를 기록했어야 하지만 블로그를 하겠다는 생각을 실천으로 옮기지 못한 탓에

시작일이 정확하지 않다. 기억나는 날짜를 임의로 12월 즈음으로 설정했다. 

앞으로 개발 상황은 계속 업데이트 할 예정이다.

 

현재까지 개발 상황

 - 메인 페이지 구현

 - 회원가입, 로그인, 로그아웃, 마이페이지 구현

 - 로그인을 passport를 활용하여 로그인 유무에 따른 nav 바 및 기능제약 구현

 - 게시물 보기, 게시글 쓰기 (file[사진], post[본문]) 관계 설정 완료 

 - 게시물을 페이지 당 n개의 게시글로 끊어서 출력하기

 

추가할 기능

 - 댓글 및 대댓글 기능

 - 현재 비밀번호 대소문자 구분에 있어 오류가 있는 듯 하니 수정

 

 

홈 화면

 

회원가입 페이지

 

로그인 페이지

 

my page 및 로그인 시 로그아웃 버튼 활성화

 

전체 게시물 페이지

 

게시물 클릭 시 게시물 페이지로 이동

 

 

 

 

nodejs와 mongoDB를 활용한 간단한 게시판 만들기를 진행해 보았습니다.

CSS와 JS는 bootstrap의 힘을 빌려서 작성했습니다. 개발도구로는 vscode를 사용했습니다.

코드는 아래의 저장소에서 볼 수 있습니다.

처음 공부하고, 만들어 보는 페이지라서 가독성과 클린 코드, 문법 등은

너무 너무 부족합니다.. ㅜ.ㅜ 

그 점 양해 부탁드립니다..

github.com/holicAZ/Nodejs

 

holicAZ/Nodejs

Contribute to holicAZ/Nodejs development by creating an account on GitHub.

github.com

'개발일지 > 게시판 만들기' 카테고리의 다른 글

게시판 만들기 #6  (0) 2021.01.21
게시판 만들기 #5  (0) 2021.01.14
게시판 만들기 #4  (0) 2021.01.13
게시판 만들기 #3  (0) 2021.01.07
게시판 만들기 #2  (0) 2021.01.06

map

 - map은 red-black Tree로 구현돼 있다. 즉, 균형 트리 형태

#include<map>
std::map<key,value> 변수명 ;

 

unordered_map

 - unordered_map은 hash table로 구현돼 있다.

#include<unordered_map>
std::unordered_map<key,value> 변수명 ;

 

사용법

 - 둘 다 <key,value> 꼴로 데이터를 저장한다.

 - 삽입을 위한 insert, 삭제를 위한 delete, find, count, size, clear 등 사용법은 동일하다.

 

 

차이점

 - map 과 unordered_map의 큰 차이 점은 구현에서 부터 이미 차이가 난다. 

 - map은 탐색연산의 시간복잡도가 O(log N) 인 반면 unordered_map은 O(1) 이다.

 - map은 균형트리에 맞게 항상 정렬하지만, unordered_map은 그렇지 않다.

 

 

결론

 - 정렬을 필요로 하는 경우가 아니라면 연산속도는 unordered_map이 훨씬 유리하다.

 - 일반적으로 key값이 짧고, int형인 경우 unordered_map을 권장한다.

 - key값이 길고 복잡하며, 유사한 값이 많을 경우 unordered_map의 해쉬 충돌로 인해 성능이 저하될 수 있다.

 

 추가적인 map의 사용법은 후에 포스팅 하겠습니다.

 

코딩을 공부하고 있는 학생입니다.

공부한 것을 정리, 공유하기 위해 블로그를 운영하고 있습니다.

포스팅에 틀린 부분이 있다면 과감한 지적, 수정의 한 마디 부탁드립니다! 감사합니다 :)

github.com/holicAZ

 

holicAZ - Overview

holicAZ has 10 repositories available. Follow their code on GitHub.

github.com

 

'Language > C++' 카테고리의 다른 글

C++ 소수점 자릿수 정하기  (0) 2021.03.02
[STL] find (vector 내부의 요소 위치 확인)  (0) 2021.02.08
[STL]sort, stable_sort  (0) 2021.01.10

populate

 - 스키마에서 관계를 설정하고, _id값을 기반으로 전체 객체를 가져오는 예약어

 

사용 및 예제

만약 populate 없이 log를 출력하게 되면

 

author 값이 _id 값으로 출력된다.

 

먼저 사용하기 위해선 Schema에 type:mongoose.Schema.Types.ObjectId, ref:'User'와 같이 관계를 설정해 줘야 한다.

예제에선 Post(글)와 User(사용자) 사이의 관계를 설정했다.

const PostSchema = new mongoose.Schema({
  body: { type: String },
  author:{type:mongoose.Schema.Types.ObjectId, ref:'User',required:true},
  ...
  }

그 후, controller단에서 .populate 를 사용한다.

Post.findOne({_id:req.params.id})
  .populate('author','name id')
  .exec((err,data) => { 
      console.log(data);
  })

 

post를 찾음과 동시에 author 부분에

해당 User의 _id 값 대신, 관계 설정을 한 User 스키마 객체로 출력된다.

 

populate의 사용으로 author부분이 객체로 출력

 

 

객체 전체가 출력되기 때문에 불필요한 정보도 같이 출력되는 것을 볼 수 있다.

원하는 한정된 정보만 얻고 싶다면 다음과 같이 요소를 추가해 주면 된다.

Post.findOne({_id:req.params.id})
  .populate('author','id')
  ...

 

불필요한 값은 제거되고, id 값만 출력되는 모습

 

 

만약 관계가 두 개 이상이라면. populate를 연달아 두 번 선언해 주면

두 가지의 객체를 모두 가져올 수 있다.

 

 

 

 

코딩을 공부하고 있는 학생입니다.

공부한 것을 정리, 공유하기 위해 블로그를 운영하고 있습니다.

포스팅에 틀린 부분이 있다면 과감한 지적, 수정의 한 마디 부탁드립니다! 감사합니다 :)

github.com/holicAZ

 

holicAZ - Overview

holicAZ has 9 repositories available. Follow their code on GitHub.

github.com

 

 

async & await

 

- 자바스크립트의 비동기 처리 패턴 중 가장 최근에 나온 문법입니다.

 

- 다른 비동기 처리로는 callback, promise, setTimeout 이 있습니다.

 

 

 

 

JavaScript의 동작 방식

 

- JavaScript(줄여서 JS)는 비동기적 성질을 가지고 있습니다. 즉, 선행되는 코드의 연산이 다 끝나지 않더라도

  기다리지 않고 다음 코드를 실행합니다.

 

 - 위와 같은 성질 때문에 변수에 담긴 값이 undefinded 가 되는 오류가 종종 발생합니다.

 

 

 

 

async & await의 사용과 동작 방식

 

function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}

async function asyncCall() {
  console.log('calling');
  const result = await resolveAfter2Seconds();
  console.log(result);
  // expected output: "resolved"
}

asyncCall();

(위 코드는 MDN Web Docs에서 발췌한 것입니다.developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/async_function)

 

비동기적 처리의 동작을 확인하기 위해 setTimeout 즉 시간적 딜레이를 넣어줬습니다.

 

 

asyncCall() 함수 앞에 async를 기입하고,

그 아래 await을 적용할 resolveAfter2Seconds() 함수 앞에 await을 선언해 줬습니다.

 

 

함수의 동작 결과는 

(1) 'calling' 출력, 2초 후 'resolved' 출력이다.

 

만약 await이 없다고 한다면 동작 결과는

(2) 'calling' 출력, [object Promise] 출력이다. 즉 두 번째 값은 오류 값이다.

 

 

(1)과 (2)의 결과 값이 다르게 나오는 이유는 (1)은 await의 선언으로  resolveAfter2Seconds() 함수가

실행 완료될 때까지 기다린 후 다음 코드를 실행하기 때문입니다.

 

그에 반해 (2)는 resolveAfter2Seconds() 함수에서 2초의 딜레이를 기다리지 않고 바로 다음 코드를 

실행하기 때문에 두 번째 값이 오류 값이 출력되는 것입니다.

 

 

 ※ 쉽게 요약하면 JS는 코드의 연산을 기다리지 않고 다음 코드를 실행하려는 성격을 가지지만,

async & await 비동기 처리를 만나면 단어 뜻 그대로 잠깐 wait(기다림) 후 다음 코드를 실행합니다.  

 

 

 

코딩을 공부하고 있는 학생입니다.

공부한 것을 정리, 공유하기 위해 블로그를 운영하고 있습니다.

포스팅에 틀린 부분이 있다면 과감한 지적, 수정의 한 마디 부탁드립니다! 감사합니다 :)

github.com/holicAZ

 

holicAZ - Overview

holicAZ has 9 repositories available. Follow their code on GitHub.

github.com

 

'Web > JavaScript' 카테고리의 다른 글

객체(Object)  (0) 2021.01.30

 

플렉스 박스란?

 -  플렉스 박스는 플렉스 컨테이너, 플렉스 요소로 구성됩니다.

 -  요소를 블록 타입으로 설정하려면 display 속성값을 flex로, 인라인 타입으로 정의 하려면 inline-flex로 설정합니다.

 -  플렉스 컨테이너는 무조건 하나 이상의 플렉스 요소를 포함해야 합니다.

 -  플렉스 요소는 플렉스 라인이라는 가상의 선을 따라 위치합니다.

 

 

플렉스 박스(flex box) 레이아웃

 

플렉서블 박스(flexible box)는 플렉스 박스(flex box)라고도 불리며, CSS3에서 처음 소개된 레이아웃 모델입니다.
이 레이아웃은 서로 다른 크기의 화면과 기기에서도 HTML 요소들이 자동으로 재정렬되어, 웹 페이지의 레이아웃을 언제나 똑같이 유지할 수 있게 해줍니다.

 

 

플렉스 박스(flex box)을 위해 제공되는 속성은 다음과 같습니다.

 

display 박스 타입 설정
flex-direction 요소들의 위치 방향을 설정(ex 좌->우)
justify-content 요소의 수평 방향 정렬 방식 설정
align-items 요소의 수직 방향 정렬 방식 설정
flex-wrap 플렉스 라인 풀일 때 줄 바꿈 설정
flex-flow flex-direction 및 flex-wrap 이용한 스타일을
한 줄에 설정 가능
align-content flex-wrap 속성 동작 변경 가능
플렉스 라인 정렬

 

 

또한, 플렉스 요소(flex item)를 위해 제공되는 속성은 다음과 같습니다.

 

 

order 요소의 순서 설정
align-self align-items 속성보다 우선순위
요소마다 서로 다른 align 속성값 설정 가능
flex 요소의 너비 상대적 설정 가능

 

더 자세한 사항은 (www.tcpschool.com/css/css3_expand_flexbox) 참조

 

 

코딩을 공부하고 있는 학생입니다.

공부한 것을 정리, 공유하기 위해 블로그를 운영하고 있습니다.

포스팅에 틀린 부분이 있다면 과감한 지적, 수정의 한 마디 부탁드립니다! 감사합니다 :)

github.com/holicAZ

 

holicAZ - Overview

holicAZ has 9 repositories available. Follow their code on GitHub.

github.com