inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

팩토리 메서드를 정적으로 사용하는 이유에 대해서 궁금합니다

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 영한님 강의 잘 듣고 있습니다^^ 전부터 궁금해 왔던 것인데요, 팩토리를 만들 때 정적으로 올리는 이유에 대해서 궁금합니다 영한님이 다른 QnA에서 추천해 주신 내용들을 읽어보았으나 굳이 왜 "정적"영역으로 보내는 가에 대한 의문은 쉽게 풀리지 않습니다 ㅜㅜ 일단 정적 팩토리 메서드로 보내면 생성자들에 대한 응집도가 크게 떨어지는 느낌입니다. "엘레강트 오브젝트"라는 책을 보면 생성자는 10~15개 까지도 만들고 퍼블릭 메서드를 최대한 적게 가져가라고 가이드를 주는데요, 정적 영역으로 보내면 주/부 생성자로 보낼 수 없기 때문에 그 많은 생성자들이 다 흩어지고, 생성자들 간 관계를 맺을 수 없기 때문에 유연성이 떨어지고 코드 중복이 자주 일어나는 효과가 나는 것 같습니다 이는 굳이 정적 영역으로 보내지 않고 주/부 생성자로 구분하면 쉽게 해결될 일이 아닌가? 하는 생각도 들어 질문을 드립니다

  • java
  • 웹앱
  • spring-boot
  • spring
  • JPA
  • jpa
  • 웹앱
득이 댓글 1 좋아요 3 조회수 911

http://localhost:3000/graphql 실행 후 query > getHello 시 오류

해결됨

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

http://localhost:3000/graphql 실행 후 query > getHello 시 오류가 있습니다. 코드는 오타 없이 동일 한데, 저는 실행시 http://localhost:3000/graphql 여기서 아래와 같은 오류가 뜨는데 어떤 상황인지 파악이 잘 되지가 않습니다. { "errors": [ { "message": "Cannot return null for non-nullable field Query.getHello.", "locations": [ { "line": 2, "column": 3 } ], "path": [ "getHello" ], "extensions": { "code": "INTERNAL_SERVER_ERROR", "exception": { "stacktrace": [ "Error: Cannot return null for non-nullable field Query.getHello.", " at completeValue (/Users/back/study/20230119_nestjs/class/13-01-nestjs-with-graphql/node_modules/graphql/execution/execute.js:594:13)", " at /Users/back/study/20230119_nestjs/class/13-01-nestjs-with-graphql/node_modules/graphql/execution/execute.js:486:9", " at processTicksAndRejections (node:internal/process/task_queues:95:5)", " at async Promise.all (index 0)", " at execute (/Users/back/study/20230119_nestjs/class/13-01-nestjs-with-graphql/node_modules/apollo-server-core/src/requestPipeline.ts:501:14)", " at processGraphQLRequest (/Users/back/study/20230119_nestjs/class/13-01-nestjs-with-graphql/node_modules/apollo-server-core/src/requestPipeline.ts:407:22)", " at processHTTPRequest (/Users/back/study/20230119_nestjs/class/13-01-nestjs-with-graphql/node_modules/apollo-server-core/src/runHttpQuery.ts:436:24)" ] } } } ], "data": null } app.module.ts 에도 정상적으로 연결 해 두었습니다. import { Module } from '@nestjs/common' // import { AppController } from './app.controller'; // import { AppService } from './app.service'; import { BoardsModule } from './apis/boards/boards.module' import { GraphQLModule } from '@nestjs/graphql' import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo' @Module({ imports: [ BoardsModule, GraphQLModule.forRoot<ApolloDriverConfig>({ driver: ApolloDriver, autoSchemaFile: 'src/commons/graphql/schema.gql', }), ], // controllers: [AppController], // providers: [AppService], }) export class AppModule {}

  • node.js
  • NestJS
  • javascript
  • tdd
  • rest-api
  • docker
  • nestjs
  • nodejs
  • express
김형 댓글 1 좋아요 0 조회수 2415

약수K, 시간 복잡도

미해결

파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)

