묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
주문과 할인 도메인 실행과 테스트 강의중 궁금한점이 생겨 질문드립니다.
public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy();public class OrderApp { public static void main(String[] args) { MemberService memberService = new MemberServiceImpl(); OrderService orderService = new OrderServiceImpl();public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); 현재 주문 관련 다이어그램에서 주문을 하고 할인을 적용하기 위해서 회원을 조회해야 하니회원저장소(인터페이스)에서 회원을 조회하게 되어 있습니다. 그래서 위의 코드 OrderServiceImpl을 보면 MemberRepository를 의존하여 구현체를 작성하였습니다. 하지만 여기서, 회원 저장소가 아닌 회원서비스(MemberSerivce인터페이스)를 의존한다면 이것은 좋지 못한 설계인지 궁금하여 질문드립니다. 혹은 같은 서비스 계층끼리의 의존은 좋지 못한 설계라면 제 생각이 잘못되었다고 생각합니다. [이 질문을 하게 된 이유는 MeberSerivceImpl은 MemberRepository를 의존하는데 그렇게 된다면 서비스 계층의 인터페이스를 사용하여 이 서비스계층을 통하여 리포지토리 계층까지의 기능을 모두 쓸 수 있다는 점에서 장점이 있지 않을까생각하였습니다. MemberServiceImpl 클래스에서 MemberRepository를 의존하며 그의 구현체를 얼마든지 바꿀수 있기 때문에 상관없지 않을까라고 생각하였습니다.]감사합니다.
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
드론 ddpg.py코드 실행하면 드론이 멈춥니다.
ddpg.py 코드를 실행하면 드론이 처음에는 날아가다 몇번 날아가다 멈춰버립니다.해결방법이 무엇인가요??뭐가 문제인지 모르겠습니다.코드는 githug에 있는걸 그대로 붙여넣었습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-E 질문드립니다.
4-E 직접 코딩한 링크입니다.http://boj.kr/1f336e6542f1478a96a0c31745c1196d 저는 비트연산자를 이용하긴 했는데입력 받으면서 1). 각 단어별 쓰인 알파벳 +1 ( 중복 x )2). 각 단어별 비트로 표현으로 전처리를 해준 후sort를 통해 가장 많이 이용한 알파벳 K 개 선정sort 된 알파벳으로 max_word 라는 K개 비트를 사용한 숫자를 만들고(word[i]&max_word)==word[i] 와 같을 경우 ret을 하나씩 올려줬습니다. 예제 및 추가 예제들은 다 맞는데 어디에서 틀린지 감이 안오는 것 같습니다.감사합니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
왜 img를 눌러도 제대로 작동을 안할까요?
강의명 : 트로트 가수 음악 목록 앱 소개 및 레이아웃 설정 이 이전강의에서 nav예제떄도 안되길래 스스로찾다 해결을 못해서 다음강에서 또 할테니 보고하면 되겠지 하는데 또 안되서 질문합니다.img1 :영탁img2:영웅img3:가인 입니다 초기 영탁페이지에서 영웅과 가인누르면 각각페이지가 넘어가게까지 해놨는데, 영웅을 누르면 가인이 뜨고 가인은 눌러도 반응도 안합니다.
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
j가 속한 for문 순회 질문드립니다.
j 순회에서 0부터 i-1까지 앞에서부터 순회하도록 해도 정답이 됩니다. 뒷 강의 들어보니까, 동전 문제처럼 동전이 무한한 경우는 앞에서부터 순회한다고 하셨고 최대 점수문제처럼 문제가 유한한 경우는 뒤에서부터 순회한다고 하셨습니다.(말씀하신 내용은 강의 10-6 섹션, 8:20쯤에서 나옵니다) 혹시 이 문제도 그거랑 연관이 있어서 강의에서처럼 뒤에서부터 순회하신 풀이로 푸신 건가요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
NextJS 강의 순서 질문입니다.
안녕하세요. 레딧사이트 프로젝트를 진행하기 앞서 올려주신 NextJS 강의를 먼저 들으려고 합니다.강의 듣는 순서가 부록(섹션11) 먼저 듣고 섹션10(13버전)을 들으면 될까요?아니면 섹션10만 들어도 괜찮을까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
mvc패턴하니깐 잘 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의와 똑같이 했는데 초반부인 MvcMemberFormServlet부분을 mvc 패턴으로 적용하는 부분이 안됩니다! 저부분 부터 원래 잘 되던 부분들이 servlet으로 등록하기 부분이 다 안되는거 같습니다 구글 폼 올리겠습니다 ! https://drive.google.com/file/d/1yNGsRvNW9nmSlXDdaW5qt0HJfc4W8qQT/view?usp=sharing
-
해결됨비전공자의 전공자 따라잡기 - 데이터베이스,SQL
limit offset 단점
안녕하세요 제로초님.항상 질 좋은 강의 감사합니다.offset 방식으로 pagination 구현 시 데이터가 누락될 수 있다는 단점을 설명해주시면서soft delete 방식으로 구현 시에는 해당 이슈가 괜찮다고 설명해주셨는데요.soft delete 방식으로 구현 시에도 동일한 이슈가 발생할꺼라는 생각이 들어 질문을 남깁니다.soft delete 방식으로 구현 시에도 조회 쿼리를 날릴 때, deleteAt이 null인 값인 data들은 filter 되기 때문에 동일한 이슈가 발생할꺼 같은데 맞을까요?추가로 삭제 연산을 soft delete 방식으로 구현 시, on delete option을 "casecade"로 설정했다면 부모 row가 삭제되었을 때, 자식 row도 soft delete 처리가 되나요?아니면 set null 방식으로 처리가 되나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Session 사용 시 RESTful api users/{userid}에서 userid 가져오기에서
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]spring에서 지원하는 서블렛 세션을 사용하면 클라이언트에 JSESSIONID가 쿠키로 전달된다고 알고 있습니다.질문 1. RESTful API 설계 시 유저의 마이페이지 관련 정보를 가져오는 백엔드 api path는 '/users/{userid}'가 올바른가요, '/profile'이 올바른가요? 혹은 각기 다른 api path를 통해 뷰에 해당하는 프론트엔드에서 조립해야 하나요? 질문 2. 위의 질문 대답이 전자라면, 클라이언트가 마이페이지 버튼을 눌렀을 때 클라이언트에게 userid가 없고 JSESSIONID만 있는 상태인데, userid를 가져오는 과정을 거친 후에 '/users/{userid}'를 실행해야 하나요? 혹은 로그인 시 userid를 쿠키 등으로 클라이언트에게 전달하여 클라이언트가 갖고 있도록 해야 하나요? 실무에서는 어떤 방식을 사용하는지 궁금합니다. 질문 3. 같은 맥락으로 회원탈퇴 기능의 api를 '/users/{userid}'라고 할 때, JSESSIONID만 가지고 있는 클라이언트가 해당 api를 사용하기 위해서는 userid를 가져오는 작업을 수행해야 하나요, 아니면 다른 방법이나 접근방식이 있을까요?
-
미해결풀스택 리액트 라이브코딩 - 간단한 쇼핑몰 만들기
react typescript vite 설치시 오류 질문드립니다.
제목처럼 react typescript vite설치를 하려고 터미널에 yarn create vite를 입력하여 설치를 했습니다.아래 이미지와 같이 typescript를 선택 후, 설치를 완료했는데...아래 이미지들처럼 설치 하자마자 빨간줄들이 난무하고있습니다ㅜㅜ아래 이미지는 package.json 파일입니다.어떻게 해결할 수 있을까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
스크롤 시 dispatch 중복 요청 에러 질문 있습니다.
홈페이지에서 스크롤 시 콜백함수가 실행되는 과정에서 LOAD_POSTS_REQUEST dispatch 요청을 두 번 보내는 상황이 발생하였는데 해결하지 못해서 올립니다./pages/index.jsconst Home = () => { const dispatch = useDispatch(); const { me } = useSelector((state) => state.user); const { mainPosts, hasMorePosts, loadPostLoading, retweetError } = useSelector((state) => state.post); useEffect(() => { if (retweetError) { alert(retweetError); } }, [retweetError]); useEffect(() => { dispatch({ type: LOAD_MY_INFO_REQUEST, }); dispatch({ type: LOAD_POSTS_REQUEST, }); }, []); useEffect(() => { function onScroll() { if ( window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300 ) { if (hasMorePosts && !loadPostLoading) { console.log('스크롤 패칭'); const lastId = mainPosts[mainPosts.length - 1]?.id; console.log('lastId', lastId); dispatch({ type: LOAD_POSTS_REQUEST, lastId, }); } } } window.addEventListener('scroll', onScroll); return () => { window.removeEventListener('scroll', onScroll); }; }, [hasMorePosts, loadPostLoading, mainPosts]); return ( <AppLayout> {me && <PostForm />} {mainPosts.map((post) => ( <PostCard key={post.id} post={post} /> ))} </AppLayout> ); };sagas/post.jsfunction loadPostsAPI(lastId) { return axios.get(`/posts?lastId=${lastId || 0}`); } function* loadPosts(action) { try { const result = yield call(loadPostsAPI, action.data); yield put({ type: LOAD_POSTS_SUCCESS, data: result.data, }); } catch (err) { yield put({ type: LOAD_POSTS_FAILURE, error: err.response.data, }); } } function* watchLoadPosts() { yield throttle(5000, LOAD_POSTS_REQUEST, loadPosts); }reducers/post.jscase LOAD_POSTS_REQUEST: draft.loadPostLoading = true; draft.loadPostDone = false; draft.loadPostError = null; break; case LOAD_POSTS_SUCCESS: draft.loadPostLoading = false; draft.loadPostDone = true; draft.mainPosts = draft.mainPosts.concat(action.data); draft.hasMorePosts = action.data.length === 10; break; case LOAD_POSTS_FAILURE: draft.loadPostLoading = false; draft.loadPostError = action.error; break;첫 페이지 로딩 후에 스크롤 시 onScroll 함수의 '스크롤 패칭'이 콘솔에 두 번 찍히고 LOAD_POSTS_REQUEST 요청이 두 번 가는 것을 확인했고 처음 포스트들을 불러온 이후에 lastId가 0으로 요청이 보내져서 mainPosts에 중복된 게시물이 쌓이는 문제가 있습니다.
-
미해결8명의 비전공자는 어떻게 개발자로 취업했을까
it 적성이라는 게 있을까요?
<1>안녕하세요, 국비학원 수료하고bi(데이터 시각화) 업무를 담당하고 있습니다.사실 제가 하는 건 개발이긴 하지만자바 파이썬을 쓰지 않고, 일반적인 웹개발 같은 것과는 달라요.데이터를 쓸 때 다루는 다른 툴을 많이 써요.그 툴은 주로 엑셀을 쓰고 엑셀 vba를 쓸때도 있습니다. 또한 가끔은 db와 자바스크립트를 씁니다. 그런데 엄청 생소한 툴이다보니까, 제가 상사 요구사항도 말도 못알아 듣고같이 들어온 신입은 화면 4개 만들 때, 저는 한개도 못 만들고 있습니다.지금 일한지 3주 정도 밖에 안되었지만, 옆에 팀원은 금방해내는 걸 저는 한개도 못만드니까 it가 제 길이 맞나라는 생각이 드네요.신입이고, 3주인 것을 감안하더라도 너무 센스라는 게 없어요..ㅜit에 적성이라는 게 존재할까요?사실 학원 다닌 후부터 너무 어렵고 힘이 들었는데, 너무 느린 자신이 너무 견디기 힘듭니다 ㅜ적성이라는 건 존재하는 거라서 제가 힘든건지 고민이 됩니다.
-
해결됨설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
lab12 를 진행하며 질문이 있습니다!
안녕하세요 맛비님. Lab12 를 강의를 듣고, 혼자서 코드를 수정하며 진행중에 있는데 몇가지 질문이 있습니다! (코드 질문은 아닙니다ㅎㅎ) 해당 lab 의 목적은 AXI4-Lite 인터페이스를 이용해서 레지스터에 접근하고, 레지스터의 내용을 통해 BRAM 에 access 하는 과정으로 알고 있습니다.그렇다면 설계하신 myip_v1_0_S00_AXI 모듈 외부에서 AXI4-Lite 를 이용해 0x08 혹은 0x0C 레지스터에 접근하고 해당 레지스터의 output 을 이용해 BRAM 으로 접근하는것이 맞는 동작이 아닐까 싶어서요!AXI4-Lite -> Register -> BRAM 으로 이루어져야 할 것 같은데 현재는 AXI4-Lite ->Register, BRAM 동시접근 형태로 되어 있는 것 같아서 여쭤보고 싶습니다. (예전에 들었을 때 모듈 외부에서 들어오는 신호들은 F/F 으로 한번 latch 해서 사용하는게 타이밍적으로 안전하다... 라는 말도 들었던 것 같아서 그렇습니다...ㅎㅎ)R 채널의 rresp 는 따로 delay 를 주지는 않으신 것으로 봤는데... 현재 코드상에서는 모두 OKAY 를 주기 때문에 따로 문제될 것 같지는 않지만 delay 를 주는게 맞겠죠...?R 채널을 통해 Read 를 수행하실 때 0x0C 에 접근하여 BRAM 내부 데이터를 읽어오는 부분 때문에 무조건적으로 rvalid 에 1cycle delay 를 주신 것을 확인하였습니다. 그런데 만약 0x08 번지같이 BRAM 에 access 하지 않는 address 를 읽어온다면 굳이 rvalid 에 1cycle delay 를 줄 필요가 없겠죠? 해당 부분은 BRAM access 하는 address 이거나, 아닌 케이스로 나누어서 따로 rvalid 를 assign 하면 될까요?
-
미해결
MyBatis 쿼리 속도가 너무 느립니다.
이클립스 Maven으로 프로젝트를 만들어서 백엔드를 만들고 있습니다.버전은 아래와 같습니다. Java 17.0.7Spring Boot 2.2.2 Releasemybatis-spring-boot-starter 2.1.0PostgreSQL 13(Max-Connection: 1,000) 모놀리식 애플리케이션으로 배포되며, 서비스 특성 상 매 초마다 50개 이상의 insert 쿼리 및 처리 로직이 실행되고 있습니다. 조회하려는 테이블엔 10,000개 이상의 데이터가 쌓여 있습니다. 검색해보니 fetchSize를 설정하면 속도가 빨라진다 하여 mapper xml <select> 부분에 fetchSize="1000"을 추가해도 결과는 같았고, 위에서 언급한 insert 및 처리 로직을 끄고 쿼리를 실행하면 정상적으로 빠르게 실행되었습니다. 이런 경우엔 어떻게 해야 쿼리 속도를 빠르게 할 수 있나요?도저히 관련 자료를 찾을 수 없어서 질문드립니다ㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
의사코드 질문입니다.
while 루프 내부에서 expected = false 를 굳이 왜 해야하는 질문이 들었는데요.의사코드를 보면 else 구문에서 expected = locked에 때문에 한다고 말씀해주셨는데결국 if문에서 _locked=true일 때 조건을 만족하는 경우가 생겨서 그런건가요? false로 조건을 통과해야되는 데 말이죠. (잠겼는데 통과하는 경우가 발생) 그렇다면 의사코드에서 else 구문에서 expected = _locked을 왜하는지 의문이 드는데, "그냥 칩회사에서 그렇게 구현했다." 라고 받아들이면 되는건가요?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 연장 신청입니다!
남은 기간 내에 완강이 힘들 것 같아서 수강 기간을 연장해주시면 감사하겠습니다.
-
미해결처음 만난 리액트(React)
(실습) JSX 코드 작성해보기
이 화면이 나오게 하고 싶습니다. npm start 엔터 이후로 어떻게 해야 하는지 모르겠습니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
Object is not iterable
npm run dev를 하면 Object is not iterabled 이런 에러가 뜹니다제 코드는import React, { useState, useCallback } from "react"; import { Button, Form, Input } from "antd"; import Link from "next/link"; import styled from "styled-components"; import useInput from "../hooks/useInput"; const ButtonWrapper = styled.div` margin-top: 10px; `; const FormWrapper = styled(Form)` padding: 10px; `; const LoginForm = ({ setIsLoggedIn }) => { const [id, onChangeId] = useInput(""); const [password, setPassword] = useInput(""); const onSubmitForm = useCallback(() => { console.log(id, password); setIsLoggedIn(true); }, []); return ( <FormWrapper onFinish={onSubmitForm}> <div> <label htmlFor="user-id">아이디</label> <br /> <Input name="user-id" value={id} onChange={onChangeId} required /> </div> <div> <label htmlFor="user-id">비밀번호</label> <br /> <Input name="user-id" value={password} onChange={onChangePassword} required /> </div> <ButtonWrapper> <Button type="primary" htmlType="submit" loading={false}> 로그인 </Button> <Link href="/signup"> <a> <Button>회원가입</Button> </a> </Link> </ButtonWrapper> </FormWrapper> ); }; export default LoginForm; 이 부분이 문제라곤 하는데 어떻게 하나요?
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
루키스님 바쁘시겠지만 혹시 한 번만 봐주실 수 있나요?
선생님 강의를 듣고 교육용 프로그램을 만들게 되었습니다.상업용으로 사용할 것은 아니고 일반 학생들과 강의 때 하려고 몇달 간 만들었는데유니티에서는 작동에 전혀 문제가 없다가 apk로 빌드하여 모바일 환경에서 실행하니첫화면에서 버튼 클릭이 되지 않습니다.public override bool Init() 이 전혀 작동하지 않는 듯하고 UI팝업 관련 된 것들도 모두작동이 안 됩니다.정말 바쁘시겠지만 확인 혹은 확인하시지 않더라도 간단한 조언 부탁드려도 될까요
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요! @Nullable 관련해서 질문이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.이번 강의에서 플랫폼 타입으로 인해 Java 와 Kotlin 간에 발생할 수 있는 문제점을 설명해주셨는데요.특히, 아래의 코드를 테스트할 때 null 때문에 발생할 수 있는 문제점과 해결할 수 있는 방법을 설명해주셨습니다.assertThat(results[0].age).isNull()Java 클래스의 getter에 @Nullable을 붙여줌으로써 해결할 수 있었는데요.제가 궁금한 것은 롬복의 @Getter가 클래스 레벨에서 적용된 경우에는 어떻게 @Nullable을 붙여줄 수 있느냐가 궁금했습니다.코틀린으로 변환 과정에서 롬복의 @Getter가 만들어주는 게터들을 모두 하드 코딩으로 작성하고 나서 @Nullable 어노테이션을 해당하는 게터에 달아줘야하는건지, 아니면 더 좋은 방법이 있는지 궁금합니다!모든 클래스가 그렇지는 않겠지만 아무래도 기존에 사용하고 있던 자바 클래스 코드들에 @Getter 어노테이션이 달려 있을 것이라고 예상이 되고 이 경우에는 어떻게 테스트 해당 문제를 해결해야하는지 궁금하네요더불어 좋은 강의 감사합니다!