묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 고급편
args 표현식을 이용한 매개변수 전달 개념 문의
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 포인트컷 표현식을 이용하여 매개변수를 전달하는 것을 공부했습니다. 이 개념과 본래 포인트컷의 개념이 헷갈려서 문의드립니다. @Around("allMember() && args(arg, ..)") public Object logArgs2(ProceedingJoinPoint joinPoint, Object arg) throws Throwable { log.info("[logArgs2]{}, arg={}", joinPoint.getSignature(), arg); return joinPoint.proceed(); } 포인트컷은 조인 포인트를 필터링하기 위한 개념으로 공부했습니다. 위 코드에서 args(args, ..) 부분의 args가 매개변수를 나타내는 것은 이해가 됩니다. 하지만 ArgsTest 코드에서 학습했을 때는 args() 표현식 안에 String, Object, java.io.Serializable 등등과 같은 타입을 적어줘서, 매개변수의 타입을 필터링했었거든요. 그러면 args는 어떤 타입을 필터링하는 포인트컷인가요? 무엇이든 상관없는건가요?
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
쿠팡 사례처럼 다른 사이트에서 User-Agent로 크롤링이 불가능한 경우
감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
강의 예제 flag의 사용이유
강의 초반부분 0:20 부분을 보고 코드를 짜보았습니다.#include <stdio.h> int main() { char ch; int characters = 0, words = 1, lines = 1; printf("Enter text : "); while ((ch = getchar()) != '.') { if (ch == ' ') words++; else if (ch == '\n') lines++; else characters++; } printf("Character = %d, Words = %d, Lines = %d", characters, words, lines); return 0; }이 후 강의를 끝까지 다 봤는데 교수님의 코드와 저의 코드는 상당히 달랐습니다. 교수님은 flag라는 _Bool자료형을 사용했습니다.코드를 한줄 한줄 읽어가면서 flag가 어떤식으로 작동하는지는 쪼오끔 알았는데 flag를 사용하는 이유를 모르겠습니다.강의를 보면 프로그래머들이 자주 사용하는 형식이라고 하는데 flag의 장점이 뭔가요? 항상 감사합니다!!!
-
해결됨[유니티 3D] 실전! 생존게임 만들기 - Advanced
34:49 내용 생략 부분
34:49~ 36:40 부분은 흐름이 이상한 부분입니다. (뒤에있는 내용이 그대로 들어가있는 것으로 보아 편집미스로 보입니다.) 처음보시는분들은 34:49 까지 보신후 36:41로 건너 뛰십시오. 유튜브 발췌.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
IPS가 무엇인가요?
안녕하세요 선생님. "WAS와 RESTful API 그리고 JVM" 강의 수강중에 질문드립니다.IPS가 Intrusion Prevention System 의 약자가 맞나요? 그리고 IPS가 원격지 사용자 입력을 검증하는 역할을 하는건가요?감사합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우 빌드 Task :test FAILED
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]gradlew.bat 는 BUILD SUCCESSFUL 이 떴는데gradlew build 는 아래와 같은 오류가 발생합니다.자바 버전은 20이고, 스프링 버전은 3 입니다. > Task :test FAILEDError: Could not find or load main class worker.org.gradle.process.internal.worker.GradleWorkerMainCaused by: java.lang.ClassNotFoundException: worker.org.gradle.process.internal.worker.GradleWorkerMain
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
React 실전프로젝트 질문
왜 강의와 다르게 이렇게 표시되는게 맞는지 굼금해서 올려봅니다.아니라면 왜 이런지 알려주시면 감사하겠습니다.밑에는 App.css입니다.@import url('https://fonts.googleapis.com/css2?family=Nanum+Pen+Script&family=Yeon+Sung&display=swap'); body { background-color: #f6f6f6; display: flex; justify-content: center; align-items: center; font-family: 'Nanum Pen Script'; min-height: 100vh; margin: 0px; } @media (min-width: 650px) { .App { width: 640px; } } @media (max-width: 650px) { .APP { width: 90vw; } } #root { background-color: white; box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px; } .App { min-width: 100vh; padding-left: 20px; padding-left: 20px; } /* my button */ .MyButton { cursor: pointer; border: none; border-radius: 5px; padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; font-size: 18px; white-space: nowrap; font-family: 'Nanum Pen Script'; } .MyButton_default { background-color: #ececec; color: black; } .MyButton_positive { background-color: #64c964; color: white; } .MyButton_negative { background-color: #fd565f; color: white; } /* header */ header { padding-top: 20px; padding-bottom: 20px; display: flex; align-items: center; border-bottom: 1px solid #e2e2e2; } header > div { display: flex; } header .head_text { width: 50%; font-size: 25px; justify-content: center; } header .head_btn_left { width: 25%; justify-content: start; } header .head_btn_right { width: 25%; border-left: 25px; justify-content: end; } header button { font-family: 'Nanum Pen Script'; } /* DiaryList */ .DiaryList .menu_wrapper { margin-top: 20px; margin-bottom: 30px; display: flex; justify-content: space-between; } .DiaryList .menu_wrapper .right_col { flex-grow: 1; } .DiaryList .menu_wrapper .right_col button { width: 100%; } .DiaryList .ControlMenu { margin-right: 10px; border: none; border-radius: 5px; background-color: #ececec; padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; cursor: pointer; font-family: 'Nanum Pen Script'; font-size: 18px; } /* DiaryItem */ .DiaryItem { padding-top: 15px; padding-bottom: 15px; border-bottom: 1px solid #e2e2e2; display: flex; justify-content: space-between; } .DiaryItem .emotion_img_wrapper { cursor: pointer; min-width: 120px; height: 80px; border-radius: 5px; display: flex; justify-content: center; } .DiaryItem .emotion_img_wrapper_1 { background-color: #64c964; } .DiaryItem .emotion_img_wrapper_2 { background-color: #9dd772; } .DiaryItem .emotion_img_wrapper_3 { background-color: #fdce17; } .DiaryItem .emotion_img_wrapper_4 { background-color: #fd8446; } .DiaryItem .emotion_img_wrapper_5 { background-color: #fd565f; } .DiaryItem .emotion_img_wrapper img { width: 50%; } .DiaryItem .info_wrapper { flex-grow: 1; margin-left: 20px; cursor: pointer; } .DiaryItem .diary_date { font-weight: bold; font-size: 25px; margin-bottom: 5px; } .DiaryItem .diary_centent_preview { font-size: 18px; } .DiaryItem .btn_wrapper { min-width: 70px; } /* DirayEditor */ .DirayEditor textarea { font-family: 'Nanum Pen Script'; font-size: 20px; box-sizing: border-box; width: 100%; min-height: 200px; resize: vertical; border: none; border-radius: 5px; background-color: #ececec; padding: 20px; } .DirayEditor .control_box { display: flex; justify-content: space-between; align-items: center; } .DirayEditor section { margin-bottom: 40px; } .DirayEditor h4 { font-size: 22px; font-weight: bold; } .DirayEditor .input_date { border: none; border-radius: 5px; background-color: #ececec; padding-top: 10px; padding-bottom: 10px; padding-left: 20px; padding-right: 20px; cursor: pointer; font-family: 'Nanum Pen Script'; font-size: 20px; } .DirayEditor .emotion_list_wrapper { display: grid; grid-template-columns: repeat(5, auto); gap: 2%; } /* EmotionItem */ .EmotionItem { cursor: pointer; border-radius: 5px; padding-top: 20px; padding-bottom: 20px; display: flex; flex-direction: column; justify-content: center; align-items: center; } .EmotionItem img { width: 50%; margin-bottom: 10px; } .EmotionItem span { font-size: 18px; } .EmotionItem_off { background-color: #ececec; } .EmotionItem_on_1 { background-color: #64c964; color: white; } .EmotionItem_on_2 { background-color: #9dd772; color: white; } .EmotionItem_on_3 { background-color: #fdce17; color: white; } .EmotionItem_on_4 { background-color: #fd8446; color: white; } .EmotionItem_on_5 { background-color: #fd565f; color: white; }
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
UPDATE_BOARD 400error
useForm 이용해서 하고있는데 update_board를 할때 계속 try에서 catch(error)로 넘어가네요 ㅠpresenter.jsimport * as S from "./BoardWriter.styles"; export default function BoardWriteUI(props) { return ( <S.Wrapper onSubmit={props.isEdit? props.handleSubmit(props.onClickUpdate, props.onInValid) : props.handleSubmit(props.onValid, props.onInValid)}> <S.Title>{props.isEdit? "게시글 수정": "게시글 등록"}</S.Title> <S.WriterWrapper> <S.InputWrapper> <S.Label>작성자</S.Label> <S.Writer {...props.register("writer", { validate : (value) => value ? true:"작성자를 작성해주세요."} )} onChange={e => props.onChangeWriter(e)} type="text" placeholder="이름을 적어주세요."/> <S.Error>{props.errors.writer?.message}</S.Error> </S.InputWrapper> <S.InputWrapper> <S.Label>비밀번호</S.Label> <S.Password {...props.register("password", { validate : (value) => value? true: "비밀번호를 작성해주세요."} )} onChange={e => props.onChangePassword(e)} type="password" placeholder="비밀번호를 작성해주세요." /> <S.Error>{props.errors.password?.message}</S.Error> </S.InputWrapper> </S.WriterWrapper> <S.InputWrapper> <S.Label>제목</S.Label> <S.Subject {...props.register("title", { validate : (value) => value? true: "제목을 작성해주세요."} )} onChange = {e => props.onChangeTitle(e)} type="text" placeholder="제목을 작성해주세요." /> <S.Error>{props.errors.title?.message}</S.Error> </S.InputWrapper> <S.InputWrapper> <S.Label>내용</S.Label> <S.Contents {...props.register("contents", { validate : (value) => value? true: "내용을 작성해주세요."} )} onChange={e => props.onChangeContents(e)} placeholder="내용을 작성해주세요." /> <S.Error>{props.errors.contents?.message}</S.Error> </S.InputWrapper> <S.InputWrapper> <S.Label>주소</S.Label> <S.ZipcodeWrapper> <S.Zipcode {...props.register("boardAddress")} placeholder="07250" /> <S.SearchButton>우편번호 검색</S.SearchButton> </S.ZipcodeWrapper> <S.Address /> <S.Address /> </S.InputWrapper> <S.InputWrapper> <S.Label>유튜브</S.Label> <S.Youtube {...props.register("youtubeUrl")} placeholder="링크를 복사해주세요." /> </S.InputWrapper> <S.ImageWrapper> <S.Label>사진첨부</S.Label> <S.UploadButton>+</S.UploadButton> <S.UploadButton>+</S.UploadButton> <S.UploadButton>+</S.UploadButton> </S.ImageWrapper> <S.OptionWrapper> <S.Label>메인설정</S.Label> <S.RadioButton type="radio" id="youtube" name="radio-button" /> <S.RadioLabel htmlFor="youtube">유튜브</S.RadioLabel> <S.RadioButton type="radio" id="image" name="radio-button" /> <S.RadioLabel htmlFor="image">사진</S.RadioLabel> </S.OptionWrapper> <S.ButtonWrapper> <S.SubmitButton isActive={props.isActive} type="submit">{props.isEdit? "수정하기": "등록하기"}</S.SubmitButton> </S.ButtonWrapper> </S.Wrapper> ); } quires.jsimport { gql } from '@apollo/client' export const CREATE_BOARD = gql` mutation createBoard($createBoardInput: CreateBoardInput!) { createBoard(createBoardInput : $createBoardInput){ _id } } ` export const UPDATE_BOARD = gql` mutation updateBoard($updateBoardInput: updateBoardInput!, $password: String, $boardId: ID!) { updateBoard(updateBoardInput: $updateBoardInput, password: $password, boardId: $boardId) { _id } } `container.jsimport { useState } from 'react' import { useForm } from 'react-hook-form'; import { useRouter } from 'next/router'; import { useMutation } from '@apollo/client' import BoardWriteUI from './BoardWriter.presenter'; import { CREATE_BOARD, UPDATE_BOARD } from './BoardWriter.queries'; export default function BoardsWriteContainer(props) { const router = useRouter() const [isActive, setIsActive] = useState(true) const [createBoard] = useMutation(CREATE_BOARD) const [updateBoard] = useMutation(UPDATE_BOARD) const { register, watch, handleSubmit, formState: { errors } } = useForm(); const onChangeWriter = (e) => { e.target.value && watch("password") && watch("title") && watch("contents") ? setIsActive(false) : setIsActive(true) } const onChangePassword = (e) => { e.target.value && watch("writer") && watch("title") && watch("contents") ? setIsActive(false) : setIsActive(true) } const onChangeTitle = (e) => { e.target.value && watch("password") && watch("writer") && watch("contents") ? setIsActive(false) : setIsActive(true) } const onChangeContents = (e) => { e.target.value && watch("password") && watch("title") && watch("writer") ? setIsActive(false) : setIsActive(true) } const onValid = async (data) => { try { const result = await createBoard({ variables: { createBoardInput: { writer: data.writer, title: data.title, password: data.password, contents: data.contents, } } }) console.log(result.data.createBoard._id) alert("게시물이 정상적으로 등록되었습니다.") router.push(`/boards/${result.data.createBoard._id}`) } catch(error) { alert(error.message) } } const onInValid = (error) => { console.log("에러입니다", error) } const onClickUpdate = async (data) => { try { const result = await updateBoard({ variables: { updateBoardInput : { title: data.title, contents: data.contents }, password : data.password, boardId : router.query.boardid, } }) console.log(result) // router.push(`/boards/${router.query.boadid}`) } catch(error) { console.log(error) } } return <BoardWriteUI onValid = {onValid} oninValid = {onInValid} register = {register} handleSubmit = {handleSubmit} errors = {errors} onChangeContents = {onChangeContents} onChangeTitle = {onChangeTitle} onChangePassword = {onChangePassword} onChangeWriter = {onChangeWriter} onClickUpdate = {onClickUpdate} isActive={isActive} isEdit={props.isEdit} /> }
-
미해결더 자바, 코드를 조작하는 다양한 방법
gradle 사용하시는 분 도움
일단 새로운 프로젝트 만들고 premain 추가해주는 것 까진 강의를 그대로 따라하시면 됩니다. manifest plugin 부터 조금 차이가 있어서 거기부터 설명하면, build gradle 에 다음과 같이 추가한다.tasks.named('jar') { manifest { attributes( 'Implementation-Title': project.name, 'Implementation-Version': project.version, 'Premain-Class' : "com.java.magicianAgent.MagicianAgent", 'Can-Redefine-Classes' : true, 'Can-Retransform-Classes' : true) } }터미널에서 다음 명령어를 통해 build 한다./gradlew clean buildbuild.libs file 안에 있는 jar file 을 확인한다. (옵션)강의에서와 마찬가지로 zip file 로 변경하면 확인가능합니다. 저같은 경우 SNAPSHOT.jar 과 SNAPSHOT-plain.jar 이렇게 2개가 생겼는데 SNAPSHOT.jar 은 제가 spring boot 로 실행서 그런지 관련 설정들이 보이고 SNAPSHOT-plain.jar 이 맞는거 같더라구요. jar file 의 절대 경로를 복사해 VM option 에 추가한다. 여기서부터는 다시 강의와 같습니다. VM option 이 안보이시면 오른쪽에 Modify options 클릭하면 add vm options 라고 보이실 겁니다. 이상한거나 궁금한거 있으시면 말씀해주세요. gradle 을 쓰시는 모든 분들도 마술을 성공시킵시다 하하
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드리겠습니다!!
(사진)
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
강의 9.3 에서 passport.authenticate('local')이 호출되면 그 이후 passport.use( new LocalStrategy() ) 로 어떻게 흐름이 넘어가는지 모르겠습니다.
강의 9.3 에서 route/auth.js 파일에서 passport.authenticate('local')부분이 호출되는 것 까지는 이해가 됩니다. 근데 왜 authenticate에서 passport/localStrategy.js(전략코드) 가 실행이 되는건지 모르겠습니다. 'local'이라는 매개변수가 있다고 해도 localStrategy.js를 실행하라는 뜻은 아닐것인데 말이죠. 로그인 구현 흐름 자체는 이해가 되나 이쪽 부분이 어떤 논리로 이어지는건지를 모르겠습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
변수선언시 var로 하면 안되나요?
변수 선언시 let으로 하시는데 var로 하면 안되는건가요 ?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다!! 4-L
http://boj.kr/09c175c5a67e40e98e08ff7a54836d28선생님 코드와 비교해 봐도 같은 로직을 사용한 것 같고 질문게시판에 있는 반례들도 넣어봤는데 잘 돌아갑니다. 어떤 부분에서 잘못된 것인지 모르겠습니다.
-
미해결비전공 기획자 및 관리자를 위한 IT 필수 지식
강의 교안 부탁드립니다.
강의 교안 받고 싶어 요청드립니다! jjo1651@naver.com 으로 부탁드려요 ~!좋은 강의 잘보고 있습니다 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
초기화 질문
안녕하세요 속도를 위해 캐싱을 하고 있지만 매번 다시 초기화 해서 불러올려면 어떤 방법이 있을까요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
fetchUserLoggedIn가 안됩니다 도와주세요
강의를 따라 순서대로 따라했는데마지막에 cannot read property _id 오류가뜹니다ㅠㅠ
-
해결됨[개정판] 파이썬 머신러닝 완벽 가이드
classification을 통한 cluster 해석
안녕하십니까 교수님 cluster 해석과 관련하여 질문이 있어 글을 작성하게 되었습니다. 각 cluster별로 명확하게 어떤 feature가 많이 고려되었다는 것을 확인할 수 있는 방법이 있을까요? clustering을 진행한 뒤 다음과 같은 방법으로 cluster를 해석하려 하였습니다.1) 군집화를 진행하여 0, 1, 2, 3 의 cluster가 도출됨2) cluster를 label 데이터로 하여 classification을 진행3) feature importance를 활용하여 기술적으로 cluster를 해석 여기서 질문드리고 싶은 점은.. 각 군집별로 feature importance를 도출할 방법이 없을까요? (또는 XAI등 다른 방법이 있을까요??)현재 feature importance는 cluster 0, 1, 2, 3을 모두 반영한 feature importance를 도출해 명확하게 cluster의 특징을 해석하기 어려운 것 같습니다.. 각 cluster별로 어떤 feature가 많이 고려되었다는 것을 확인할 수 있는 방법이 있는 지가 궁금합니다. 항상 감사드립니다.
-
미해결코딩테스트 [ ALL IN ONE ]
심화 강의 다 올라오는 일정이 궁금합니다. ㅎㅎ
강사님, 강의 잘 보고 있습니다!빠른 시일 내에 완강 목적이라, 남은 심화 강의까지 다 올라오는 날이 언제인지 궁금합니다.감사합니다.
-
미해결풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]
다형성 질문..
모던 웹을 위한 다양한 Javascript+ES6 객체 선언 기법 이해311:35 초이 부분에서.. get_message()를constructor(name,brand) 안에 안쓰는 이유가 있나요?잘 이해가 안가서요...그리고 get_message라고 써야하나요 아니면 getMessage 라고 해야하나요?
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
토이 프로젝트 github 주소 공유 부탁드려요!
따라해보려고 합니다! 토이프로젝트 소스 공유 부탁드려요!