묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
질문이있습니다.!!
안녕하세요 강의 잘 보고 있습니다. 다름이아니라 질문이 두개 있습니다. 1.쿠키관련 2. 게시물 제거 실무 관련 예를 들어 댓글쓸때 댓글 info에 들어갈 내 nickname 을 가지고 오기 위해 comment user 간 join을 하는데 user.id 값을 쿠키에 저장해놓는거 처럼 nickname도 쿠키에 저장해서 join안하고 그냥 가지고와서 쓰는 형식은 어떤가요? 강의에선 쿠키에 데이터를 저장했을떄 사용자의 비율에 따른 과부하가 걸린다고 하셨는데 보통 쿠키 값으로 몇개까지 괜찮을까요? 동시 접속자 비율 and 프로젝트에 따라 다르겠지만 대게 어떤 값들을 쿠키에 저장하는지 궁금합니다. 또 궁금한게 게시물 같은거 지울때 실무에서는 게시물(메인글) 테이블, 댓글 테이블, 이미지 테이블가 있다고 하면 보통은 테이블 설계할때 삭제시 DB에서 바로 날리는게 아니라 예를 들어 글, 댓글, 이미지 에 각각 삭제여부의 칼럼하나 만들어서 Y==있음, N ==삭제됨 생성시 Y 제거시 글, 제거된 post.id 와 같은 comment, image 의 삭제여부를 N 글 조회시 where = Y면 select 또한 이 부분은 프로젝트의 정책의 따라 다르겠지만 예를들어 삭제여부가 N인 데이터들은 100일동안 N의 형태인경우 DB에서 날리는 쿼리 보통 이런 느낌이나요? 실무에서는
-
미해결[딥러닝 전문가 과정 DL1101] 딥러닝을 위한 파이썬 레벨1
슬랙 가입 요청 확인 부탁드릴게요~
안녕하세요~ 이틀 전에 가입요청 메일을 드렸는데 아직 답을 받지 못해 확인 차 연락드립니다
-
미해결스프링 핵심 원리 - 기본편
MemberServiceTest 질문 있습니다.
안녕하세요. JUnit을 통해 MemberServiceTest 작성할때 질문있습니다. 강의에서는 이와 같이 @BeforeEach를 사용해 test 전에 AppConfig 인스턴스를 생성하고 메소드를 활용해 memberService 객체를 만들어줍니다. 하지만 TestCode가 아닌 main method가 있는 클래스에서 테스트 할때는 그냥 AppConfig를 객체로 생성해서 사용하죠. 여기서 궁금증 있습니다. 왜 TestCode에서 이렇게 쓰면 안되는 것이고, 오류가 나는 것인지 궁금합니다. 추가적으로 BeforeEach에 대해 개발자님께서 테스트 실행전에 무조건 실행하는 것이라고 말씀해주셨습니다. 그렇다면 MemberService memberSevice; 라는 코드는 BeforeEach 밖에 존재하기 때문에 이상합니다. 왜냐하면 테스트 전에 AfterEach가 실행된다면 이때, BeforeEach 안의 memberService = appConfig.memberService 이 코드가 memberService를 선언한 적이 없어서 오류가 발생해야 한다고 생각이 들었습니다. 하지만 잘 실행되는 이유가 궁금합니다. 제 생각에는 테스트 전에 실행되는 것이니 MemberService memberService; memberService = appConfig.memberService 이런식으로 BeforeEach에 들어가 있어야만 된다고 생각이 들었습니다. 1. 왜 BeforeEach를 사용해야지만 appConfig 객체의 메소드로 memberService를 넣어줄 수 있고, 저 Test code가 정상 작동하는지 ? 2. BeforeEach는 테스트 전에 무조건 실행 되는데 어떻게 MemberService 클래스 변수의 선언이 BeforeEach에 밖에 존재하는지 ? 두가지입니다. 감사합니다.
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
vanilla js 와 vue.js 의 차이가 궁금합니다.
이 강의에서 vanilla js 를 배우다가 js의 프레임워크인 vue.js를 알게되었습니다. 여기서 궁금한것이 생겼는데 vanilla js 로 구현하려는 기능이 vue.js로 구현하면 훨씬 더 좋아지나요? vanilla js 로 충분히 웹을 만들수 있을 것 같은데 왜 vue.js를 쓰는지 궁금합니다. 그리고 vue.js를 배우는게 풀스택 개발자로써 더 좋을지도 궁금합니다. 강의와 관련된 질문은 아닌데 찾아봐도 명확한 답이 안나와서 질문드립니다. 답변해주시면 감사하겠습니다^^
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
Signin Signup 메뉴가 안 나타납니다.
같은 질문을 한 분들이 많아서 참고 해봤는데 안됩니다.. Network Access 에서 IP 추가했는데도 안되네요 root에서 npm run dev로 실행했습니다. 이렇게 작성해주었는데 무엇이 문제일까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
선생님 화면이랑 호출스택이 다르게 나옵니다ㅠㅠ
Exercise 8번 문제를 실행하면 선생님 호출스택에서는 [ Exercise_8.exe!Archer::~Archer() 줄 17 ] [Exercise_8.exe!main() 줄 57 ] 이렇게 뜨는데, 제 호출스택은 위와 같이 나옵니다. 클릭해보면 제가 만들지도 않은 이상한 코드들이 나오는데 통상 디버깅할때 저런 코드들은 무시하면 되는건가요? 그리고 호출 스택이 다르게 나오는 건 그냥 컴퓨터 환경마다 달라서 그런건가요?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
AuthGuard에 관한 질문
제로초님 안녕하세요. AuthGuard를 이용해 로그인 처리를 하고있습니다. 세션 쿠키 방식을 사용하고 있구요. 로그인 방식이 1. 리퀘스트에 쿠키가 있으면 => 쿠키로 세션을 불러와서 안에 들어가있는 user id를 가져와서 디비에서 검색후 로그인 2. 리퀘스트에 쿠키가 없으면 => 디비에서 id와 password를 검색하고 있을 시 세션에 저장하고 로그인. 없으면 UnauthorizedException 이렇게 되는 걸로 파악했는데요. 리퀘스트에 쿠키가 있고 세션에도 저장된 게 있지만 디비에서 유저가 지워졌을 경우, 1번 방식에서 user id가 없기 때문에, 그냥 500 에러가 발생하고 끝나는데요. 저는 이 때, 다시 2번 방식으로 돌리는 플로우로 가고 싶습니다.(쿠키 세션으로 불러지는 정보가 없을 경우, 디비에서 id와 password를 가지고 검색 후 처리)그래서 막연히 LocalAuthGuard 에 null 값을 주고 실행해 봤는데, 아무 동작도 하지 않았습니다. 어떻게하면 좋을지 조언을 듣고 싶습니다. ```ts local-auth.guard.ts@Injectable() export class LocalAuthGuard extends AuthGuard('local') { async canActivate(context: ExecutionContext): Promise<boolean> { if (context) { const can = await super.canActivate(context); if (can) { const request = context.switchToHttp().getRequest(); console.log('쿠키 사용해서 로그인 : ', request); await super.logIn(request); } } return true; } } ``````tslocal.strategy.ts @Injectable() export class LocalStrategy extends PassportStrategy(Strategy) { constructor(private authService: AuthService) { super({ usernameField: 'email', passwordField: 'password' }); } async validate(email: string, password: string, done: CallableFunction) { const user = await this.authService.validateUser(email, password); if (!user) { throw new UnauthorizedException(); } return done(null, user); } } ``` ```ts local.serializer.ts @Injectable() export class LocalSerializer extends PassportSerializer { constructor( private readonly authService: AuthService, private readonly localStrategy: LocalStrategy, private readonly localAuthGuard: LocalAuthGuard, private readonly reLocalAuthGuard: ReLocalAuthGuard, @InjectRepository(HpMasterUserRepository, 'homepage-db') private userRepository: UserRepository, ) { super(); } serializeUser(User: User, done: CallableFunction) { done(null, user.UserId); } async deserializeUser(userId: number, done: CallableFunction) { try { const user = await this.userRepository.selectHpMasterUserById( userId, ); if (hpMasterUser) { done(null, hpMasterUser.userId); // req.user } await this.localAuthGuard.canActivate(null); // this.reLocalAuthGuard.canActivate(null); } catch (err) { // throw new UnauthorizedException(); done(err); } } } ``` ```ts auth.service.ts @Injectable() export class AuthService { constructor(private userService: UserService) {} async validateUser(email: string, password: string) { const user = await this.userService.masterUserLogin(email, password); if (!user) { return null; } else if (user) { const { password, ...userWithOutPassword } = user; return userWithOutPassword; } return null; } } ```
-
미해결vue.js 실전 프로젝트(트위터 클론)
firebase 버전에 따른 import 문제 질문드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 firebase authentication 강의를 듣다가 에러가 지속적으로 발생해서 문의 드립니다. 현재 버전에 따르면 import firebase from 'firebase'는 더이상 지원 하지 않는다고 합니다. 즉, firebase/app 이런 식으로 세부적으로 들어가야한다고 합니다.. 그에 따라 강사님이 작성해주신 export const auth = firebase.auth() 에서 auth 함수가 작동하지 않습니다. 여러 검색 결과 이제는 initalizeApp 따로, getAuth 따로 import를 해주어야한다고 확인하였고 auth() 함수는 getAuth를, firestore() 함수는 getFireStore 를 import하여 어찌 진행해 볼 수 있었으나 storage() 함수는 어디를 어떻게 찾아야할 지 방법이 없어 질문을 드립니다.. 아니면 firebase install 하는 버전을 강사님과 동일하게 맞춰야 하는지 생각도 됩니다. 강사님과 동일한 firebase 버전으로 변경하여 진행하여도 해당 에러가 발생합니다..
-
미해결처음 배우는 리액트 네이티브
채널화면에서 에러가 나네요 ..
아마 파이어베이스에서 channels 의 하위 컬렉션 members 생성시의 에러인것 같은데 실력부족입니다 https://github.com/dongguntechnology/rn_chat Possible Unhandled Promise Rejection (id: 0): FirebaseError: Function doc() cannot be called with an empty path.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
[템플릿엔진] 노드에서 View html을 작성할때, 퍼그/넌적스 쓰지않고 순수? html로 view 사용할 수 있나요?
안녕하세요, 정적인 프로젝트(html/css)만 해보다보니 퍼그/넌적스와 템플릿 엔진으로 html 작성이 조금 더딘데요,, 혹시, 노드 프로젝트 View, 템플릿 엔진(값)을 설정할때, 퍼그나, 넌적스 와 같은 템플릿 엔진을 말고, 일반?(순수) html 작성으로 view 템플릿 값을 설정할 수 있을까요? 보통은 '노드 html작성' 이라 검색을 하면 퍼그/넌적스 view 엔진 설정 설명이 많아서요, 어떤 키워드로 구글링을 하면 좋을까요, 어떻게 검색을 해, 퍼그방식이 아닌, 순수 html 파일 한개는 서빙 하는데 성공했는데요, 목표는 view폴더 안에 여러 폴더를 만들고, 계층구조에 맞게 다수 html/css를 보여주는 겁니다. 그래도 app.js에서 view 렌더 설정은 해야할꺼 같은데, 퍼그/넌적스는 아니고,,, 하지 않으면 퍼그를 써야하고ㅠ 저와 같은 상황과 희망사항이 가능한 내용일까요? 읽어주셔 감사합니다.
-
미해결Django REST Framework 핵심사항
fields E300, E307 에러
안녕하세요 강사님, viewset 으로 Post API 만들기 강의 진행중에 발생한 에러입니다. 강의 내용대로 post url을 라우터에 등록하고, serializers 생성, view 생성 이후에 재가동하니 다음과 같은 에러가 발생하면서 동작하지 않습니다. 검색해보니 ForeignKey 로 참조하는 모델 클래스에 앱이 명시되지 않아서 그런거 같다는 거 같은데 자세한 원인은 모르겠습니다. https://stackoverflow.com/questions/56972174/errors-book-book-author-fields-e300-book-book-author-fields-e307 1. 해당 오류의 원인과 lazy reference란 무엇인지요? 2. 해결방안이 궁금합니다. (다른 앱의 model을 참조할때 발생하는 문제라면 어떻게 해야하는지) Post class는 `from blog.models import Post` 로 import 하여 가져왔습니다. from django.db import models # blog/models.py class Post(models.Model): category = models.ForeignKey('Category', on_delete=models.SET_NULL, blank=True, null=True) tags = models.ManyToManyField('Tag', blank=True) title = models.CharField('TITLE', max_length=50) description = models.CharField('DESCRIPTION', max_length=100, blank=True, help_text='simple one-line text.') image = models.ImageField('IMAGE', upload_to='blog/%Y/%m/', blank=True, null=True) content = models.TextField('CONTENT') create_dt = models.DateTimeField('CREATE DT', auto_now_add=True) update_dt = models.DateTimeField('UPDATE DT', auto_now=True) like = models.PositiveSmallIntegerField('LIKE', default=0) class Meta: ordering = ('update_dt',) def __str__(self): return self.title - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
HTML Form에서 GET/POST만 지원하는 이유
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] http://haah.kr/2017/05/23/rest-http-method-in-html-form - 해당 글을 읽어 봤는데 잘 이해가 되지 않습니다. - DELETE는 form 을 통해 값을 전달할게 없다는것은 알겠는데 - 위 블로그 글에서 PUT 의 내용이 이해가 안되네요.. - 그래서 GET/POST만 지원하는 궁극적인 이유가 무엇인가요~? 아래는 PUT 내용입니다. - PUT도 전송해야할 것은 대상 리소스를 대체할 representation 그 자체인데, 대상 리소스더러 조각난 form 데이터를 처리하라고 보낼 수는 없는 노릇
-
미해결제품 관리자와 서비스 기획자를 위한 실전 노하우 - 아낌없이 드립니다!
동종업계 리텐션 조사
동종업계 리텐션보다 잘 나올 경우 이를 긍정 지표라 설정할 수 있다면 동종업계의 리텐션은 어떻게 알 수 있나요?
-
미해결프레이머를 활용하여 쉽고 간단하게 프로토타입 제작하기
Override 쪽 파트 코드창 관련 질문
안녕하세요. Override쪽 파트를 수강 관련 질문이 있어서 이렇게 글을 남깁니다. 해당 과정으로 코드창에 들어와보니 강의에서 구현된 코드창과 다른 모습을 보이는데요. 이게 프레이머에서 업데이트 되어 이렇게 노출되는건지 아니면 제가 잘못들어가 이 화면이 노출되는건지 모르겠습니다 ㅠㅠ 프론트 하는 친구에게 물어보니 현재 제가 보는 화면은 리엑트 코드와 거의 유사한 화면이라고 답변 받았습니다.. 먼저 제가 맞는 화면을 보는지 궁금하고, 프레이머가 업데이트 된 것이라면 해당 업데이트에 맞춰 강의 내용 업데이트가 가능한지 궁금합니다.
-
미해결비전공자를 위한 개발자 취업 올인원 가이드 [통합편]
git TIL 저장소 관련 질문
안녕하세요, 한정수 강연자님! 여기까지 수강하면서 든 아이디어가 생겼는데, 다름 아니라 TIL 저장소에 스크렙한 기술 면접 질문들에 대한 저의 답변을 적는 것입니다. 그런데 혹시 취업을 위해 나중에 깃 주소를 제출하게 될 때, 그런 것들이 오히려 마이너스로 적용할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트 실행 시 JUnit Exception 발생하는 문제 질문드립니다
안녕하세요 영한님, 강의 잘 듣고 있습니다! JUnit 테스트 실행 시 에러가 발생하는데 해결을 못 해서 질문드립니다..ㅠ 에러 로그 화면입니다. 메서드 옆에 있는 초록색 삼각형 버튼을 눌러서 `Run 'MemoryMemberRepositoryTest`를 선택하면 아래 에러가 발생합니다. build.gradle 파일과 외부 라이브러리 junit-platform-* 이 보이는 부분을 캡쳐했습니다. MemoryMemberRepositoryTest 입니다. 답변해 주시면 감사하겠습니다. 좋은 밤 되세요^^!
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
모듈을 지우고 다시 설치하고를 두번 반복했는데도 해결이 안됩니다.
code: 'MODULE_NOT_FOUND', requireStack: [ 'C:\\Users\\Desktop\\vue_online_study\\advanced\\vue-endgame\\vue-til-server\\dist\\api\\auth.js', 'C:\\Users\\Desktop\\vue_online_study\\advanced\\vue-endgame\\vue-til-server\\dist\\app.js' ] } npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! server@1.0.0 start: `node dist/app.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the server@1.0.0 start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\snowb\AppData\Roaming\npm-cache\_logs\2022-03-10T14_51_30_459Z-debug.log npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! server@1.0.0 restart: `rimraf dist && npm run build && npm run start` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the server@1.0.0 restart script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\snowb\AppData\Roaming\npm-cache\_logs\2022-03-10T14_51_30_560Z-debug.log [nodemon] app crashed - waiting for file changes before starting... 어떻게 하면 될까요 ㅠ
-
해결됨배달앱 클론코딩 [with React Native]
토큰 질문있습니다!
제로초님 저번에 강좌에서 낸 숙제라고 하신 앱을 킬때마다 리프레시 토큰 갱신하는것을 구현해 보았습니다. 그런데 제가 옳은 방법으로 했는지 피드백 부탁드립니다!! 질문 1. 로그인을 해서 accesstoken과 refreshtoken을 이미 발급받았고 앱을 껐다가 다시 켰을 때를 가정했을 시 getTokenAndRefresh 함수가 실행되어 (1)의 axios.post(`${Config.API_URL}/refreshToken`,백앤드 요청이 갑니다. AppInner.tsx useEffect(() => { const getTokenAndRefresh = async () => { try { const token = await EncryptedStorage.getItem('refreshToken'); if (!token) { return; } const response = await axios.post( ////////////(1) `${Config.API_URL}/refreshToken`, {}, { headers: { authorization: `Bearer ${token}`, }, }, ); dispatch( userSlice.actions.setUser({ name: response.data.data.name, email: response.data.data.email, accessToken: response.data.data.accessToken, }), ); await EncryptedStorage.setItem( (3) ////////추가된 부분 'refreshToken', response.data.data.refreshToken, ); } catch (error) { console.error(error); if ((error as AxiosError).response?.data.code === 'expired') { // refreshToken 만료되었을 때 Alert.alert('알림', '다시 로그인 해주세요.'); } } }; getTokenAndRefresh(); }, [dispatch]); app.js의 백앤드에서 리프레시 토큰 유효성 검사를 한 후 (2) refreshtoken(새로 추가한 부분)와 accesstoken을 같이 발급해 줍니다. 그러면 다시 AppInner 프론트 페이지로 가서 accesstoken을 리덕스에 저장하고 refreshtoken은1은(2의) await EncryptedStorage.setItem에 저장해줍니다. app.js (백앤드) app.post("/refreshToken", verifyRefreshToken, (req, res, next) => { const refreshToken = jwt.sign( // (2) 추가된 부분 { sub: "refresh", email: res.locals.email }, jwtSecret, { expiresIn: "24h" } ); const accessToken = jwt.sign( { sub: "access", email: res.locals.email }, jwtSecret, { expiresIn: "5m" } ); if (!users[res.locals.email]) { return res.status(404).json({ message: "가입되지 않은 회원입니다." }); } res.json({ data: { accessToken, refreshToken, // 추가된 부분 email: res.locals.email, name: users[res.locals.email].name, }, }); }); 이렇게 구현해 보았는데요. 결과는 로그인 하면 기존처럼 accesstoken과 refreshtoken이 발급되고 앱을 껐다가 키면 리프레시 토큰 유효성 검사를 한 뒤 유효하면 accesstoken과 refreshtoken을 다시 발급해주며 갱신시켜 줍니다. 만약 refreshotken이 만료되었다면 로그인 페이지로 이동하게 되구요. 시도를 해보니 잘 작동을 하는것 같은데 혹시 제가 무엇을 빼놓지는 않았는지 옳은방법으로 한것인지 제로초님의 의견이 궁금합니다!. 질문2. 강의중 제로초님은 accesstoken은 리덕스에 refreshtoken은 암호 저장소에 저장한다고 하셨는데 그러면 백엔드 db에는 둘 중 어느 토큰도 저장하지 않으시는지 궁금합니다. 만약 그렇다면 로그인 할때 백엔드에서 app.post("/login", (req, res, next) => { const refreshToken = jwt.sign( { sub: "refresh", email: req.body.email }, jwtSecret, { expiresIn: "24h" } ); const accessToken = jwt.sign( { sub: "access", email: req.body.email }, jwtSecret, { expiresIn: "5m" } ); users[req.body.email].refreshToken = refreshToken; /////// 이 부분 return res.json({ data: { name: users[req.body.email].name, email: req.body.email, refreshToken, accessToken, }, }); }); users[req.body.email].refreshToken = refreshToken;이 코드가 의미하는바가 무엇인지 궁금합니다. 디비용 더미 데이터 같은데 지웠는데도 잘 실행되더라구요. 없어도 되는 코드인가요?...
-
미해결작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지
gitignore 에 venv/를 추가하였는데 git add .에 venv파일이 추가되네요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. gitignore 에 venv/를 추가하였는데 git add .에 venv파일이 추가되는데 왜그럴까요? 처음에 venv 파일 안에 gitignore생성해서 나중에 밖으로 빼내긴했는데 그것때문에 그럴까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
코드에 대해
request.getParameterNames().asIterator().forEachRemaining(paramName->paramMap.put(paramName, request.getParameter(paramName)));이부분에 대해서 혹시 각 함수가 어떤 역할을 하는 함수인지 여쭤봐도 될까요?? 제가 이해력이 부족해서 잘 이해가 가지않습니다..