묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
mysql - ORDER BY FIELD / jpa에서 유사한 기능이 있나요 ?
MySQL IN 절 안에 있는 순서대로 정렬하기SELECT * FROM TABLE WHERE KEY IN (2, 1, 3) ORDER BY FIELD(KEY, 1, 2, 3) ORDER BY FIELD 이 기능이 jpa에도 있나요 ??
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
infinite scroll에서 scroll 위치 기억하는 법에 대해 질문드립니다.
infinite scroll을 하다가 게시글을 누르면 해당 게시글로 이동하고, 뒤로가기를 누르면 원래 보던 scroll 위치로 이동하도록 만들고 싶습니다.마치 인스타그램 게시글들을 보다가 프로필을 누르면 프로필 페이지로 이동하고 뒤로가기를 누르면 원래 보던 위치로 돌아가는 것처럼 구현하고 싶습니다. 시도한 방법scroll 위치는 localStorage를 이용해서 저장했습니다. 문제는 게시글들인데 게시물들은 아래와 같이 ssr을 이용해서 미리 불러왔습니다.export const getServerSideProps = wrapper.getServerSideProps( (store) => async ({ req, query, resolvedUrl, res }) => { // login const cookie = req.headers?.cookie; axios.defaults.headers.Cookie = ""; if (cookie) { axios.defaults.headers.Cookie = cookie; } store.dispatch({ type: CHECK_LOGIN_REQUEST, }); // board if ( store.getState().board.previousUrl === null || store.getState().board.previousUrlType !== query.type ) { store.dispatch({ type: SAVE_PREVIOUS_URL_TYPE, data: query.type, }); store.dispatch({ type: SAVED_POSTS_INITIALIZE, }); store.dispatch({ type: LOAD_BOARD_REQUEST, data: { type: resolvedUrl }, }); } store.dispatch(END); await store.sagaTask.toPromise(); } );게시글 페이지로 이동하면 지금까지 본 게시글들이 사라지고, 다시 돌아오면 load되면서 scrollHeight가 localStorage에 저장된 scroll 위치보다 작아지면서 이동하지 않는 현상이 발생합니다.어떻게 하면 되는지 조언 부탁드립니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
queue를 배우다가 궁금한게 생겨서 질문드립니다.
응급실 문제를 풀고 강의를 듣고 왔는데요큐에서는 왜 get 매서드를 지원하지 않나요?FIFO에 어긋나나요?stack의 경우 vector를 확장해서 쓰기때문에 lifo에 어긋난다라는 글을 본적이 있어서 검색해보니 lifo는 삽입과 삭제의 경우에 해당하는거 같아서요 조회에는 해당하지 않는거 같은데 해당하나요? 아 물론 그냥 얘네가 그렇게 제공을 했다!! 하는거면 그런거겠지만요. 뭔가 그 개념적인? 이유가 있는지 궁금합니다 왜 궁금하냐면!! 어떻게보면 api?에서 제공하지 않는 get을 class를 만들어 편법?적으로 접근하신거같아서 입니다!! 조금 무례한 질문 죄송합니다
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
querydslConfig
안녕하세요 강사님. build.gradle을 build.gradle.kts로 변경하고 QuerydslConfig 를 확인해보니@Configuration data class QuerydslConfig( private val em: EntityManager ) { @Bean fun querydsl(): JPAQueryFactory { return JPAQueryFactory(em) } } -> em 부분에 빨간색 밑줄이 뜨고 Could not autowire. No beans of 'EntityManager' type found. 에러가 뜨더라구요. 어떤 부분을 변경해야 빨간 밑줄이 삭제될까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
코드 제공
익숙한 내용은 강의를 보면서 코드를 따라치기 번거로워서 그런데 강의하시는 코드를 깃허브로 제공받을 수 있을까요?
-
해결됨한 방에 끝! 빅데이터분석기사 실기 작업형
predict 와 predict_proba 차이
predict 와 predict_proba 차이 강의자료에 짧게 있지만 잘 이해가 안되서요 자세하게 차이를 알고 싶습니다!그리고 다중분류일때 사용하는법도 알고 싶습니다! 다중분류일때 predict_proba 를 사용해서 값이나오면 그값이 의미하는것이 무엇인지요~
-
해결됨CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
디자인 패턴 자바 문의
안녕하세요 좋은 강의 감사합니다!디자인 패턴은 JS로만 제공되는건가요?
-
미해결
공용계정 생성 문의
3명이서 하나의 계정으로 관리 및 강의결제 하려고 하는데 이용방법이 있을까요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
채널 생성시 channelData.map is not a function
채널생성 클릭하면 channeldata.map is not a function이라고 에러가 뜨는데channelData뿌려지는곳에 ?옵셔널도 줬고..아래처럼 잘 작성한것같은데 어딜 놓쳤는지 모르겠습니다.새로고침하면 추가된 채널명이 출력됩니다. workspaceimport fetcher from '@utils/fetcher'; import axios from 'axios'; import React, { FC, useCallback, useState } from 'react'; import { Navigate, useParams } from 'react-router-dom'; import useSWR from 'swr'; import { AddButton, Channels, Chats, Header, LogOutButton, MenuScroll, ProfileImg, ProfileModal, RightMenu, WorkspaceButton, WorkspaceModal, WorkspaceName, Workspaces, WorkspaceWrapper, } from './styles'; import gravatar from 'gravatar'; import Menu from '@components/menu'; import { Link } from 'react-router-dom'; import { IChannel, IUser, IWorkspace } from '@typings/db'; import { Button, Input, Label } from '@pages/signup/styles'; import useInput from '@hooks/useInput'; import Modal from '@components/modal'; import { toast } from 'react-toastify'; import CreateChannelModal from '@components/createChannelModal'; const Workspace: FC = ({ children }) => { const { workspace, channel } = useParams<{ workspace: string; channel: string }>(); const { data: userData, error, mutate } = useSWR<IUser | false>('/api/users', fetcher, { dedupingInterval: 2000 }); const { data: channelData } = useSWR<IChannel[]>(userData ? `/api/workspaces/${workspace}/channels` : null, fetcher); if (!userData) { return <Navigate to="/login" />; } const [showUserMenu, setShowUserMenu] = useState(false); const [newWorkspace, onChangeNewWorkspace, setNewWorkspace] = useInput(''); const [newUrl, onChangeNewUrl, setNewUrl] = useInput(''); const [showWorkspaceModal, setShowWorkspaceModal] = useState(false); const [showCreateChannelModal, setShowCreateChannelModal] = useState(false); const [showCreateWorkspaceModal, setShowCreateWorkspaceModal] = useState(false); //functions const onLogout = useCallback(() => { axios .post('/api/users/logout', null, { withCredentials: true, }) .then((res) => { mutate(res.data); }); }, []); const onClickUserProfile = useCallback(() => { setShowUserMenu(!showUserMenu); }, [showUserMenu]); const onClickCreateWorkspace = useCallback(() => { setShowCreateWorkspaceModal(true); }, []); const onCreateWorkspace = useCallback( (e) => { e.preventDefault(); if (!newWorkspace || !newWorkspace.trim()) return; if (!newUrl || !newUrl.trim()) return; //trim ->띄어쓰기 하나도 통과 돼버리는걸 막는다. axios .post( '/api/workspaces', { workspace: newWorkspace, url: newUrl, }, { withCredentials: true, }, ) .then((res) => { mutate(res.data); setShowCreateWorkspaceModal(false); setNewWorkspace(''), setNewUrl(''); }) .catch((err) => { console.dir(err); toast.error(error.response?.data, { position: 'bottom-center' }); }); }, [newWorkspace, newUrl], ); const onCloseModal = useCallback(() => { setShowCreateWorkspaceModal(false); setShowCreateChannelModal(false); }, []); const toggleWorkspaceModal = useCallback(() => { setShowWorkspaceModal(!showWorkspaceModal); }, [showWorkspaceModal]); const onClickAddChannel = useCallback(() => { setShowCreateChannelModal(true); }, []); return ( <div> <Header> <RightMenu> <span onClick={onClickUserProfile}> <ProfileImg src={gravatar.url(userData.email, { s: '28px', d: 'retro' })} alt={userData.nickname} /> {showUserMenu && ( <Menu style={{ right: 0, top: 38 }} onCloseModal={onClickUserProfile} show={showUserMenu}> <ProfileModal> <img src={gravatar.url(userData.email, { s: '28px', d: 'retro' })} alt={userData.nickname} /> <div> <span id="profile-name">{userData.nickname}</span> <span id="profile-active">Active</span> </div> </ProfileModal> <LogOutButton onClick={onLogout}>로그아웃</LogOutButton> </Menu> )} </span> </RightMenu> </Header> <WorkspaceWrapper> <Workspaces> {userData.Workspaces?.map((ws: IWorkspace) => { return ( <Link key={ws.id} to={`/workspace/${123}/channel/일반`}> <WorkspaceButton>{ws.name.slice(0, 1).toUpperCase()}</WorkspaceButton> </Link> ); })} <AddButton onClick={onClickCreateWorkspace}>+</AddButton> </Workspaces> <Channels> <WorkspaceName onClick={toggleWorkspaceModal}>Sleact</WorkspaceName> <MenuScroll> <Menu show={showWorkspaceModal} onCloseModal={toggleWorkspaceModal} style={{ top: 95, left: 80 }}> <WorkspaceModal> <h2>Sleact</h2> {/* <button onClick={onClickInviteWorkspace}>워크스페이스에 사용자 초대</button> */} <button onClick={onClickAddChannel}>채널 만들기</button> <button onClick={onLogout}>로그아웃</button> </WorkspaceModal> </Menu> {channelData?.map((v, idx) => ( <div key={idx}>{v.name}</div> ))} </MenuScroll> </Channels> <Chats> {children}</Chats> </WorkspaceWrapper> <Modal show={showCreateWorkspaceModal} onCloseModal={onCloseModal}> <form onSubmit={onCreateWorkspace}> <Label id="workspace-label"> <span>워크스페이스 이름</span> <Input id="workspace" value={newWorkspace} onChange={onChangeNewWorkspace} /> </Label> <Label id="workspace-url-label"> <span>워크스페이스 url</span> <Input id="workspace" value={newUrl} onChange={onChangeNewUrl} /> </Label> <Button type="submit">생성하기</Button> </form> </Modal> <CreateChannelModal show={showCreateChannelModal} onCloseModal={onCloseModal} setShowCreateChannelModal={setShowCreateChannelModal} /> </div> ); }; export default Workspace; createChannelModalimport Modal from '@components/modal'; import useInput from '@hooks/useInput'; import { Button, Input, Label } from '@pages/signup/styles'; import { IChannel, IUser } from '@typings/db'; import fetcher from '@utils/fetcher'; import axios from 'axios'; import React, { useCallback, VFC } from 'react'; import { useParams } from 'react-router-dom'; import { toast } from 'react-toastify'; import useSWR from 'swr'; interface Props { show: boolean; onCloseModal: () => void; setShowCreateChannelModal: (flag: boolean) => void; } const CreateChannelModal: VFC<Props> = ({ show, onCloseModal, setShowCreateChannelModal }) => { const [newChannel, onChangeNewChannel, setNewChannel] = useInput(''); const { workspace, channel } = useParams<{ workspace: string; channel: string }>(); const { data: userData } = useSWR<IUser | false>(`/api/users`, fetcher); const { data: channelData, mutate } = useSWR<IChannel[]>( userData ? `/api/workspaces/${workspace}/channels` : null, fetcher, ); const onCreateChannel = useCallback( (e) => { e.preventDefault(); axios .post( `/api/workspaces/${workspace}/channels`, { name: newChannel, }, { withCredentials: true }, ) .then((res) => { setShowCreateChannelModal(false); mutate(res.data); setNewChannel(''); }) .catch((err) => { console.dir(err); toast.error(err.response?.data, { position: 'bottom-center' }); }); }, [newChannel], ); return ( <Modal show={show} onCloseModal={onCloseModal}> <form onSubmit={onCreateChannel}> <Label id="channel-label"> <span>채널</span> <Input id="channel" value={newChannel} onChange={onChangeNewChannel} /> </Label> <Button type="submit">생성하기</Button> </form> </Modal> ); }; export default CreateChannelModal;
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
가감속 테이블
안녕하세요 선생님PWM 주기 변경을 보고 가감속 테이블을 만들어서 테스트를 진행할려고 하는데 속도가 너무 빨라서 그런지 몰라서 점점 빨라지다가 동작이 멈춰버리는데 혹시 요령이나 방법을 알 수 있을까요?
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
상품이 아래로 나열되요 ㅜ
똑같은 css파일인데 왜 다르게 나타날까요 ㅠㅠ위가 처음에 react없이 그냥 html로만 만든거구요아래가 react로 만든건데같은 index.css파일인데 왜 다르게 나타날까요 ㅠㅠ
-
미해결처음 만난 리액트(React)
작동이 안되네요....ㅠㅠ
Line 4:8: 'App' is defined but never used no-unused-vars이러한 내용으로 에러가 뜨고에러 라인 옆에 // eslint-disable-next-line << 주석도 달아봤는데 해결이 안됩니다..
-
미해결스프링 시큐리티 OAuth2
RSA 검증 기능 구현 - PublicKey.txt 에 의한 검증 46:20
/api/user get 요청시 JwtAuthorizationRsaPublicKeyFilter#doFilterInternal코드를 블록에서 에러가 발생합니다.Jwt jwt = jwtDecoder.decode(getToken(request)); String username = jwt.getClaimAsString("username");디버깅으로 따라가봤습니다.JwtAuthenticationFilter#getToken 리턴값으로(토큰값에서 Bearer를 없애고 리턴한 값)Jwt jwt = jwtDecoder.decode(getToken(request));위 코드를 실행했었어야 했는데 자꾸 프로그램이 종료가 됩니다?원인을 알 수 가없습니다.깃 클론 링크입니다. git@github.com:InSuChoe/spring-security-oauth2.git
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
WSASend
좋은 강의 감사드립니다.::WSASend(_socket, wsaBufs.data(), static_cast<DWORD>(wsaBufs.size()), OUT &numOfBytes, 0, &_sendEvent, nullptr))전체적인 소스에서 데이터가 일부만 보내진 경우에 대한 처리가 안되어 있는것 같은데요,일부만 보내지는 경우가 거의 희박하여 구현하지 않으신건지, 아니면 구현되어 있으나 제가 잘못 이해하고 있는건지 궁금합니다.
-
미해결취미로 해킹#3(WebGoat)
SQL 인젝션 advance 마지막강의에
나오는 첫번째 방법 혹시 따로 알려주실 수 있나요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
multer UTF-8 지원관련 질문입니다.
안녕하세요. 제로초님 강의 잘 듣고있습니다.해당 강의를 듣고 구현했는데 한글파일이 다음과 같이 특수문자로 변환되어 저장되더라고요6._한우물회(함양집).jpg 6._íì°ë¬¼í(í¨ìì§)_1666847920317.jpg그래서 어디에서 파일명이 변경됬는지 확인해보니 다음과 같이 multer에서 변환이 되고있었습니다. 프론트에서 폼데이터 출력결과// front/imageupload const onChangeImages = useCallback((e) => { const imageFormData = new FormData(); imageFileList.forEach((f) => { imageFormData.append('image', f.originFileObj); }); for (let key of imageFormData.keys()) { console.log(key, ":", imageFormData.get(key)); } dispatch({ type: UPLOAD_IMAGES_REQUEST, data: imageFormData, }); }, []); 서버에서 출력결과const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, 'uploads'); }, filename(req, file, done) { console.log(`file이름은 ${file.originalname}`); const ext = path.extname(file.originalname); const basename = path.basename(file.originalname, ext); done(null, basename + '_' + new Date().getTime() + ext); }, }), limits: { fileSize: 20 * 1024 * 1024 },file이름은 6._íì°ë¬¼í(í¨ìì§).jpg 해당문제를 해결하려고 encodeURIComponent, decodeURIComponent를 사용해봤는데 다음과 같이 문제는 해결되지 않았습니다.const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, 'uploads'); }, filename(req, file, done) { console.log(`file이름은 ${file.originalname}`); console.log(`변환된 이름은 ${encodeURIComponent(file.originalname)}`); console.log(`변환된 이름은 ${decodeURIComponent(file.originalname)}`); const ext = path.extname(file.originalname); const basename = path.basename(file.originalname, ext); done(null, basename + '_' + new Date().getTime() + ext); }, }), limits: { fileSize: 20 * 1024 * 1024 }, });file이름은 6._íì°ë¬¼í(í¨ìì§).jpg 변환된 이름은 6._%C3%AD%C2%95%C2%9C%C3%AC%C2%9A%C2%B0%C3%AB%C2%AC%C2%BC%C3%AD%C2%9A%C2%8C(%C3%AD%C2%95%C2%A8%C3%AC%C2%96%C2%91%C3%AC%C2%A7%C2%91).jpg 변환된 이름은 6._íì°ë¬¼í(í¨ìì§).jpg 참고로 uploads파일에도 다음과 같이 파일명이 특수문자로 변경되어 저장되고 있습니다. 이 문제 혹시 multer에서 UTF-8을 지원하지 않아서 발생하는 문제인가요?혹은 다른 이유가 있다면 위 문제에 대한 해결방법을 알 수 있을까요?
-
해결됨(UPDATED) Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능
model.predict에 특정 user id로 상위 movie 5개 출력?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 추천시스템을 다양한 방법을 통하여 쉽게 설명해 주셔서 감사합니다.질문과 같이, compile -> fit 해서 생성된 model에특정 user id 를 입력하여 추천된 상위 movie 5개를 출력해보려고 합니다. 강의 예제의 아래 부분의 user_id와 movie_id 그리고 직업을 입력해서해당 predictions 값에서 상위 movie를 가져올 수 있지 않을까 생각중 입니다. predictions = model.predict([user_ids, movie_ids, user_occ]) + mu 문제는, 딱 여기서 막혔습니다. 예제에는 6개의 사용자, 영화, 직업 받아서Predictions: [[4.0556927] [3.5347672] [2.4461157] [4.1715736] [3.9802952] [3.9247046]] 이렇게 보여지는 것같아서, 저것을 어떻게 사용해서, 영화 목록 5개면 5개 ,10개면 10개를 가져올 수 있을까요?
-
미해결파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)
bs4 활용 2-1 질문합니다.
코드 실행시 정보가 오지 않고 반응이 없습니다!
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
안녕하세요. 강의자료 요청드립니다.
안녕하세요. 강의 자료 요청드립니다.cayraban@gmail.com감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
기존 DB의 테이블과 jpa로 만들어진 테이블과 관계 맺기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이미 실무에서 사용중인 데이터베이스가 있습니다. 이 DB 안에는 기 생성된 테이블들이 있구요. JPA를 활용해 기존 DB에 접근해 필요한 테이블들을 추가하고 엔티티 매핑하는 작업들은 잘 되었는데요. 문제는 기존 DB의 "User" 테이블과 제가 새로 만든 테이블의 관계를 맺어주는 것이 가능한건가 해서요. [tb_user] <- 기존에 존재하던 테이블 (아래는 스키마)user_id : String : "S00001"name : String : "홍길동"age : int : 30[tb_user_history] <- 새로 등록한 테이블@Entity @Data @Table(name="tb_user_history") public class UserHistory { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="user_history_id") private Long id; //연관 관계를 맺어주는게 가능한가요?????? private String user_id; }제 프로그램상에서 생성하고 관리하는 테이블이라면 @ManyToOne, @JoinColumn을 이용해서 조인과 외래키 생성 작업을 해줄수있는데 지금과 같은 경우에서는 어떤식으로 가능할까요?