묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
T2-1. 타이타닉 문제 질문있습니다.
저는 지금까지 작업형2 모든 유형의 문제를 object컬럼은 라벨인코딩을 했습니다.이번에도 라벨인코딩을 하려고 보니 오류가 나서 이전에 질문을 드렸고,X_train과 X_test의 데이터 수가 달라 있는 오류라고 설명해주셨습니다. 그래서 X_train과 X_test의 object 컬럼에 nuniqe, describe, velue_counts등의 함수를 적용하여 확인해보았습니다.근데 'Embarked'컬럼은 X_train과 X_test내 데이터 종류 수와 종류도 동일한데, 라벨인코딩을 적용하려하니 계속 이런 오류가 뜹니다.Encoders require their input to be uniformly strings or numbers. Got ['float', 'str']오류가 뜨는 원인과 왜 'Embarekd'컬럼을 drop했을 때는 모델이 잘 적용되는지가 궁금합니다.일단 밑에는 제가 'Embakred'컬럼을 drop한 코딩입니다. # EDA # X_train.info() # X_test.info() # drop & pop : PassengerId(pop) # 추가 삭제 : Cabin, Embarked, Ticket, Name # 결측치 : Age-수치형(결측값 중간값으로 채움), Cabin!!-범주형(얘는 원래 최빈값으로 채우려다가.. 값이 너무 많아서 삭제함) # 범주형 : Sex(라벨), Embarked!!(), Ticket!!, Name!!, Cabin!!(얘네 셋은 원래 라벨인코더 하려다가, train과 test의 nunique값이 달라서 삭제함), # 수치형 : Pclass, SibSp, Parch, Fare, Age(로버스터스케일러) # y_train.info() : PassengerId, Survived X_train = X_train.drop(columns = ['Ticket', 'Name', 'PassengerId', 'Cabin', 'Embarked']) X_test = X_test.drop(columns = ['Ticket', 'Name', 'Cabin', 'Embarked']) X_test_id = X_test.pop('PassengerId') y_train = y_train.drop(columns = ['PassengerId']) X_train['Age'] = X_train['Age'].fillna(X_train['Age'].mean()) X_test['Age'] = X_test['Age'].fillna(X_test['Age'].mean()) from sklearn.preprocessing import RobustScaler num = ['Pclass', 'SibSp', 'Parch', 'Fare', 'Age'] scaler = RobustScaler() X_train[num] = scaler.fit_transform(X_train[num]) X_test[num] = scaler.transform(X_test[num]) from sklearn.preprocessing import LabelEncoder cols = ['Sex'] encoder = LabelEncoder() for col in cols : X_train[col] = encoder.fit_transform(X_train[col]) X_test[col] = encoder.transform(X_test[col]) from sklearn.model_selection import train_test_split X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size = 0.2, random_state = 2022) from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_tr, np.ravel(y_tr)) pred = model.predict(X_val) from sklearn.metrics import accuracy_score accuracy_score(y_val, pred) pred = model.predict(X_test) pd.DataFrame({'PassengerId' : X_test_id, 'Survived' : pred}).to_csv('00000.csv', index = False) pd.read_csv('00000.csv') X_train.shape, X_test.shape, y_train.shape
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
이종간 OS 클래스 문의
안녕하세요. 영한쌤.개발자 PC 윈도우에서 컴파일한 클래스가 유닉스에서 안돌아가는 경험을 한 적이 있는데 java1.5 PC 윈도우, java1.5 서버 유닉스최근 버전 자바에서는 class파일이 이종간 OS도 지원할까요? 아니면, 제환경이 문제가 있었을까요? 오래된 기억이라 동일한 자바 버전이었는지 기억이 안나네요.좋은 강의 정말 감사합니다.저도 해봐야겠네요 ^^
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
스케일링 방법 3에서
def 안 만들고 하는 방법은 없을까요??
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
회귀분석, 분산분석 범주형 변수
선생님 안녕하세요, 3유형 공부하다가 궁금한 점이 있어서 질문남깁니다.선형회귀분석에서 독립변수가 범주형일 경우에 원핫인코딩 처리를 안하고, C( )처리를 안해도 자동으로 인코딩이 되는건가요??반면에 anova에서는 꼭 C ( )를 붙여야 범주화변수 처리가 되나요???
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
idle로 실행 질문
지금 인텔리제이로 실행을 해보려고 하고있는데 입력을 어떻게 받아서 써야하는지 감이 안옵니다... 이런상태입니다... 어떻게 하면 될지 알려주시면 감사하겠습니다!!!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
질문 문제 해결되었습니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요 안녕하세요. 영상에 나온 코드와 함께 보다가 다른 기출 코드 복원 참고 후, 6회 기출 복원 코드 풀이에 대해 질문이 있어 게시글을 남깁니다.1. 영상에 나온 복원 문제1. 연도별로 총 범죄 건수(범죄유형의 총합)의 월평균 값을 구한 후 그 값이 가장 큰 연도를 찾아, 해당 연도의 총 범죄 건수의 월평균 값을 출력하시오. (반올림하여 정수로 출력) 2. 다른 복원 문제2. 다음 월별 범죄를 기록한 데이터로, 연도별 월평균 범죄 건수를 구하고, 가장 범죄가 많이 발생한 연도의 월평균 범죄 건수를 구하시오.6회 복원 문제로 약간 문제가 달라서 그런가 코드가 다르더라고요,,다른 복원 문제 코드로 영상에 나온 데이터로 구했는데 풀이와 값도 달라서어떤식으로 문제의 의미를 해석해서 코드를 작성해야 할지 모르겠습니다. Q. 가장 많이 발생한 건수의 해당 월평균을 구하라는 말은, 많이 나온 년도를 구한 후에 해당 월별 평균 값이 답이 아닌가요? 답변주시면 감사하겠습니다 ㅠ
-
해결됨김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
intellij run 버튼이 뜨지 않고 공백이 생기는 이유
안녕하세요,강사님을 따라서 intellij를 설치해보았습니다.그러나 run 버튼이 활성화되지 않고 다음과 같이 거대한 공백이 있습니다.줄번호도 없었는데 검색해서 켜봤습니다..그런데 나머지는 뭐라고 검색해야할지 모르겠습니다.어떤 문제일까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
anova table 문의
학습코드에 따라 아래 코드로 출력하니 검정통계량과 pvalue값이 소수점 2자리까지만 표시됩니다. 혹시 4자리나 그이상 소수점까지 표시하도록 하는 방법은 없나요..?from statsmodels.stats.anova import anova_lm from statsmodels.formula.api import ols model = ols('토마토수 ~ C(종자) + C(비료) + C(종자):C(비료)', data=df).fit() anova_lm(model)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
500에러가 납니다. 원인이 알고싶어요!
궁금한게 있습니다.수업중 16:00 정도에서의 내용인데요.컨트롤러를 다형성으로 만들고 나서 처음부터 /frontcontroller/v1/members/save 에 접속하면500에러가 납니다. 그런데 /frontcontroller/v1/members/new-form 으로 접속하여 폼에 데이터를 입력 후 전송버튼을 클릭하면 /frontcontroller/v1/members/save에 접속시 해당컨트롤러에 매핑되어 있는 jsp가 잘 호출되는데요처음부터 /frontcontroller/v1/members/save 로 접속하면 발생하는 500에러의 이유가 어떤것일까요?제가 생각하기엔 파라미터값이 넘어오지 않아서 인것 같은데 맞을까요? 정확한 원인이 궁금합니다!
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
둥분산 분석 문의
일원분산 분석시 정규성 만족, 등분산 불만족시 -> 어떤 분석을 사용하나요? 비모수 검정을 사용하나요? 정규성 검정1) 정규성 만족, 등분산 만족시 - > 일원분산분석2) 정규성 만족, 등분산 불만족시 -> 어떤 분석을 사용하나요? 3) 정규성 불만족 -> 비모수검정 Kruskal 검정
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문
안녕하세요~ 여러 대의 서버가 컨테이너 환경에서 실행될 때, 모든 서버의 서킷 브레이커 상태를 실시간으로 자동 전파하려면 어떻게 해야 할까요?
-
해결됨스프링 시큐리티 OAuth2
마지막 장 front end 에서 리소스 서버 직접 요청
안녕하세요. 선생님어느덧 마지막장이네요.한가지 질문이 있네요.사용자에 대한 엑세스 토큰을 발급 받기 위해 사용자가 로그인 링크를 클릭해서 클라이언트 서버에 로그인 요청하면 클라이언트 서버에서 임시코드를 발급 받기 위한 인가서버 요청 url을 만들어 사용자 브라우저로 redirect 하고, 인가서버의 로그인 화면에서 로그인을 하게 되면 인가서버는 임시코드를 parameter 로 넣어서 클라이언트로 redirect 되어, 최종 클라이언트 서버가 사용자에 대한 엑세스 토큰을 인가서버에 요청하여 발급 받잖아요? 그리고 클라이언트 서버가 그 엑세스 토큰을 관리하게 되고..그러니까 클라이언트 서버가 대신 요청? 그런데 마지막장에 리소스 서버에 자원을 요청하는데.. 클라이언트 API 서버가 요청하는 것도 있고.. frond end 자바스크립트에서 클라이언트 서버를 경유하지 않고 직접 리소스 서버에 자원을 요청하는 예제가 있네요.실무에서는 이렇게 frond end 단에서 직접 리소스 서버로 요청하기도 하는지요?front end에서 클라이언트 API 서버에 요청을 하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는 것인지? 아니면 front end에서 직접 리소스 서버에 토큰 들고 요청하여 사용자 정보를 가져와 보여주는 식으로 구현해야 하는지? 실무에서 어떻게 구현하는지 알고 싶네요.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
섹션13. 작업형2에서 데이터 합치기
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요안녕하세요.만일, 아래와 같이 라벨인코딩과 원핫인코딩을 수행했다면,,데이터 다시 합치기를 할 필요가 없는 것이지요?이유는, 분리하지 않고 범주형/수치형 data만 취해서 인코딩을 진행했기 때문에,,,,이게 맞을까요? # 라벨인코딩 cols = ['Employment Type','GraduateOrNot', 'FrequentFlyer', 'EverTravelledAbroad'] from sklearn.preprocessing import LabelEncoder for col in cols: le = LabelEncoder() train[col] = le.fit_transform(train[col]) test[col] = le.transform(test[col]) # 원핫인코딩 cols2 = ['Age','AnnualIncome', 'FamilyMembers', 'ChronicDiseases'] train[cols2] = pd.get_dummies(train[cols2]) test[cols2] = pd.get_dummies(test[cols2])
-
미해결
인덱스 생성하는 법
여기서 위에 id, price가 함께 나오려면 ( 기존 test 데이터에는 id가 없어서 pop을 못합니다)pred = rf.predict(test) submit = pd.DataFrame({ 'pred' : pred }) 여기서 어떻게 추가를 해야 id, price가 같이 나오나요?
-
미해결[리뉴얼] 처음하는 MongoDB(몽고DB) 와 NoSQL(빅데이터) 데이터베이스 부트캠프 [입문부터 활용까지] (업데이트)
nosql 섹션3. 몽고DB 데이터 수정하기부분 질문
안녕하세요. 다름이 아니라 강의 17:00에 replace 부분을 보다가 생긴 궁금증인데요 $set 수정부분 키값에서 age와 hobbies 에는 쌍따옴표가 없는데 name에는 있어서 혹시 특별한 의미가 있는지 궁금해서 문의글 남깁니다. name 부분 쌍따옴표가 없어도 실행은 되어서 여쭤 봅니다.
-
미해결[개정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(); 와 같은 방식으로 호출하는데 이 방식이 옳바른 방식인가요?