묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
도메인에 대한 개인적인 경험이 다음 설계에 영향을 주는 경우가 많습니다. 토비님께서는 설계를 하실 때, 이전 경험에서 비롯된 도메인을 어느 정도까지 설계에 반영하시나요?
안녕하세요, 토비님. 주니어로서 아직 부족한 점이 많지만, 궁금한 점이 있어 또 이렇게 질문드립니다.Section 3에서 소개된 splearn 도메인 강의를 듣기 전에, 스스로 먼저 도메인 모델링을 해보는 시간을 가졌습니다.그 과정에서 회원, 수강, 강의 등의 개념 외에 수강신청이라는 도메인을 도출했는데요, 그 이유는 “수강은 수강신청 후 결제가 완료되어야 성립된다”는 제 안의 암묵적인 경험에 의한 도메인 해석 때문이었습니다.그런데 사실 강의에서 제시된 사용자 스토리에는 결제라는 개념이 존재하지 않았습니다. 그럼에도 불구하고, 과거 경험에서 비롯된 도메인이 자연스럽게 설계에 스며들었고, 결과적으로 오버엔지니어링으로 이어졌다는 생각이 들었습니다.이런 식의 ‘의도되지 않았지만 그럴듯한 도메인’을 설계에 넣고 싶은 유혹은 실제 회사에서 설계할 때도 자주 느끼는 부분입니다.그래서 토비님께서는 이런 상황에서 어떤 기준으로 도메인을 포함하거나 배제하시는지, 그리고 본인의 경험을 어떤 방식으로 설계에 녹이시는지가 궁금해졌습니다.바쁘시겠지만, 짧은 의견이라도 들려주시면 큰 도움이 될 것 같습니다. 감사합니다!
-
해결됨챗GPT와 파이썬으로 주식 자동매매 앱 및 웹 투자 리포트 만들기
anaconda 설치 중 아래와 같이 나옵니다. 이유가 뭘까요?
(base) C:\Users\DD_soft> pythonPython 3.12.7 | packaged by Anaconda, Inc. | (main, Oct 4 2024, 13:17:27) [MSC v.1929 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information. 이때문에 64bit가 유지됩니다 ㅠㅠ
-
해결됨Git & GitHub, 원리부터 차근차근 - 근본깃 [완성편]
git flow 문의
강사님, 좋은 강의 너무 잘 듣고 있습니다.git flow 챕터 설명들으면서 궁금한 점이 생겼는데요.만약에 develop 브랜치에 5개의 feature A, B, C, D, E 가 순서대로 merge 가 되어 있는 상황에서이번 배포는 A, C, E 를 배포하기로 결정되었다면 release 브랜치는 develop 브랜치를 어떻게 merge 할 수 있나요? 이런 경우가 종종 발생할 것 같은데 cherry-pick 같은 것을 활용하는지요?만약 cherry-pick 같은 기능을 사용하게 되면 추후에 develop 의 어떤 기능까지가 release 에 merge 되어 있는지 막 헷갈리기 시작할 것 같은데 관리가 잘 되기 위해서 혹시 함께 관리되어야 하는 툴 같은 것도 있는지 아니면 방법들이 있는지도 궁금합니다.
-
미해결노션(notion) 완벽 활용법
36강 toNumber 오류
toNumber 사용이 오류가 나고, 대신 first나 at, map을 추천하더라고요. 실제로 first를 사용했더니 해결되었습니다. 왜 그런걸까요?prop 수식 자체가 인식이 되지 않습니다. 버전차이인가요? 2025.06.22 기준 최신입니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
인터페이스 위치를 결정하는 기준에 관해
안녕하세요 토비님, 강의 너무 재미있게 듣고 있습니다.인터페이스를 도메인 계층에 둘지, required 포트에 둘지 결정하는 기준이 있을까요?Splearn의 코드를 예로 들어보면, 도메인 서비스 인터페이스인 passwordEncoder는 어댑터 계층에서 구체적인 기술로 구현된다는 점에서 EmailSender, MemberRepository 같은 required 포트의 인터페이스와 유사하게 느껴집니다. 이들 모두 외부 세계(또는 특정 기술)와 애플리케이션을 분리하는 역할을 하기 때문입니다.만약 애플리케이션 서비스에서 passwordEncoder를 사용해 비밀번호를 암호화한 후, 암호화된 비밀번호(passwordHash)를 Member.register 메서드에 인자로 직접 넘겨준다면, passwordEncoder 역시 required 포트에 위치할 수 있지 않을까요? 도메인 계층도 애플리케이션 서비스에 의존하지 않게 되고요.그런데도 불구하고 passwordEncoder를 도메인 계층의 인터페이스로 두신 이유가 궁금합니다.감사합니다.
-
해결됨eks를 활용한 spring 운영서버 배포(feat. devops의 모든것)
"https통신을 위한 인증서 작업" 영상에서 나오는 notion 정보 어디에 있는 걸까요?
https://picturesque-staircase-f6e.notion.site/eks-spring-1c323940dccf8067a6c2ee4bbbaaa91a 해당 링크에서 찾으려고 하니 제가 못 찾는 건지 찾을 수가 없는데요. 제가 못 찾는 걸까요??
-
미해결옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트
build 폴더 생성 관련 문의
폴더 똑같이 생성하고, build.gradle 파일로 프로젝트 오픈 후 build successful 되었는데도 build 폴더만 생성되지 않았습니다. 이 경우 그냥 진행해도 될까요?
-
미해결[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
10회차 작업형2 라벨 인코딩 관련
라벨 인코딩 하는 과정에서 le.fit_transform(train[col])을 한 뒤에 le.fit_transform(test[col]) test에 fit_을 같이 붙여버렸습니다. col인 상권유형의 개수(unique)가 train과 test 차이가 둘다 a b c d e f 6개로 같았으면 성능평가에 지장 없을까요? 지장이 있다면 감점이 크게 될지 궁금합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
record 생성 시 휴먼 에러 발생 가능성
안녕하세요, 토비님. 메서드 파라미터가 많아질 경우 record 타입의 parameter object를 사용하여 가독성을 높일 수 있는 방법을 소개해주셨는데요,이 방법으로도 parameter object 인스턴스 생성 시 argument를 잘못 전달한다거나 등의 휴먼 에러는 여전히 발생 가능하지 않나 생각이 듭니다.java record도 kotlin의 named parameter와 같은 기능을 제공하면 좋겠지만 검색해봤을땐 아직 제공하지 않는 것 같더라구요. 이처럼 argument 전달 버그는 예방할 방법이 없을까요? 혹은 강의 뒷부분에서 이러한 점을 개선해주실까요?record에 builder를 사용해야 하나 생각이 들긴 하는데, 괜찮은 방법인지는 물음표네요.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
실행파일 에러 문의입니다.
실행파일 만들고 실행할때 Failed to start embedded python interpreter!메세지가 뜹니다.ㅜㅜ챗gpt에서 --onedir로 한번 해보라고 해서해도 파일은 생성되는데 똑같은 에러가 뜹니다;;;어떻게 해야 하나요?ㅜㅜ
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
섹션 6. 페이지 캐싱 - 동일한 fetch 요청을 다른 cache 옵션으로 데이터 패칭 하는 경우
안녕하세요 !섹션 6. 페이지 캐싱 강의를 듣고 루트(/) 페이지를 static page 로 만들어 보기 위한 실습 과정에서 app/layout.tsx 파일 내부의 모든 도서를 패칭하는 fetch 함수의 option에는 아무 옵션도 설정하지 않고 (Next15 버전 기본값은 no-store), 루트 페이지 내부의 동일한 데이터 패칭만 cache 옵션(force-cache)을 추가하여 데이터가 캐싱되도록 설정했습니다.이러한 과정 후 npm run build 를 통해 빌드 하니 루트 페이지가 정적 페이지(static page)로 빌드 되었습니다.정적 페이지가 되기 위해서는 동적 함수를 사용하지 않아야 하며, 데이터를 반드시 캐싱해야 되는데 동일한 url로 데이터 패칭을 보냈을 때 서로 다른 옵션을 사용하게 되면 request memoization으로 캐싱된 데이터force-cache 로 설정된 데이터)를 우선적으로 사용해서 정적 페이지로 동작하는 건가요?1번 과정에서 궁금한 점이 발생하여 이번에는 layout.tsx 페이지의 데이터 패칭 옵션을 강제로 cache : "no-store" 를 추가하여 빌드 를 진행했더니 빌드 가 정상적으로 완료되지 않고 오류가 발생하여 빌드가 완료되지 않는 문제가 발생했습니다. 동일한 url로 데이터 패치를 보낼 때 기본 값을 사용한 패치와 옵션을 추가한 패치가 있다면 옵션을 추가한 패치를 우선적으로 사용하고, 서로 다른 옵션은 추가할 수 없는건가요? (기존 build 파일인 .next 폴더를 제거하고 빌드하니 빌드가 성공적으로 동작했으며, 루트 페이지가 Dynamic page로 빌드되었네요.. 기존 빌드된 .next 폴더가 있을 때 2번 상황 처럼 동일한 fetch url에 옵션만 다르게 설정하여 빌드하니 오류가 발생한 이유를 모르겠네요..ㅎㅎ)dynamic page에서 dynamic params에 generateStaticParams 함수를 통해 params 값을 미리 전달하여 페이지를 만드는 경우, return 값으로 전달하지 않은 params의 페이지를 사전 렌더링 할 때 page router의 getStaticPaths의 fallback 옵션 blocking 처럼 동작하는 건가요?테스트 과정에서 발생한 문제들을 이해하고 싶은데 이해가 가지 않아서 질문 드립니다 ! app/layout.tsximport "./globals.css"; import Link from "next/link"; import style from "./layout.module.css"; import { BookData } from "@/types"; async function Footer() { const response = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book`, { cache: "no-store", } ); if (!response.ok) { return <footer>제작 @rekoding</footer>; } const books: BookData[] = await response.json(); return ( <footer> <div>제작 @rekoding</div> <div>총{books.length}권</div> </footer> ); } export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( <html lang="en"> <body> <div className={style.container}> <header> <Link href={"/"}>📚 ONEBITE BOOKS</Link> </header> <main>{children}</main> <Footer /> </div> </body> </html> ); }(with-searchbar)/page.tsximport BookItem from "@/components/book-item"; import style from "./page.module.css"; import { BookData } from "@/types"; const AllBooks = async () => { try { const response = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book`, { cache: "force-cache", } ); if (!response.ok) { throw new Error(); } const allBooks: BookData[] = await response.json(); return allBooks.map((book) => <BookItem key={book.id} {...book} />); } catch (error) { console.error(error); return <div>예상치 않은 문제가 발생했습니다.</div>; } }; const RandomBooks = async () => { try { const response = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/random`, { next: { revalidate: 3 }, } ); if (!response.ok) { throw new Error(); } const randomBooks: BookData[] = await response.json(); return randomBooks.map((book) => <BookItem key={book.id} {...book} />); } catch (error) { console.error(error); return <div>예상치 않은 문제가 발생했습니다.</div>; } }; export default async function Home() { return ( <div className={style.container}> <section> <h3>지금 추천하는 도서</h3> <RandomBooks /> </section> <section> <h3>등록된 모든 도서</h3> <AllBooks /> </section> </div> ); }
-
미해결Flutter 중급 1편 - 클린 아키텍처
freezed 3.0 대응된 코드 깃헙에도 업데이트 해주실 수 있으신가요?
freezed 3.0 대응된 코드 깃헙에도 업데이트 해주실 수 있으신가요?
-
미해결리눅스 소개와 리눅스 커널 Overview [저자직강 1부-1]
맥북에서 윈도우를 설치해서 할 수 있나요?
TRACE32 프로그램이 윈도우 환경에서만 사용할 수 있다고 하셨는데, 혹시 맥에서 윈도우를 따로 설치해서 사용할 수 있나요? 유료결제 전에 미리 알고 결제를 해야할것 같아 질문 드립니다.
-
해결됨전동킥보드로 배우는 임베디드 실전 프로젝트
NUCLEO-F767ZI 구매해서 사용하면 될까요?
교재를 따라가는데 도움될 수 있도록 Nucleo를 장만하려 하는데요, 기본인 NUCLEO-F767ZI 구매해서 사용해도 될까요?
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
작업형 2 결측치...
어차피 지나간 시험이지만.. 여기저기 후기랑 카페를 둘러보니 논란이 많아서 물어볼수밖에 없네요..타겟값에 결측치를 0으로 제거했다고 되어있으면 결측치를 제거해야하는건가요.? 그냥 진행해도 무방한가요? 저는 원핫인코딩하고 렌덤포레스트만 해서 600대인가 500대 인가 기억은 잘 안나지만 딱 기본만 하고 제출했거든요... 딴짓님의 의견이 궁금합니다.
-
미해결게임 프로그래머 취업 전략 가이드
첫 직장에 있어 중소기업과 대기업의 차이가 클까요
안녕하세요 루키스님을 유니티 강의로 처음뵙고루키스님이 '쥬신' 학원을 추천해주신것을 계기로 수료 후 첫 취업을 하게 되었습니다. 지금까지 클라이언트로 계속 준비는 해왔지만 얼떨결에 중소기업 mmorpg를 운영하는 서버 프로그래머 직무 신입으로 들어가게 되었습니다. 여기서 고민인게 커리어를 놓고 보면공부 열심히 해서 '하루빨리?' 대기업을 들어가야만 프로그래머 경력에 있어서 좋은지, 아니면 또 그건 아닌지가 궁금합니다. 중소기업의 경력이 나중에 인정을 좀 덜 받고 그런게 있을까요? 아니면 규모와 관계없이 내가 기업에서 어떤걸 해결했고 어떤걸 공부중이고 이런것이 훨씬 더 중요할까요? 더 큰 회사로 나중에 이직할 때도요. '게임쪽은 무조건 규모 큰 곳이 짱이다'가 맞을까요
-
해결됨비전공자 혼자서 하루 만에 수익화 앱 출시하기
안드로이드 에뮬레이터 연결시 에러..
혹시 위와 같이 터미널에서 나오는데 이건 버전문제인가요?SDK MANAGER에서 해결해야되는지..계속 알아보는데 문제가 뭔지 몰라서 넘어가질 못하고 있습니다.도와주세요ㅠ
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
영한님, sleep(10) 이유가 궁금합니다.
안녕하세요. 영한님 궁금한 점이 있습니다.sleep(10) 를 하면 동시 실행을 더 촉진할 수 있다는 것이 이해가 안됩니다. 예를 들어, 아래를 가정한다면요! 각 시간은 별도로 가정한 것입니다. 1번 쓰레드가 1.0초에 먼저 실행이 된 후 0.1 초 쉬었다가 실행이 되면 1.1초에 실행 가정,2번 쓰레드가 1.1초에 먼저 실행이 된 후 0.1 초 쉬었다가 실행이 되면 1.2초에 실행 가정,3번 쓰레드가 1.2초에 먼저 실행이 된 후 0.1 초 쉬었다가 실행이 되면 1.3초에 실행 가정,... 그렇다면 각 쓰레드가 0.1초씩 쉬었다고 하더라도 결국에는 실행시점이1.1초, 1.2초, 1.3초 다 다르다고 봐도 되지 않나요?뭔가, sleep(10) 을 빠지게 되면 대부분 쓰레들이 비슷한 시점에 10ms 를 자고, 거의 동시에 깨어나서 increment() 를 실행하는 것 같은데 맞나요?맞다면 왜 그런가요? 감사합니다!
-
미해결실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
단언문 순서에 따라 테스트 결과가 왜 달라지나요?
expect(screen.getByTestId('cart-icon')).toBeInTheDocument(); expect( await screen.findByRole('button', { name: 'Maria' }), ).toBeInTheDocument(); expect(screen.getByText('2')).toBeInTheDocument();영상의 테스트 코드는 통과하는데, 위와 같이 두번째와 세번째 단언문을 바꾸면 실패합니다. 왜이런가요?
-
미해결웹 애니메이션을 위한 GSAP 가이드 Part.03
안녕하세요 ScrollSmoother에 대해 질문드릴게요
안녕하세요 ScrollSmoother에 대해 질문드릴게요! 이번 강의 너무 잘보고 있는데 ,다른분의 질문을 보고 ScrollSmoother가 무료가 되었다라고 말씀하셔서 활용해보려고 합니다. 사용법이 ID를 레퍼하여 자식 div를 tramsform으로 따라오는식으로 스무디 효과를 주는건 확인했습니다 근데 만약에 페러렉스 효과를 백그라운드 이미지에 반영해보려니 tramsform의 크기를 따라가는지 background fixed같은건 전혀먹히지가 않는거같네요 .. 스크롤링하면 부드럽게 스무스 하게 되면서 bg의 포지션도 살짝움직이는 식으로 구현해보려 했는데 혹시 방법이 없을지 질문드립니다. ㅜ