요렇게 하면 시간 복잡도를 줄일 수 있을 것 같아욤. def input_function(line_string: str): n, k = map(int, line_string.split(' ')) half_value: float = n ** 0.5 temp_results: list[int] = [] for value in range(1, int(half_value) + 1): if n % value == 0: temp_results.append(value) final_results: list[int] = [] for i in temp_results: final_results.append(i) for i in temp_results[::-1]: final_results.append( 6 // i) if k > len(final_results): return -1 return final_results[k-1]

  • python
  • 코딩-테스트
  • 코테 준비 같이 해요!
Roy Kim 댓글 1 좋아요 0 조회수 367

브라우저내 캐시 재사용 질문드립니다

미해결

모든 개발자를 위한 HTTP 웹 기본 지식

안녕하세요 강의를 듣다가 <웹 브라우저가 브라우저내 캐시저장소의 캐시를 재사용할때 과정> 에 대해 의문이 들었습니다 웹브라우저는 수많은 웹페이지에 들어가서 수많은 데이터를 다운받을텐데 그 데이터를 모두 캐시저장소에 넣습니다. 그리고 전에 들어간 웹페이지를 다시 들어갈때 캐시저장소에서 해당 웹페이지의 캐시를 그 수많은 캐시저장소의 캐시중에 몇 개를 찾아서 검증헤더와 조건부 요청을 비교하는건가요? 그러면 시간이 엄청 오래걸릴것같은데 제가 이해하고 있는게 맞는지 모르겠습니다.

  • 네트워크
  • network
한조 댓글 1 좋아요 0 조회수 2264

[FPGA 22장] 전체 HW 연산 시간 관련 질문드립니다.

해결됨

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

안녕하세요 맛비님. [FPGA 22장] 프로젝트 Fully Connected Layer 설계 - 실습편 강의 중 질문사항이 생겨 문의드립니다. HW 가속기의 연산 시간은 BRAM 0에 input을 넣는 962 us + BRAM 1에 weight를 넣는 963 us + fc 연산 41.68 + 결과값 받아오기 0.88 us 여서 총 1968 us 라는 점 이해 잘 됐습니다. BRAM 0과 BRAM 1에 데이터를 넣는 과정은 순차적으로 (bram 0에 다 넣고, bram 1에 넣기 시작) 진행되는거라서 둘의 연산 시간을 더해주는 건가요? 그렇다면 두 연산을 병렬로 처리할 수는 없나요? HW 가속기의 장점은 병렬연산이 가능한 것인데, 혹시 AXI를 통해 PS에서 BRAM으로 데이터를 전송하는 과정들은 병렬 처리가 불가능한건지 궁금합니다. 전체 run의 수를 늘려서 output node의 수를 4개가 아닌 더 많이 생산할 수 있다고 배웠습니다. 이때 run을 1024번을 하여 output node를 4096개 만드는 경우, 맛비님께서 전체 HW 연산 시간에서 BRAM 0에 input을 넣는 시간인 962.46us는 배제해도 된다고 하셨습니다. (나머지 3개 연산 시간만 더하면 그게 전체 HW 연산 시간이라고 들었습니다.) 하지만 해당 부분을 배제하면 안되는 것 아닌가요? (혹시 1024번의 RUN을 실행하면 962.46us 너무 작은 숫자라 배제해도 된다는 뜻인건가요..?) 항상 좋은 강의 제작해주셔서 감사합니다. 새해 복 많이 받으세요!

  • fpga
  • 임베디드
  • 임베디드
댓글 1 좋아요 1 조회수 517

TestRestTemplate로 테스트 하는데 403 FORBIDDEN이 응답으로 옵니다.

해결됨

토비의 스프링 부트 - 이해와 원리

문제가 되는 코드입니다. 브라우저에서는 200 응답이 정상적으로 오는데 테스트 코드에서만 이런 문제가 생깁니다. 의심가는 부분은 user-agent인데 헤더를 설정해주는 부분이 TestRestTemplate에는 없어서 다른 해결 방법이 있는지 질문드립니다.

  • spring
  • spring-boot
  • spring-jdbc
  • spring-jdbc
GOLF 댓글 1 좋아요 0 조회수 1504

Static boolean, Static void 호출

해결됨

나도코딩의 자바 기본편 - 풀코스 (20시간)

클래스에 static boolean canAutoReport = false; static void callServiceCenter() { System.out.println("서비스 센터(1588-0000)로 연결합니다."); } 이렇게 선언해두었는데 b1.canAutoReport 나 b1.callServiceCenter()이 안됩니다. BlackBox.canAutoReport랑 BlackBox.callServiceCenter() 는 되는데 뭐가 문제일까요?

  • 객체지향
  • java
  • oop
tjdnwn19 댓글 1 좋아요 0 조회수 532

NonNullable 타입 변경사항

미해결

[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편

안녕하세요~~ 질문 글은 아닌데 바뀐 부분이 있는 것 같아서 공유할겸 글 작성합니다!! 기존의 NonNullable은 null 과 undefined 를 임의의 타입으로 순회 하면서 검사하던 방식에서 type NonNullable<T> = T & {} Object type 과 임의의 타입을 묶어 null 과 undefined 를 거르는 방식으로 변경된것 같습니다!! 별건 아닌데 앞 내용의 object type 복습할겸 공유 드립니다!!

  • typescript
김우석(Kim Woo Seok) 댓글 0 좋아요 3 조회수 617

MAC과 IP에 대해 질문드립니다

해결됨

외워서 끝내는 네트워크 핵심이론 - 응용

공부하다가 갑자기 생각난 의문인데요, 뭔가 기초적인 질문같아서 부끄럽긴 합니다만 ㅠㅠ 이미 MAC이라는 주소가 존재함에도 불구하고 왜 IP라는 주소를 또 쓰는지가 갑자기 궁금해 지더라구요.. 그래서 제 나름대로 생각해봤을 때는, 아마 라우팅의 효율을 위함이 아니었을까.. 싶은데요 만약에 라우터가 중복이 없도록 설계된 MAC 주소로 라우팅을 한다고 가정하면 MAC 주소로 특정 호스트를 구분할 수는 있겠지만 특정 서브넷을 구분할 수는 없으므로 라우터가 가지고 있어야 할 MAC 주소가 굉장히 많아질 것이고, 라우팅 또한 느려질 것이다 라는게 지금의 제 생각입니다.. 다만 조금 더 깊이 생각해보면 L3에는 IP 말고도 다른 프로토콜들이 많이 있으니, 단순히 라우팅 때문만은 아닐 것이라는 생각도 드는데요 문제는 제가 가진 지식이 부족하다보니 이 이상의 유추가 불가능합니다. ㅠㅠ 그냥 처음부터 MAC 주소만으로 통신하도록 잘 설계했으면 되는거 아닌지 부터 시작해서 왜 OSI 7 레이어를 이렇게 설계했는지 까지 아주 별의별 생각이 다 드는데요... 단순하게 이거다 싶은 답안이 있을까요? 아니면 어느 부분을 공부하는게 제게 도움이 될 지 조언을 주셨으면 좋겠습니다. ㅠㅠ

  • 네트워크
  • network
sete 댓글 1 좋아요 1 조회수 466

cmd 질문

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

선생님 cmd에서 python을 실행하는 중에 에러가 발생하여 질문드립니다. 저는 바탕화면에 저장을 해서 저장된 주소를 불러와 dir을 실행한 후에 python (파일명)을 적었는데 실행이 되지 않습니다. 어떻게 해결해야 할까요?

  • python
임수찬 댓글 1 좋아요 0 조회수 476

강의자료 부탁드립니다!

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

coljhl2367@naver.com 입니다! 감사합니다!!

  • python
댓글 1 좋아요 0 조회수 315

안녕하세요 파이썬문법 클래스, 제너레이터에 대해 질문드립니다!

미해결

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

RESETS = [ False, False, False, True, False, True, False, False, False, False, False, False, False, False] def check_for_reset(): # 외부 이벤트를 폴링한다 return RESETS.pop(0) def announce(remaining): print(f'{remaining} 틱 남음') class Timer: def __init__(self, period): self.current = period self.period = period def reset(self): self.current = self.period def __iter__(self): while self.current: self.current -= 1 yield self.current # def run(): timer = Timer(4) for current in timer: if check_for_reset(): timer.reset() announce(current) run() 결과 : 안녕하세요!! 파이썬 class 및 제너레이터에 대해 질문드립니다!! 위 코드를 보면 timer라는 인스턴스가 루프를 돌면서 announce를 호출 하는 코드인데 이해가 안되는 점이 왜 RESETS 리스트의 데이터가 pop 이 되는 걸까요??? for문이 돌고는 있지만 실질적으로 check_for_reset 함수는 호출되고 있지 않자나요?? 근데 결과를 보면 for문 돌면서 계속 RESETS 리스트의 데이터가 pop되고 있는 게 신기하네요 class iter메소드가 아닌 그냥 for문 돌리면 그냥 일반적인 예상대로 RESTS리스트의 데이터는 그대로 존재하는데 말이죵;; Timer라는 클래스랑 RESETS 리스트랑 코드상 직접적인 관계가 없는데 같이 맞물려 동작하는게 이해가 안되네요 ;;; 어떠한 원리에 의해서 위와 같이 동작하는걸까요!!??

  • python
  • docker
  • django
  • react
Han Kim 댓글 1 좋아요 0 조회수 254

Linked List의 시간 복잡도에 대한 질문입니다

미해결

CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 일반적으로 연결 리스트의 시간 복잡도를 설명할 때 삽입/삭제의 시간복잡도를 O(1)이라고 말하기는 하고, 면접때도 이렇게 답변하는 게 맞겠지만 그냥 궁금증 때문에 여쭤봅니다! 실질적으로 봤을 때는 예를 들어 현재 10개의 노드를 가진 연결리스트의 4번째와 5번째 노드에 데이터를 추가하고 싶다고 가정하면 4번째 노드까지 O(n)의 시간 복잡도로 이동한 뒤 O(1)의 속도로 삽입하기 때문에 head, 혹은 tail(원형 더블 링크드 리스트이라면)를 제외한 다른 곳에 데이터를 삽입하는 속도를 O(N)이라고 봐도 무방한 게 맞을까요? 반대로 삭제의 경우에도 마찬가지가 아닌가 궁금합니다

  • 면접
  • 운영체제
  • 면접
  • 운영체제
  • 기술면접
  • 기술면접
euni 댓글 1 좋아요 0 조회수 510

graphviz 시각화 주피터 출력 화면 관련 질문

해결됨

[개정판] 파이썬 머신러닝 완벽 가이드

안녕하세요 강의 잘듣고 있습니다! 다름이 아니라.. graphviz 이용해서 주피터로 시각화를 진행하고 나서 전체 구조를 한눈에 파악하는 방법 없나요..?? 트리 깊이가 너무 깊어서 옆에 잘리는게 생깁니다 ㅜㅜ

  • 머신러닝
  • 통계
  • 통계
  • 머신러닝 배워볼래요?
  • python
ggb05224 댓글 1 좋아요 0 조회수 395

연결 리스트 삽입과 삭제 질문드립니다.

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

1분 50초 가량에 배열에서 데이터를 추가하려는 경우 overhead가 많이 발생하는데 연결 리스트의 경우 중간에 데이터를 삽입하면 다음을 가리키는 노드만 바꿔주면 되기 때문에 간단한 작업이라고 나와 있습니다.(데이터의 삭제도 마찬가지) --------------------------------------------------------------------------------------- 하지만 4분 9초 가량에 배열과 연결리스트의 삽입과 삭제를 비교하실 때 배열은 위의 얘기와 동일한 말씀을 하셨는데( O(n)의 성능을 가진다. ) 연결리스트에서 "삽입하려는 노드까지 노드를 계속 타고 가야하기 때문에 O(n)의 성능을 가진다." 라고 하셨는데 이 말씀은 "중간에 데이터를 삽입하면 다음을 가리키는 노드만 바꿔주면 되기 때문에 간단한 작업" 이 말과 충돌한다고 생각합니다. --------------------------------------------------------------------------------------- "삽입하려는 노드까지 노드를 계속 타고 가야하기 때문에 O(n)의 성능을 가진다." 이 말은 데이터 참조에 해당하는 말이 아닌지 질문 드리고 싶습니다. --------------------------------------------------------------------------------------- 결국에 제 말이 틀린거라면 즉, 연결리스트도 삽입과 삭제 시 O(n)의 성능을 가진다면 배열과 비교했을 때 연결리스트의 유일한 장점은 처음에 크기를 지정해 주지 않아도 된다는 점 하나 뿐인 것인가요?

  • 알고리즘
  • algorithm
hyunyoung 댓글 1 좋아요 1 조회수 723

Request failed with status code 404

미해결

Slack 클론 코딩[실시간 채팅 with React]

제로초님, layouts폴더에 App.tsx에서 import React from "react"; import loadable from '@loadable/component'; import { Routes, Route, Navigate } from "react-router-dom"; const LogIn = loadable(() => import("@pages/Login")); const SignUp = loadable(() => import('@pages/SignUp')); const Channel = loadable(() => import('@pages/Channel')); const App = () => { return ( <Routes> <Route path="/" element={<Navigate replace to="/login" />} /> <Route path="/login" element={<LogIn />} /> <Route path="/signup" element={<SignUp />} /> <Route path="/workspace/channel" element={<Channel />} /> </Routes> ) } export default App; Route의 4번째줄 path에 /workspace로 하면 로그아웃 할 때 제대로 작동하는데 저렇게 workspace/channel로 코드를 작성하면 로그아웃 할 때, 아래처럼 뜹니다 /를 하나만 붙여야 되는건가요? 나머지 코드들은 변경하지 않았습니다. Login 폴더 index.tsx import useInput from "@hooks/useInput"; import axios from "axios"; import React, { useCallback, useState } from "react"; import { Form, Label, Input, LinkContainer, Button, Header, Error} from './styles'; import {Link, Navigate} from 'react-router-dom'; import useSWR from 'swr'; import fetcher from "@utils/fetcher"; const LogIn = () => { const {data, error, mutate} = useSWR('/api/users', fetcher); const [logInError, setLogInError] = useState(false); const [email, onChangeEmail] = useInput(''); const [password, onChangePassword] = useInput(''); const onSubmit = useCallback((e: any) => { e.preventDefault(); setLogInError(false); axios .post( '/api/users/login', {email, password}, {withCredentials: true}, ) .then((response) => { mutate(response.data, false); }) .catch((error) => { setLogInError(error.response?.data?.statusCode === 401); }) }, [email, password, mutate]); if(data === undefined) { return <div>로딩중...</div> } if(data) { return <Navigate to="/workspace/channel" /> } return ( <div id="container"> <Header>Sleact</Header> <Form onSubmit={onSubmit}> <Label id="email-label"> <span>이메일 주소</span> <div> <Input type="email" id="email" name="email" value={email} onChange={onChangeEmail} /> </div> </Label> <Label id="password-label"> <span>비밀번호</span> <div> <Input type="password" id="password" name="password" value={password} onChange={onChangePassword} /> </div> {logInError && <Error>이메일과 비밀번호 조합이 일치하지 않습니다.</Error>} </Label> <Button type="submit">로그인</Button> </Form> <LinkContainer> 아직 회원이 아니신가요?&nbsp; <Link to="/signup">회원가입 하러가기</Link> </LinkContainer> </div> ); }; export default LogIn; workspace.tsx import axios from "axios"; import React, { FC, useCallback } from "react"; import useSWR from 'swr'; import fetcher from "@utils/fetcher"; import { Navigate } from "react-router-dom"; const Workspace: FC<React.PropsWithChildren<{}>> = ({children}) => { // revalidate = 서버로 요청 다시 보내서 데이터를 다시 가져옴 // mutate = 서버에 요청 안보내고 데이터를 수정 const {data, error, mutate} = useSWR('/api/users', fetcher); const onLogout = useCallback(() => { axios.post('api/users/logout', null , { withCredentials: true, }) .then(() => { mutate(false, false); }) }, []); if(data === false) { return <Navigate to="/login" /> } return( <div> <button onClick={onLogout}>로그아웃</button> {children} </div> ) } export default Workspace; swr은 2버전입니다.

  • Socket.io
  • 웹팩
  • socket.io
  • babel
  • typescript
  • 클론코딩
  • react
  • 클론코딩
성창수 댓글 1 좋아요 0 조회수 6093

main/resources에서 basic 폴더 찾는 법 관련 질문

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

BasicItemController.java의 items()에서 return "basic/item";을 수행합니다. 그리고 resources 폴더 하위는 다음과 같이 구성되어 있습니다. static > css폴더, html폴더 templates > basic폴더 return "basic/item"; 했을 때, basic폴더가 static이 아닌 templates폴더 하위에 있다는 것을 어떻게 아나요? static폴더에 있는지, templates폴더에 있는지 다 조회를 해보고 아는 것인가요?

  • MVC
  • mvc
  • spring
도토리 댓글 1 좋아요 0 조회수 482

deque.addLast

해결됨

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

addLst에서 구현할 때 insertAt으로 구현하셨는데 연결리스트에 구현한 insertLast로 구현하는게 더 직관적인거같은데 insertAt으로 한이유가 있을까요?

  • 알고리즘
  • algorithm
개발 까마귀 댓글 1 좋아요 1 조회수 342

직접 스프링 빈 등록하기 관련 질문

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

자바 코드로 직접 스프링 빈 등록하기에서 SpringConfig 파일에 코드를 작성하시는 부분을 보다가 궁금한게 생겨서 질문합니다. 스프링 컨테이너에 빈을 등록한다는 것은 등록하고자하는 클래스의 실제 객체, 즉 인스턴스를 하나 생성하여 관리한다는 것으로 이해했는데요. 그럼 @Bean annotation을 붙이는 것은 빈으로 등록하겠다는 것을 명시하는 것을 나타내는 것 같은데, 꼭 메서드 형식으로 작성을 해야하는 것인가요? 예를 들어, 강의에 적혀있던 메서드 대신 @Bean public MemberService memberService = new MemberService(); 위와 같이 변수 형태로 선언하면 안되는 것인가요?

  • java
  • spring-boot
  • mvc
  • spring
  • MVC
세승 댓글 1 좋아요 0 조회수 797

인기 태그

인프런 TOP Writers

주간 인기글