전체 글(226)
-
[Youtube 클론코딩] Video 업로드, mongoose populate, 접근제어
업로드 기능 자체는 이전에 작성했던 프로필 사진 업로드와 같은 기능을 사용해 비디오도 업로드 가능하다. 유저 및 비디오 스키마 변경 다만, 비디오를 업로드 한 사람만 수정 및 삭제할 수 있는 권리를 부여하기 위해서는 두 스키마의 연결이 불가피하다. DB를 배워보면 각 DB를 join 하기 위해서는 unique key를 이용해야 하는데 mongoDB는 자체적으로 _id 라는 unique key를 발행해서 관리한다. 따라서, 비디오의 스키마에서는 업로드 한 사람의 _id를 저장하고 유저의 스키마에서는 해당 유저가 업로드 한 비디오의 _id 들을 배열 형태로 저장하면 된다. 여기서 특이한 점은, 데이터의 type을 지정할 때, mongoose.Schema.Types.ObjectId 라고 지정했는데 그 이유는 ..
2022.11.24 -
BOJ 14502. 연구소
14502번: 연구소 (acmicpc.net) 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 처음 봤을 때는 상당히 당황스러운 문제였다. 어느 부분에 벽을 놓아야 할지 감이 잘 안왔던 문제였는데 문제에서 한가지 힌트를 얻었다. 안전 영역의 크기를 구하는데 최댓값을 구하라는 걸 보니 여러 번 시도하는 문제라는 것을 알 수 있었다. 그렇다면 가장 쉬운 방법으로 BFS를 Backtracking하여 푸는 문제로 생각이 들었다. 그러면 시간복잡도는 어떻게 될까? 연구소의 크기가 최대 8*8이고 여기서 벽을 3개 세워야 하므로 64..
2022.11.23 -
[Youtube 클론코딩] 파일 업로드, Multer 미들웨어, 프로필 사진 수정
파일 업로드를 위해서는 input 태그의 속성을 이용해야 한다. 또, 어디를 눌러도 파일 선택 창이 열릴 수 있도록 label 태그로 감싸주면 좋다. - HTML: Hypertext Markup Language | MDN (mozilla.org) - HTML: Hypertext Markup Language | MDN HTML 요소는 사용자 인터페이스 항목의 설명을 나타냅니다. developer.mozilla.org label을 input요소와 연결하려면, input 요소에 id 값을 넣고 label에는 for요소를 넣은 뒤 두 요소를 같게 만들어 주면 된다. 또는 label 안에 input요소를 집어넣어주면 연결된다. 이를 이용해 유저의 프로필을 변경해보자. edit-profile.pug 수정하기 nam..
2022.11.23 -
[Youtube 클론코딩] 비밀번호 변경, bcypt의 원리
비밀번호 변경은 다음과 같은 로직을 따른다. 1. 기존 비밀번호, 새로운 비밀번호, 확인용 비밀번호를 입력받는다. 2. 기존 비밀번호가 데이터베이스에 존재하는 비밀번호와 일치하는지를 확인한다. 3. 새로운 비밀번호와 확인용 비밀번호가 서로 같은지 판단한다. 4. 2, 3번을 통과한 경우 새로운 비밀번호를 해시하여 DB에 저장한다. 1. 비밀번호 변경 페이지 제작 라우터 설정 이미 로그인 한 사람만 들어올 수 있도록 접근제어 미들웨어를 넣어서 설정해준다. 페이지 제작 패스워드 변경 페이지를 제작한다. 현재 views 를 보면 user용 페이지와 video 용 페이지들이 나뉘어 있는 것을 볼 수 있는데, 이것들을 정리하고 싶으면 따로 users 폴더와 videos 폴더로 옮겨준 뒤 경로 수정들을 해주면 된다..
2022.11.23 -
BOJ 13460. 구슬 탈출 2
13460번: 구슬 탈출 2 (acmicpc.net) 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 2차원 배열 백트래킹 문제. 여기서 포인트는, 구슬이 한번에 두개가 동시에 움직인다는 것이다. 즉, 구슬을 기준으로 BFS로 이동시키면, 먼저 이동하는 구슬이 있으므로 구현할 수 없다. 따라서 판의 기울임을 기준으로 움직여주어야 한다. 이를 구현하려면 일단 판을 왼쪽으로 기울이는 swiping 함수가 필요하고 한쪽으로 기울이는 함수를 네 방향으로 적용하기 위해 ..
2022.11.22 -
[Youtube 클론코딩] 프로필 수정 기능
프로필 수정 기능을 추가하기위해 페이지를 추가해보자. 순서 1. 라우터에서 프로필 수정에 사용할 url과 컨트롤러 설정 2. 컨트롤러에서 프로필 수정에 사용할 페이지 render 3. 프로필 수정에 사용할 페이지 파일 제작 4. 프로필 수정 기능을 컨트롤러에 추가 5. URL 보호 처리 1. 라우터에서 프로필 수정에 사용할 url과 컨트롤러 설정 2. 컨트롤러에서 프로필 수정에 사용할 페이지 render 3. 프로필 수정에 사용할 페이지 파일 제작 로그인 된 유저 정보를 화면에 표시해주어야 하는데, 우리는 이미 현재 로그인 한 유저의 정보를 세션으로 가지고있다. 또한 middleware를 이용해서 세션의 정보들을 다음과 같이 res.locals에 저장해두었는데, pug는 res.locals에 저장된 변수..
2022.11.22