묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
9장 게시글 업로드하기 post 오류
[제로초 강좌 질문 필독 사항입니다]질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.도움이 되는 질문을 하는 방법을 알려드립니다.https://www.youtube.com/watch?v=PUKOWrOuC0c0. 숫자 0부터 시작한 이유는 1보다 더 중요한 것이기 때문입니다. 에러가 났을 때 해결을 하는 게 중요한 게 아닙니다. 왜 여러분은 해결을 못 하고 저는 해결을 하는지, 어디서 힌트를 얻은 것이고 어떻게 해결한 건지 그걸 알아가셔야 합니다. 그렇지 못한 질문은 무의미한 질문입니다.1. 에러 메시지를 올리기 전에 반드시 스스로 번역을 해야 합니다. 번역기 요즘 잘 되어 있습니다. 에러 메시지가 에러 해결 단서의 90%를 차지합니다. 한글로 번역만 해도 대부분 풀립니다. 그냥 에러메시지를 올리고(심지어 안 올리는 분도 있습니다. 저는 독심술사가 아닙니다) 해결해달라고 하시면 아무런 도움이 안 됩니다.2. 에러 메시지를 잘라서 올리지 않아야 합니다. 입문자일수록 에러메시지에서 어떤 부분이 가장 중요한 부분인지 모르실 겁니다. 그러니 통째로 올리셔야 합니다.3. 코드도 같이 올려주세요. 다만 코드 전체를 다 올리거나, 깃헙 주소만 띡 던지지는 마세요. 여러분이 "가장" 의심스럽다고 생각하는 코드를 올려주세요.4. 이 강좌를 바탕으로 여러분이 응용을 해보다가 막히는 부분, 여러 개의 선택지 중에서 조언이 필요한 부분, 제 경험이 궁금한 부분에 대한 질문은 대환영입니다. 다만 여러분의 회사 일은 질문하지 마세요.5. 강좌 하나 끝날 때마다 남의 질문들을 읽어보세요. 여러분이 곧 만나게 될 에러들입니다.6. 위에 적은 내용을 명심하지 않으시면 백날 강좌를 봐도(제 강좌가 아니더라도) 실력이 늘지 않고 그냥 코딩쇼 관람 및 한컴타자연습을 한 셈이 될 겁니다. 사진업로드를 하려할때 미리보기가 뜨지 않습니다. uploads에는 올린 사진들이 잘 뜹니다.게시글을 업로드하려 짹짹을 누르면 post 라우터가 없다고 뜹니다. POST /post 라우터가 없습니다.404Error: POST /post 라우터가 없습니다. at C:\Users\jyoun\udr_node\lecture\ch9\app.js:53:18 at Layer.handle [as handle_request] (C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\index.js:328:13) at C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\index.js:286:9 at Function.process_params (C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\index.js:346:12) at next (C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\index.js:280:10) at C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\index.js:646:15 at next (C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\index.js:265:14) at C:\Users\jyoun\udr_node\lecture\ch9\routes\page.js:12:3 at Layer.handle [as handle_request] (C:\Users\jyoun\udr_node\lecture\ch9\node_modules\express\lib\router\layer.js:95:5) controllers/post.jsconst Post = require('../models/post'); const Hashtag = require('../models/hashtag'); exports.afterUploadImage = (req, res) => { console.log(req.file); res.json({ url: `/img/${req.file.filename}` }); }; exports.uploadPost = async (req, res, next) => { try { const post = await Post.create({ content: req.body.content, img: req.body.url, UserId: req.user.id, }); const hashtags = req.body.content.match(/#[^\s#]*/g); if (hashtags) { const result = await Promise.all(hashtags.map((tag) => { return Hashtag.findOrCreate({ where: { title: tag.slice(1).toLowerCase() } }); })); console.log('result', result); await post.addHashtags(result.map(r => r[0])); } res.redirect('/'); } catch (error) { console.error(error); next(error); } }; routes/post.jsconst express = require('express'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const { afterUploadImage, uploadPost } = require('../controllers/post'); const { isLoggedIn } = require('../middlewares'); const router = express.Router(); try { fs.readdirSync('uploads'); } catch (error) { console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.'); fs.mkdirSync('uploads'); } const upload = multer({ storage: multer.diskStorage({ destination(req, file, cb) { cb(null, '/uploads'); }, filename(req, file, cb) { const ext = path.extname(file.originalname); cb(null, path.basename(file.originalname, ext) + Date.now() + ext); }, }), limits: { fileSize: 5 * 1024 * 1024 }, }); // POST /post/img router.post('/img', isLoggedIn, upload.single('img'), afterUploadImage); // POST /post const upload2 = multer(); router.post('/', isLoggedIn, upload2.none(), uploadPost); module.exports = router; 개발자 도구로 보면 짹짹을 눌렀을때 갈곳이 없다는데 저는 깃헙 복사해서 똑같이 했는데 뭐가 문제인지 모르겠습니다. app.jsconst express = require('express'); const cookieParser = require('cookie-parser'); const morgan = require('morgan'); const path = require('path'); const session = require('express-session'); const nunjucks = require('nunjucks'); const dotenv = require('dotenv'); const passport = require('passport'); dotenv.config(); const pageRouter = require('./routes/page'); const authRouter = require('./routes/auth'); const { sequelize } = require('./models'); const passportConfig = require('./passport'); const app = express(); passportConfig(); // 패스포트 설정 app.set('port', process.env.PORT || 8001); app.set('view engine', 'html'); nunjucks.configure('views', { express: app, watch: true, }); sequelize.sync({ force: false }) .then(() => { console.log('데이터베이스 연결 성공'); }) .catch((err) => { console.error(err); }); app.use(morgan('dev')); app.use(express.static(path.join(__dirname, 'public'))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, })); app.use(passport.initialize()); app.use(passport.session()); app.use('/', pageRouter); app.use('/auth', authRouter); app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`); error.status = 404; next(error); }); app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== 'production' ? err : {}; res.status(err.status || 500); res.render('error'); }); app.listen(app.get('port'), () => { console.log(app.get('port'), '번 포트에서 대기중'); }); main.html{% extends 'layout.html' %} {% block content %} <div class="timeline"> {% if user %} <div> <form id="twit-form" action="/post" method="post" enctype="multipart/form-data"> <div class="input-group"> <textarea id="twit" name="content" maxlength="140"></textarea> </div> <div class="img-preview"> <img id="img-preview" src="" style="display: none;" width="250" alt="미리보기"> <input id="img-url" type="hidden" name="url"> </div> <div> <label id="img-label" for="img">사진 업로드</label> <input id="img" type="file" accept="image/*"> <button id="twit-btn" type="submit" class="btn">짹짹</button> </div> </form> </div> {% endif %} <div class="twits"> <form id="hashtag-form" action="/hashtag"> <input type="text" name="hashtag" placeholder="태그 검색"> <button class="btn">검색</button> </form> {% for twit in twits %} <div class="twit"> <input type="hidden" value="{{twit.User.id}}" class="twit-user-id"> <input type="hidden" value="{{twit.id}}" class="twit-id"> <div class="twit-author">{{twit.User.nick}}</div> {% if not followingIdList.includes(twit.User.id) and twit.User.id !== user.id %} <button class="twit-follow">팔로우하기</button> {% endif %} <div class="twit-content">{{twit.content}}</div> {% if twit.img %} <div class="twit-img"><img src="{{twit.img}}" alt="섬네일"></div> {% endif %} </div> {% endfor %} </div> </div> {% endblock %} {% block script %} <script> if (document.getElementById('img')) { document.getElementById('img').addEventListener('change', function(e) { const formData = new FormData(); console.log(this, this.files); formData.append('img', this.files[0]); axios.post('/post/img', formData) .then((res) => { document.getElementById('img-url').value = res.data.url; document.getElementById('img-preview').src = res.data.url; document.getElementById('img-preview').style.display = 'inline'; }) .catch((err) => { console.error(err); }); }); } document.querySelectorAll('.twit-follow').forEach(function(tag) { tag.addEventListener('click', function() { const myId = document.querySelector('#my-id'); if (myId) { const userId = tag.parentNode.querySelector('.twit-user-id').value; if (userId !== myId.value) { if (confirm('팔로잉하시겠습니까?')) { axios.post(`/user/${userId}/follow`) .then(() => { location.reload(); }) .catch((err) => { console.error(err); }); } } } }); }); </script> {% endblock %}
-
미해결
intelliJ 오디오 파일 에러
두 파일이 동일한 위치에 지정되어 있는데 아래 메서드에서만 UnsupportedAudioFileException 에러가 뜹니다. 이유가 뭘까요?
-
미해결
f1_score 문자로 문제 나오면
f1 = f1_score(y_val_str, pred_str, pos_label='A') # 문자일 때는 파라미터 하나 더 설정해야함 만약에 예측값이 문자로 문제가 나오면 y_val_str, pred_str 까지는 맞는거같은데 뒤에 혹시 pos_label='A' 는 A로 고정인건가요? 문제에서 주어지는건가요?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 응용
IPSec VPN과 터널링에서 VPN GtoG 예시
후반부 GtoG 예시에서 "DB는 로컬 네트워크에서 접근 가능하고, 접근 가능한 PC는 인터넷에 연결이 되어있지 않다."는 조건으로 시작합니다.이 때, 1. VPN을 이용하려면 DB 자체 혹은 DB와 연결된 호스트가 인터넷에 연결되어야 하기에 앞의 조건은 사라지나요?사라진다면 DB의 보안과 관련하여 문제가 생기진 않을까요?
-
미해결스프링 배치
writer에서 다시 processor 호출 질문 드립니다.
질문 드립니다. processor의 return 형식이<A, B> 일 때 processor에서 A를 받아 B로 가공하여 return 하는데 이 때 B말고 다른 C도 함께 writer로 return이 가능한가요? step을 구성할 때 reader -> processor -> writer 순서인데 writer까지 진행된 이후 write 한 객체로 다시 processor 혹은 reader -> writer 등을 진행하고 싶을 땐 어떻게 해야 할까요? processor에서 조건을 사용하여 reader를 호출 하고 있는데 reader를 bean으로 생성하지 않고 reader.read(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?
-
해결됨웹 애니메이션을 위한 GSAP 가이드 Part.03
ScrollTrigger의 end와 toggleClass
안녕하세요, 선생님.섹션2 Advanced Trigger - practice 예제에서fixedHeader() 함수를 통해 헤더가 pin되어 start 지점부터 fixed 처리가 되잖아요~이와 동시에 fixed 될 때 특정 클래스(toggleClass : "active")를 넣어서 스타일을 다르게 주려고 했거든요.그런데 end 마지막 지점에 스크롤이 닿으면 fixed는 되어있지만 class는 사라지더라고요.혹시 다른 방법이 있을까요? function fixedHeader(){ ScrollTrigger.create({ trigger: '.nav_container', start: 'top top', // endTrigger:'.footer', end: 'max', pin: true, pinSpacing: false, toggleClass : "active" }) }
-
미해결
학습 중 궁금증(수치형 범주형 전처리)
학습 중에 보통 범주형을 cols로 지정해놓고 원핫인코딩이나 라벨 인코딩을 하는데 수치형변수도 따로 구분해서 스케일링 진행하면 점수가 더 잘나오나요? 3회 기출유형 작업형2에서 만점자가 수치형 범주형 분리 후에 수치형은 로버스트스케일링, 범주형은 원핫인코딩, 모델링은 랜덤포레스트 진행했는데roc_auc_score 0.83, 최종 채점 0.78 나왔고 제가 수치형은 지정 안하고 범주형만 라벨인코딩 진행, 모델링은 랜덤포레스트 및 하이퍼파라미터 튜닝 해서 채점 해봤는데 둘 다 모두 하이퍼파라미터튜닝 max_depth=7, n_estimators=800으로 동일하게 비교해봤습니다 roc_auc_score 0.775 // 최종 채점 0.79가 나왔습니다 둘 중에 어쩄든 점수 높은걸로 채택해서 시험때도 제출하면 되는 것인가요? 아니면 수치형까지 스케일링을 해야 과정 부문에서 점수를 더 받는것인가요?
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
마지막 공격모션 ClientRPC 할때 IsLocalController() 개념 확인 질문입니다.
제가 이해한 방식인데요. 파란색으로 표시한 글이 올바르게 이해한게 맞는 건가요??
-
미해결설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
[Lab3] ps동작 확인 불가 (Serial terminal 무응답)
Lab3 의 끝부분에서 보드를 연결하여 Vitis의 serial terminal로 동작을 확인하는 데 아래의 사진과 같이 나옵니다. 보드와 연결은 되는 것 같습니다.
-
미해결실습으로 배우는 그라파나 - {{ x86-64, arm64 }}
metric-server 이중화로 인한 grafana 대시보드 이중 출력 문의
[질문 하기]안녕하세요 해당 실습을 진행하면서 metric-server가 이중화되어 파드가 2개 구성되어있는데, Grafana 메트릭을 검색할 경우 대시보드가 2개가 출력되고 있습니다.(HPA 설정으로 인해 이중화 구성) 혹시 위와 같은 경우 1개만 출력하고 싶은데, 특정 파드에 대한 label을 명시하는 방법말고 다른 방법이 있을까요?## PromQL 제외 sum(kube_deployment_spec_replicas{deployment="metric-server", instance="172.31.41.80:8080"})감사합니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
분류 회귀 모델 검증데이터 질문입니다!
분류 모델과 회귀 모델이 각각 어느정도 데이터 예측 값이 나와야 만족하고 제출할 수 있을까요? 최소한의 기준이라도 있을까요?
-
해결됨Airflow 마스터 클래스
[ERROR] Max retries exceeded with url
task실행 하면 api호출이 안되고 requests에서 에러가 나옵니다requests.exceptions.ConnectionError: HTTPConnectionPool(host='http', port=80): Max retries exceeded with url: //openapi.seoul.go.kr:8088/***/json/TbCorona19CountStatus/1/1000/?Content-Type=application%2Fjson&charset=utf-8&Accept=%2A%2F%2A (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fbc7dac3fa0>: Failed to establish a new connection: [Errno -2] Name or service not known')) 그런데 postman이든 브라우저든 다른 곳에서는 정상척으로 호출하고 이전에 SimpleHttpOperator도 정상적으로 모두 호출합니다.왜 연결이 안되고 Max retries가 뜨는지 잘 모르겠어요 ㅠ혹시 while문에서 너무 빨리호출하나 싶어서 time.sleep도 넣어봤지만 차이 없네요
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
두가지 질문이 있습니다.
hasText가 없는 이유와 대용량파일,동영상파일은 안올라가는 이유가뭔가요 ?톰캣 쪽에서 설정을 따로 해줘야하는건가요 ?
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
[질문] 토큰 만료에 대한 예외처리 질문
안녕하세요, 현재 강의 를 듣고 있는 수강생입니다.BearerTokenGuard를 작성하고, 토큰 유효기간이 지난 경우에 대해서도테스트 상황을 가정하여 전날 만들어둔 access token을 authorization header에 넣어테스트 해보았습니다. 그런데 verifyToken api에 try,catch문이 없어서 500 코드의 에러가 발생하더라구요.그래서 일단 401 error를 내는게 맞는것 같아서 아래와 같이 작성을 했는데, verify의 결과가 무조건 토큰이만료된 경우 1가지인지 확실치 않아, 잘 작성된 코드인지 모르겠어서 질문 드립니다. 어떻게 예외처리 코드를 작성하면 좋을까요? /* 해당 API는 토큰을 검증하는 API 입니다. */ verifyToken(token: string) { try { const result = this.jwtService.verify(token, { secret: JWT_SECRET, }); return result; } catch (error) { // to-do : 나중에 최적화 throw new UnauthorizedException('만료된 토큰입니다. 재발급해주세요'); } }
-
미해결
랜덤포레스트에서 막혔습니다,,
# 시험환경 세팅 (코드 변경 X) import pandas as pd import numpy as np from sklearn.model_selection import train_test_split def exam_data_load(df, target, id_name="", null_name=""): if id_name == "": df = df.reset_index().rename(columns={"index": "id"}) id_name = 'id' else: id_name = id_name if null_name != "": df[df == null_name] = np.nan X_train, X_test = train_test_split(df, test_size=0.2, shuffle=True, random_state=2021) y_train = X_train[[id_name, target]] X_train = X_train.drop(columns=[id_name, target]) y_test = X_test[[id_name, target]] X_test = X_test.drop(columns=[id_name, target]) return X_train, X_test, y_train, y_test df = pd.read_csv("../input/house-prices-advanced-regression-techniques/train.csv") X_train, X_test, y_train, y_test = exam_data_load(df, target='SalePrice', id_name='Id') X_train.shape, X_test.shape, y_train.shape, y_test.shape ((1168, 79), (292, 79), (1168, 2), (292, 2)) target = y_train.pop('SalePrice') y_test_id = y_train.pop('Id') # 레이블 인코딩을 수행합니다. # 모든 문자열 특성에 대해 레이블 인코딩을 적용합니다. for col in X_train.columns: if X_train[col].dtype == 'object': # Train에만 있는 레이블을 'unknown'으로 바꾸고 인코딩 train_unique_labels = set(X_train[col].unique()) test_unique_labels = set(X_test[col].unique()) # `X_test`에만 존재하는 레이블을 'unknown'으로 변경 X_test[col] = X_test[col].apply( lambda x: 'unknown' if x not in train_unique_labels else x ) # 인코딩 encoder = LabelEncoder() encoder.fit(list(train_unique_labels) + ['unknown']) # 'unknown' 포함하여 학습 X_train[col] = encoder.transform(X_train[col].astype(str)) X_test[col] = encoder.transform(X_test[col].astype(str)) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(X_train, target, test_size=0.2, random_state=2022) X_tr.shape, X_val.shape, y_tr.shape, y_val.shape ((934, 79), (234, 79), (934,), (234,))여기까지는 잘 수행이 됐습니다!! unknown 설명 감사합니다 그런데, from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import r2_score rf = RandomForestClassifier(random_state=2022) rf.fit(X_tr, y_tr) pred = rf.predict(X_val) print(r2_score(y_val, pred))--------------------------------------------------------------------------- ValueError Traceback (most recent call last) /tmp/ipykernel_20/3726132327.py in <module> 2 from sklearn.metrics import r2_score 3 rf = RandomForestClassifier(random_state=2022) ----> 4 rf.fit(X_tr, y_tr) 5 pred = rf.predict(X_val) 6 print(r2_score(y_val, pred)) /opt/conda/lib/python3.7/site-packages/sklearn/ensemble/_forest.py in fit(self, X, y, sample_weight) 302 ) 303 X, y = self._validate_data(X, y, multi_output=True, --> 304 accept_sparse="csc", dtype=DTYPE) 305 if sample_weight is not None: 306 sample_weight = _check_sample_weight(sample_weight, X) /opt/conda/lib/python3.7/site-packages/sklearn/base.py in _validate_data(self, X, y, reset, validate_separately, **check_params) 430 y = check_array(y, **check_y_params) 431 else: --> 432 X, y = check_X_y(X, y, **check_params) 433 out = X, y 434 /opt/conda/lib/python3.7/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs) 70 FutureWarning) 71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 72 return f(**kwargs) 73 return inner_f 74 /opt/conda/lib/python3.7/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator) 800 ensure_min_samples=ensure_min_samples, 801 ensure_min_features=ensure_min_features, --> 802 estimator=estimator) 803 if multi_output: 804 y = check_array(y, accept_sparse='csr', force_all_finite=True, /opt/conda/lib/python3.7/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs) 70 FutureWarning) 71 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)}) ---> 72 return f(**kwargs) 73 return inner_f 74 /opt/conda/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator) 643 if force_all_finite: 644 _assert_all_finite(array, --> 645 allow_nan=force_all_finite == 'allow-nan') 646 647 if ensure_min_samples > 0: /opt/conda/lib/python3.7/site-packages/sklearn/utils/validation.py in _assert_all_finite(X, allow_nan, msg_dtype) 97 msg_err.format 98 (type_err, ---> 99 msg_dtype if msg_dtype is not None else X.dtype) 100 ) 101 # for object dtype data, we only check for NaNs (GH-13254) ValueError: Input contains NaN, infinity or a value too large for dtype('float32'). 여기서 이런 에러가 뜹니다,,,
-
미해결[개념반]배워서 바로 쓰는 SQL 쿼리
실습 시 에러. 강의와 똑같이 써도 에러나요.
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all위 url에서 연습하는데 SELECT * FROM Customers LIMIT 5;에러내용Syntax error in FROM clause. select count(distinct OrderID) from orders;에러내용Syntax error (missing operator) in query expression 'count(distinct OrderID)'. select * from Customers where Country != "Mexico" ;에러내용Syntax error (missing operator) in query expression 'Country != "Mexico"'.느낌표 지우고 = 조건으로 하면 정상 작동
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작3 회귀분석 범주형데이터처리
이경우 회귀분석에 범주형 데이터가 있는데 from statsmodels.formula.api import ols model = ols('매출액 ~ 광고비 + C(유형)', data=df).fit() print(model.summary()) 이렇게 써도 된다구 하셨죠??
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
Redux-Saga Login_REQUEST 문제입니다.
redux-saga 쪼개고 reducer 연결 하려고 하니 user reducer만 반응하고 LOG_IN_SUCCESS 는 반응을 하지 않습니다. 커뮤니티 게시판에서 여러가지를 확인해보고 해도 어디 부분이 잘못 된지 몰라 올려봅니다.. 제가 작성한 코드는 이러합니다. store/configureStore.js import { applyMiddleware, createStore, compose } from "redux"; import createSagaMiddleware from "redux-saga"; import { createWrapper } from "next-redux-wrapper"; import { composeWithDevTools } from "redux-devtools-extension"; import reducer from "../reducers"; import rootSaga from "../sagas"; const configureStore = (context) => { console.log("context", context); const sagaMiddleware = createSagaMiddleware(); const middlewares = [sagaMiddleware]; const enhancer = process.env.NODE_ENV === "production" ? compose(applyMiddleware(...middlewares)) // 배포용 : composeWithDevTools(applyMiddleware(...middlewares)); const store = createStore(reducer, enhancer); store.sagaTask = sagaMiddleware.run(rootSaga); return store; }; const wrapper = createWrapper(configureStore, { debug: process.env.NODE_ENV === "development", }); export default wrapper;reducers/index.js import { HYDRATE } from "next-redux-wrapper"; // HYDRATE = action import { combineReducers } from "redux"; import user from "./user"; import post from "./post"; const rootReducer = combineReducers({ index: (state = {}, action) => { switch (action.type) { case HYDRATE: console.log("HYDRATE", action); return { ...state, ...action.payload }; default: return state; } }, user, post, }); export default rootReducer; reducers/user.js export const initialState = { isLoggingIn: false, // 로그인 시도중 isLoggedIn: false, // 로그인 isLoggingOut: false, // 로그아웃 시도중 meUser: null, signUpData: {}, loginData: {}, }; export const LOG_IN_REQUEST = "LOG_IN_REQUEST"; export const LOG_IN_SUCCESS = "LOG_IN_SUCCESS"; export const LOG_IN_FAILURE = "LOG_IN_FAILURE"; export const LOG_OUT_REQUEST = "LOG_OUT_REQUEST"; export const LOG_OUT_SUCCESS = "LOG_OUT_SUCCESS"; export const LOG_OUT_FAILURE = "LOG_OUT_FAILURE"; export const loginRequestAction = (data) => ({ type: LOG_IN_REQUEST, value: data, }); export const logoutRequestAction = () => ({ type: LOG_OUT_REQUEST, }); const reducer = (state = initialState, action) => { // prettier-ignore switch(action.type) { case LOG_OUT_REQUEST : return {...state, isLoggingIn : true}; case LOG_IN_SUCCESS : return {...state, isLoggingIn : false, isLoggedIn:true, meUser:{...action.value, nickName:"Jay"}}; case LOG_IN_FAILURE : return {...state, isLoggingIn : false, isLoggedIn:false }; case "LOG_OUT_REQUEST" : return {...state, isLoggingOut:true}; case "LOG_OUT_SUCCESS" : return {...state, isLoggingOut:false, isLoggedIn:true, meUser:null}; case "LOG_OUT_FAILURE" : return {...state, isLoggingOut:false}; default: return state; } }; export default reducer;sagas/index.jsimport { all, fork, call } from "redux-saga/effects"; import userSaga from "./user"; export default function* rootSaga() { yield all([fork(userSaga)]); } sagas/user.js import { all, fork, put, delay, takeLatest } from "redux-saga/effects"; import { LOG_IN_FAILURE, LOG_IN_REQUEST, LOG_IN_SUCCESS, } from "../reducers/user"; function* logIn(action) { try { console.log("saga logIn"); // const result = yield call(logInAPI); yield delay(1000); yield put({ type: LOG_IN_SUCCESS, value: action.value, }); } catch (err) { console.error(err); yield put({ type: LOG_IN_FAILURE, error: err.response.data, }); } } function* watchLogIn() { yield takeLatest(LOG_IN_REQUEST, logIn); } function* watchLogOut() { yield takeLatest("LOG_OUT_REQUEST"); } export default function* userSaga() { yield all([fork(watchLogIn), fork(watchLogOut)]); }
-
미해결
T2-4. House Prices (Regression) 라벨인코딩
인프런님, 말씀해주신 코딩대로 전체 문자열에 대해 라벨인코딩 했는데 오류가 뜹니다,,# 필요한 라이브러리를 불러옵니다. import pandas as pd import numpy as np from sklearn.ensemble import RandomForestRegressor from sklearn.preprocessing import LabelEncoder from sklearn.metrics import mean_squared_error, r2_score from sklearn.model_selection import train_test_split # 시험환경 세팅 함수 (변경하지 않습니다.) def exam_data_load(df, target, id_name="", null_name=""): if id_name == "": df = df.reset_index().rename(columns={"index": "id"}) id_name = 'id' else: id_name = id_name if null_name != "": df[df == null_name] = np.nan X_train, X_test = train_test_split(df, test_size=0.2, shuffle=True, random_state=2021) y_train = X_train[[id_name, target]] X_train = X_train.drop(columns=[id_name, target]) y_test = X_test[[id_name, target]] X_test = X_test.drop(columns=[id_name, target]) return X_train, X_test, y_train, y_test # 데이터를 불러옵니다. df = pd.read_csv("../input/house-prices-advanced-regression-techniques/train.csv") # 데이터를 분리합니다. X_train, X_test, y_train, y_test = exam_data_load(df, target='SalePrice', id_name='Id') # 레이블 인코딩을 수행합니다. # 모든 문자열 특성에 대해 레이블 인코딩을 적용합니다. for col in X_train.columns: if X_train[col].dtype == 'object': encoder = LabelEncoder() X_train[col] = encoder.fit_transform(X_train[col].astype(str)) X_test[col] = encoder.transform(X_test[col].astype(str)) # 랜덤 포레스트 모델을 생성하고 훈련합니다. model = RandomForestRegressor(n_estimators=100, random_state=2021) model.fit(X_train, y_train['SalePrice']) # 예측을 수행합니다. y_pred = model.predict(X_test) # RMSE와 R2 값을 계산합니다. rmse = np.sqrt(mean_squared_error(y_test['SalePrice'], y_pred)) r2 = r2_score(y_test['SalePrice'], y_pred) print(f'RMSE: {rmse:.4f}') print(f'R2 Score: {r2:.4f}') 오류내용은 아래와 같습니다 --------------------------------------------------------------------------- KeyError Traceback (most recent call last) /opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in _encode_python(values, uniques, encode) 65 try: ---> 66 encoded = np.array([table[v] for v in values]) 67 except KeyError as e: /opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in <listcomp>(.0) 65 try: ---> 66 encoded = np.array([table[v] for v in values]) 67 except KeyError as e: KeyError: 'Membran' During handling of the above exception, another exception occurred: ValueError Traceback (most recent call last) /tmp/ipykernel_20/2316063552.py in <module> 38 encoder = LabelEncoder() 39 X_train[col] = encoder.fit_transform(X_train[col].astype(str)) ---> 40 X_test[col] = encoder.transform(X_test[col].astype(str)) 41 42 # 랜덤 포레스트 모델을 생성하고 훈련합니다. /opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in transform(self, y) 275 return np.array([]) 276 --> 277 _, y = _encode(y, uniques=self.classes_, encode=True) 278 return y 279 /opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in _encode(values, uniques, encode, check_unknown) 111 if values.dtype == object: 112 try: --> 113 res = _encode_python(values, uniques, encode) 114 except TypeError: 115 types = sorted(t.__qualname__ /opt/conda/lib/python3.7/site-packages/sklearn/preprocessing/_label.py in _encode_python(values, uniques, encode) 67 except KeyError as e: 68 raise ValueError("y contains previously unseen labels: %s" ---> 69 % str(e)) 70 return uniques, encoded 71 else: ValueError: y contains previously unseen labels: 'Membran'
-
미해결쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
노드 IP접근 관련 문의 (2.2 강의 관련)
2.2.파드를 외부에서도 접속하게 하는 서비스(Service)강의에서 궁금한 사항이 있습니다.해당 강의에서 nginx는 w3-k8s 노드(103)에만 생성이 되어 있는데요. service 테스트는 w1-k8s의 IP(101)로 테스트 하는것을 보았습니다. 다른 노드에서도 해당 IP로 접근이 가능한 건가요?