반응형

전체 글 268

[JavaScript, Node.js] 유튜브 클론 정리 7장 (6) - MongoStore

머리글 이번 시간에는 세션 정보를 저장하는 방법을 알아보자. MongoStore 세션 데이터는 기본적으로 쿠키에 저장되지 않고 세션 id만 저장된다. 세션 데이터는 서버 쪽에 저장된다. 서버에 저장되는 default session storage는 MemoryStore인데 실제 사용을 위해 존재하는 것은 아니다. 그래서 우리는 세션을 데이터베이스에 저장하기 위해 session store를 사용한다. 우리는 connect-mongo를 이용해서 세션을 MongoDB에 저장한다. 이렇게 한다면 서버를 재시작해도 세션은 데이터베이스에 있기 때문에 로그인 정보를 잊지 않는다. 우선 설치를 해보자. npm i connect-mongo 그리고 mongoStore를 import 해서 사용할 수 있다. import Mon..

[파이썬, Python] 백준 11728: 배열 합치기

문제 https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거 www.acmicpc.net 코드 n, m = map(int, input().split()) a = list(map(int, input().split())) b = list(map(int, input().split())) ans = sorted(a+b) for i in ans: print(i, end=' ') 설명 우선 각 리스트를 받아준다. 파이썬은 리스트를 + 연산자를 통해서 합칠..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (5) - Logged in

머리글 이번 시간에는 세션과 쿠키를 바탕으로 유저의 로그인 상태를 구현해 보자. Logged In 기존에 로그인 자체는 구현했지만 로그인 상태를 구현을 하지 않아 로그인이 제대로 진행되지 않았었는데, 이 부분을 세션과 쿠키를 통해 해결해 보자. 서버는 유저를 기억하는 것이 아니라 유저가 올바른 접근 권한(쿠키)을 가져오면 알맞은 정보를 제공해 주는 방식이다. 우선 이를 위해 유저 컨트롤러에서 유저의 로그인 과정에 추가해야 할 것이 있다. ... req.session.loggedIn = true; req.session.user = user; ... 유저마다 서로 다른 쿠키를 가지고 있기 때문에, 서로 다른 session을 가지고 있다. 따라서 유저의 session에 로그인했다는 정보를 보내주자. 그리고 유..

[파이썬, Python] 백준 7576: 토마토

문제 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 코드 from collections import deque import sys input = sys.stdin.readline m, n = map(int, input().split()) tomato = [list(map(int, input().split())) for _ in range(n)] queue = deque([]) dx, dy = [-1, 1, 0, 0], [0, ..

[파이썬, Python] 백준 2161: 카드1

문제 https://www.acmicpc.net/problem/2161 2161번: 카드1 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 코드 from collections import deque num = deque(i + 1 for i in range(int(input()))) ans = list() while len(num) > 1: ans.append(num.popleft()) num.append(num.popleft()) ans.append(num[0]) for i in ans: print(i, end=' ') 설명 ..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (4) - Session, Cookie

머리글 이번 시간에는 세션과 쿠키에 대해서 알아보자. Session, Cookie 세션이랑 백엔드와 브라우저 간에 어떤 활동을 했는지 기억하는 것을 말한다. 즉, 브라우저와 백엔드 사이의 memory, history와 같은 개념이다. 만약 어떤 사이트에 로그인되어 있다면, 현재 사용하고 있는 브라우저와 그 사이트의 백엔드 사이에 세션이 존재한다는 것이다. 세션에는 보통 2주정도의 유효기간이 존재한다. 만약 기간이 지난다면 로그인을 다시 해주어야 한다. 세션이 작동하려면 백엔드와 브라우저가 서로에 대한 정보를 가지고 있어야 한다. 일반적으로 HTTP 요청을 보내고 처리가 완료되면 그 연결은 종료된다. 연결에 지속성이 없다. 이러한 것을 Stateless 라고 한다. 이 상태에서는 서버와 브라우저 양쪽 모두..

[파이썬, Python] 백준 1850: 최대공약수

문제 https://www.acmicpc.net/problem/1850 1850번: 최대공약수 모든 자리가 1로만 이루어져있는 두 자연수 A와 B가 주어진다. 이때, A와 B의 최대 공약수를 구하는 프로그램을 작성하시오. 예를 들어, A가 111이고, B가 1111인 경우에 A와 B의 최대공약수는 1이고, A www.acmicpc.net 코드 import math n, m = map(int, input().split()) print("1" * math.gcd(n, m)) 설명 규칙성을 발견한다면 간단하게 해결이 가능한 문제였다. 이 문제의 규칙은 주어진 두 수의 최대공약수에 해당하는 수만큼 1이 반복되어 나온다는 것. 따라서 math 모듈의 gcd를 사용하여 최대공약수를 구하고, 그 수만큼 1을 출력해 ..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (3) - Login

머리글 오늘은 로그인 과정에 대해서 알아보자. Login 우선 로그인 템플릿을 생성해 보자. extends base block content if errorMessage span=errorMessage form(method="POST") input(placeholder="Username", name="username", type="text", required) input(placeholder="Password", name="password", type="password", required) input(type="submit", value="Login") hr div span Don't have an account? a(href="/join") Create one now → 우선 POST 형식의 form을..

[파이썬, Python] 백준 15652: N과 M (4)

문제 https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 import sys input = sys.stdin.readline n, m = map(int, input().split()) s = [] def dfs(): if len(s) == m: print(' '.join(map(str,s))) return for i in range(1, n+1): if s: if s[-1] > i: continue s.append(i) dfs() s.pop..

[JavaScript, Node.js] 유튜브 클론 정리 7장 (2) - Validation, Status Code

머리글 이번 시간에는 중복 ID의 생성을 방지해 보자. Validation 우선 계정을 아무거나 하나 생성해 준다. 그리고 unique로 지정한 항목의 내용을 똑같이 해서 하나를 더 생성해 보자. 그럼 에러를 만나게 된다. 이 에러는 이미 존재하는 데이터를 저장할 때, 발생한다. unique로 지정한 항목은 하나만 저장이 가능한데, 이를 여러 개 저장하려고 해서 발생한 문제이다. 그러면 계정을 생성할 때, 미리 이를 방지해주어야 한다. 계정을 생성하는 컨트롤러를 조금 수정해서 해결이 가능하다. export const postJoin = async (req, res) => { const { name, username, email, password, password2, location } = req.body..

반응형