묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨토비의 스프링 부트 - 이해와 원리
안녕 하세요
우리가 스프링 부트를 사용할 떄 dispatcher랑 factory를 등록하는 것 없이 사용 가능한데spring boot starter web 라이브러리를 추가 하면 자동으로 등록되는 거죠??
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
실전문제 해설 PDF 받을수 있을까요
안녕하세요 강사님,실전문제풀이 해설 pdf 받을 수 있는지 문의 드립니다!이메일 : sewoozz@naver.com감사합니다
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
포트폴리오 댓글 무한 스크롤
포트폴리오 과제에서 주셨던 무한 스크롤 리뷰가 오늘 강의에선 없네요! 혹시 이유가 있는걸까요?!그리고 백앤드에 하나의 게시판에 달려있는 댓글 갯수를 가져오는 api가 따로 없던데 퀴즈처럼 무한스크롤을 직접구현하는 건가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
.eslintignore 관련 문의
안녕하세요.eslint와 prettier 설정 및 UI 프레임워크 강의 상에서는.eslintignore가 적용되지 않는데 혹시 추후 강의에 이 부분이 다시 언급되는지가 궁금해서 문의 남깁니다. 혹시 언급되지 않는다면 어떻게 처리하면 될까요?그리고 추가로 .eslintrc.js 파일 내용이 이전 강의랑 다른데 이건 왜 달라졌는지 알 수 있을까요?(이전 강의에서는 .eslintrc.js에 parser: @typescript-eslint/parser도 있었고, plugins에도 적용을 해주었던거 같은데 이번 강의에서는 다 빠져있어서 문의드립니다.)
-
미해결쉽고 빠르게 익히는 Power BI 심화 1 (시각화와 파워 쿼리)
복잡한 형식의 엑셀 데이터 가져오기.
안녕하세요.이번에 엑셀로 작업한 문서들을 파워 비아이로 옮기는 작업을 맡게 되면서, 선생님 강의를 듣고 있는 수강생입니다.파워 비아이를 잘 모르던 저에게 정말 많은 도움이 되었습니다! 다름이 아니라 제가 옮겨야 하는 자료들이 엑셀 시트에 조금 더 복잡하게 정리되어 있는 상황이라 어떤 식으로 데이터를 옮기는 게 좋을지 문의드리고자 글 씁니다.애초에 파워 비아이나 다른 프로그램을 염두에 두지 않고 엑셀에서 작업을 했기 때문에, 시트마다 디자인이 제각각으로 되어있고, 이런 식으로 병합된 테이블들 : 다른 시트 페이지의 데이터에 함수를 적용해서 나온 값들 그리고 그것들로 만든 값, 테이블 등등..바로 데이터를 가져오기에는 힘들게 되어있습니다. 이런 경우는 기본 데이터들만 가져와서 엑셀에서 한 것처럼 dax 작업을 통해 하나하나 계산하여 원하는 테이블들을 만드는 게 빠를까요? 그리고 위 사진과 같은 병합된 테이블은 어떤 식으로 옮기는 게 좋을지도 문의드립니다. 읽어주셔서 감사합니다.
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
front 인스턴스 퍼블릭 주소 접근 에러
안녕하세요 선생님..강의 따라 프론트 배포 후, aws인스턴스에 나와있는 퍼블릭 ip주소로 들어가서 프론트 서버가 실행되는지 확인해보니 연결을 거부했다는 창이 떴습니다.우분투에서 npm run build 해서 info - Generating static pages (4/4) info - Finalizing page optimization Page Size First Load JS ┌ λ / 2.04 kB 374 kB ├ /_app 0 B 105 kB ├ ○ /404 2.77 kB 108 kB ├ λ /hashtag/[tag] 1.54 kB 299 kB ├ ○ /login 1.89 kB 225 kB ├ ○ /newLook 14.3 kB 310 kB ├ λ /post/[id] 34 kB 345 kB ├ λ /post/allPosts 973 B 278 kB ├ λ /profile 180 B 365 kB ├ ○ /signup 5.97 kB 282 kB └ λ /user/[id] 2.75 kB 365 kB + First Load JS shared by all 105 kB ├ chunks/2eefa3dc3cc8f0c2cde672071668ef45dcb6f3dd.22cde6.js 28.1 kB ├ chunks/commons.7a84f9.js 11.5 kB ├ chunks/f0193db3.b49a15.js 69 B ├ chunks/framework.1daf1e.js 39.9 kB ├ chunks/main.8aa676.js 9.07 kB ├ chunks/pages/_app.6afac7.js 15.7 kB ├ chunks/webpack.eb080e.js 751 B ├ css/342ac7ff0ab1780a5748.css 72 kB └ css/4fae701701216c0faa95.css 198 B λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps) ○ (Static) automatically rendered as static HTML (uses no initial props) ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps) (ISR) incremental static regeneration (uses revalidate in getStaticProps)이렇게 빌드 하고, sudo npx pm2 start npm -- start위의 명령어를 입력하니까ubuntu@ip-172-31-15-140:~/My-Projects/fourthProject/front$ sudo npx pm2 start npm -- start npx: installed 184 in 13.279s [PM2] Spawning PM2 daemon with pm2_home=/root/.pm2 [PM2] PM2 Successfully daemonized [PM2] Starting /usr/bin/npm in fork_mode (1 instance) [PM2] Done. ┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐ │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │ ├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤ │ 0 │ npm │ default │ N/A │ fork │ 19231 │ 0s │ 0 │ online │ 0% │ 26.1mb │ root │ disabled │ └─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘터미널에 이런 창이 떴구요,sudo npx pm2 monit위의 명령어 입력하니까ubuntu@ip-172-31-15-140:~/My-Projects/fourthProject/front$ sudo npx pm2 monit npx: installed 184 in 7.952s ubuntu@ip-172-31-15-140:~/My-Projects/fourthProject/front$ npm run build > fahsionary@1.0.0 build /home/ubuntu/My-Projects/fourthProject/front > cross-env ANALYZE=true NODE_ENV=production next build Browserslist: caniuse-lite is outdated. Please run: npx browserslist@latest --update-db info - Using external babel configuration from /home/ubuntu/My-Projects/fourthProject/front/.babelrc Webpack Bundle Analyzer saved report to /home/ubuntu/My-Projects/fourthProject/front/.next/server/analyze/client.html Webpack Bundle Analyzer saved report to /home/ubuntu/My-Projects/fourthProject/front/.next/analyze/client.html info - Creating an optimized production build info - Compiled successfully info - Collecting page data [ ==] info - Generating static pages (0/4)watchSinUp [====] info - Generating static pages (1/4)watchSinUp 메인포스트: [] undefined [=== ] info - Generating static pages (1/4)watchSinUp undefined watchSinUp info - Generating static pages (4/4) info - Finalizing page optimization Page Size First Load JS ┌ λ / 2.04 kB 374 kB ├ /_app 0 B 105 kB ├ ○ /404 2.77 kB 108 kB ├ λ /hashtag/[tag] 1.54 kB 299 kB ├ ○ /login 1.89 kB 225 kB ├ ○ /newLook 14.3 kB 310 kB ├ λ /post/[id] 34 kB 345 kB ├ λ /post/allPosts 973 B 278 kB ├ λ /profile 180 B 365 kB ├ ○ /signup 5.97 kB 282 kB └ λ /user/[id] 2.75 kB 365 kB + First Load JS shared by all 105 kB ├ chunks/2eefa3dc3cc8f0c2cde672071668ef45dcb6f3dd.22cde6.js 28.1 kB ├ chunks/commons.7a84f9.js 11.5 kB ├ chunks/f0193db3.b49a15.js 69 B ├ chunks/framework.1daf1e.js 39.9 kB ├ chunks/main.8aa676.js 9.07 kB ├ chunks/pages/_app.6afac7.js 15.7 kB ├ chunks/webpack.eb080e.js 751 B ├ css/342ac7ff0ab1780a5748.css 72 kB └ css/4fae701701216c0faa95.css 198 B λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps) ○ (Static) automatically rendered as static HTML (uses no initial props) ┌─ Process List ───────────────────┐┌── npm Logs ────────────────────────────────────────────────────────────────────┐ │[ 0] npm Mem: {#aN-fg} 0 MB ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ │ ││ │ └──────────────────────────────────┘└──────────────────────────────────────────────────────────────────────────────────┘ ┌─ Custom Metrics ─────────────────┐┌─ Metadata ───────────────────────────────────────────────────────────────────────┐ │ ││ App Name npm │ │ ││ Namespace default │ │ ││ Version N/A │ │ ││ Restarts 15 │ │ ││ Uptime 0 │ │ ││ Script path /usr/bin/npm │ └──────────────────────────────────┘└──────────────────────────────────────────────────────────────────────────────────┘ left/right: switch boards | up/down/mouse: scroll | Ctrl-C: exit To go further check out https://pm2.io/ 이렇게 뜨던데..어디가 문제인가요?vim package.json 하니까 "scripts": { "dev": "next", "build": "cross-env ANALYZE=true NODE_ENV=production next build", "start": "cross-env NODE_ENV=production next start -p 80" },scripts부분은 이렇게 나왔습니다 aws에서 프론트 인스턴스의 보안그룹 인바운드 규칙은이렇게 구성했습니다.백서버는 ip주소로 들어가면 수업 내용과 같이 hello express가 보여서 잘 실행되고 있는걸 확인했습니다. config폴더에에서 confing.js로 backUrl로 백 주소 정의해서 교체도 진행했어요
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Flutter SDK is not found in the specified location. 문제가 해결안됩니다.ㅠㅠ
원래 문제가 3가지 였는데 2가지는 방금 어찌저찌 해결이 됐어요. 그런데 SDK관련 이슈는 해결방법이 너무 복잡해보이네요ㅠㅠ
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
ES6 Sequelize.sync error
안녕하세요 현재 cjs 가 아닌 es6 로 nodejs 코드를 작성하고 있습니다. 9-2 강의 진행 중 강사님 깃헙 리포지토리 9-2 폴더 중 app.js 20번 줄에서 sequelize.sync is not a function 이라는 오류가 나옵니다. 구글 검색을 해본 결과 일부 블로그에서 es6 에서는 해당 함수를 사용이 불가하다는 글을 보았습니다. 그리고 models/index.js 파일에서 fs.readdirSync(__dirname) .filter(file=>{ return file.indexOf('.') !== basename && file.slice(-3) === '.js'; }) .forEach((file) =>{ import(path.join(__dirname,file)) .then((obj) => {console.log(obj.name); obj(sequelize, Sequelize.DataTypes); db[obj.name] = obj; obj.initiate(sequelize);}) .catch(err => console.log(err)); //const model = require(path.join(__dirname, file)); //console.log(file,model.name); //db[model.name] = model; //model.initiate(sequelize); });주석 처리한 부분은 cjs 스타일이고 변경한 부분은 동적 import 를 사용해서 구현해보았습니다. 구글 검색 후 obj(sequelize, Sequelize.DataTypes) 구문을 삽입하면 해당 오류가 해결이된다고 했으나 해결이 되지 않습니다. 오류설명이 구구절절 길었으나 제 질문을 정리하자면해당 함수(sequelize.sync)가 es6에서는 사용이 안되나요?사용이 안되다면 전면 cjs 로 바꿔 코드 작성을 해야하나요?입니다. es6 코드 작성을 연습하고자 코드를 변경해가며 진행중인데 난관을 겪었습니다. 질문 유의사항을 잘지켜야지 하며 적었는데 가독성이 있을지는 모르겠습니다. 감사합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
완전 탐색
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.완전탐색부터는 강의가 없는데 해당 강의는 업데이트가 되는건가요? 아니면 추가로 결제를 해야할까요??
-
미해결[2025년 출제기준] 웹디자인기능사 실기시험 완벽 가이드
넣지 않은 패딩이 있고 해당부분을 해결할 수 없어요
■ 질문 남기실 때 꼭! 참고해주세요.- 먼저 유사한 질문이 있었는지 검색해주세요.- 궁금한 부분이 있으시면 해당 강의의 타임라인 부분을 표시해주시면 좋습니다.- HTML, CSS, JQUERY 코드 소스를 텍스트 형태로 첨부해주시고 스크린샷도 첨부해주세요.- 다운로드가 필요한 파일은 해당 강의의 마지막 섹션에 모두 있습니다.<보고 있던 강의제목>3. 상단 드롭다운 네비게이션(3가지 타입) – HTML+CSS+JQUERY강의시점 23:09아래는 작성한 cssbody { display: flex; justify-content: center; } .container { border: 1px solid #000; width: 1200px; } header { display: flex; justify-content: space-between; position: relative; } header>div { border: 1px solid #000; height: 100px; } .header-logo { width: 200px; } .navi { width: 600px; } .slide {} .slide div { border: 1px solid #000; height: 300px; } .items { display: flex; } .items>div { border: #000 1px solid; height: 200px; } .news { width: 400px; } .banner { width: 400px; } .shortcut { width: 400px; } footer { display: flex; } footer>div { border: #000 1px solid; height: 100px; } .footer-logo { width: 200px; } .copyright { width: 800px; } .sns { width: 200px; } /* navi */ .menu { list-style: none; margin-top: 67px; } .menu li { /* border: #000 1px solid; */ float: left; width: 25%; box-sizing: border-box; text-align: center; } .sub-menu { border: #000 1px solid; /* display: none; */ } .sub-menu a { display: block; text-decoration: none; padding: 5px; background-color: #fff; transition: 0.5s; } .sub-back { width: 100%; height: 200%; background-color: #000; position: absolute; right: 0; } .sub-menu a:hover { background-color: #000; color: #fff; } .menu li>a { border: #000 1px solid; display: block; padding: 5px; text-decoration: none; } .menu li:hover>a { background-color: #000; color: #fff; }
-
해결됨ElasticSearch Essential
ES 데이터노드의 적합한 인스턴스 타입이 궁금합니다.
안녕하세요.사내에서 검색엔진으로 k8s에 ES를 운영하고 있는 와중에 강진우님의 Elasticsearch 강의가 있는 것을 알게되어 하루만에 빠르게 완강했습니다.한가지 문의사항이 있어서 문의드리게 되었는데요..!저희 사내 검색엔진 ES의 데이터 노드가 하루 중 사용량이 많은 시간대에는 CPU가 85~95%까지 치고 평소에는 3~40%를 유지중입니다.현재 데이터노드의 인스턴스타입은 RAM(메모리 타입)인데요. 하나의 노드가 하나의 샤드와 레플리카들을 가지고 있습니다.별다른 장애는 없었지만 매일 CPU가 95%까지 육박하고, Load average는 cpu core 수의 2~3배를 치고 있어서 개선할 수 있는 방법을 고민해보고 있는데요.JVM 힙메모리는 맥스 30G 중 21G 정도를 상시 유지중이고, ES의 캐싱메모리를 쓰는 탓인지 Pod의 메모리는 상시 90~95%를 유지중입니다.하여,,Q. ES를 운영할 때 어떤 인스턴스 타입으로 운영하는게 좋을지 궁금하여 자문을 드리게 되었습니다ㅠㅠCPU 타입으로 하는게 좋을지,, 중간 타입으로 하는게 좋을지,, RAM(메모리) 타입으로 그대로 하는게 좋을지 잘 감이 안서네요.. 우선 RAM 타입으로 하였습니다.감사합니다!
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
model.findone() no longer accepts a callback 오류
findOne()도 save()와 마찬가지로 몽구스 5.0부터는 콜백함수를 지원하지 않기 때문에 기존에 app.post('/api/users/login',(req, res) =>{ // 요청된 이메일을 데이터베이스 찾기 User.findOne({email: req.body.email}, (err, docs) =>{ if(!docs){ return res.json({ loginSuccess: false, messsage: "제공된 이메일에 해당하는 유저가 없습니다." }) } // 요청된 이메일이 DB에 있다면 Password가 일치한지 확인 user.comparePassword(req.body.password, (err, isMatch) => { if(!isMatch) return res.json({loginSuccess: false, messsage: "비밀번호가 틀렸습니다."}) // Password가 일치하다면 토큰 생성 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}) }) }) }) })에서 콜백함수가 들어가 있기 때문에 callback을 쓰지 않고 promise 또는 async/await로 수정해서 사용하시면 됩니다.저같은 경우는 promise로 수정해서 .then .catch로 수정을 했습니다.app.post('/api/users/login',(req, res) =>{ // 요청된 이메일을 데이터베이스 찾기 User.findOne({email: req.body.email}) .then(docs=>{ if(!docs){ return res.json({ loginSuccess: false, messsage: "제공된 이메일에 해당하는 유저가 없습니다." }) } docs.comparePassword(req.body.password, (err, isMatch) => { if(!isMatch) return res.json({loginSuccess: false, messsage: "비밀번호가 틀렸습니다."}) // Password가 일치하다면 토큰 생성 docs.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}) }) }) }) .catch((err)=>{ return res.status(400).send(err); }) })참고하시고 수정하시면 될 것 같습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 예외처리 질문입니다.
안녕하세요 선생님! 강의 항상 잘 보고 있습니다. 저는 이 문제 예외처리를 합해서 생각한 게 아니라 나눠서 비교해도 될 것 같아서 그렇게 로직을 짰는데, 실패했고 '내 코드보기'를 하면 Error를 뱉고 있더라고요 혹시 어떤 문제일까요?강의 보고 합한 걸로 처리하니까 통과 됐고, 합해서 하는 게 더 좋은 거라는 생각은 했는데, 나눠서 생각한 게 왜 틀린지를 잘 모르겠습니다. 33~36 line 입니다. 링크 첨부합니다~https://www.acmicpc.net/source/57441252
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
GetComponent 함수 관련 질문이 있습니다!
선생님 언제나 좋은 강의 잘 보고 있습니다.싱글톤패턴 복습과정 중 이것저거 테스트하다s_instance에 값을 넣어 줄 때 저렇게 그냥 바로 GetComponent<>(); 해버려도 작동이 되더라구요GetComponent 함수가 특정 게임오브젝트에 있는 Component 를 가져오는것인 줄 알고 사용했는데 위 코드는 왜 동작하는지 이유를 알려주실 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품 주문 submit 버튼 누룰 시 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported https://drive.google.com/file/d/1SPT29SzTIZ-E-f3aJrRZ8IvxPyXhJVtR/view?usp=sharing
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
환율 강의 테이블뷰에서 데이터 관련 질문있습니다.
안녕하세요 강의진행하면서 궁금한게있어서 질문드립니다.저의 경우 처음 Picker 뷰에서 rates배열에 url로 데이터 파싱한 데이터를 Table탭에서 delegate패턴을 이용해서 가져오는식으로 데이터를 가져오려 했습니다.먼저 Picker코드입니다. // // ViewController.swift // Exchange Rate // // // import UIKit class PickerViewController: UIViewController { @IBOutlet weak var usdTextField: UITextField! @IBOutlet weak var selectedCurrency: UITextField! @IBOutlet weak var selectedCurrencyName: UILabel! @IBOutlet weak var currencyPicker: UIPickerView! var rates: [(String,Double)]? // table data delegate weak var delegate: tableDataDelegate? // picker row변화에 따른 observer property 계산 var selectedRow = 0 { didSet { selectedCurrencyName.text = rates?[selectedRow].0 selectedCurrency.text = calculateCurrency() } } func calculateCurrency() -> String { let selectedValue = rates?[selectedRow].1 ?? 0 let usdValue = Double(usdTextField.text ?? "") ?? 0 let resultValue = String(format: "%.2f", (selectedValue * usdValue)) return resultValue } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.navigationItem.title = "Currency Converter Picker" fetchJson() //picker 연결 currencyPicker.delegate = self currencyPicker.dataSource = self // textField delegate usdTextField.delegate = self // porotcol delegate } func fetchJson() { let urlString = "https://open.er-api.com/v6/latest/USD" guard let url = URL(string: urlString) else {return} // data task URLSession.shared.dataTask(with: url) { data, res, err in guard let data = data else {return} do { let currencyModel = try JSONDecoder().decode(CurrencyModel.self,from: data) // rates: [key:value] 형태 // let rates = currencyModel.rates?.map { [$0 : $1] } // let rates2 :[(String,Double)]? = currencyModel.rates?.sorted(by: { dic1, dic2 in // dic1.key < dic2.key // sorted같은걸하면 Dictionary.Element가되서 tuple로 바뀜 // }) self.rates = currencyModel.rates?.sorted{ $0.key<$1.key } // picker 새로고침해야 데이터 내용이 보임 DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } // get table data print("rate: ",self.rates!) self.delegate?.getData(data: self.rates! ) // print("currentModel",currencyModel) } catch { print(err!) } }.resume() } } extension PickerViewController:UIPickerViewDelegate,UIPickerViewDataSource { func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return rates?.count ?? 0 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { let key = rates?[row].0 ?? "" let value = rates?[row].1.description ?? "" return key + " " + value } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectedRow = row } } extension PickerViewController:UITextFieldDelegate { func textFieldDidChangeSelection(_ textField: UITextField) { selectedCurrency.text = calculateCurrency() } } 저의 경우 DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } // get table data print("rate: ",self.rates!) self.delegate?.getData(data: self.rates! )여기서 rates가 전부불어와지면 delegate를 이용해서 해당데이터를 table뷰로 가져오려고 의도했습니다. table데이터입니다.// // ListViewController.swift // Exchange Rate // // import UIKit protocol tableDataDelegate:AnyObject { func getData(data:[(String,Double)]) } class ListViewController: UIViewController { // Data list var conData = [(String,Double)?]() @IBOutlet weak var udsLabel: UILabel! @IBOutlet weak var costTextField: UITextField! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.navigationItem.title = "Currency Converter Table" self.udsLabel.text = "UDS" // table // tableView.delegate = self tableView.dataSource = self let sb = UIStoryboard(name: "Main", bundle: nil) guard let detailVC = sb.instantiateViewController(withIdentifier: "PickerViewController") as? PickerViewController else {return} detailVC.delegate = self tableView.rowHeight = 100 } } extension ListViewController:UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("cor: ",conData) return 10 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell") as! MyTableViewCell cell.currencyLabel.text = "good" cell.valueLabel.text = "allaal" return cell } } extension ListViewController: tableDataDelegate{ func getData(data: [(String,Double)]) { print("data: ",data) self.conData = data // print(self.conData) } } 여기서 delegate프로토콜을 만들고 Picker뷰에서 가져온 데이터를 conData라는 배열에 담아서 저는 담겨진 데이터를 이용해서 테이블뷰에 데이터를 뿌리는식으로 작업하려했는데 이런식으로 하니 프로토콜이 제대로 안되서인지 conData에 데이터가 담기지 않고 빈배열이 나옵니다.. 저의경우 table뷰에서 델리게이트를 사용한다고 위임하는 코드를 let sb = UIStoryboard(name: "Main", bundle: nil) guard let detailVC = sb.instantiateViewController(withIdentifier: "PickerViewController") as? PickerViewController else {return} detailVC.delegate = self이렇게 Main에있는 스토리보드를 가져와서 권환을 위임했는데 이게 틀린걸까요?어디가 잘못됐는지 잘모르겠습니다.. 답변 부탁드립니다!
-
해결됨웹플로우(Webflow) 시작하기 - 코딩 없이 자유도 높은 프로토타입 만들기
웹플로우로 마이페이지 구현이 가능한가요?
안녕하세요 :)웹플로우 강의 수강 중이고, 회원들이 마이페이지에 메모를 남길 수 있는 기능을 구현하고 싶습니다. 관련하여 아래 2가지 기능 구현이 가능할지 문의드립니다.마이페이지 구현마이페이지에 로그인한 회원이 메모(텍스트, 이미지, 동영상 등)를 남길 수 있는 기능 구현
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
데이터베이스와 파일업로드
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 본 강의를 수강중인 학생입니다.외부 데이터베이스 대신 데이터를 보관하는 역할을 ItemRepository 클래스의 map이 하고있다는 것은 이해했습니다.만약 mysql같은 외부 데이터베이스에 이미지를 저장하고 싶다면 ItemRepository 클래스를 수정하는게 맞나요?강의 로직에서 이미지를 업로드하면 map과 로컬 저장소에 저장되는데 이때 map은 저장되는 setID가 URL에서 /items/{Id}로 표현되는 것 말고는 무슨 역할인지 잘 모르겠습니다. 업로드한 이미지를 보여주는 것에 관여를 하나요? 그리고 로컬 저장소인 폴더없이 map으로만 이미지를 웹에서 보여줄 수 없나요?
-
해결됨[코드캠프] 훈훈한 Javascript
섹션7-newSpan.textContent = todoContents; 에 관해
const createTodo = function (storageData) { let todoContents = todoInput.value; if (storageData) { todoContents = storageData.contents; } const newLi = document.createElement("li"); const newSpan = document.createElement("span"); const newBtn = document.createElement("button"); newBtn.addEventListener("click", () => { newLi.classList.toggle("complete"); saveItemsFn(); }); newLi.addEventListener("dblclick", () => { newLi.remove(); saveItemsFn(); }); if (storageData?.complete) { newLi.classList.add("complete"); } newSpan.textContent = todoContents; newLi.appendChild(newBtn); newLi.appendChild(newSpan); todoList.appendChild(newLi); todoInput.value = ""; saveItemsFn(); };잘 이해가 되지않는 부분이 있어 질문남깁니다!newSpan.textContent = todoContents;이곳에서 todoContents대신 todoInput.value로 할당했을 때 localstorage의 content에 값이 정상적으로 전달되지않고 ""로 빈 값이 저장되는 지 궁금합니다.
-
미해결스프링 부트 웹 개발 입문 - 따라하며 배우기
DB Table 생성, 데이터 입력 외래키 생성 문의
DB table 생성, 데이터 입력 문의jdbc 연결 부분에서 계속 문제가 발생해 maridb 버전을 5점대로 다시 깔고 지금 학습 중입니다. 영상에서 cust_info 테이블에 cust_id를 unique 키로 만들면 외래 키가 만들어지는데 전 안 만들어져서 문의 드립니다?