현재 선생님 강의를 보며 플젝을 진행하고 있는 와중에 한가지 질문이 생겼습니다! 백엔드(장고)단에서 사진 여러개를 올리면 그걸 기반으로 저희가 만든 딥러닝 모델이 학습해서 학습결과를 보여주는 웹서비스를 기획중입니다. 만약 api응답이 필요없는, 예를 들면 가장 첫 페이지에 그림하나 딱 들어가있고 우측상단에 로그인/회원가입 버튼만 있는 상태인 경우는 백엔드 단에서 제공해야하는 api라던가 이런게 없으니까 해당 페이지는 react에서만 처리하면 되는건가요? 그렇다면 해당 페이지에는 urls.py 등에서 설정을 해줄 필요가 없는걸까요? 웹페이지 구조에 따라 달라질 수 있지만, 이번에는 프론트와 백엔드를 완전히 분리해서 진행하다보니 이런부분이 헷갈립니다
#include <bits/stdc++.h> using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M; cin >> N >> M; map<int, string> book; vector<string> answer; for (int i = 1; i <= N; i++) { string pokemon; cin >> pokemon; book[i] = pokemon; } for (int i = 0; i < M; i++) { string question; cin >> question; for (auto const &[k, v] : book) { if (to_string(k) == question || question == v) { answer.push_back(isalpha(question[0]) ? to_string(k) : v); break; } } } for (auto str : answer) cout << str << '\n'; return 0; } 해당 코드에서 시간 초과가 나는데 for (auto const &[k, v] : book) { if (to_string(k) == question || question == v) { answer.push_back(isalpha(question[0]) ? to_string(k) : v); break; } } 아마 이 부분에서 시간 초과가 나리라 생각합니다. O(NlogN) 일거 같은데 답안과 달리 map 1개와 find 만 써서 풀 수는 없는걸까요? 왜 시간초과가 나는지 이해가 잘 안갑니다.
PageRequest pageRequest = PageRequest.of(0, 3, Sort.by(Direction.DESC, "username")); int age = 10; //when Page<Member> page = memberRepository.findByAge(age, pageRequest); PageRequest.of 코드에서 첫 번째 파라미터가 무엇을 의미하는지 헷갈립니다. PageRequest.of 의 2번째 파라미터는 한 페이지의 element 개수이고(limit), 3번째 파라미터는 정렬 조건이 맞나요? List<Member> content = page.getContent(); assertThat(content.size()).isEqualTo(3); assertThat(page.getTotalElements()).isEqualTo(5); assertThat(page.getNumber()).isEqualTo(0); assertThat(page.getTotalPages()).isEqualTo(2); assertThat(page.isFirst()).isTrue(); assertThat(page.hasNext()).isTrue(); page.getContent()는 현재 페이지의 데이터를 가져오는 메소드인가요? page.getNumber()는 현재 페이지를 가져오는 메소드인가요? Page는 책처럼 0,1,2,3 ... 이렇게 페이지가 있는 거고 Content는 그 Page안에 있는 데이터를 의미하는 건가요? List<List<data>> 와 같은 구조로 되어 있는 것일까요? Page와 Content의 자료 구조가 어떻게 되어있는지가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 윈도우 콘솔 창에 h2.bat을 입력해도 연결이 되지 않습니다. 참고로 h2.bat 파일을 실행해도 실행되었다가 바로 꺼집니다. 참고로 제 자바 jdk의 버전은 11이고 jre버전은 8입니다. 환경변수까지 11로 설정한 상태입니다. 윈도우 installer와 플랫폼 버전 모두 다운 받아서 시도했는데 안됐습니다.
const Try = memo((props) => { return( <li> <div>{props.tryInfo.try}</div> <div>{props.tryInfo.result}</div> </li> ) }) 해당 함수 컴포넌트를 익명함수가 아니라 선언적 함수로 했을 때 memo함수를 어떻게 적용시키나요?
[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]
안녕하세요, logout 기능 구현할 때 database에서 delete를 통해 구독 취소한 메일을 제거해주는 내용을 봤는데요, db에 구독으로 데이터를 쌓고 취소한 뒤에 다른 메일을 넣으면, user_id가 1이 되어야 할 거 같은데, 2로 남습니다. 구독 & 구독취소 과정을 반복해서 수행하면 db table에 1줄만 입력되어있더라도 user_id가 계속 증가하는 것을 볼 수 있는데, 어떻게 방지할 수 있을까요? 혹은 많은 user가 구독 & 구독취소를 하게 되는 경우에 구독취소된 user_id는 공백으로 두고 계속해서 user_id를 쌓는 것이 사용상에 이점이 있는걸까요?
안녕하세요 선생님 입출력싱크가 들어가는 위치는 어디가 되어야 하나요? using namespace std;밑에 바로 쓰면 에러가 나는것 같습니다. 메인함수 시작할때 항상 쓰시는거같은데 어디에 왜 그곳에 써야하는지 설명해주시면 감사하겠습니다! ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
안녕하세요 뒤집은 소수 res 식에 대하여 궁금해서 질문 올립니다. 저는 그냥 맨 뒤가 0인 경우를 무한 반복문으로 돌리고, 수를 다시 갱신하고, 맨 뒤가 0이 안 되는 경우 반복문을 빠져나와 [::-1]로 갱신하여 처리하였습니다. 하지만 res=res*10+t의 식을 아무리 봐도 이해가 안 되어서 여쭤봅니다!!!
안녕하세요, 강의 잘 듣고 있는 수강생입니다. 현재 강의를 들으면서 토이프로젝트를 구축 중입니다. https://www.inflearn.com/questions/42102/%EB%8B%A4%EC%A4%91-%EB%B3%B4%EC%95%88-%EC%84%A4%EC%A0%95 위 링크의 질문에서 선생님께서 답변 달아주신 내용인, Admin의 url 에 따른 인증 방식은 Form, User의 url 에 따른 인증 방식은 Rest 방식으로 구분 지으려는 상황입니다. 6.0 버전에 따른 강의는 추후 개정하신다는건 공지를 통해서 알고는 있는데.. 제가 이리저리 뜯어봐도 도저히 인증 방식 다르게 적용하는 부분이 너무나도 안 되서 답답하다보니 질문글을 남기게 됐습니다.. Security 6.0 이상에서 "/api"로 시작하는 url과 "/web"으로 시작하는 url 요청에 따라 다른 인증방식을 적용할 수 있는 간단한 예시를 알려주실 수 있으실까요?
안녕하세요. 취업 관련해서 준비 방향성을 어떻게 잡아야할지 고민이 돼서 질문 올려봅니다. 저는 게임 클라이언트 프로그래머가 목표인 대학생(3학점 부족)입니다. 본 전공은 경영이고 복수전공으로 it관련 학과를 공부했습니다. 원래는 이번 학기에 3학점을 채우려고 했는데 크래프톤 정글 프로그램에 합격이 돼서 합숙하면서 공부를 하고 있습니다. 여기 커리큘럼은 자료구조, 알고리즘, RB트리, 말록랩, 웹서버, 컴퓨터구조, C언어, 운영체제 등을 배우고 나머지 기간은 프로젝트를 개발하는 순서로 짜여져 있습니다. 우선은 여기서 배운 내용을 바탕으로 프로그래머 직군에 취업을 바로 할 수 있으면 할 예정인데요, 안 되면 바로 게임 포트폴리오 준비와 그래픽스와 같은 게임 개발 관련 지식을 공부하려고 합니다. 물론 바로 취업하더라도 어느정도 안정되면 나중에 다시 게임 프로그래머로 전향할 겁니다. 여기서 궁금한 점은 만약 합숙이 끝나고(8월 17일) 바로 취업이 되지 않는다면 내년 공채를 노려야 할텐데, 남은 기간동안 무엇을 어떻게 준비하는게 가장 효율적일까요? C++, 언리얼 당연히 사용할 예정이며, 다행인 점은 찾아봤던 학원에서도 자료구조나 알고리즘과 같은 핵심 cs 지식을 공부하는 시간이 꽤 있더라구요. 그래서 커리큘럼 상에서 겹치는 부분은 백준이나 프로그래머스 문제를 꾸준히 푸는 것과 cs지식 복습 정도로 대신할 수 있을 것 같습니다. 개인적으로는 6개월 정도 되는 단기 커리큘럼(있다면)을 가진 학원이나 인프런 강의들을 수강하면서 그래픽스와 같은 게임 개발 관련 지식들을 공부하려고 합니다. 조언 부탁드립니다.
메모리에 프로세스가 생성 되면 각각의 프로세스에 스택 영역, 힙 영역, 데이터 영역, 코드 영역이 생성 되는 건가요? 만약 맞다면 명령어 사이클과 인터럽트에서 말했던 인터럽트시 스택 영역에 기존 프로그램의 정보(프로그램 카운터 등)들을 저장한다 했는데, 여기서 말하는 스택 영역은 각각의 프로세스의 스택 영역 과 다른 의미의 스택 영역 인가요? 아니면 해당 프로세스의 스택 영역에 저장 되는건가요?
안녕하세요 선생님 12강 데이터베이스에 있는 정보로 로그인 하는 쪽 강의 질문 드립니다. app.post("/api/users/login", (req, res) => { // 요청된 이메일을 데이터베이스에서 찾는다 User.findOne({ email: req.body.email }, (err, user) => { if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다", }); } // 요청된 이메일이 데이터베이스에 있다면 비밀번호가 맞는 비밀번호 인지 확인 user.comparePassword(req.body.password, (err, isMatch) => { // 비밀번호가 틀릴 경우 if (!isMatch) return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다", }); // 비밀번호까지 맞다면 토큰을 생성하기 user.generateToken((err, user) => { if (err) return res.status(400).send(err); // 토큰을 저장한다. 쿠키 로컬스토리지 세션 등 // 여기서는 쿠키 사용 // x_auth라는 이름으로 토큰이 들어감 res .cookie("x_auth", user.token) .status(200) .json({ loginSuccess: true, userId: user._id }); }); }); }); }); 위와 같이 작성된 코드를 app.post("/api/users/login", async (req, res) => { // 요청된 이메일을 데이터베이스에서 찾는다 try { const user = await User.findOne({ email: req.body.email }); if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다", }); } // 요청된 이메일이 데이터베이스에 있다면 비밀번호가 맞는 비밀번호 인지 확인 const isMatch = await user.comparePassword(req.body.password); // 비밀번호가 틀릴 경우 if (!isMatch) { return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다", }); } // 비밀번호까지 맞다면 토큰을 생성하기 const token = await user.generateToken(); // 토큰을 저장한다. 쿠키 로컬스토리지 세션 등 // 여기서는 쿠키 사용 // x_auth라는 이름으로 토큰이 들어감 res .cookie("x_auth", token) .status(200) .json({ loginSuccess: true, userId: user._id }); } catch (err) { return res.status(400).json({ loginSuccess: false, error: err }); } }); 이렇게 변경했습니다. 그런데 postman으로 자꾸 실행해보면 비밀번호가 틀렸다는 오류를 받고 있습니다. 그리고 서버가 꺼지는 현상이 발생하고 있습니다. isMatch문이 잘못된 것 같아서 !isMatch 예외문을 주석처리하고 실행하면 서버가 바로 꺼져버리는 현상이 발생합니다. 어떻게 코드를 변경해야 할까요? 그리고 console.log()로 오는 값들을 확인하고 싶은데 cossole.log()로 찍은 보고싶은 값을 어떻게 볼 수 있나요? http://localhost:5000/api/users/login 로 들어갔는데도 안보입니당.. %% 이 코드를 /register로 postman을 보낼때는 정상적으로 작동하고 monogdb에도 잘 등록이 되서 다른 부분은 오류가 아닌 것 같습니다 %% %% 스키마 부분 코드도 첨부합니다 (선새인ㅁ과 똑같이 작성함) %% userSchema.methods.comparePassword = function (plainPassword, cb) { // plainPassword 는 입력한 값 데이터베이스 비밀번호는 $2b$10 등 으로 암호화 되어 있음 // 그러므로 plainPassword를 암호호 해야 함 // bcrypt를 이용해 암호화 bcrypt.compare(plainPassword, this.password, function (err, isMatch) { // this.password는 5번째줄에 userSchema에서 가져옴 if (err) return cb(err); cb(null, isMatch); }); }; userSchema.methods.generateToken = function (cb) { let user = this; // 데이터베이스의 id 를 넣고 이름을 정해준다. // 이후 secretToken을 입력하면 user._id가 나온다 let token = jwt.sign(user._id.toHexString(), "secretToken"); // user의 token에 방금 만든 token을 넣어준다. user.token = token; user.save(function (err, user) { if (err) return cb(err); cb(null, user); }); };