inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

174만명의 커뮤니티!! 함께 토론해봐요.

어몽이를 stage의 100% 로 보낼 수 있는 방법이 궁금해요!

해결됨

웹 애니메이션을 위한 GSAP 가이드 Part.01

키프레임 wrap around 실습하다가 궁금해서 여쭤봐요! 해설해주신 대로 어몽이를 x를 420으로 하면 부모인 stage 가로사이즈 500px이 바뀌면 어몽이에 적용한 420도 같이 바뀌어야 해서 부모 사이즈를 기준으로 하려면 left나 right 속성을 사용하는 방법 밖에 없을까요?

  • HTML/CSS
  • javascript
  • 인터랙티브-웹
  • gsap
pom0306 댓글 2 좋아요 1 조회수 118

동물 앨범 만들기 사진 관련 문의

해결됨

한 번에 끝내는 자바스크립트: 바닐라 자바스크립트로 SPA 개발까지

안녕하세요. 동물 앨범 만들기 부분을 듣고 있습니다. 올려주신 사이트에 들어가려고 하니까 '연결이 비공개로 설정되어 있지 않습니다' 라는 문구가 나와서 여러가지 방법을 사용해봤는데, 마지막에 불법 정보 유해 사이트쪽으로 넘어가지는데 혹시 어떻게 해결할 수 있을까요? ⚠ 답변은 평일 오전 10시에 순차적으로 작성해드립니다. ⚠ '질문 해결'은 답변 작성일 기준 1일 이후에 적용됩니다.

  • javascript
  • rest-api
  • spa
  • dom
배준석 댓글 2 좋아요 0 조회수 104

프로젝트 1 카운터앱만들기에서 props로 넘겨주기 궁금한부분이잇습니다.

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

6.3)기능 구현하기 부분에서 <Controller/>에서 <Viewer/>로 count를 넘겨주는게 불가능하다고하셨는데 const Viewer = ({ count }) => {} 로 props로 넘겨주는거 가능하지않나여 ? 그렇게 해서 잘넘어와서 카운터앱만들기 성공했는데 왜 안된다구하신건지 이렇게하면 안되는 이유가 궁금합니다! 이전강의해서 배운대로 사용했는데 이부분에서 갑자기안된다고하셔서 궁금해서 여쭤봅니다.

  • javascript
  • react
  • node.js
댓글 2 좋아요 0 조회수 107

EXPLOPER에서 파일을 삭제하는 방법을 알려주세요 ㅜㅜ

미해결

[코드팩토리] [입문] 9시간만에 끝내는 코드팩토리의 Javascript 무료 풀코스

EXPLOPER에서 파일을 삭제하는 방법을 알려주세요 ㅜㅜ 부업이라고 적힌 파일을 삭제하고 완전히 새로운 파일로 다시 하려고 하는데요 저 부업이라는 부분을 마우스 오른쪽으로 눌려봐도 Delete 키가 없고 아무리 해도 삭제가 안되네요 ㅠ 저 부업이라는 파일을 삭제하는 방법 좀 알려주세요...

  • javascript
Hyeji Lee 댓글 2 좋아요 0 조회수 148

put 요청은 언제

미해결

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

앞으로 나오는 put 요청은 모두 patch에 해당하고 수정하는 부분이 있다는데 언제쯤 나오나요? 지금 typeorm까지 들었는데도 계속 다른설명으로 나오고 수정되는 부분이 없는듯해요 쌩기초입문자라 너무 헷갈리는데.. 그럼 put요청의 설명은 없었던건가요? typeorm의 updatePost의 save기능에서 1) 만약 데이터 존재하지않는다면 새로생성 2) 데이터 존재한다면 (같은 id)값을 변경 이라곤 하지만 NotFoundException() 처리를 하는걸로봐서 새로생성하지 않는 것 같은데요.. 이것도 단순히 값만 변경하는 patch요청에 해당하는거 아닌가요?

  • javascript
  • typescript
  • rest-api
  • nestjs
  • backend
