묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
스웨거 문서에 Basic, Bearer를 적용하는 방법에 대해 질문 드립니다.
AccessToken, RefreshToken 강의 내용을 모두 마친 후에 스웨거 문서 작성 방법에 대해 궁금한 점이 있어 질문 드립니다. @Headers()를 사용하여 rawToken 값을 전달하는 경우 스웨거 문서에서는 다음과 같이 @ApiBasicAuth('basic'), @ApiBearerAuth('bearer') 형식을 작성을 해야하는지 질문 드립니다. import { Body, Controller, Headers, Post, UseGuards } from '@nestjs/common'; import { AuthFacade } from '@root/resource/auth/auth.facade'; import { BasicTokenGuard } from '@root/common/guard/basic-token.guard'; import { RefreshTokenGuard } from '@root/common/guard/bearer-token.guard'; import { IsPublic } from '@root/common/decorator/is-public.decorator'; import { ApiBasicAuth, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; import { AccessAndRefreshTokenResponse, AccessTokenResponse, RefreshTokenResponse, } from '@root/resource/auth/dto/response/token-response.dto'; @ApiTags('Auth API') @Controller('v1/auth') export class AuthController { constructor(private readonly authFacade: AuthFacade) {} @ApiOperation({ summary: '로그인', description: 'Authorization Basic 이메일:비밀번호 방식으로 로그인합니다.' }) @ApiBasicAuth('basic') @ApiOkResponse({ type: AccessAndRefreshTokenResponse }) @IsPublic() @UseGuards(BasicTokenGuard) @Post('login') async login(@Headers('authorization') rawToken: string) { return await this.authFacade.loginWithEmail(rawToken); } @ApiOperation({ summary: '회원가입', description: '이메일, 비밀번호로 회원가입을 진행합니다.' }) @ApiOkResponse({ type: AccessAndRefreshTokenResponse }) @IsPublic() @Post('register') async register(@Body('email') email: string, @Body('password') password: string) { return await this.authFacade.registerWithEmail(email, password); } @ApiOperation({ summary: 'AccessToken 갱신', description: 'RefreshToken으로 AccessToken을 갱신합니다.' }) @ApiBearerAuth('bearer') @ApiOkResponse({ type: AccessTokenResponse }) @IsPublic() @UseGuards(RefreshTokenGuard) @Post('token/access') generateAccessToken(@Headers('authorization') rawToken: string) { return this.authFacade.generateAccessToken(rawToken); } @ApiOperation({ summary: 'RefreshToken 갱신', description: 'RefreshToken으로 RefreshToken을 갱신합니다.' }) @ApiBearerAuth('bearer') @ApiOkResponse({ type: RefreshTokenResponse }) @IsPublic() @UseGuards(RefreshTokenGuard) @Post('token/refresh') generateRefreshToken(@Headers('authorization') rawToken: string) { return this.authFacade.generateRefreshToken(rawToken); } }
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌3)
순수 CSS 선택자 중첩(Nesting) - 활용예제 (로그인폼)관련 질문있습니다.
scss 작성하다가 궁금한 것이 있어 질문 남깁니다.scss를 작성할 때 띄어쓰기를 어떻게 해야할지 궁금합니다. 예를들어 .status { display: flex; justify-content: space-between; margin: 20px 0; & label { & input[type=checkbox] { display: none; +em { display: inline-block; width: 18px; height: 18px; background-image: url('images/icon-radio.png'); transform: translateY(4px); background-position: left; } &:checked+em { background-position: right; } &:checked+em+span { color: var(--mainColor); } } } & a:hover { text-decoration: underline; } } 선생님과 수업하면서 작성한 띄어쓰기 하지 않은코드인데요.이쁘게 정렬하고 싶어서 alt + shift + f 를 눌러서 전체 정렬을 했더니 .status { display: flex; justify-content: space-between; margin: 20px 0; & label { & input[type=checkbox] { display: none; +em { display: inline-block; width: 18px; height: 18px; background-image: url('images/icon-radio.png'); transform: translateY(4px); background-position: left; } &:checked+em { background-position: right; } &:checked+em+span { color: var(--mainColor); } } } & a:hover { text-decoration: underline; } } 이렇게 자동으로 띄어쓰기게 되더라구요.의미없는 띄어쓰기는 하지 않는게 좋다고 들었는데띄어쓰기를 하지 않으면scss nesting 특성상 괄호가 많아져서 알아보기 힘들고비주얼 단축키로 정렬했을 때엔 알아서 띄어쓰게 해주는데,scss는 어떤식으로 코드를 작성해야할지 궁금합니다.
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
useEffect 가 정확히 언제 실행되는건지 헷갈립니다
강의를 다 듣고 뭔가 아직 useEffect의 개념이 명확히 잡히지 않았는데요..바뀐 state 값을 바로 이용하려고 할때, 컴포넌트가 렌더링된 후에 사용한다고 하셨는데그럼 만약 컴포넌트를 렌더링할때 바뀐 state값을 같이 렌더링해줘야 하는 경우에는 useEffect는 컴포넌트가 렌더링 된 이후에 사용하니깐 useEffect를 못쓰는건가요??여기서 useEffect가 컴포넌트가 렌더링 된 이후에 사용한다는게 모든 컴포넌트가 완전히 화면에 그려지고 나서 사용된다는 의미 맞나요??
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
15강 오류질문
15강 객체 강의 6분 let name = person.name;블록 범위 변수 'name'을 다시 선언할 수 없습니다라고 나옵니다
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
12.11 ) Home에서 getMontlyData 작성 중 오류 / 개발자도구 hooks Context 에서 객체가 아닌 함수로 출력됩니다
안녕하세요,강의 잘 듣고있습니다! 16분 쯤에 montlyData를 만들어서 호출하는 부분인데개발자도구로 체크해봤을때 hooks가 선생님처럼 나오지 않고 저런 함수 형태?로 출력이 되어서 그런지 오류가 나서 진행이 되지 않습니다ㅜ눈알빠지게 찾아봤는데도 잘 모르겠어서 글을 씁니다ㅠㅠ한번 체크 부탁드립니다 //App.jsx 파일입니다 const mockData = [ { id: 1, createdDate: new Date("2024-09-30").getTime(), emotionId: 1, content: '1번 일기' }, { id: 2, createdDate: new Date("2024-09-29").getTime(), emotionId: 2, content: '2번 일기' }, { id: 3, createdDate: new Date("2024-08-02").getTime(), emotionId: 3, content: '3번 일기' } ]; function reducer(state, action) { switch (action.type) { case 'CREATE': return [action.data, ...state]; case 'UPDATE': return state.map((item) => String(item.id) === String(action.data.id) ? action.data : item); case 'DELETE': return state.filter((item) => String(item.id) !== String(action.id)); default: return state; } } export const DiaryStateContext = createContext(); export const DiaryDispatchContext = createContext(); function App() { const [data, dispatch] = useReducer(reducer, mockData); const idRef = useRef(3); const onCreate = (createdDate, emotionId, content) => { dispatch({ type: 'CREATE', data: { id: idRef.current++, createdDate, emotionId, content, }, }); }; const onUpdate = (id, createdDate, emotionId, content) => { dispatch( { type: "UPDATE", data: { id, createdDate, emotionId, content, } }) } const onDelete = (id) => { dispatch( { type: "DELETE", id } ) } return ( <> <DiaryStateContext.Provider value={data}> <DiaryStateContext.Provider value={{ onCreate, onUpdate, onDelete }}> <Routes> <Route path="/" element={<Home />}></Route> <Route path="/new" element={<New />}></Route> <Route path="/diary/:id" element={<Diary />}></Route> <Route path="/edit/:id" element={<Edit />}></Route> <Route path="*" element={<Notfound />}></Route> </Routes> </DiaryStateContext.Provider> </DiaryStateContext.Provider> </> ) } export default App
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
리액트로 로그인 부분 처리하는데 질문이 있습니다.
리액트 강의를 듣고 스프링부트랑 연동해서 리액트 코드를 짜고 있습니다. 지금 로그인 부분 처리하다가 막혀서 정말 구글링도 해보고 며칠째 하다가 도저히 해결이 안돼서 질문 드립니다.지금 로그인처리가 되면 sessionStorage에 로그인 회원 정보를 담고 navigate함수를 이용해 Main컴포넌트로 보냈습니다. 근데 다른 컴포넌트들에서도 이 로그인회원 정보를 사용하기 위해 최상위컴포넌트인 App컴포넌트에서 sessionStorage.getItem()해서 state값에 저장하고 그걸 context로 하위 컴포넌트들에게 제공했는데 로그인되고 navigate함수로 Main컴포넌트로 가면 context로 저장한 state값이 null이 되고 새로고침해보면 state값이 잘 들어오더라고요ㅠㅠ 비동기함수인것과 관련있을까요??새로고침없이 컴포넌트에서 바로 state값을 이용하고 싶으면 어떻할까요? state값 이용해서 바로 화면에도 렌더링도 해야하는 상황입니다 ㅠㅠ강의와 관련된 내용은 아니지만 프로젝트를 혼자 만들다보니 잘 안되는 부분이 많아 질문드립니다 !
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
option usecreateindex is not supported 오류 나면은
await mongoose.connect(MONGO_URL); // 제거 하시고 사용 하세요 // 버전6부터 해당 옵션을 사용하지 않아도 돼요https://mongoosejs.com/docs/migrating_to_6.html(공식문서) 보세요. 참고하세요
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌2)
실전 반응형 웹사이트
안녕하세요! 항상 강의 재밌게 듣고 있습니다~제가 강의를 따라하며 제작한 실전 반응형 웹사이트(넷플릭스와 크롬 사이트)를 포트폴리오에 넣으려고 합니다. 그런데 현재 실제 사이트들과 디자인에 차이가 있어서, 강의에서 배운 이전 디자인으로 포트폴리오에 포함해도 괜찮을지 고민이 됩니다…
-
미해결Vue.js 시작하기 - Age of Vue.js
코드를 수정하고 브라우저의 Vue로 넘어가면 다운이 됩니다.
코드 반영 후에 Vue.devtool을 사용하기 위해 개발자 도구창을 키면 devtool의 기능들을 클릭할 수 없습니다. (프로그램 다운 느낌입니다)그래서 창을 닫고 새로고침으로 다시 진행해야 정상적으로 되는데 이 문제 해결방법이 없을까요?
-
미해결Vue.js 시작하기 - Age of Vue.js
버튼을 클릭해도 event가 발생하지 않습니다.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <app-header></app-header> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> var appHeader = { // template: '<button>click me</button>' template: '<button v-on:click="passEvent">click me</button>', methods: { passEvent: function() { this.$emit('pass'); } } } new Vue({ el: '#app', components: { 'app-header': appHeader } }); </script> </body> </html>
-
미해결Node.js로 웹 크롤링하기
6강 프록시 서버 테스트 관련하여
안녕하세요.. 프록시 사이트 (http://spys.one/free-proxy-list/KR/) 에 있는 프록시 사이트에 대한 정보를 가져와서, sqlite에 저장하는 코드로 테스트 하고 있습니다. 두가지 문제 현사잉 발생하고 있습니다.관련 크롤러 함수를 실행했는데, puppeteer의 브라우저 화면이 안나나나지만, 프록시 사이트 정보를 클로링은 합니다. 현재 headless:false로 해서 브라우저를 기동시키고 있는데, 왜 이런 형상이 발생할 까요? 인터넷 정보를 서치하다 보니, 브라우저 실행시 '--no-sandbox'를 해보하고 해서 해봤더니, 페이지 보이기는 합니다. (이 옵션의 의미는 무엇인지 궁금합니다.)강의 동영상에서 알려주신대로 크롤링 된 사이트에서 latency가 가장 작은 ip를 이용해서 브라우저 실행시 --proxy-server=fastestProxy 로 설정한 후 네이버 IP 확인 페이지를 호출했는데,Error: net::ERR_TIMED_OUT at https://search.naver.com/search.naver?where=nexearch&ssc=tab.nx.all&query=%EB%82%B4%EC%95%84%EC%9D%B4%ED%94%BC%EC%A3%BC%EC%86%8C&sm=tab_she&qdt=0 가 발생하는데, 이는 네이버에서 Proxy서버에서 접근하는 것을 막아서 발생하는 것인가요? 프록시 서버를 사용하지 않고 브라우저를 생성하면, 정상적으로 접근되어서 제 IP 주소를 확인할 수 은 있습니다.강의 처럼 변경된 프록시 서버의 ip를 확인할 수 있는 방법이 무엇인지 알려주시면 좋겠습니다.
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
콜백함수에서 value() 가 갑자기 어디서 나온걸까요?
function main(value) { value(); } function sub() { console.log("sub"); } main(sub);여기서 main() 을 호출하면 main 함수를 호출하게 되고,main 함수에서는 매개변수로 value를 받고 있는데main(sub)를 호출하게 되면 main() 함수가 실행이 되고,여기서 main 함수 안에 있는 value()는 매개변수로 받은 값이 value라서 value()이렇게 매개변수로 받은 이름으로 함수를 호출하는걸까요? 그럼 만약 매개변수로 aaa를 받았다면 main 함수 안에서 aaa()를 호출하게 되면 동일하게 sub() 함수가 호출되는걸까요? main 함수 안에서 매개변수로 받은 value()를 호출하는것과함수 sub()를 바로 호출하는것과의 장단점이 있을까요? 그리고 main 함수 안에서 value를 호출하는것과 value()를 호출하는것의 차이가 어떤게 있을까요??value()를 호출할때는 매개변수로 받은 콜백함수를 호출해서 실행을 하는걸로 이해를 하고 있는데 value를 호출을 하면 아무런 변화가 없는데 value를 호출하는 경우도 자주 보이던데 이렇게 호출을 하는 이유가 무엇일까요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
저는 강의와 다르게 prisma를 사용하고 있는데
ConfigModule의 envFilePath에 '.env.development' 을 줬음에도 불구하고 Nest.js가 계속 .env 의 환경변수를 참조하는 현상이 발생하고 있습니다. NODE_ENV=development도 줬구요. 제 생각엔 Prisma가 .env를 참조하기 때문에 해당 설정이 무시되는 거 같은데 어떻게 해결하면 좋을까요? 아무리 검색해도 명쾌한 해결법이 안나와서 이렇게 질문드립니다 ㅠㅠ
-
해결됨한 번에 끝내는 자바스크립트: 바닐라 자바스크립트로 SPA 개발까지
Live Server
코드 관련 질문은 아래와 같이 '코드블럭' 기능을 이용해주세요!+ 오류 메세지도 함께 올려주시면 좋아요 🙂console.log('hello'); 안녕하세요.혹시 Live Server 질문도 같이 올려도 될까요..?효빈님께서 라이브 서버 실행하실 때 127.0.0.1:5000 으로 실행이 되시는데 저는 제 아이피 주소 뒤로 공부하는 폴더의 경로가 전부 찍히게 되어서 window.location.pathname 이 콘솔 창에 안찍히게 되더라구요..VSC에서 Live Server Extensions을 싹 다 지우고 다시 설치해도 초기화가 안되네요..(전에 한 번 Live Server 설정을 건들인 적이 있습니다ㅜㅜ)
-
미해결Node.js로 웹 크롤링하기
페이스북 로그인 로그아웃 자동화관련
안녕하세요.. 5-1 페이스북 로그인/로그아웃 관련 강의를 따라 하고 있습니다.puppeteer의 page를 이용해서 로그인 버튼까지는 클릭해서 실행까지는 되는 것 같습니다.그래서 로그인 버튼 클릭후에 사용자에게 로그인 승인 알람 메시지를 처리해야 실질적인 로그인 페이지로 넘어가고 있는 상황입니다. 이럴경우 강의 시간에 알려주신 방법들은 대부분이 타임아웃 오류가 발생합니다. 이 부분을 어떻게 해결해야 할지 방법을 알려 주시면 좋겠습니다. 강의 내용의 모습이랑. 현재시점의 페이스북이 달라서 수정하는 것이 초보자에게는 어렵네요..
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
투두 필터링
import "./List.css"; import TodoItem from "./TodoItem"; import { useState } from "react"; const List = ({ todos, deleteTodo, updateTodos }) => { const [filtered, setFiltered] = useState(""); const onChange = (e) => { setFiltered(e.target.value.toUpperCase()); }; const getfiteredData = () => { return todos.filter((todo) => { return todo.content.toUpperCase().includes(filtered); }); }; const filteredTodos = getfiteredData(); return ( <div className="list"> <h4>Todo List 🌱</h4> <input type="text" placeholder="검색어를 입력하세요" onChange={onChange} /> <div className="todoWrapper"> {filtered ? filteredTodos : todos.map((todo) => { return ( <TodoItem {...todo} key={todo.id} deleteTodo={deleteTodo} updateTodos={updateTodos} /> ); })} </div> </div> ); }; export default List; 이렇게 하니까Uncaught Error: Objects are not valid as a React child (found: object with keys {id, isDone, content, date}). If you meant to render a collection of children, use an array instead. at throwOnInvalidObjectType (react-dom_client.js?v=6a67398a:9932:17) at updateSlot (react-dom_client.js?v=6a67398a:10153:15) at reconcileChildrenArray (react-dom_client.js?v=6a67398a:10249:30) at reconcileChildFibers2 (react-dom_client.js?v=6a67398a:10557:24) at reconcileChildren (react-dom_client.js?v=6a67398a:14290:37) at updateHostComponent (react-dom_client.js?v=6a67398a:14805:11) at beginWork (react-dom_client.js?v=6a67398a:15933:22) at beginWork$1 (react-dom_client.js?v=6a67398a:19751:22) at performUnitOfWork (react-dom_client.js?v=6a67398a:19196:20) at workLoopSync (react-dom_client.js?v=6a67398a:19135:13)콘솔에 이런 오류가 뜨더라구요... 객체를 보내지도 않았는데 이렇게 하면 안되는 이유가 있나요?
-
미해결타입스크립트 입문 - 기초부터 실전까지
강의 교안 pdf 는 따로 제공하지않나요?
안녕하세요 출퇴근하면서 주로 보는데 핸드북 페이지외에 pdf로는 교안을 제공하지않나요?
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
npm install 해도 에러걸려요....
PS C:\ONEBITE-REACT> npm installnpm error code ENOENTnpm error syscall opennpm error path C:\ONEBITE-REACT\package.jsonnpm error errno -4058npm error enoent Could not read package.json: Error: ENOENT: no such file or directory, open 'C:\ONEBITE-REACT\package.json'npm error enoent This is related to npm not being able to find a file.npm error enoentnpm error A complete log of this run can be found in: C:\Users\imij0\AppData\Local\npm-cache\_logs\2024-09-25T12_36_16_923Z-debug-0.log 지금 이런 에러가 뜨는데 이거 배우기 전에 node.js 깔았는데 이거 굳이 npm install은 안해도 되나요?>적용도 다 해둔 상황이긴 한데 괜찮은건가요?
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
VS코드 사용법 질문 (ESlint 관련)
강사님 vs코드 화면에서처럼 오류 메시지 바로 볼 수 있게 하려면 어떻게 하나요?🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨[2024] 한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
VS코드 편집기 사용법 (ESlint 관련)
강사님 vs코드 화면에서처럼 오류 메시지 바로 볼 수 있게 하려면 어떻게 하나요?ESlint 설치는 했습니다.터미널에서는 오류 내용 나오는데, 편집창에서 나왔으면 좋겠네요 ㅠ 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.