[질문 내용] 여기서 주문상품수량이 10개니 예외가 터지지않고 fail로 가는거로 알고있는데요 Expected jpabook.jpashop.exception.NotEnoughStockException to be thrown, but nothing was thrown 이러한 에러는 뜨는데 예외가 터지지않았기에 fail이 떠야하는데 fail안에 있는 메세지가 안뜹니다 한가지 더 질문이 있씁니다 주문상품수량을 11로 바꿧을떄 마지막에 fail을 적지않고 테스트를 돌렸을땐 예외를 터트려서 테스트가 성공적으로 끝나는데요 여기서 위와같이 fail메서드를 적어도 원래는 위에서 예외가 처리됏기떄문에 테스트가 정상적으로 끝나야 되는게 맞는거 아닌가요? 테스트를 돌렷는데 fail문이 뜹니다 그 뜻은 예외가 터지지않았다는 말이죠.. 의문이 듭니다 도와주세요ㅠㅠ
안녕하세요 선생님 front, back nginx 한 뒤로 둘다 https라고 바뀌고 인증서도 있긴한데, Front(502 Bad Gateway)라고 나오고 back(welcome to nginx) 라고만 나오는 상태입니다. (설치는 Nginx Ubuntu20보고 했습니다 https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal&tab=standard ) 문제1)그래서 첫번째 문제로 back에서 sudo npx pm2 logs --err --lines 200를 해보았을 땐 아래와 같은 경고가 나왔습니다. 0|app | Warning: connect.session() MemoryStore is not 0|app | designed for a production environment, as it will leak 0|app | memory, and will not scale past a single process. 질문1)찾아보니까 express-session 미들웨어의 기본 메모리 저장소( MemoryStore )를 사용할 때 MemoryStore 가 개발 환경에서는 적합하지만, 실제 프로덕션 환경에서는 메모리 누수 문제와 단일 프로세스 제한으로 인해 적합하지 않아 프로덕션 환경에서는 Redis, MongoDB 등의 세션 저장소를 사용하라는데, 그럼 front 화면이 나오는건지 궁금합니다,, 문제2)그리고 두번째 문제로 back에서 tail /var/log/nginx/error.log를 했을 땐 아래와 같은 에러가 나왔습니다. ubuntu@ip-172-31-12-59:~/react_nodebird/back$ tail /var/log/nginx/error.log 2024/01/24 12:19:54 [warn] 420260#420260: conflicting server name "api.luckyhaejin.com" on 0.0.0.0:80, ignored 2024/01/24 12:19:54 [notice] 420260#420260: signal process started 질문2)찾아보니 Nginx 설정 파일 내에 서 api.luckyhaejin.com 이라는 서버 이름(server name)이 80 포트에서 두 번 이상 선언되었음을 나타내는 에러라는데 어떤 부분이 잘못되었는지 잘 모르겠어서 어딜 확인하면 좋을지 문의 드립니다. 질문3)강의에서 Ubuntu서버만 바꿔주고 로컬은 바뀌는 부분 이없는거같아서 Ubuntu서버에서만 바꿔줬는데, 그럼 로컬에도 Ubuntu에 설치한 것 다 포함해서 코드까지 다 바꿔준 뒤 Ubuntu에서 git pull 다시 해줘야할까요,,? 현재 설정된 내용) front=> /etc/nginx/nginx.conf => server관련 (글을 옮겨적으니까 들여쓰기 해서 정리 한게 코드가 전부 합쳐져서 사진으로 올립니닷,,) front/pacakage.json에서 start부분에 3060 잘 되어있음 front => /etc/nginx/nginx.conf front/config/config.js에서 backUrl설정 잘 되어있음 back => /etc/nginx/nginx.conf back => app.js(사진이 보기 편하실거같아서 코드랑 둘다올려욧) const express = require('express'); const cors = require('cors'); const session = require('express-session'); const cookieParser = require('cookie-parser'); const passport = require('passport'); const dotenv = require('dotenv'); const morgan = require('morgan'); const postRouter = require('./routes/post'); const postsRouter = require('./routes/posts'); const userRouter = require('./routes/user'); const hashtagRouter = require('./routes/hashtag'); const db = require('./models'); const passportConfig = require('./passport'); const path = require('path'); const hpp = require('hpp'); const helmet = require('helmet'); dotenv.config(); const app = express(); db.sequelize.sync() .then(() => { console.log('DB 연결 성공'); }).catch(console.error); passportConfig(); if(process.env.NODE_ENV === 'production'){ app.use(morgan('combined')); app.use(hpp()); app.use(helmet()); app.use(cors({ origin: 'https://luckyhaejin.com', credentials: true })); } else { app.use(morgan('dev')); } app.use('/', express.static(path.join(__dirname, 'uploads'))); app.use(express.json()); app.use(express.urlencoded({extended:true})); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, //자바스크립트로 접근하지못하게 secure: true, //일단 false로 하고 https적용할 땐 ture domain: process.env.NODE_ENV = 'production' && '.luckyhaejin.com' //도메인 사용할 경우 }, })); app.use(passport.initialize()); app.use(passport.session()); app.get('/', (req, res) =>{ res.send('hello express'); }); app.use('/posts', postsRouter); app.use('/post', postRouter); app.use('/user', userRouter); app.use('/hashtag', hashtagRouter); app.listen(3065, () => { console.log('서버 실행 중'); }); back => /etc/nginx/nginx.conf 사용중인 Os) macOS
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
E/flutter ( 9967): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioException [bad response]: This exception was thrown because the response has a status code of 403 and RequestOptions.validateStatus was configured to throw for this status code. E/flutter ( 9967): The status code of 403 has the following meaning: "Client error - the request contains bad syntax or cannot be fulfilled" E/flutter ( 9967): Read more about status codes at https://developer.mozilla.org/en-US/docs/Web/HTTP/Status E/flutter ( 9967): In order to resolve this exception you typically have either to verify and fix your request code or you have to fix the server code. E/flutter ( 9967): E/flutter ( 9967): #0 DioMixin.fetch.<anonymous closure> (package:dio/src/dio_mixin.dart:507:7) E/flutter ( 9967): #1 _FutureListener.handleError (dart:async/future_impl.dart:180:22) E/flutter ( 9967): #2 Future._propagateToListeners.handleError (dart:async/future_impl.dart:858:47) E/flutter ( 9967): #3 Future._propagateToListeners (dart:async/future_impl.dart:879:13) E/flutter ( 9967): #4 Future._completeError (dart:async/future_impl.dart:655:5) E/flutter ( 9967): #5 _SyncCompleter._completeError (dart:async/future_impl.dart:63:12) E/flutter ( 9967): #6 _Completer.completeError (dart:async/future_impl.dart:27:5) E/flutter ( 9967): #7 Future.any.onError (dart:async/future.dart:618:45) E/flutter ( 9967): #8 _RootZone.runBinary (dart:async/zone.dart:1666:54) E/flutter ( 9967): #9 _FutureListener.handleError (dart:async/future_impl.dart:177:22) E/flutter ( 9967): #10 Future._propagateToListeners.handleError (dart:async/future_impl.dart:858:47) E/flutter ( 9967): #11 Future._propagateToListeners (dart:async/future_impl.dart:879:13) E/flutter ( 9967): #12 Future._completeError (dart:async/future_impl.dart:655:5) E/flutter ( 9967): #13 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:745:7) E/flutter ( 9967): #14 _microtaskLoop (dart:async/schedule_microtask.dart:40:21) E/flutter ( 9967): #15 _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5) IOS 시뮬레이터로 잘만 해왔다가, 안드로이드 에뮬로도 잘 되는지 확인해보려고 했는데 로그인 할 때 403에러가 뜨네요... 어떻게 해결해야 할까요? // localhost const emulatorIP = '10.0.2.2:3000'; const simulatorIP = '127.0.0.1:3000'; final ip = Platform.isAndroid ? emulatorIP : simulatorIP;
강의에서 이야기해주신 것 처럼 여러개의 Provider를 사용하기위해 MultiProvider를 사용하게되는데요. 이럴 때 일부 Provider가 일부 자식위젯에서만 사용될 경우 해당 자식 위젯에서만 선언하는 것과 최상위에 MultiProvider내에 전부 선언해서 사용하는 것 중 어떤 것을 선호하시나요? 그리고 왜 그런지 알 수 있을까요?
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
선생님~ 위 코드에서 궁금한 점이 있는데요, bottomInset 변수에 할당되는 MediaQuery. of (context).viewInsets.bottom 는 프레임워크단에서 값의 변화가 있을때마다 꾸준히 값을 injection 해주는 것인가요? print로 찍어보니 bottomsheet가 올라오는 동작 중에도 지속적으로 값이 찍히더라구요. HomeScreen위젯(stateFul)에서 어떻게 `final bottomInset`의 변화를 감지해서 다시 ScheduleBottomSheet(Stateless) 를 빌드 할 수 있는지도 궁금합니다. Calendar위젯처럼 HomeScreen위젯(stateFul)에서 ondaySelected함수를 인자로 넘겨받아서 setState가 실행되는 것도 아닌데, build가 되면서 bottom페딩이 실시간으로 적용되는게 이해가 가지 않습니다. 강의 잘 보고 있습니다. 도움주시면 감사드리겠습니다~
기존 생성했던 npx create-react-app my-app 명령어로 생성했던 my-app 실제 경로로 들어가서 폴더 삭제하고 npm uninstall -g create-react-app npm install -g create-react-app npx create-react-app my-app 수행 시 C:\Program Files\nodejs>npx create-react-app my-app Need to install the following packages: create-react-app@5.0.1 Ok to proceed? (y) y npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap. node:fs:1380 const result = binding.mkdir( ^ Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\my-app' at Object.mkdirSync (node:fs:1380:26) at module.exports.makeDirSync (C:\Users\김진구\AppData\Local\npm-cache\_npx\c67e74de0542c87c\node_modules\fs-extra\lib\mkdirs\make-dir.js:23:13) at createApp (C:\Users\김진구\AppData\Local\npm-cache\_npx\c67e74de0542c87c\node_modules\create-react-app\createReactApp.js:257:6) at C:\Users\김진구\AppData\Local\npm-cache\_npx\c67e74de0542c87c\node_modules\create-react-app\createReactApp.js:223:9 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { errno: -4048, code: 'EPERM', syscall: 'mkdir', path: 'C:\\Program Files\\nodejs\\my-app' } Node.js v20.11.0 에러가 발생합니다. 어떻게 조치해야할까요 ??
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요! provider적용하기 강의 듣고 있습니다. 궁금한게, 프로젝트를 진행할 수 록 여러개의 provider를 생성하게 되는데 그럼 이 모든 provider의 인스턴스가 사용하지 않아도 무조건 앱 실행시 다 인스턴스화 되어 메모리에 올라가게 되나요? 제가 객체지향관련 개념이 플러터하면서 처음이라 조금 헷갈립니다. 감사합니다.
안녕하세요. riverpod 기반으로 BaseView, BaseViewModel, BaseViewState 를 구현해주셔서 이를 활용하여 로그인 예제 샘플코드에 적용하여 잘 동작되는 걸 확인했습니다. 다시 한번 감사드립니다. 섹터2 상태관리 동영상이 도움 되지만 기회가 되신다면 Riverpod 구현 코드 변경 부분 관련으로 동영상 강의 추가해주시면 수강자 및 수강신청 예정자에게 큰 도움이 될 거 같습니다. 좀 더 추가되면 좋을 사항도 적어봅니다. 로그인 예제, Retrofit 활용한 JSON 데이터 처리 과정, LogInterceptor 활용한 JWT 인증처리 또는 Session 처리 BaseView 구현하는 역량을 향상시키기 위해서 어떤 과정을 수강(학습)하면 도움이 될지 조언해주시면 큰 도움이 될 거 같습니다. 언어 상관없이 어떤 과정을 배우면 도움될런지요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 이 과정에서 jdbc:h2:~/jpashop까지 입력을 완료하고 데이터베이스가 잘 생성이 되었는데 ~ /jpashop.m v.db이 어디에 생성된건지 모르겠습니다. ~ /jpashop.m v.db
[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
안녕하세요? 현재까지는 잘 따라오고 있다가 애플 인증센터에서 막혔는데요. 강사님과 같은 화면이 나오지 않고 약간 간소화된 화면이 나오는데요. Apple Developer Program 가입 안해서 이런 화면이 나오는거 같은데, 반드시 가입해야 하나요? 가입을 하려면 129,000 원 내라고 하던데, 임시로 테스트로 할 수 있는 방안은 없는지요?
[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
final resp = await [ Permission.camera , Permission.microphone].request(); 여기서 [ ] 대괄호 안에 permission.camera 와 permission.microphone을 넣어주고 있는데 [ ] 대괄호 안에 넣는 타입은 리스트 타입으로 한번에 넘겨줄려고 저렇게 괄호 안에 쓰는건지 궁금합니다. 어떤 이유로 대괄호를 사용하는지가 궁금합니다.