ㄹㄹㄹ 댓글 3 좋아요 0 조회수 144

커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

figma 에 들어가도 css 코드가 안나오고 과제 정답 과 해설이 있으면 좋을거같은데 피그마에서 아무 코드 정보없이 혼자 다 만드려는게 처음 강의를 듣고 과제를 하려는데 있어서 응용해서 뚝딱 만들기가 너무 어렵고 힘들어요 ㅠ

  • javascript
  • node.js
  • docker
  • rest-api
  • nestjs
조성민 댓글 2 좋아요 0 조회수 114

아래 질문 (토이스토리 title에 있는 button에 링크 거는 법)에 대한 해결방법이 이게 맞을까요? 더 좋은 방법이 있으면 알려주세요

해결됨

웹 애니메이션을 위한 GSAP 가이드 Part.02

navList.forEach((li, index)=>{ const roma = ['I', 'II', 'III']; const arabic = ['1','2','3'] const linkAddr = ['naver.com','google.com','inflearn.com']; // button 링크 주소 li.addEventListener('click',()=>{ if(!playing) { next = index; if(li.classList.contains('active')) return; for(let i=0;i < navList.length; i++) { navList[i].classList.remove('active'); } li.classList.add('active'); const addr = /*html*/`location.href='http://${linkAddr[next]}'`; // button 속성 값 const tl = gsap.timeline() .add(leave[current].play()) .add(titleLeave.play(),'-=1') .set('.title h1',{text:`toystory ${roma[index]}`}) .set('.title p',{text:`토이스토리 시즌 ${arabic[index]}`},'<') .add(enter[next].play()) .add(titleEnter.play()) tl.eventCallback('onComplete',()=>{ const btnLink = document.querySelector('.title button'); // button 요소 가져오기 btnLink.setAttribute('onclick',addr); // button의 onclick 속성 추가 current = next; playing = false; }) playing = true; } }) }) window.addEventListener('load',()=>{ const tl = gsap.timeline() .add(enter1.play()) // enter 타임라인 실행 .add(titleEnter.play()) tl.eventCallback('onComplete', () => { const btnLink = document.querySelector('.title button'); //처음 실행시 button에 속성값 추가 btnLink.setAttribute('onclick',"location.href='http://naver.com'"); //처음 실행시 button에 속성값 추가 playing = false; }) // page03()[1].play() // leave 타임라인 실행 })

  • HTML/CSS
  • javascript
  • 인터랙티브-웹
  • gsap
미갱이 댓글 1 좋아요 0 조회수 91

토이스토리 practice에서 "WATCH NOW"버튼에 대한 href 속성값을 변경하는 방법

해결됨

웹 애니메이션을 위한 GSAP 가이드 Part.02

안녕하세요. 4강 토이스토리 practice에서 강의 중 선생님께서 "WATCH NOW" 버튼의 href?값을 페이지에 따라 변경할 수 있다고 하셨는데요. gsap을 이용해서 변경할 수 있는 방법이 있는 건지요? 아님 자바스크립트 함수 안에서 직접 세팅하는 걸까요?

  • HTML/CSS
  • javascript
  • 인터랙티브-웹
  • gsap
미갱이 댓글 1 좋아요 0 조회수 82

단축키 질문

미해결

부트스트랩 5(Bootstrap 5) - 기초부터 웹 프로젝트 만들기

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 단축키도 중간에 이야기 해주시면 안될까요? 물론 직접 찾아보면서 하긴하지만 잘 안나오는 경우도 있고 그때마다 영상 멈추고 찾아보는거보다 강사님께서 알려주시면 좋을듯해서요..

  • HTML/CSS
  • javascript
  • bootstrap
  • 웹-디자인
slothmaru 댓글 1 좋아요 0 조회수 90

코드 리뷰 부탁드립니다!

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

function solution(m, arr) { arr.sort((a, b) => a[0] + a[1] - (b[0] + b[1])); let answer = 0; for (let discount = 0; discount < arr.length; discount++) { //할인이 적용되는 상품 let discountPrice = arr[discount][0] / 2 + arr[discount][1]; let budget = m - discountPrice; let temp = 1; for (let undiscount = 0; undiscount < arr.length; undiscount++) { //할인이 적용된 상품은 제외 if (discount === undiscount) continue; let price = arr[undiscount][0] + arr[undiscount][1]; budget -= price; //예산을 초과하는 경우 if (budget >= 0) temp++; if (budget < 0) budget += price; } answer = Math.max(answer, temp); } return answer; }

  • javascript
  • 코딩-테스트
1djb23 댓글 1 좋아요 0 조회수 138

indexOf를 사용해서 풀어보았습니다 !!

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

function solution(n, arr) { let answer = 0; //모든 학생이 짝이 되는 경우 for (let mento = 1; mento <= n; mento++) { for (let mentee = 1; mentee <= n; mentee++) { //자기자신과 짞을 될수 없음 if (mento === mentee) continue; //시험별 멘토 멘티 등수 let mentoGrade, menteeGrade; let isPossible = true; //시험별 멘토 멘티 등수 비교 for (let test = 0; test < arr.length; test++) { mentoGrade = arr[test].indexOf(mento); menteeGrade = arr[test].indexOf(mentee); if (mentoGrade >= menteeGrade) { isPossible = false; break; } } //모든 시험에서 멘토 등수가 멘티 등수보다 낮은 경우 가능한 경우 if (isPossible) answer++; } } return answer; }

  • javascript
  • 코딩-테스트
1djb23 댓글 1 좋아요 0 조회수 104

공부한 내용을 블로그에 정리해서 올려도되나요?

해결됨

프로그래밍 시작하기 : 웹 입문 (Inflearn Original)

안녕하세요 프로그래밍 시작하기 : 웹 입문 (Inflearn Original) 강의를 듣고 있는 수강생입니다. 혹시 출처를 남기고 공부한 내용을 요약해서 블로그에 게시해도 될까요?

  • HTML/CSS
  • javascript
opas293 댓글 1 좋아요 0 조회수 145

vue composition api

미해결

Vue.js 시작하기 - Age of Vue.js

해당 강의 덕분에 vue에 대해 알아가고 있는 중입니다. vue composition api는 어느 강좌에서 확인이 가능할까요~?

  • javascript
  • vue.js
kmh880507 댓글 1 좋아요 0 조회수 103

저는 이런식으로 구현 해보았습니다 !!

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

function solution(string, char) { let answer = Array(string.length); const positions = []; let initIndex = string.indexOf(char); while (initIndex !== -1) { positions.push(initIndex); initIndex = string.indexOf(char, initIndex + 1); } if (positions.length === 0) return answer; for (let i = 0; i < string.length; i++) { let c = string[i]; if (c === char) { answer[i] = 0; continue; } let bestDiff = Number.MAX_SAFE_INTEGER; for (let j = 0; j < positions.length; j++) { let charIdx = positions[j]; let diff = Math.abs(charIdx - i); if (diff < bestDiff) bestDiff = diff; } answer[i] = bestDiff; } return answer; } 저는 문자열에서 특정 문자가 존재하는 위치를 기반으로 풀어보았습니다 !! 코드 리뷰 해주시면 감사하겠습니다 !!

  • javascript
  • 코딩-테스트
1djb23 댓글 1 좋아요 0 조회수 95

ch5-1 관리자 페이지 IP블랙리스트 기능구현 관련

해결됨

React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드

안녕하세요.. 아래와 같이 에러가뜨는데요;; code: 'MODULE_NOT_FOUND', requireStack: [ '/Users/sungwon/Desktop/Project/Web/company_website/backend/index.js' ] } Node.js v24.4.0 [nodemon] app crashed - waiting for file changes before starting... . backend > index.js코드 입니다. require("dotenv").config(); const express = require("express"); const mongoose = require("mongoose"); const cookieParser = require("cookie-parser"); const cors = require("cors"); const app = express(); const PORT = 3000; const userRoutes = require("./routes/user"); app.use(express.json()) app.use(express.urlencoded()) app.use(cookieParser()); app.use(cors({ origin: "*", credentials: true, })); app.use("/api/auth", userRoutes); app.get("/", (req, res) => { res.send("Hello world"); }); app.get("/api/check-ip", (req, res) => { const clientIP = req.ip || req.connection.remoteAddress; const blacklistedIPs = JSON.parse(process.env.IP_BLACKLIST || '[]'); console.log("Client IP:", clientIP); console.log("Blacklisted IPs:", blacklistedIPs); if (blacklistedIPs.includes(clientIP)) { return res.status(403).json({ allowed: false, message: "Access denied - IP is blacklisted" }); } res.json({ allowed: true }); }); mongoose .connect(process.env.MONGO_URI) .then(() => console.log("MongoDB와 연결이 되었습니다.")) .catch((error) => console.log("MongoDB와 연결에 실패했습니다: ", error)); app.listen(PORT, () => { console.log("Server is running"); });

  • HTML/CSS
  • javascript
  • react
  • node.js
  • mongodb
댓글 2 좋아요 0 조회수 131

그랩님, 상품 상세 페이지 에러와 의문점 질문드립니다.

미해결

비전공자를 위한 진짜 입문 올인원 개발 부트캠프

그랩님, 강의 잘 듣고 있습니다. 다름이 아니라, 상품 상세 페이지 에러와 의문점이 있어서 어떻게 해결해야 하는지 궁금한 사항이 있어 질문 드리게 되었습니다. 일단 src/main/index.js 소스 코드를 첨부합니다. import './index.css'; import axios from "axios"; import React from 'react'; import {Link} from 'react-router-dom'; function MainPage(){ const [products, setProducts]=React.useState([]); React.useEffect( function(){ axios.get("제 mock 서버 주소 넣었습니다/products") .then(function(result){ const products=result.data.products; setProducts(products); }).catch(function(error){ console.error("에러 발생:",error); }); },[]); return ( <div> <div id="header"> <div id="header-area"> <img src="../images/icons/logo.png" /> </div> </div> <div id="body"> <div id="banner"> <img src="../images/banners/banner1.png" /> </div> <h1>판매되는 상품들</h1> <div id="product-list"> { products.map(function(product, index){ return ( <div className="product-card"> <Link className="product-link" to={`/products/${product.id}`}> <div> <img className="product-img" src={product.imageUrl} /> </div> <div className="product-contents"> <span className="product-name">{product.name} </span> <span className="product-price">{product.price}원 </span> <div className="product-seller"> <img className="product-avatar" src="../images/icons/avatar.png" /> <span>{product.seller}</span> </div> </div> </Link> </div> ); }) } </div> </div> <div id="footer"></div> </div> ); } export default MainPage; 2.src/product/index.js 소스 첨부합니다. import {useParams} from 'react-router-dom'; import axios from "axios"; import { useEffect, useState } from 'react'; function ProductPage(){ // const params=useParams(); const {id} = useParams(); const [product, setProduct] = useState(null); useEffect(function(){ axios.get('제 mock 서버 주소 넣었습니다/products/${id}' ) .then(function (result) { setProduct(result.data); // console.log(result); }).catch(function(error){ console.error(error); } ); },[]); console.log(product); // console.log(params); return <h1>상품 상세 페이지 {id} 상품</h1>; } export default ProductPage; -->여기서부터 의문점과 문제점이 발생하게 되니 읽어주시고 해결할 수 있는 방법을 알려주시면 좋겠습니다. 위 소스에서 axios.get('제 mock 서버 주소 넣었습니다/products/ ${id}') 처럼 소스를 달러 중괄호 아이디 입력하면 , 아래와 같은 첨부 사진처럼 에러 가 납니다. --> 위 에러 첨부 사진은 어떻게 해결해야 할까요? 3. 하지만, 위 소스대로 입력 안하면 axios.get('제 mock 서버 주소 넣었습니다 /products/1 ') 하면 제대로 데이터를 오류 없이 아래 첨부 사진처럼 받아 오는 것 을 알 수 있습니다. 3-1. 그랩님, 강의 소스에서 처럼 axios.get('제 mock 서버 주소 넣었습니다/products/ ${id} ')해서 하면 위 첨부 사진 처럼 에러가 나는데요, 성공적으로 오류 없이 불러오고 싶은데요 , 어떻게 해야 하나요? 단계별로 어떻게 소스를 수정해야하는지 알려주시면 좋겠습니다. 확인하시면 답변 부탁 드립니다.

  • HTML/CSS
  • javascript
  • react
  • node.js
  • react-native
  • 머신러닝
  • express
  • tensorflow
isbcom1004 댓글 2 좋아요 0 조회수 142

ch4-6 관리자 계정 로그아웃 , 삭제 관련

해결됨

React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드

7:27 시점에서, 터미널에서 선생님은,, eyJhbGcioiJOUzI1N,......주소명이 뜹니다만,,, 저의 경우, 아래와 같이 몽고DB에 연결이 되었습니다만 뜹니다.... 이 경우 어떻게 해야할가요... [nodemon] starting node index.js [dotenv@17.2.1] injecting env (2) from .env -- tip: 🔐 prevent committing .env to code: https://dotenvx.com/precommit Server is running MongoDB와 연결이 되었습니다. [nodemon] restarting due to changes... [nodemon] starting node index.js [nodemon] restarting due to changes... [nodemon] starting node index.js [dotenv@17.2.1] injecting env (2) from .env -- tip: ⚙ suppress all logs with { quiet: true } Server is running MongoDB와 연결이 되었습니다. 아래는 routes폴더에 있는 user.js const express = require("express"); const router = express.Router(); const bcrypt = require("bcrypt"); const User = require("../models/User"); const axios = require("axios"); const jwt = require("jsonwebtoken"); router.post("/signup", async (req, res) => { try { const { username, password } = req.body; const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(400).json({ message: "이미 존재하는 사용자입니다." }); } const hashedPassword = await bcrypt.hash(password, 10); const user = new User({ username, password: hashedPassword, }); await user.save(); res.status(201).json({ message: "회원가입이 완료되었습니다." }); } catch (error) { res.status(500).json({ message: "서버 오류가 발생했습니다." }); console.log(error); } }); router.post("/login", async (req, res) => { try { const { username, password } = req.body; const user = await User.findOne({ username }).select("+password"); if(!user) { return res.status("401").json({message: "사용자를 찾을 수 없습니다."}); } if(!user.isActive){ return res .status(401) .json({ message: "비활성화된 계정입니다. 관리자에게 문의 주세요."}); } if(user.isLoggedIn){ return res .status(401) .json({message: "이미 다른 기기에서 로그인되어 있습니다."}); } const isValidPassword = await bcrypt.compare(password, user.password); if(!isValidPassword){ user.failedLoginAttempts += 1; user.lastLoginAttempt = new Date(); if(user.failedLoginAttempts >= 5){ user.isActive = false; await user.save(); return res.status(401).json({ message: "비밀번호를 5회이상 틀려 계정이 비활성화되었습니다.", }); } await user.save(); return res.status(401).json({ message: "비밀번호가 일치하지 않습니다.", remainingAttempts: 5 - user.failedLoginAttempts, }); } user.failedLoginAttempts = 0; user.lastLoginAttempt = new Date(); user.isLoggedIn = true; try { const response = await axios.get("https://api.ipify.org?format=json"); const ipAddress = response.data.ip; user.ipAddress = ipAddress; } catch (ipError) { console.error("IP 주소를 가져오는 중 오류 발생:", ipError.message); } await user.save(); const token = jwt.sign( { userId: user._id, username: user.username }, process.env.JWT_SECRET, { expiresIn: "24h" } ); res.cookie("token", token, { httpOnly: true, secure: "production", sameSite: "strict", maxAge: 24 * 60 * 60 * 1000, }); const userWithoutPassword = user.toObject(); delete userWithoutPassword.password; res.json({ user: userWithoutPassword }); } catch (error) { console.error("서버 오류:", error.message); res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.post("/logout", async (req, res) => { try { const token = req.cookies.token; if (!token) { return res.status(400).json({ message: "이미 로그아웃된 상태입니다." }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET); const user = await User.findById(decoded.userId); if (user) { user.isLoggedIn = false; await user.save(); } } catch (error) { console.log("토큰 검증 오류: ", error.message); } res.clearCookie("token", { httpOnly: true, secure: "production", sameSite: "strict", }); res.json({ message: "로그아웃되었습니다." }); } catch (error) { console.log("로그아웃 오류: ", error.message); res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.delete("/delete/:userId", async (req, res) => { try { const user = await User.findByIdAndDelete(req.params.userId); if (!user) { return res.status(404).json({ message: "사용자를 찾을 수 없습니다." }); } res.json({ message: "사용자가 성공적으로 삭제되었습니다." }); } catch (error) { res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); module.exports = router; env.에 표기한 부분 MONGO_URI=mongodb+srv://sungwon5623:cho121101!@sungwon.oirqw5d.mongodb.net/?retryWrites=true&w=majority&appName=Sungwon JWT_SECRET=c21b6ba5372fa2b8 models폴더에 있는 User.js const mongoose = require("mongoose"); const userSchema = new mongoose.Schema( { username: { type: String, required: true, trim: true, minlength: 2, maxlength: 30, }, password: { type: String, required: true, select: false, }, isLoggedIn: { type: Boolean, default: false, }, isActive: { type: Boolean, default: true, }, failedLoginAttempts: { type: Number, default: 0, }, lastLoginAttempt: { type: Date, }, ipAddress: { type: String, trim: true, }, createdAt: { type: Date, default: Date.now, }, }, { timestamps: true, } ); const User = mongoose.model("User", userSchema); module.exports = User;

  • HTML/CSS
  • javascript
  • react
  • node.js
  • mongodb
jasan88 댓글 2 좋아요 0 조회수 161

quasar와 tailwind 조합에 관한 질문

미해결

TailwindCSS 완벽 마스터: 포트폴리오부터 어드민까지!

강사님! 질문이 있습니다. 질문이 좀 길어요. 죄송합니다. 커뮤니티에도 질문을 올렸는데 휴가 중이신지 답변이 없어서 여기에도 남겨봅니다. Vue3 모든 과정을 수강하고 덕분에 프로젝트도 수행을 잘 했습니다. 그런데 프로젝트 할 때 quasar와 사용자 css 적용 문제로 퍼블리셔들이 고생을 많이 했습니다. 저는 PM 역할을 수행합니다. quasar의 css가 사용자가 정의한 css를 덮어 쓰는 경향이 있어 처리한다고 퍼블리셔 분들이 고생들을 많이 했어요. 그래서 다시 프로젝트를 곧 수행할 것 같은데 이번에는 tailwind를 적용해 볼려고 해요. 그러면 nuxt3 + vue3 + quasar + tailwind로 생각하고 있는데 그런데 저희는 포털은 웹 접근성 심사를 받아야 해서 이 조합이 맞는지가 궁금합니다. quasar가 다른 css를 덮어 쓰는 문제가 발생해서 tailwind로 작성한 css도 무용지물이 될까 심히 걱정스럽습니다.

  • HTML/CSS
  • javascript
  • 반응형-웹
  • tailwindcss
gaabi1204 댓글 1 좋아요 0 조회수 135

인기 태그

인프런 TOP Writers

주간 인기글