묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
콘솔앱 (.NET Core) 과 콘솔앱과 동일한가요
Visual Studio 2002 사용 중입니다. 구글링 해서 SDK도 설치하고 여러가지 해봤지만 콘솔앱 (.NET Core)는 보이지 않네요. 명칭이 콘솔앱으로 변경되었다는 글을 본 것 같아서 콘솔앱으로 진행했는데 namespace도 자동으로 생성되지 않고 조금 다른 부분이 보입니다. 같은 것이 맞나요? 이렇게 진행해도 되나요??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
[DirectXTex LNK2019 에러]
(참고)실습 환경: 윈도우 11 Pro 24H2 26100.3194 DirectXTex 라이브러리를 다운받아 DirectXTex_Desktop_2022 솔루션을 Debug, Release 모드로 각각 빌드하여 강의 영상과 동일하게 아래와 같은 디렉토리 구조로 파일을 배치하였습니다.LibraryIncludeDirectXTexDirectXTex.hDirectXTex.inlLibDirectXTexDirectXTex.libDirectXTexD.lib 그리고 Engine 정적 라이브러리 프로젝트의 EnginePCH.h 파일에#include <DirectXTex/DirectXTex.h> #include <DirectXTex/DirectXTex.inl> #pragma comment(lib, "d3d12") #pragma comment(lib, "dxgi") #pragma comment(lib, "dxguid") #pragma comment(lib, "d3dcompiler") #ifdef _DEBUG #pragma comment(lib, "DirectXTex\\DirectXTexD.lib") #else #pragma comment(lib, "DirectXTex\\DirectXTex.lib") #endif위와 같이 추가하였고, 디렉터리 경로 또한 설정 완료된 상황입니다.Engine 프로젝트에는모든 구성 x64 포함 디렉터리: $(SolutionDir)Library\Include\Client 프로젝트에는모든 구성 x64 포함 디렉터리: $(SolutionDir)Library\Include\, $(SolutionDir)Engine\모든 구성 x64 라이브러리 디렉터리: $(SolutionDir)Library\Lib\, $(SolutionDir)Output\ 이런 상황에서 Engine 정적 라이브러리를 빌드하면 통과하나, Client 프로젝트를 빌드하면 DirectXTex 의 두 함수 DirectX::CreateTexture, DirectX::PrepareUpload 에 대해 LNK2019 에러가 발생합니다. 경로 설정이나 lib 파일 설정 등등을 몇 번이나 확인했는데도 어디서 문제가 생기는 지 확인이 안되네요... 올려주신 강의 자료 프로젝트와 1:1로 비교해도 어디가 문제인지 발견이 안되는데, 어디를 점검해보면 될 까요...?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 연관관계에서
강의에서 다대다 연관관계 일때는, 중간에 엔티티를 하나 더 추가해서 일대다, 다대일 관계로 하는게 효율적이라고 말씀하셨습니다. 1. 그래서 MEMBER와 PRODUCT간에 다대다 관계인것을 중간에 ORDER를 추가해서 일대다, 다대일 관계로 해야하는거 같은데, 여기서 말씀하신 일대다 관계라는게, 앞선 강의에 있는 일대다 단방향 연관관계를 말하는것일까요??MEMBER -> ORDER간에 일대다 단방향 연관관계를 말씀하시는것인지, 아니면 MEMBER <-> ORDER 간에 다대일 양방향 연관관계로 하는것을 말씀하시는것인지 헷갈려서 질문드립니다..즉, 여기서 말하는 일대다 관계라는게 MEMBER에서 외래키를 관리하는 일대다 단방향 연관관계의 개념인것인지, 중간테이블 관점에서 다대일 관계를 말하는것인지 헷갈려서 질문드립니다.. 2. 다대다 연관관계일때는 중간에 엔티티를 두어, 중간 엔티티를 기준으로 다대일 단방향 연관관계나, 다대일 양방향 연관관계로 해야 하는것일까요??
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
태그 유형 선택
안녕하세요. 강의 너무 잘 듣고 있습니다.현재 저의 창입니다.강의에서 선택하라는 항목이 없어서 질문드립니다. 타 수강생 질문을 보아도 lagacy모델 하위 기본을 선택하라고 답변을 주셨는데, 저에게는 그 항목도 없어서 여쭤봅니다!
-
해결됨파이썬으로 나만의 블로그 자동화 프로그램 만들기
open ai api키 사용하는거 무료인가요?
open ai api키 사용하는거 무료인가요?주시기 바랍니다.
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
데이터 분리하기 문의드립니다.
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!질문과 관련된 영상 위치를 알려주면 더 빠르게 답변할 수 있어요먼저 유사한 질문이 있었는지 검색해보세요라이브러리 및 데이터불러오기 20분지점 주어진 데이터 분리하기 train=pd.read_csv("train.csv")test=pd.read_csv("test.csv") 가 주어졌습니다. 이게 어느 단계에서의 작업이며, 데이터를 왜 분리하는지, 어떤 데이터를 분리하는지에 대해 전반적인 설명이 없어서 지금의 학습과정을 이해할 수 없습니다.train과 test가 주어졌다면 타겟레이블을 생성하는 과정이 아닐까 추측해 봤지만,여기서는 income을 삭제했는데 왜 삭제했는지이해가 안 갑니다. 설명을 바랍니다.
-
미해결Tailwind CSS로 만드는 멋진 웹 UI 스타일링
반응형 레이아웃 문의 드려요.
죄송하지만 질문하실 때 React 또는 Vue와 같은 자바스크립트 프레임워크에서 Tailwind CSS 설치 및 사용에 관한 질문은 하지 말아주세요. 질문하셔도 React 또는 Vue 환경을 몰라서 답변을 드릴 수가 없습니다. 오직 순수한 Tailwind CSS 관련 질문과 CSS 속성 및 활용에 관한 질문만 해주시면 감사드리겠습니다. 강의명 : 반응형 레이아웃 - Responsive Design Container 과 Responsive Design 차이가 아래가 맞을까여? Container: 전체적으로 반응형으로 설정 Responsive Design : 선언한 엘리먼트 기으로 (국소적으로) 레이아웃을 세세하게 컨트롤 한다
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
스위치에 대한 질문
'스위치는 네트워크 그 자체를 이루는 호스트이다.'라고 표현하셨는데 이 부분이 헷갈립니다.'엔드 포인트는 네트워크 그 자체를 이루고 있지 않다는 것인가?'라는 의문이 들기 때문입니다.저는 이렇게 이해했습니다. '스위치는 네트워크 그 자체를 이루는 목적의 호스트이고, 엔드 포인트는 네트워크를 이루면서 다른 목적도 있는 호스트이다.'제가 이해한 것이 맞는지 궁금합니다.
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
react-beatiful-dnd에서 문제가 발생합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 기능상에 문제가 있는건 아니지만, 계속해서 아래의 에러가 발생합니다.사용하고 있는 버전의 문제일까요?{ "name": "react-todo-app", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", "@testing-library/react": "16.2.0", "@testing-library/user-event": "13.5.0", "react": "^19.0.0", "react-beautiful-dnd": "13.1.1", "react-dom": "^19.0.0", "react-scripts": "5.0.1", "web-vitals": "2.1.4" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "autoprefixer": "10.4.20", "postcss": "8.5.3", "tailwindcss": "3.4.17" } } Lists.jsimport React from 'react'; import List from './List.js' import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; const Lists = React.memo(({todoData, setTodoData}) => { // console.log('Lists Component') const handleEnd = (result) => { if(!result.destination) return; const newTodoData = Array.from(todoData); const [reorderedItem] = newTodoData.splice(result.source.index, 1); newTodoData.splice(result.destination.index, 0, reorderedItem); setTodoData(newTodoData); } return <div> <DragDropContext onDragEnd={handleEnd}> <Droppable droppableId='todo'> {(provided, snapshot) => ( <div ref={provided.innerRef} {...provided.droppableProps} > {(todoData ?? []).map((data, index) => ( <Draggable key={data.id} draggableId={data.id.toString()} index={index} > {(provided, snapshot) => ( <List key={data.id} id={data.id} title={data.title} completed={data.completed} provided={provided} snapshot={snapshot} todoData={todoData} setTodoData={setTodoData} /> )} </Draggable> ))} {provided.placeholder} </div> )} </Droppable> </DragDropContext> </div>; }) export default Lists; App.jsimport React, {useState} from 'react' import "./App.css" import Lists from './components/Lists' import Form from './components/Form' export default function App() { // console.log('App Component') const [todoData, setTodoData] = useState([ { id: 1, title: '운동하기', completed: false, }, { id: 2, title: '공부하기', completed: false, } ]) const [value, setValue] = useState("") return ( <div className="flex items-center justify-center w-screen h-screen bg-blue-100" > <div className='full p-6 m-4 bg-white rounded shadow md:w-3/4 md:max-w-lg lg:w-3/4 lg:max-w-lg'> <div className="flex justify-between mb-3"> <h1>할 일 목록</h1> </div> <Lists todoData={todoData} setTodoData={setTodoData} /> <Form value={value} setValue={setValue} setTodoData={setTodoData}/> </div> </div> ) }
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍
cmd 글꼴변경
안녕하세요?자바를 입문하게된 컴공 학부생입니다.다름이 아니라 cmd 글꼴 변경을 consolas로 하고 싶어 기본값을 consolas로 변경하였으나 변경이 되지 않습니다.강사님 콘솔에서는 consolas로 출력되는 것 같아 질문드립니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
redis-cli 데이터 적재 확인
HBase에 적재까지는 확인했는데 redis에는 아무것도 안뜹니다...
-
미해결실무 중심! FE 입문자를 위한 React
useEffect 관련 질문드립니다.
useEffect의 dependency array에 배열을 넣는 경우 "Maximum update depth exceeded." error가 발생하게 되는데, 이 경우는 어떻게 해야하나요? 예를 들어 아래와 같은 상황이라고 가정하겠습니다.화면에는 테이블 1개만 존재한다.데이터는 unknown[] 형태이다.다른 조건에 의해 데이터의 갯수가 달라지는 경우에만 다시 렌더링한다.코드로 예시를 들면 아래와 같습니다.const [items, setItems] = useState<unknown[]>([]);useEffect(() => void, [items]) 답변주시면 감사합니다.
-
해결됨Word 2013에서 스타일과 다단계번호 매기기를 사용해 문서 자동화하기
교재가 강의 내용과 다릅니다.
강의내용과 실습할 수 있는 수업교재가 다릅니다. 강의 내용을 실습할 수 있는 교재를 얻고 싶은데 어떻게 하면 되는지요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 아래처럼 Stack 대신 Queue 를 사용해 BFS 로 변경해도 문제가 없을까요? private void openSurroundedCellsBFS(CellPosition cellPosition) { Queue<CellPosition> queue = new LinkedList<>(); queue.add(cellPosition); while (!queue.isEmpty()) { openAndEnqueueCell(queue); } } private void openAndEnqueueCell(Queue<CellPosition> queue) { CellPosition currentCellPosition = queue.poll(); // 큐에서 꺼냄 if (isOpenedCell(currentCellPosition)) { return; } if (isLandMineCellAt(currentCellPosition)) { return; } openOneCellAt(currentCellPosition); if (doesCellHaveLandMineCount(currentCellPosition)) { return; } List<CellPosition> surroundedPositions = calculateSurroundedPositions(currentCellPosition, getRowSize(), getColSize()); for (CellPosition surroundedPosition : surroundedPositions) { queue.add(surroundedPosition); } }
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
Error: Route "/search" used `searchParams.q`. `searchParams` should be awaited before using its properties.
안녕하세요 강사님해당 오류는 최신버전에서 발생하는건가요?! Error: Route "/search" used searchParams.q. searchParams should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at Page (src/app/(with-searchbar)/search/page.tsx:12:32) 10 | return ( 11 | <div>> 12 | Search 페이지 : {searchParams.q} | ^ 13 | <ClientComponent> 14 | <></> 15 | </ClientComponent>import ClientComponent from "@/components/client-component"; export default function Page({ searchParams, }: { searchParams: { q?: string; } }) { return ( <div> Search 페이지 : {searchParams.q} <ClientComponent> <></> </ClientComponent> </div> ) }
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
#1090번 문제 반례가 궁금합니다.
from copy import deepcopy def init_sort_checker(checkers): tmp_list = [] sorted_sum_list = [] for idx, chk in enumerate(checkers): for i, tgt in enumerate(checkers): if idx == i: #본인으로 가는 값은 제외 continue x_val = abs(chk[0] - tgt[0]) y_val = abs(chk[1] - tgt[1]) # price, [src, tgt] 순 정렬 tmp_list.append([x_val + y_val, [idx, i]]) tmp_list.sort(key=lambda x: x[0]) # price 값 적은 순서대로 정렬 sorted_sum_list.append(deepcopy(tmp_list)) tmp_list = [] return sorted_sum_list def sort_sum_target(sorted_sum_list, k): lowest_price = 1000000*k target_idx = -1 for idx, line in enumerate(sorted_sum_list): cnt = 0 line_price = 0 for price in line: if cnt >= k-1: break line_price = line_price + price[0] cnt += 1 if line_price < lowest_price: lowest_price = line_price target_idx = idx return target_idx def k_tgt_process(k, sorted_tgt, sorted_sum_list): tgt_line = sorted_sum_list[sorted_tgt] tgt_loc = [] for i in range(k-1): tgt_loc.append(tgt_line[i][1]) return tgt_loc def k_sorting_process(tgt_loc, checkers): tgt_list = [] for tgt in tgt_loc: tgt_list.append(tgt[0]) tgt_list.append(tgt[1]) tgt_list = list(set(tgt_list)) x_list = [] y_list = [] tgt_checkers = [] for tgt in tgt_list: x_list.append(checkers[tgt][0]) y_list.append(checkers[tgt][1]) tgt_checkers.append(checkers[tgt]) x_list.sort() y_list.sort() if len(x_list)%2 == 0: #짝수 x_chk_point = [int(len(x_list)/2-1),int(len(x_list)/2)] else: # 홀수 x_chk_point = [int(len(x_list)/2)] if len(y_list)%2 == 0: #짝수 y_chk_point = [int(len(y_list)/2-1),int(len(y_list)/2)] else: # 홀수 y_chk_point = [int(len(y_list)/2)] #모아볼 위치의 case 집합 chk_point_list = [] for x_chk in x_chk_point: for y_chk in y_chk_point: chk_point_list.append([x_chk,y_chk]) # 각 checker 위치에서 좌표로 이동하는데 드는 값 계산 ttl_price_list = [] for chk in chk_point_list: x_tgt = chk[0] y_tgt = chk[1] price_list = [] for checker in tgt_checkers: x = checker[0] y = checker[1] if x_list[x_tgt] > x: x_price = x_list[x_tgt] - x else: x_price = x - x_list[x_tgt] if y_list[y_tgt] > y: y_price = y_list[y_tgt] - y else: y_price = y - y_list[y_tgt] price = x_price + y_price price_list.append(price) price_list.sort() ttl_price_list.append(price_list) return ttl_price_list def TestCases(N): checkers = [list(map(int,input().split())) for _ in range(N)] sorted_sum_list = init_sort_checker(checkers) output_str = '0' for k in range(2, N+1): min_price = 2000000 sorted_tgt = sort_sum_target(sorted_sum_list, k) tgt_loc = k_tgt_process(k, sorted_tgt, sorted_sum_list) ttl_price_list = k_sorting_process(tgt_loc, checkers) for n_list in ttl_price_list: tmp = 0 for idx in range(k): tmp = tmp + n_list[idx] if tmp < min_price: min_price = tmp output_str = output_str + ' ' + str(min_price) tmp_str = list(map(int,output_str.split())) # print(output_str) print(*tmp_str) N = int(input()) TestCases(N) 다음과 같이 코드 작성해봤는데, sample input에 대한 답은 다 도출되지만문제 제출하면 답이 틀리다 나오네요..반례나 코드상의 오류를 도와주실 수 있을까요? [사용해본 input/output]4 1 1 2 1 4 1 13 1 0 1 3 14 4 13 13 16 14 15 18 15 30 0 4 8 24 5 3 2 6 9 3 16 14 6 17 14 0 10 17 31 47 5 3 2 6 9 6 13 13 6 17 14 0 4 14 24 40 4 15 14 15 16 14 15 16 15 0 2 3 4 2 4 7 4 7 0 0 4 1 101 2 101 200 101 201 101 0 1 199 398
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC 실용적인 방식 강의듣고 질문 있습니다~
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위와같이 강의 따라서 @getMapping("/new-form") 이렇게만 해줘도 HTTP GET 메서드만 받을 수 있도록 제약할 수 있고, URL 매핑까지 된다는 걸 배웠는데요,@GetMapping("/new-form")이렇게 @GetMapping 다음에 괄호를 열고 매핑할 url을 넣어주고 괄호를 닫으면 된다는 걸 저는 @GetMapping 소스코드에서 방법을 알려주는지 궁금했습니다./* * Copyright 2002-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.web.bind.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.core.annotation.AliasFor; /** * Annotation for mapping HTTP {@code GET} requests onto specific handler * methods. * * <p>Specifically, {@code @GetMapping} is a <em>composed annotation</em> that * acts as a shortcut for {@code @RequestMapping(method = RequestMethod.GET)}. * * <p><strong>NOTE:</strong> This annotation cannot be used in conjunction with * other {@code @RequestMapping} annotations that are declared on the same method. * If multiple {@code @RequestMapping} annotations are detected on the same method, * a warning will be logged, and only the first mapping will be used. This applies * to {@code @RequestMapping} as well as composed {@code @RequestMapping} annotations * such as {@code @PutMapping}, {@code @PostMapping}, etc. * * @author Sam Brannen * @since 4.3 * @see PostMapping * @see PutMapping * @see DeleteMapping * @see PatchMapping * @see RequestMapping */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented @RequestMapping(method = RequestMethod.GET) public @interface GetMapping { /** * Alias for {@link RequestMapping#name}. */ @AliasFor(annotation = RequestMapping.class) String name() default ""; /** * Alias for {@link RequestMapping#value}. */ @AliasFor(annotation = RequestMapping.class) String[] value() default {}; /** * Alias for {@link RequestMapping#path}. */ @AliasFor(annotation = RequestMapping.class) String[] path() default {}; /** * Alias for {@link RequestMapping#params}. */ @AliasFor(annotation = RequestMapping.class) String[] params() default {}; /** * Alias for {@link RequestMapping#headers}. */ @AliasFor(annotation = RequestMapping.class) String[] headers() default {}; /** * Alias for {@link RequestMapping#consumes}. * @since 4.3.5 */ @AliasFor(annotation = RequestMapping.class) String[] consumes() default {}; /** * Alias for {@link RequestMapping#produces}. */ @AliasFor(annotation = RequestMapping.class) String[] produces() default {}; }그래서 위와같이 @GetMapping 소스코드를 확인했는데, 뚜렸하게 방법을 알려준다는 건 제가 찾지 못했는데 혹시 제가 못찾는 것일까요? 아니면 제일 첫 줄에 있는 "Annotation for mapping HTTP GET requests onto specific handler methods." 이 문장으로 @GetMapping에 값을 그대로 적어주면 된다(괄호를 열고 url쓰고 닫으면 된다)고 알아들어야 하려나요?
-
해결됨350개의 개인 앱을 만들어 월급의 7배 수익을 달성한 방법
앱개발 시작 추천
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!마크다운, 단축키를 이용해서 편리하게 글을 작성할 수 있어요.먼저 유사한 질문이 있었는지 검색해보세요.서로 예의를 지키며 존중하는 문화를 만들어가요.잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요, 프로그래밍 좀비님본 강의를 전부 수강해보고 문의를 드립니다.우선, 저는 현재 6년차 웹 개발자로 일을 하고 있습니다. 일을 하며 java, js 로 개발을 주로 해오고 있는데요, 최근에 머니업 챌린지 사전 영상을 보고 신청을 하고, 해당 강의를 수강하게 되었습니다. 사실 어떠한 개발이든 비슷할 것이라는 생각과, 수정 전 해당 영상 대시보드에 Kotlink, spring이 적힌걸 보고 수강 신청을 해보는 것을 용기내게 되었는데요, 영상 전반적인 내용으로는 운영과 마인드셋에 중심이 되어 있는 것 같아, 앱 개발을 처음 시작하는 사람은 어떤 스텝을 밟아 나가며 프로그래밍 좀비님 강의를 적용시켜볼 수 있을지 궁금하여 문의 드립니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
DB 테스트 코드 작성에서 .containsExactly에 관한 질문
안녕하세요! 섹션 4 강의를 보다보니 의문점이 생겨서요 Repository를 테스트하는 과정에서 test() 메서드에 .containsExactly를 사용하고있습니다.강사님께서 내용과 순서가 모두 맞아야 한다고 설명하시더라고요. 메모리에서의 테스트나 DB를 조회할 때 순서를 보장할 수 없는 것으로 알고있는데 문제가 있을 수도 있지만 간단한 테스트를 위해서 사용한것인지 아니면 실제로도 이런식으로 테스트 하는지 궁금합니다.관련한 질문들을 확인했으나 만족할만한 답변이 없어서 질문드립니다.
-
미해결실전! 스프링 데이터 JPA
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]궁금한게 있어서 질문합니다.Projection관련인데요.제가 이해하기로는 new 오퍼레이션을 이용해서 dto에 생성자로 데이터를 담는 방식에서 진화한 방식이라고 생각되는데, 그렇게 이해는게 맞는지 궁금합니다. interface로 proejction을 사용하면 get()함수를 통해 데이터를 꺼내오는 방식이고class를 사용하면 new 오페레이션을 사용하는 방법과 똑같이 생성자를 이용하는거 같은데, 대신 필드의 이름과 엔터티의 이름이 같던가, 같지 않다면 @Query를 이용해 alias로 맞춰주던가 하면 되는걸까요?? 또한, 이렇게 Projection을 사용해서 데이터를 가져왔을대, interface던 class던 컨트롤러에서 데이터를 프론트로 넘길때 해당 객체를 사용해도 되는건가요? 아니면 따로 또 dto를 만들어서 담은 후에 내보내야 되는건가요??