묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
섹션 6에서 CRS vs SSR
섹션 6에서 CRS vs SSR 하나의 프로젝트에 2개를 번갈아가면서 구현된다는 말씀이 있는데, 마이크로프론트엔드를 말씀하시는걸까요? 아님 다른 방법이 있나요?
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
.banner 간격 조정 어떻게 하나요?
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>서울구석구석</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <div class="main-content"> <div class="left"> <header> <div class="header-logo"> <a href="#none"><img src="images/logo-header.png" alt="header logo"></a> </div> <div class="navi"> <ul class="menu"> <li> <a href="#none">지금의 서울</a> <div class="sub-menu"> <a href="#none">이벤트</a> <a href="#none">축제&행사</a> <a href="#none">전시</a> </div> </li> <li> <a href="#none">추천</a> <div class="sub-menu"> <a href="#none">에디터 추천</a> <a href="#none">테마코스</a> <a href="#none">도보해설관광</a> <a href="#none">한류관광</a> </div> </li> <li> <a href="#none">여행지</a> <div class="sub-menu"> <a href="#none">명소</a> <a href="#none">엔터테인먼트</a> <a href="#none">음식</a> <a href="#none">게스트하우스</a> </div> </li> <li> <a href="#none">여행정보</a> <div class="sub-menu"> <a href="#none">가이드북&지도</a> <a href="#none">시티투어버스</a> <a href="#none">날씨</a> </div> </li> </ul> </div> </header> </div> <div class="right"> <div class="slide"> <div class="slide-image"> <div class="slide-image-inner"> <a href="#none"><img src="images/slide-01.jpg" alt="slide1"></a> <a href="#none"><img src="images/slide-02.jpg" alt="slide2"></a> <a href="#none"><img src="images/slide-03.jpg" alt="slide3"></a> </div> </div> <div class="banner"> <img class="banner-image" src="images/banner-01.png" alt="banner image"> <div class="banner-content"> <h3>얼리버드 선착순 할인 이벤트 최대 30% 할인</h3> <p> 12월은 사랑의 달~ 코딩웍스에서 여러분께 사랑을 뿌려요~<br> 12월 개강반을 12월 06일까지 접수하는 분들께는 15%~ 20% 의 얼리버드 할인을 제공합니다. </p> </div> <a href="#none"><img src="images/banner-02.png" alt="banner link"></a> </div> </div> <div class="items"> <div class="news"> <div class="tab-inner"> <div class="btn"> <span>공지사항</span> </div> <div class="tab1"> <a class="open-modal" href="#none"><em>스트리밍 서버 이전 작업으로 2시간 서비스 중지</em><b>2022.12.20</b></a> <a href="#none"><em>얼리버드 선착순 할인 이벤트 최대 50% 할인</em><b>2022.10.13</b></a> <a href="#none"><em>내 집 마련의 꿈을 꿈이 아닌 현실로 만드는 진짜 방법</em><b>2022.11.31</b></a> <a href="#none"><em>외국인과 영어로 네이티브처럼 대화하는 노하우</em><b>2022.08.09</b></a> <a href="#none"><em>월 500만원 매출을 내는 블로그 운영하는 노하우</em><b>2022.07.07</b></a> </div> </div> </div> <div class="gallery"> <div class="tab-inner"> <div class="btn"> <span>갤러리</span> </div> <div class="tab2"> <a href="#none"><img src="images/gallery-01.png" alt="gallery1"><span>퍼블리셔 취업 가이드</span></a> <a href="#none"><img src="images/gallery-02.png" alt="gallery2"><span>전문가가 되는 사진촬영</span></a> <a href="#none"><img src="images/gallery-03.png" alt="gallery3"><span>라인을 만드는 필라테스</span></a> </div> </div> </div> </div> </div> </div> <footer> <div class="footer-logo"> <a href="#none"><img src="images/logo-footer.png" alt="footer logo"></a> </div> <div class="copyright"> 상호 : (주)코딩웍스 | 대표자 : 홍길동 | 개인정보관리책임자 : 성춘향 부장 사업장주소 : 경기도 남양주시 별내동 1234 코딩웍스 빌딩 6층 (주)코딩웍스 </div> <div class="family-site"> <select> <option value="">패밀리 사이트</option> <option value="">코딩웍스 커뮤니티</option> <option value="">코딩웍스 쇼핑몰</option> <option value="">코딩웍스 재단</option> </select> </div> </footer> </div> <div class="modal"> <div class="modal-content"> <h2>스트리밍 서버 이전으로 서비스 장애</h2> <p> 스트리밍 서버 이전 작업으로 2시간 서비스 중지됩니다.<br> <br> 주요 작업 내용은 아래와 같습니다.<br> 1. 서버 이전에 따른 DNS 이전으로 기존 호스팅 서비스 대체<br> 2. 문자셋을 utf-8로 변경 후 모바일 등에 대처하기 위해 미리 조치<br> 3. 스트리밍 서버 CDN과 연동 후 멀티미디어 이러닝 서비스가 제공<br> <br> 위 내용을 보시면 제법 큰 작업이었음을 알 수 있습니다.<br> 특히 문자셋의 변경에 따라 기존의 DB, data, 웹사이트 솔루션 등의 커스트마이징 등에 상당한 어려움이 있었고, 이에 따른 일부 접속 오류가 있을 수 있었음에 양해를 구합니다.<br> 특히 인터넷익스플로러 11로 접속하셨을 경우 일부 문제은행 목차가 출력되지 않았을 수도 있습니다.<br> 서버 이전 작업으로 고객님들께 불편을 드려서 대단히 죄송합니다.<br> 정상 운영되도록 최선을 다하겠습니다. 감사합니다. </p> <a class="close-modal" href="#none">닫기</a> </div> </div> <script src="script/jquery-1.12.4.js"></script> <script src="script/custom.js"></script> </body> </html> @charset "UTF-8"; body { margin: 0; background-color: #ffffff; color: #333333; font-size: 15px; } a { color: #333333; text-decoration: none; } .container {} .main-content { display: flex; } .main-content > div { /* border: 1px solid black; */ /* height: 650px; */ } .left { width: 200px; background-color: rgba(210, 181, 161, 0.5); } .right { flex: 1; } header {} header > div { /* border: 1px solid red; */ } .header-logo { height: 100px; display: flex; align-items: center; } .navi { height: 400px; } /* Navigation */ .menu { list-style: none; padding: 0; width: 90%; margin: auto; margin-top: 10px; } .menu li { text-align: center; } .menu li > a { border: 1px solid lightgray; display: block; padding: 5px; background-color: lightskyblue; transition: 0.1s; } .menu li:hover > a { background-color: olivedrab; color: #ffffff; } .sub-menu { border: 1px solid lightgray; background-color: lightcyan; display: none; } .sub-menu a { display: block; padding: 5px; transition: 0.1s; } .sub-menu a:hover { background-color: olivedrab; color: #ffffff; } .slide { display: flex; } .slide > div { /* border: 1px solid blue; */ height: 400px; } .slide-image { flex: 1; height: inherit; overflow: hidden; position: relative; } .slide-image-inner { font-size: 0; width: 300%; height: inherit; position: absolute; top: 0; left: 0; animation: slide 10s linear infinite; } .slide-image-inner a { height: inherit; display: inline-block; width: calc(100% / 3); } .slide-image-inner a img { height: inherit; width: 100%; object-fit: cover; } @keyframes slide { 0% { left: 0; } 30% { left: 0; } 35% { left: -100%; } 65% { left: -100%; } 70% { left: -200%; } 95% { left: -200%; } 100% { left: 0; } } .banner { width: 230px; text-align: center; box-sizing: border-box; padding: 5px; font-size: 14px; background-color: ivory; } .banner .banner-image { width: 88%; } .items { display: flex; } .items > div { /* border: 1px solid green; */ height: 250px; flex: 1; } .news {} .gallery {} /* News & Gallery */ .tab-inner { width: 95%; margin: auto; margin-top: 5px; } .btn {} .btn span { border: 1px solid #000000; display: inline-block; width: 100px; text-align: center; padding: 5px; border-radius: 5px 5px 0 0; border-bottom: none; margin-bottom: -1px; background-color: lightskyblue; } .tab1 { border: 1px solid #000000; height: 208px; box-sizing: border-box; padding: 10px 15px; } .tab1 a { display: block; padding: 9px; border-bottom: 1px solid #000000; } .tab1 a:last-child { border-bottom: none; } .tab1 a em { font-style: normal; } .tab1 a b { float: right; font-weight: normal; } .tab2 { border: 1px solid #000000; height: 208px; text-align: center; box-sizing: border-box; padding-top: 10px; } .tab2 a { display: inline-block; text-align: center; } .tab2 a img { height: 165px; border-radius: 5px; } .tab2 a span { display: block; } footer { display: flex; height: 100px; align-items: center; background-color: rgb(211, 211, 211, 0.3); } footer > div { /* border: 1px solid red; */ text-align: center; } .footer-logo { width: 200px; } .copyright { flex: 1; } .family-site { width: 230px; } .family-site select { padding: 5px; border-radius: 3px; } .modal { background-color: #00000077; position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 100; display: none; } .modal-content { background-color: #ffffff; width: 460px; padding: 20px; border-radius: 10px; box-shadow: inset 0 0 10px #000000; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .modal-content h2 { text-align: center; } .close-modal { float: right; border: 1px solid #000000; padding: 5px 10px; border-radius: 5px; } $('.menu li').mouseenter(function(){ $(this).children('.sub-menu').stop().slideDown() }) $('.menu li').mouseleave(function(){ $(this).children('.sub-menu').stop().slideUp() }) $('.open-modal').click(function(){ $('.modal').fadeIn() }) $('.close-modal').click(function(){ $('.modal').fadeOut() }) .banner에서 gap처럼 요소 간의 간격을 띄우는 방법이 있나요?
-
미해결15일간의 빅데이터 파일럿 프로젝트
Kernel panic - not syncing : Fatal exception
[4. VM 통합 환경 구성]에서 헤매고 있습니다.Windows11에서 보안 상의 이유로 VirtualBox 5.x 버전을 설치할 수 없다고 하여 6.1 버전을 설치하여 사용하고 있습니다.다음은 Server01, Server02의 설정값입니다.네트워크 어댑터1 NAT 네트워크 (강의와 같은 NatNetwork 10.0.2.0/24)네트워크 어댑터2 호스트 전용 어댑터 (6.1버전이라서 [파일-호스트 네트워크 관리자]에서 강의와 같이 설정)
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
독립성 검정 관련 질문
독립성검정 관련하여 코랩에서는 선생님이 하신대로 문제없이 실행되었습니다.그런데, 시험환경 체험하기에서 실행을 하다 보니 코랩에서 처럼 결과값(Chi2ContingencyResult(statistic=0.5552884615384607, pvalue=0.4561648467028253, dof=1, expected_freq=array([[47.14285714, 62.85714286], [27.85714286, 37.14285714]]))이 안나오고결과값들이 어떤 값인지 표시가 없는 상태((0.5552884615384607, 0.4561648467028253, 1, array([[47.14285714, 62.85714286], [27.85714286, 37.14285714]])) 로 나왔습니다.이렇게 나오는 이유와 개선 방법인 있는지요?하단에 시험환경에 코딩한 결과입니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
DataManager class 내의 Dictionary 에 관해 질문드립니다
c#문법에 익숙치 않아 차근차근 공부중인데이해가 잘 되지 않는 부분이 있어 질문드립니다DataManager class내의 Dictionary선언부분에 보면public Dictionary<int, Stat> StatDict { get; private set; } = new Dictionary<int, Stat>(); 라고 되어있는데 여기서 new Dictionary<int, Stat>(); 이부분이 반드시 필요한 건가요?Init() 에서 MakeDict 매소드 안에서 새로운 Dictionary를 할당받고 있는부분이 있어 제가 모르는 부분이 있는것같아 질문드립니다
-
미해결팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
그룹으로 지정하면 채색이 안되요? paint bucket tool로요..
- 먼저 유사한 질문이 있었는지 커뮤니티의 '자주 묻는 질문'과 '질문 리스트' 그리고 '강의 소식'에서 검색해 보세요.- 수업 관련 질문은, 강의 번호와 스크린샷을 포함하면 더 확실한 답변을 들을 수 있어요.- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 작성한 질문은 답변을 들은 후 절대 삭제하지 마세요, 다른 수강생분에게도 도움이 됩니다.- 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결스프링 핵심 원리 - 기본편
의존관계 주입에서 AppConfig라는 파일을 이름을 바꿔도 정상작동 하나요?
spring 에서 appconfig으로 구현객체 넣어줄때 appconfig파일을 다른이름을 바꿔도 상관이 없나요?? 아니면 무조건 appconfig라고 이름을 정해야하나요??
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
로그 Debug 모드가 적용이 되지 않습니다.
히카리 커넥션 풀 생성할 때 로그가 좌르르르 나오지 않습니다! - 인프런 | 질문 & 답변 (inflearn.com)위 링크의 내용와 똑같은 현상이고답변대로 진행해도 효과가 없었습니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
git 업데이트
> git push -u origin master To https://github.com/eunpse/preCamp.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/eunpse/preCamp.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.과제에 알려주신 방법으로 깃에 먼저 파일을 올렸다가, 내용을 수정하고 다시 깃에 올리려고 하는데 오류가 발생합니다. git pull을 해라 이런 말이 있는 것 같은데 어떻게 해야하나요?
-
미해결Verilog를 이용한 FPGA 활용 기초
FPGA MCU Porting
안녕하세요 현재 반도체 설계 업종에 종사하고 있습니다.Full custom 설계를 하다가 이번에 RTL 설계 부서로 이동할 것 같은데 DFT 관련 부서라고 합니다.본 강의가 도움이 많이 되어서 FPGA MCU Porting 을 다음 강의로 들어보려고 하는데 RTL 설계 Flow 를 익히는 관점에서 도움이 될까요?추후에 DDR Controller 까지 들어서 현업에서 도움 받으려고 합니다.그리고 새소식 게시판에 MCU Porting 수강하면 Flash 모듈을 무료로 주신다고 하셨는데 모듈 종류가 뭔지 궁금합니다좋은 강의 감사합니다.
-
미해결
환불 문의입니다
2253189 주문번호입니다제가 수강한 과목에서 인트로만 들었는데도 8프로가 넘어서 환불을 할 수 없는데이게 맞는건가요?
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
안녕하세요. 호돌맨님. 서비스 정책 로직 위치에 대해 궁금한 점이 있습니다.
좋은 강의 정말 감사드립니다. 강의 수강 도중 서비스 로직 관련 궁금한 점이 있어 문의드리게 되었습니다.제가 DDD 를 공부하면서 알게된 부분이 DDD 에서는 비즈니스 로직을 도메인에 몰아서 작성하라고 했는데 본 강의에서는 절대 서비스 정책을 도메인에 둬서는 안된다고 말씀하신 걸로 알고 있습니다. 호돌맨님께서 말씀하신 서비스 정책을 두지 말라는 조언은 DDD를 적용하지 않았기 때문인지 두지 말라고 하신건지 알고 싶습니다.(서비스 정책 == 비즈니스 로직으로 이해했습니다. 혹시 제가 이해한 부분이 잘못 됐을까요?)감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
'result' is of type 'unknown'. ts(18046)
강의 화면과 달리 result 타입이 unknown이라고 뜹니다소스를 비교했을 땐 동일한 것 같은데, 어떤 부분이 잘못 된걸까요?
-
미해결
처리되지 않은 예외 발생: 읽기 액세스 위반. ptr은 0xFFFFFFFFFFFFFFFF7이었습니다.
#include <stdio.h> #include <stdlib.h> #define MAX 10 typedef struct Node { int data; struct Node* next; }Node; void init(Node* A); void AddEnd(Node* A, int B); void RemoveEnd(Node* A); void CheckLinkedList(Node A); int main() { Node node; Node* nodeptr = &node; init(nodeptr); AddEnd(nodeptr, 10); AddEnd(nodeptr, 20); AddEnd(nodeptr, 30); AddEnd(nodeptr, 40); AddEnd(nodeptr, 50); AddEnd(nodeptr, 60); CheckLinkedList(node); return 0; } void init(Node* A) { A = NULL; } void AddEnd(Node* A, int B) { Node* ptr = NULL; Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = B; // 데이터 할당 newNode->next = NULL; // next 포인터 초기화 if (A == NULL) { // empty A = newNode; return; } else { // not empty, 가장 앞에 노드 추가 if (A->data > newNode->data) { newNode->next = A; A = newNode; return; } int i = 0; for (ptr = A; ptr->next; ptr = ptr->next) { if (i >= MAX - 1) { printf("더 추가 할 수 없습니다!\n"); return; } } ptr->next = newNode; // 마지막에 노드 추가 } } void RemoveEnd(Node* A) { Node* ptr = A; if (ptr == NULL) { printf("리스트가 비었습니다!\n"); return; } for (ptr = A; ptr; ptr = ptr->next) { if (ptr->next == NULL) { free(ptr); return; } } } void CheckLinkedList(Node A) { for (Node* ptr = &A; ptr; ptr = ptr->next) { printf("%d\n", ptr->data); } }ptr = A; ptr->next; ptr = ptr->next에서 처리되지 않은 예외 발생: 읽기 액세스 위반.ptr은 0xFFFFFFFFFFFFFFFF7이었습니다. 가 뜹니다.Clion에서는 되던 코드가 vs에서 안돼서 당황스럽습니다 ㅠ
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
UserLoanHistoryRepository 에서 Cannot resolve property 'isReturn' 경고
package com.group.libraryapp.domain.user.loanhistory;import org.springframework.data.jpa.repository.JpaRepository;public interface UserLoanHistoryRepository extends JpaRepository<UserLoanHistory , Long> {boolean existsByBookNameAndIsReturn(String bookName, boolean isReturn);} 함수 existsByBookNameAndIsReturn 부분에서IsReturn 부분이 Cannot resolve property 'isReturn' 이라는 경고문이 뜨는데요, 엔티티 매핑을 그대로 잘 해주었는데도 동일한 경고문이 뜹니다.혹시 몰라서@Column(name = "is_return", nullable = false)private boolean isReturn;를 추가해주었지만 동일한 경고문이 뜨네요. 동작은 잘되는데 왜그런지 너무 궁금합니다.and 뒷절에 다른 컬럼을 넣어봤는데요 다른 컬럼은 잘 인식하나, isReturn만 인식을 못하고 있는거 같습니다... ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
싱글플레이 게임의 업데이트 방식
강사님 안녕하세요! 강의를 듣다가 궁금한점이 생겼는데 싱글플레이게임같은경우 업데이트를 할 때 파일을 통째로 갱신하는 방법을 사용하는지, 아니면 또다른 방법이 있는지 궁금합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
해당 풀이의 런타임 질문드립니다
안녕하세요.해당 문제와 유사한 문제를 찾아서 복습을 하고 있었는데, 런타임 에러라고 뜨는데요, 무엇이 문제인지 확인 부탁드려도 될런지요.인프런은 아니고 해당 문제와 유사한 문제를 찾아풀고 있던 타사이트라고, 송구스러운데요.참고로 제 브이에스코드를 이용했을 땐 콘솔에 답이 출렵됩니다. 다만 해당 사이트에서 풀때는 런타임에러라고 합니다.강사님 풀이와 동일하게 풀었는데, 제가 무엇을 놓쳤는지 궁금해서 문의드려봅니다.https://leetcode.com/problems/merge-two-sorted-lists/description/ var mergeTwoLists = function(list1, list2) { let answer = []; let n = list1.length; let m = list2.length; let p1 = (p2 = 0); while (p1 < n && p2 < m) { if (list1[p1] <= list2[p2]) answer.push(list1[p1++]); else answer.push(list2[p2++]); } while (p1 < n) answer.push(list1[p1++]); while (p2 < m) answer.push(list2[p2++]); return answer; }
-
미해결캐글 Advanced 머신러닝 실전 박치기
손실함수에 대한 질문
안녕하세요 선생님,공부를 하다가 손실함수 부분에 대해서 질문이 있어서 이렇게 문의드립니다 다름이 아니고 시계열 자료를 분석하고 있는데, 정상성을 확보하기 위해서 차분을 하고 LIGHT GBM과 RANDOM FOREST로 회귀분석을 했는데 실제값은 0.1 ~ 0.8으로 많이 움직이지만, 예측값은 그냥 평균값이 0.4로 고정을 해서 오차에 대한 값이 그렇게 크게 나오지 않습니다. 이럴 경우는 어떻게 해야할까요?
-
미해결React + API Server 프로젝트 개발과 배포 (CI/CD)
CI/CD를 제가 잘 이해한게 맞는지와 merge관련해서 질문이 있습니다!
안녕하세요 이 강의를 듣고 협업 과정에서 CI/CD구축을 하고싶은데요지금 organization을 파서 front와 back 레포지토리를 생성을 했습니다.여기서 각 front, back의 레포지토리의 Actions에 가서 강의대로 진행 시키면 front에서도 main 브랜치가 수정 될 때마다 CI/CD가 수행되고 back에서도 main 브랜치가 수정이 될 때마다 CI/CD가 수행이 되는건가요?그리고 이렇게 CI/CD가 잘 구축된 상황에서merge를 수행하다 충돌이나 에러가 난다면해당 레포지토리의 main브랜치가 병합이 돼서 충돌이 난 상태로 있는건지아니면 병합이 취소 돼서 원래 상태로 있는건지가 궁금 합니다만약 병합이 돼서 충돌 된 상태라면 이 충돌 상태를 어떻게 해결하는지도 궁금합니다!
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
모듈 의존성 문제
@Module({ imports: [ TypeOrmModule.forFeature([Product, ProductTag, ProductCategory]), UserModule, ProductTagModule, ProductCategoryModule, ], providers: [ ProductResolver, ProductService, ], }) export class ProductModule {}위와 같은 코드에서 ProductService의 실행에 필요한 ProductTagModule과 ProductCategoryModule를 다 import 해주었는데 계속 아래와 같은 의존성 오류가 나왔습니다.Nest can't resolve dependencies of the ProductService (ProductRepository, ?, UserService, ProductCategoryService). Please make sure that the argument ProductTagService at index [1] is available in the ProductModule context.Potential solutions:- Is ProductModule a valid NestJS module?- If ProductTagService is a provider, is it part of the current ProductModule?- If ProductTagService is exported from a separate @Module, is that module imported within ProductModule? @Module({ imports: [ /* the Module containing ProductTagService */ ] }) 그래서 아래와 같이 ProductTagService, ProductCategoryService를 임의로 providers에 넣어주면 또 실행이 됩니다. 해당 모듈을 이미 임포트 해주었는데 왜 서비스를 따로 또 주입해주어야 할까요?@Module({ imports: [ TypeOrmModule.forFeature([Product, ProductTag, ProductCategory]), UserModule, ProductTagModule, ProductCategoryModule, ], providers: [ ProductResolver, ProductService, ProductTagService, ProductCategoryService, ], }) export class ProductModule {} 아래는 ProductTagModule과 ProductCategoryModule 코드입니다.@Module({ imports: [TypeOrmModule.forFeature([ProductTag])], providers: [ProductTagResolver, ProductTagService], }) export class ProductTagModule {} @Module({ imports: [TypeOrmModule.forFeature([ProductCategory])], providers: [ProductsCategoriesResolver, ProductCategoryService], }) export class ProductCategoryModule {}