묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
Docker 2 - API 패키징 "/" 슬러시 생략가능 여부 질문
질문1.아래 코드중에서 마지막 슬러시 " / " 는 생략 가능 가능하지요?Dockerfile WORKDIR /myfolder/COPY ./package.json /myfolder/COPY ./yarn.lock /myfolder/
-
미해결
스프링 MVC2 타임리프 체크박스 관련 질문
안녕하세요.스프링 MVC2에서 타임리프 수업 중에 체크박스 관련해서 궁금증이 생겨 질문드립니다.체크박스를 기본으로 체크하면 on이 전달되어 true, 체크하지 않으면 아무 값이 넘어가지 않아문제가 생길 수 있으니 _open 또는 타임리프가 제공해 주는 th:field를 사용해서 문제 해결이렇게 설명을 해주셨는데, 제가 생각하기로는 자바에서 생성자에 기본적으로 Boolean open 필드의 default 값을 false로 해놓으면 문제가 없는 거 아닌가 생각이 드는데, 굳이 _open 또는 th:field를 사용하는 게 장점이 있거나, 제가 미처 파악하지 못한 부분이 있는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Clamp
Mathf.Clamp 스피드 가 목적지 보다 커져서 정확한 목적지 에 도착하려고 왔다갔다 하는거를 Clamp에 속도가 0 에서 목적지 사이에 값을 반환해서 속도를 줄여주는건가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버
강의 소스 다운로드 경로
좋은 강의 감사합니다.강의 프로그램 소스는 어디서 받을 수 있나요?
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
브로커, 토픽, 파티션관계
안녕하세요!조금 애매한 부분이 있어서요!-브로커 3대토픽 2개파티션 - rf 설정 2- 로 만약에 설정을 한다면, 각 브로커에 토픽 2개씩 설정이 된거고, 파티션은 2개로 설정했기에 브로커 3개에서 라운드로빈으로 설정이 되는건가요?이게 .. 어렵네요. 브로커 3대. 딱설정하고.. 토픽이 2개라고한다면 각 브로커마다 토픽이 테이블처럼 있을거고..이제 파티션을 라운드로빈으로 돌려서 설정을 해야하는데.. 이게맞는거지 ㅠㅠㅠ
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
프론트쪽에서 env 나누나요?
현재 강의 front쪽에서 env 로컬 배포 일떄도 나누나요?
-
해결됨토비의 스프링 부트 - 이해와 원리
출처를 남기며 깃에 좀 올려도 될까요 선생님?!
출처를 남기며 깃에 좀 올려도 될까요 선생님?!
-
해결됨
장고(django) self.object 속성 관련
안녕하세요.django.views.generic.detail 에 있는 SingleObjectMixin의 메서드 get_context_data에는 self.object 가 있는데요.class SingleObjectMixin(ContextMixin): """ Provide the ability to retrieve a single object for further manipulation. """ model = None queryset = None slug_field = 'slug' context_object_name = None slug_url_kwarg = 'slug' pk_url_kwarg = 'pk' query_pk_and_slug = False ... 생략 ... def get_context_data(self, **kwargs): """Insert the single object into the context dict.""" context = {} if self.object: context['object'] = self.object context_object_name = self.get_context_object_name(self.object) if context_object_name: context[context_object_name] = self.object context.update(kwargs) return super().get_context_data(**context)이 속성은 어디에서 설정이 되어 있어서 이렇게 참조 할 수 있는 것일까요?관련 코드도 다 뒤져보고, 검색도 해보았지만 전혀 단서를 찾을 수 없었습니다. 도움주시면 너무나 감사하겠습니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
mysql 비밀번호 재설정
https://goodteacher.tistory.com/291 위 블로그를 참고해서 비밀번호를 초기화했는데mysql -u root -p Enter password: ************ ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)위와 같이 나옵니다. 위 에러 메시지는 비밀번호를 잘못입력했을 때 나오는 걸로 아는데저 한영 잘못친 것도 없고 numlock도 풀려있어서 제대로 잘 입력했는데 왜 그럴까요ㅠ mysql --version 해보면 mysql ver8.0.27 로 잘 나옵니다
-
해결됨파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트
함수 컴포넌트와 필수 Hook에서 setValue({value1:10}) 관련 질문이요!
function App2() { const [value1, setValue1] = useState(0); const [value2, setValue2] = useState(0); const [value, setValue] = useState({ value1: 0, value2: 0 }); const onClick = () => { setValue({ value1: 10 }); }; return ( <div> Hello App2 <hr /> {JSON.stringify(value1)} {JSON.stringify(value2)} {JSON.stringify(value.value1)} <button onClick={onClick}>클릭</button> </div> ); } export default App2; 여기서 onClick을 수행할때 왜 value.value1의 값이 변경되는 건가요?? 첫번째에 useState(0)으로 만든 value1은 어떻게 해야 값의 변경이 되는거죠??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
@Transactional 롤백질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]이 코드에서 @Transactional롤백 되는 이유가 중간에 언체크드 예외인IllegalStateException 이 예외가 던져져서 롤백을 한다고 보면 되나요 ?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
네스팅 방식으로 goRouter Go를 사용할때, 앱바타이틀이 정상적으로 표시되지 않는 문제
GoRouter 초반부를 듣고 있는데, 제목과 같이 앱바타이틀이 정상적으로 표시되지 않는 문제를 겪고 있습니다.Screen Three 로 이동했을때 앱바의 타이틀은/one/two/three 로 표기가 되나,뒤로가기를 눌렀을때 홈으로 이동할때까지 그 상태 그대로 /one/two/three 가 유지되다가 홈에서 / 로 표시가 됩니다.OneScreen, TwoScreen, ThreeScreen 별로 각각 텍스트로 one, two, three 라고 입력해서 확인해본결과,뒤로가기 할때마다 three 에서 출발해서 two, one 으로 화면에 잘 뜨는 것으로 보아 페이지 이동은 정상적으로 이루어지는 것 같습니다. 아래는 default_layout.dart 입니다.class DefaultLayout extends StatelessWidget { final Widget body; const DefaultLayout({ Key? key, required this.body, }) : super(key: key); @override Widget build(BuildContext context) { final router = GoRouter.of(context); return Scaffold( appBar: AppBar( title: Text( router.location, ), ), body: Padding( padding: const EdgeInsets.symmetric( horizontal: 16.0, ), child: body, ), ); } } main.dartvoid main() { runApp(_App()); } class _App extends StatelessWidget { _App({Key? key}) : super(key: key); final GoRouter _router = GoRouter( initialLocation: '/', routes: [ GoRoute( path: '/', builder: (context, state) => const HomeScreen(), routes: [ GoRoute( path: 'one', builder: (context, state) => const OneScreen(), routes: [ // http://.../one/two GoRoute( path: 'two', builder: (context, state) => const TwoScreen(), routes: [ // http://.../one/two/three GoRoute( path: 'three', builder: (context, state) => const ThreeScreen(), ), ], ) ], ), ], ), // http://..../one // http://..../two // GoRoute( // path: '/one', // builder: (context, state) => const OneScreen(), // ), ], ); @override Widget build(BuildContext context) { return MaterialApp.router( theme: ThemeData(useMaterial3: true), // uri string 을 상태 및 go router 에서 사용할 수 있는 형태로 변환해주는 함수(자동) routeInformationParser: _router.routeInformationParser, // 위에서 변경된 값으로 실제 어떤 route 를 보여줄지 정하는 함수(자동) routerDelegate: _router.routerDelegate, // route 정보를 전달하는 함수(자동) routeInformationProvider: _router.routeInformationProvider, ); } } home_screen.dartclass HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DefaultLayout( body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( onPressed: () { context.go('/one'); }, child: const Text('go to OneScreen'), ), ElevatedButton( onPressed: () { context.go('/one/two/three'); }, child: const Text('go to ThreeScreen'), ), ], ), ); } } 3_screen.dartclass ThreeScreen extends StatelessWidget { const ThreeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DefaultLayout( body: Column( children: const [Text('three')], ), ); } } 정도로 참고 코드를 올렸습니다.goRouter 버전은 4.2.2 로 강의의 버전과 맞춰서 진행중입니다.
-
해결됨스파크 머신러닝 완벽 가이드 - Part 1
ModuleNotFoundError : No module named 'mmlspark' - 20230218
안녕하세요 spark 공부하면서 취준하고 있는 대학생입니다.좋은 강의 제공해주셔서 감사합니다 :-)다름이 아니라, 코드에 궁금한 점이 생겨서 문의 드립니다.mmlspark lightgbm 설치 후에 아래에 있는 코드를 실행 해야 하나요? Hyperlink로 접속을 해 봤는데 오류가 있는 거 같습니다.스파크 프레임워크로 처음 공부를 해 봐서 제가 틀린 걸 수도 있습니다. 도움 부탁드립니다:-)
-
미해결[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편
props 타이핑 방식의 차이점
안녕하세요!변수에 바로 타이핑하는 두번째 방법을 선호한다고 하셨는데요.이 방법으로 하면 뒷부분이 알아서 타입추론된다고 하셨는데 헷갈려서 질문드립니다.뒷부분이 알아서 타입추론된다는 것이P 제네릭이 타이핑된 propTypes, defaultProps들의 타입도 자동으로 추론된다는 것을 말하신 것일까요?interface P {} // 1번 const WordRelay = (props: P) {} // 2번 const WordRelay: FunctionComponent<P> = (props) => {} interface FunctionComponent<P = {}> { (props: P, context?: any): ReactElement<any, any> | null; propTypes?: WeakValidationMap<P> | undefined; contextTypes?: ValidationMap<any> | undefined; defaultProps?: Partial<P> | undefined; displayName?: string | undefined; }
-
미해결자바 프로그래밍 입문 강좌 (renew ver.) - 초보부터 개발자 취업까지!!
비트를 뒤에서부터 읽으셔서 궁금해서 질문드립니다!
25:15 부분보면 자꾸 2진수를 뒤에서부터 읽으시는데앞에서부터 읽어야 하는 거 아닌가 생각합니다.0010이면 공공일공 이런 식으로요.전/반가산기에서 계산할 때 캐리 옮길려면 뒤에서부터 읽으며 계산하는 게 맞긴 한데, 좀 오해의 소지가 있어 보입니다.
-
미해결리눅스 쉘 스크립트 마스터
하드 링크, 심볼릭 링크
안녕하세요. 강의 잘 보고 있습니다. 강의 시청 중 궁금한 점이 몇가지 있습니다.하드 링크는 파일 복사라고 생각하면 되나요..?그렇다면 cp 명령어가 있는데 하드링크를 사용하는 이유는 무엇인가요?심볼릭 링크 생성시 권한이 rwx가 모두 생기는데.. 바로가기 폴더라고하면 원본 폴더의 권한을 따라가야하는거 아닐까요..?만약 10바이트를 가진 A라는 파일을 하드링크하여 B라는 파일을 생성하면 총 20바이트의 사이즈를 차지할 것이라고 생각했는데 맞을까요?3의 예시에서 B를 하드링크가 아닌 심볼릭링크로 생성하게 되면 노출되는 사이즈는 A,B 모두 10바이트로 표현은 되지만 실제 사이즈는 10바이트만 차지하는게 맞을까요?? (링크만 걸어놓은거기때문에)답변 부탁드립니다. 감사합니다!
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
React key prop 오류 케이스 나오시는 분들 보세요
존경하는 그랩님Warning: Each child in a list should have a unique "key" prop 오류 케이스에 대해서 조언좀 구할 수 있을까요? ReactDOM.render 방식이 React 18에서 지원하지 않으면서 오류들을 수정했습니다.//[AS-IS] import ReactDOM from 'react-dom'; ReactDOM.render( <React.StrictMode> <BrowserRouter> <App /> </BrowserRouter> </React.StrictMode>, document.getElementById('root') //[TO-BE] import * as ReactDOM from 'react-dom/client'; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <React.StrictMode> <App /> </React.StrictMode>); 다만 아래와 같은 오류들이 발생을 하였는데요.구글링에서 찾아보니 각 엘리먼트에 key값을 주는 것으로 해결하라고 하는데요.- 그렇다면 src > main > index.js 에서 각 엘리먼트들에 key 값을 설정해줘야 하나요?- 각 엘리먼트들에 map으로 되어있는 함수를 지우고.. (product, index) 형태를 key={product.id}>{product.imageUrl}key={product.id}>{product.name} 형태로 바꾸어 주어야 하나요?- 조금 어렵게 느껴지네요. 해당 부분처럼 바꾸는게 맞는지 조금 조언 부탁드립니다.현재 제 깃 레파지토리 참조로 첨부드립니다. 도와주세요 ㅠㅠhttps://github.com/promotionX/Grabmarket-clinet
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
싱글톤 질문 드립니다.
강의 교재의 "스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다." 이 문장에서 같은 스프링 빈이면 모두 같은 인스턴스라는 말이 하나의 인스턴스로 자원을 공유한다는 의미 같은데 어떤 경우에 싱글톤을 사용해 자원을 공유하는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
싱글톤패턴에서 질문
18:25쯤에 public static Managers instance {get{init(); return s_instance;}}로 함수에서 프로퍼티로 바꿔서 ()없이 가져오기 편하게 바꾸셧는데 이떄 {}안에 init();을 넣은 이유는 안넣으면 return s_instance;할때 오류가나서 그런가요? 이유를 알고싶어요
-
미해결Slack 클론 코딩[실시간 채팅 with React]
onDragLeave 이벤트
onDragOver를 통해서 화면 안으로 파일을 넣으면 업로드라는 문자가 뜨는데 다시 파일을 밖으로 꺼내도 업로드! 라는 화면이 계속 떠 있더라구요 그래서 onDragLeave를 사용하여 dragover를 false로 만들어줘서 해결하긴 했는데, onDragOver만 사용했을 때는 업로드! 화면이 깜빡이지 않았는데, onDragLeave를 같이 사용하니까 업로드! 화면이 마우스를 움직일 때마다 깜빡이면서 채팅창 부분이 리렌더링 되는데, 더 효율적인 방법이 있을까요??const DM = () => { const [dragOver, setDragOver] = useState(false); const onDragOver = useCallback((e: any) => { e.preventDefault(); setDragOver(true); }, []); const onDragLeave = useCallback((e: any) => { e.preventDefault(); setDragOver(false); }, []); if (!userData || !myData) { return null; } // useSWRInfinite가 2차원 배열이기 때문에 1차원 배열로 만들어서 reverse를 해준다. const chatSections = makeSection(chatData ? [...chatData].flat().reverse() : []); return ( <Container onDrop={onDrop} onDragOver={onDragOver} onDragLeave={onDragLeave}> <Header> <img src={gravatar.url(userData.email, { s: '24px', d: 'retro' })} alt={userData.nickname} /> <span>{userData.nickname}</span> </Header> {/* chatData => 채팅을 DM에 표시해주기 위함 */} <ChatList chatSections={chatSections} ref={scrollbarRef} isEmpty={isEmpty} isReachingEnd={isReachingEnd} setSize={setSize} /> <ChatBox chat={chat} onChangeChat={onChangeChat} onSubmitForm={onSubmitForm} /> {dragOVer && <DragOVer>업로드!</DragOVer>} </Container> ); }; export default DM;코드는 해당되는 부분만 적었습니다.