묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
으 .. 제로초님 막혀서 다시 왔습니다 ㅠㅠ
자꾸 질문드려서 죄송합니다 ㅠㅠ 현재 메인페이지에서 새로고침 하면 로그인 유지가 잘 되지만, 헤더의 다른 링크를 눌러 들어간 후 , 새로고침을 하면 로그인이 다시 풀리게됩니다. console창에 찍어보니 메인페이지에서는 index.js를 타서 getServerSideProrps를 실행해 새로고침을 해도 매 요청을 먼저 실행하지만 다른곳의 코드는 그렇지 않습니다 즉 _app.js와 같은 곳에서 getInitialProps를 선언해 전역적으로 관리를 해줘야한다는 생각이 들었는데 (_app.js에서는 getServerSideProps가 사용이 안되더라구요..) 공식문서에서는 app.js보다는 각 페이지마다 요청을 보내는것을 추천하고 있는데, 어떤 방법이 제일 좋은 방법일까요? 1.메인화면입니다(이곳에서는 새로고침을 해도 로그인 유지가 됩니다 index.js를 타기때문에) 2.index.js의 코드입니다. import axios from 'axios'; import Head from 'next/head'; import React, { useEffect } from 'react'; import { END } from 'redux-saga'; import MainSection from '../components/MainSection'; import { LOAD_PRODUCT_TYPE_REQUEST, LOAD_USER_INFO_REQUEST, } from '../reducers/action'; import wrapper from '../store/configureStore'; const index = () => { console.log('index 페이지 들어옴'); // useEffect(() => { // localStorage.getItem('vintage-info-user'); // }, []); return ( <> <Head> <title>폴로딩고</title> </Head> {/* 섹션 */} <MainSection /> {/* 상품페이지 */} </> ); }; export const getServerSideProps = wrapper.getServerSideProps( async (context) => { // index js의 리듀서 구조를 바꿔야함 중첩되게 끔 axios.defaults.headers.Cookie = ''; // 로그인을 공유하는 상황을 막기 위해서 const cookie = context.req ? context.req.headers.cookie : ''; // console.log('쿠키 : ', cookie); // defaults 쿠기 설정 (로그인 했을 경우에만) if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch({ type: LOAD_USER_INFO_REQUEST, }); // 첫 파에지 랜딩에는 최근 등록된 상품 기준으로 보여주거나 업로드 날짜가 가장 최근인 애들을 보여줘야함 context.store.dispatch({ type: LOAD_PRODUCT_TYPE_REQUEST, data: 'all', }); // 위에 REQUEST가 SUCCESS로 바뀔 때 까지 기다려주는 장치임 // 공식문서에 나옴 context.store.dispatch(END); await context.store.sagaTask.toPromise(); // store.sagatask에서 등록해놓음(index.js에서) /// ///////////////////////////////////////////////// } ); export default index; 하지만, 헤더쪽 다른 SHOP이런곳을 가서 새로고침을 하면 로그인이 풀리게됩니다 (이유는 index.js를 타지 않기 때문인데 app.js 에 전역으로 관리하게끔 만들어줘야하나요?)
-
미해결Vue로 Nodebird SNS 만들기
nuxt start경우
nuxt start의 경우에서도 이렇게 다 적어주면 되나요?PORT=80 NODE_ENV=production nuxt start
-
미해결윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정
Java파일 Config 자동 주입 질문 있습니다.
java3빈의 data1과 data2를 byName으로 주입할 때 위에 정의해둔 data1빈, data2빈을 자동으로 주입하잖아요 그런데 이렇게 주입받으면 java3빈의 data1과 data2가 각각 다른 빈을 주입받게 되는데, java3빈의 data1과 data2를 서로 동일한 빈을 주입받게 하려면 어떻게 해야 하나요?
-
미해결대세는 쿠버네티스 (초급~중급편)
스토리지 실습 부분 에러 문의 드립니다.
스토리지 부분 실습을 따라 하다가 아래와 같은 에러가 발생해서 문의 드립니다. 해당 버전에 맞는 이미지가 없다는 것인지요? 그렇다면 어떻게 수정해야 정상 작동이 가능한지 문의 드립니다. Failed to pull image "gcr.io/google_containers/hyperkube:v1.20.5": rpc error: code = Unknown desc = Error response from daemon: manifest for gcr.io/google_containers/hyperkube:v1.20.5 not found: manifest unknown: Failed to fetch "v1.20.5" from request "/v2/google_containers/hyperkube/manifes root@master:~# kubectl get all -n storageos NAME READY STATUS RESTARTS AGE pod/storageos-daemonset-jm9dk 0/1 Running 1 10m pod/storageos-scheduler-74c4bd49fb-g4cbn 0/1 ImagePullBackOff 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/storageos ClusterIP 10.103.48.217 192.168.137.50 5705/TCP 10m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/storageos-daemonset 1 1 0 1 0 <none> 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/storageos-scheduler 0/1 1 0 10m NAME DESIRED CURRENT READY AGE replicaset.apps/storageos-scheduler-74c4bd49fb 1 1 0 10m root@master:~#
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
테스트 케이스 작성시 @RequriedArgsConstructor를 사용하지 않는 이유 문의
주문 기능 테스트에서 @RequiredArgsConstructor를 사용하지 않고, @Autowired 필드 주입으로 일일이 넣으셨는데, 혹시 특별한 이유가 있으셨는지 궁금해서 문의 드립니다. (가령 테스트 케이스에서는 @RequiredArgsConstructor를 사용하지 않는 것이 권장된다든지...) 감사합니다 :)
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
로그인 send 오류
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 로그인 라우터 작성 후 send가 되지 않아 질문 드립니다.ㅠㅠ 혹시 제가 코드를 잘못 작성한 거 아닐까 영상을 몇 번이나 봐도 코드 오류는 아닌데.. 런해도 오류도 안 뜨구요ㅠㅠ 도움 부탁 드립니다.. 이게 index.js app.post('/login', (req, res)=> { //요청된 이메일을 데이터베이스에서 있는지 찾는다. User.findOne({email:req.body.email}, (err, user)=>{ if(!user){ return res.json({ loginSucess : false, message:"제공된 이메일에 해당하는 유저가 없습니다." }) } //요청한 이메일이 있다면 비밀번호가 같은지 확인한다. //DB에 저장된 비밀번호와 로그인 시도 시 입력한 비밀번호를 비교한다. 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); //토큰을 저장한다. 쿠키, 로컬스토리지 등 여러군데 저장이 가능하다. //여기서는 쿠키에 저장하기로 한다. res.cookie("x_auth",user.token) .status(200) .json({loginSuccess:true, userId : user._id}) }) }) }) }) 이게 user.js 입니다. userSchema.methods.comparePassword = function(plainPassword, cb){ //plainPassword 1234567 | DB에 저장된 암호화된 비밀번호 ~ 가 같은지 체크해야 한다. //1234567을 암호화 한 후 비교하도록 한다. 복호화할 순 없기 때문에. bcrypt.compare(plainPassword, this.password, function(err, isMatch){ if (err) return cb(err), cb(null, isMatch) }) } userSchema.methods.generateToken = function(cb) { var user = this; //jsonwebtoken 을 이용해서 토큰을 생성하기 var token = jwt.sign(user._id.toHexString(), 'secretToken') //user._id + 'secretToken' = token //-> secretToken을 넣으면 user id 값을 식별한다. 그래서 token은 식별을 위해 기억해둬야 해서 변수로 저장한다. //'scretToken' -> user._id user.token = token; user.save(function(err, user){ if(err) return cb(err) cb(null, user) }) } const User = mongoose.model('User', userSchema) module.exports = {User} 패스워드 암호화까지는 정상적으로 됩니다!
-
미해결[입문자를 위한] QGIS로 시작하는 데이터 시각화
수업자료가 강의내용와 맞지 않는데요~~?
-1강내에 있는 수업자료와 강의 내용이 맞지 않아 . 강의내용을 제가 제대로 하고 있는지 검증이 되지 않습니다 . 강의내용과 맞는 강의 자료를 받아 볼 수 없을 까요 ?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
알고리즘과 자료구조 공부
알고리즘과 자료구조를 쉽고 빠르게 배울수 있는 곳이 있을까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
일곱난쟁이 질문
안녕하세요. 좋은 강의 덕분에 많이 배우고있습니다. 다름이 아니라 arr.splice(i,1); arr.splice(j,1); 로 입력시 i번째 값을 먼저 삭제한 뒤에 j번째 값을 삭제하기때문에 답이 달라진다고 하시면서 올바른 답을 얻기 위해서는 arr.splice(j,1); arr.splice(i,1); 와 같이 작성하라고 하셨는데 만약 j가 i보다 뒤에 위치한다는 것(즉, i<j)을 모른다면 어떻게 처리해야 할지 궁금합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
테스트 케이스를 하나 더 만들어봤습니다
선생님 안녕하세요. 수업을 듣던 중 궁금한 것이 생겨 질문 드립니다. 필수과목 순서가 ABC라고 했을 때 CABC 이렇게 과목을 설계했다면 이것은 NO이어야 하는건가요?
-
미해결자바스크립트 중고급: 엔진 핵심
Array.prototype.slice.call(arguments)에 대한 질문
선생님 안녕하세요. 파라미터 병합의 예제에 있는 코드 중 Array.prototype.slice.call(arguments) 에 대해 질문이 있습니다. slice 메소드에서 call을 통해 arguments를 this로 참조하기만 하는 게 아닐까요? slice메소드가 실행될 배열이 주어진 게 없는 것 같은데, 10, 20이 파라미터로 들어 갔을 때 어떻게 [10, 20] 과 같은 배열의 형태로 반환되는 건지 궁금합니다. 감사합니다!
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
201과 3xx Location
안녕하세요 영한님 강의를 듣던 중 궁금한 점이 생겨서 질문 남겨봅니다!! 3xx은 Location 헤더를 넣으면 자동으로 클라이언트에서 해당 Location으로 자동 리다이렉트 된다고 하셨는데 201은 Location 헤더가 있어도 자동 리다이렉트는 안하나요??
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요 다음 강의 출시 일정이 궁굼합니다!
안녕하세요 선생님! 지난번에 마이크로서비스 패턴 관련 강의 출시에 대해 질문을 하고 또 질문을 해서 죄송합니다. CI/CD 관련 강의가 혹시 언제쯤 출시되는지 알 수 있을까요...?
-
미해결데이터베이스 중급(Modeling)
Subject 테이블과 Lecture 테이블 질문드립니다.
요구사항에서 과목은 학년별로 담당선생님이 따로 있다. "과목은 '학년별로'" 이 부분에서, 강의에서는 Subject를 마스터 테이블로 만들고, OpenLecture 관계 테이블에 GradeId 를 외래키로 썼더라구요. 혹시 이 부분에서 Grade를 OpenLecture 테이블이 아닌 Subject 테이블의 외래키로 설정하고, SubjectId 랑 GradeId를 묶어서 PK로 선언하고 Subject 테이블의 PK를(GradeId, SubjectId) OpenLecture 테이블의 외래키로 설정해도 상관 없을까요? 컬럼 수로만 따지면 변경사항은 없으나 관계 매핑에서 차이가 좀 있더라구요. 항상 좋은 강의 감사드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
REDO, UNDO, ROLL BACK, ROLL FORWARD 에 관해
안녕하세요 Q1) 지금까지 이음동의어로 생각해왔는데 REDO = ROLL FORWARD UNDO = ROLL BACK 강의 마지막 결론에서 정리해주신 내용을 보니 또 다른 의미인 것 같아서 살짝 아리송 하네요 REDO 와 UNDO는 발자취(LOG)라고 보면 ROLL FORWARD나 ROLL BACK은 그 발자취를 따라 가는 행위를 말하는건가요? 마지막 질문으로 Part5 DB를 끝내봅니다 ㅎㅎ 감사합니다.
-
미해결마케팅 에이전시 대표에게 배우는 페이스북/인스타그램 광고 마스터하기
텍스트 오버레이가 없어요 ㅠ
현재 강의를 듣고 있는데 이미지 내 텍스트 비율이 20%를 초과 하면 안된다고 하시면서 https://www.facebook.com/ads/tools/text_overlay 링크를 남겨주셨는데 구글링 해보니 해당 툴은 사라진것 같더라구요!! 그런데 또 구글링에 나온 페이스북 고객센터? 결과 내용에는 (링크: https://ko-kr.facebook.com/business/help/388369961318508?id=1240182842783684 ) 이미지 자체에 너무 많은 텍스트를 사용하지 마세요. 광고 이미지에 포함될 수 있는 텍스트의 분량에는 제한이 없지만, Facebook은 텍스트의 비율이 20% 미만인 이미지의 성과가 더 좋다는 사실을 파악했습니다. 이런 문구가 있던데 따로 이미지 내 텍스트 비율을 확인할수 있는 방법은 없지만 이미지 내에 20% 이하로 텍스트를 쓰는것이 좋다~ 이렇게 받아들여도 괜찮을까요??
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [학습편]
si회사란 어떤 회사를 말하는건가요?
강사님께서는 si회사에 갈 바에 백수로 공부를 좀 더 한 후에 다른 회사에 들어가는게 좋다고 하셨는데, okky같은 커뮤니티를 보면 si회사를 목표로 하는 사람들이 많이 있는 것 같습니다. 정확히 si회사란 어떤 회사를 말하는건가요? 검색을 해보아도 그럴싸한 장단점이 보이지 않고 그냥 ~~를 다루는 회사라고만 나와있어서 상당히 의문이 듭니다.
-
미해결스프링 시큐리티
ConcurrentSessionControlAuthenticationStrategy 질문입니다!
현재 Ajax 방식 로그인을 위해 해당 강의에서 나온 방식으로 AbstractAuthenticationProcessingFilter를 상속받아 Filter를 커스텀하여 로그인 기능이 구현되어있습니다. 이후 동시세션 제어를 위해 securityConfig에서 아래 코드를 적용하였지만 http .sessionManagement() .maximumSessions(1); AuthenticationProcessingFilter를 커스텀하여 ConcurrentSessionControlAuthenticationStrategy이 적용되지 않는것 같은데 적용하는 방법을 알 수 있을까요?!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getter setter 질문 드립니다.
static class Hello { private String name2; public String getName() { return name2; } public void setName(String name2) { this.name2 = name2; }}이렇게 변수 이름을 name2로 바꿔줘도 json으로 바뀌면 키 값이 name인데 이유가 뭔가요? 그런데 get, set 메서드 이름에도 2(getName2, setName2)를 붙여주면 키 값이 name2로 잘 나옵니다 이렇게 동작하는 이유가 뭔가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
인증과 인가에 대해서 질문이 있습니다.
안녕하세요 강사님! 항상 진심을 다해서 모든 질문을 답변해주시는 강사님에게 정말 감사하다고 먼저 이야기 드리고싶습니다. 오늘 제가 질문할 내용은 바로 MSA에서의 인증과 인가입니다. Gateway-Service, User-Service, Order-Service 가 있다고 했을 때, 강의의 내용과 동일하게 토큰을 발급하는 서버는 User-Service가 수행한다고 가정하면 각각 Service들은 권한에 대한 처리는 어떻게 해야할까요? 제가 생각한 방법은 2가지 입니다. 1. Gateway 에서 최초 요청이 들어올 때, 토큰에 포함된 ID를 토대로 User-Service에 해당 ID가 가지고 있는 권한을 가져오도록 Request 합니다. 그리고 JWT payload에 권한에 대한 정보를 추가하고 relay 합니다. 권한에 대한 인증이 필요한 서비스에서는 해당 토큰만 파싱하여 권한이 있는지 없는지 확인합니다. 2. (권한이 필요한)Order-Service에 Client의 요청이 갔을 때, Order-Service는 요청이 들어온 토큰을 파싱하여 UserId를 확인합니다. 그리고 User-Service 에 해당 UserId가 가지고있는 권한을 가져오도록 Request 합니다. 권한이 있다면 로직을 계속하고 없다면 Reject 합니다. 이 두 방법 모두 매번 요청이 들어오면 User-Service에 권한을 가져오도록 하는 요청이 필수적이라는 단점이 있어 좋은 방법은 아니라고 생각하는데, 강사님이시라면 어떻게 하실까 궁금하여 질문 올립니다. 추가적으로 위의 방법대로 한다면 Spring Security는 User-Service에만 달리면 되는건가요? 아니면 각각 서비스 모두에게 Security가 달려야 할까요?