묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
DTO를 Result<T> 클래스에 담아서 반환할 때의 예외처리
안녕하세요!영한님 강의를 들으면서 추가적으로 RestTemplate에 대해 알게되어 지금까지 배운 것을 복습할 겸 api와 DTO 통신에 대해 연습하고 있었습니다.DTO를 반환할 때, 그냥 주기보다는 Result<T>의 data같은 속성에 담아서 주는 것이 바람직하다고 하여 그 응용을 연습해 볼겸 Result<T>에 status 속성을 추가해보았습니다.status 속성은 외부 api에서 조건을 충족하는 api를 찾아 와서 반환할 DTO가 있을 경우 "success"를, 조건을 충족하는 api를 찾지 못하여 HttpClientErrorException 예외가 발생할 경우 "fail"을 담아서 반환하고자 하였습니다.아래의 코드를 통해 구현은 성공하였으나, Service 클래스에서 try-catch문을 사용하는게 좀 찜찜하여 혹시 try-catch문 없이 구현하는게 더 좋을지 아니면 그냥 사용해도 좋은지가 궁금하여 질문을 하게 되었습니다.(status가 "fail"이면 data는 null을 반환하게끔 설계해보았습니다) @RestController @RequiredArgsConstructor @RequestMapping("/summoners") public class SummonerController { private final SummonerService summonerService; @GetMapping public ResponseEntity<Result<SummonerDTO>> findSummonerApi(@RequestParam String name) { SummonerDTO summonerDTO = summonerService.findSummonerApi(name); if (summonerDTO == null) { return ResponseEntity.ok().body(new Result<>("fail", null)); } return ResponseEntity.ok().body(new Result<>("success", summonerDTO)); } }@Slf4j @Service @RequiredArgsConstructor public class SummonerService { @Value("${apiKey}") private String apiKey; private final SummonerRepository summonerRepository; private final RestTemplate restTemplate; // riot에서 소환사 정보 api를 받아오는 메서드 public SummonerDTO findSummonerApi(String name) { String url = "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/{summonerName}"; HttpHeaders headers = new HttpHeaders(); headers.set("X-Riot-Token", apiKey); try { return restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(headers), SummonerDTO.class, name).getBody(); } catch (HttpClientErrorException e) { return null; } } }Controller와 Service의 코드는 위와 같습니다. (restTemplate은 별도의 설정파일에 빈으로 구현하였습니다)
-
해결됨비전공자를 위한 진짜 입문 올인원 개발 부트캠프
git 수업 부분 오류 발생했습니다
git remote add origin https://github.com/JIWONKIMS/grab-market-client.git git branch -M main git push -u origin main터미널에 입력했을 때 마지막 git push -u origin main 부분을 실행하면 아래 에러가 뜹니다fatal: failed to load library 'libcurl-4.dll' 에러 해결법이 뭔가요?
-
미해결[입문자를 위한 UE5] Part2. 언리얼 엔진 2D 게임 개발 입문
페이퍼 캐릭터 빙의 관련 질문
1 섹션 수업을 따라가다가 막히는 부분이 있어 질문 드립니다.수업 내용대로 페이퍼 캐릭터를 상속받아 BP_Knight 클래스를 생성하고 스프라이트에 소스 플립북을 적용시켰습니다. 이후 스프링암과 카메라 컴포넌트를 추가 했습니다. 에디터에서는 이런 모습입니다.아직 빙의를 하지 않은 상태에서는 수업 내용대로 중력의 영향을 받아 낙하가 되었습니다. 그런데 BP_Knight 에 플레이어 자동 빙의를 Player 0 으로 설정하고 실행하면 수업 내용대로 라면 실행했을 때 카메라가 BP_Knight에 빙의되어 낙하되는 걸 따라가며 찍어야하는데 왜 인지 원래는 낙하가 되었던 BP_Knight 가 낙하도 되지 않고 카메라가 빙의도 되지 않는 것 같습니다.수업 내용을 그대로 따라하며 진행했는데 제가 실수한 부분이 어디 인지를 모르겠습니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트 실패 후 tryLock waitTime 설정 변경 뒤 테스트 성공에 대한 질문
waitTime을 10초로 설정했어도 leaseTime이 1이기 때문에 테스트는 성공했어야 할 것 같은데 왜 실패하나요?그리고 waitTime을 10초에서 15초로 변경하면 왜 성공하나요?
-
미해결Vue3 완벽 마스터: 기초부터 실전까지 - "실전편"
api 호출(mock서버에서) 한 데이터로 bar chart 데이터 전달 문의
vue 공부를 하기 위해 강사님 강의 잘 듣고 있습니다. 정성스러운 준비 알찬 내용에 너무 감사드립니다.코드 작성하다가 아직은 vue 문법이나 전체적인 개념이 잘 잡히지 않아서, 이렇게 저렇게 해보다가 잘 안되어서 강사님께 질문을 드립니다.차트 그리기 위해서 아래 코드를 작성했는데요.차트에 뿌려질 데이터가 js 파일에 명시적으로 있는 것은 props 로 전달하여 잘 뿌려지고 있습니다.BarChart.vue, ChartView.vue, bar.chart.config.js이 데이터를 api 호출하여(실제 데이터가 있는 서버. 지금은 postman. mock 서버) props 전달해서 하려고 합니다. async await 로 api 호출하여 원본자료 받는것 까지는 됐는데, 받아온 자료를 bar.chart.config.js 에 명시된 데이터 처럼 가공하여 BarChart.vue 에 전달하고 싶은데, 방법을 잘 모르겠습니다.아래 CallApiView.vue 에서 this.chartList 부분으로 시도하였는데, 방법이 틀린 것 같습니다.ㅠㅠ(아직 vue 초보이니 너른 마음으로 알려주시길 부탁드립니다) BarChart.vue<script setup> import { ref, watch, computed, onMounted } from "vue"; import Chart from "chart.js/auto"; const props = defineProps({ data: { type: Object, required: true, }, }); const root = ref(null); let chart; onMounted(() => { chart = new Chart(root.value, { type: "bar", data: props.data, options: { responsive: false, maintainAspectRatio: false, scales: { y: { display: true, }, x: { display: true, }, }, plugins: { legend: { display: false, }, }, }, }); }); const chartData = computed(() => props.data); watch(chartData, (data) => { if (chart) { chart.data = data; chart.update(); } }); </script> <template> <canvas ref="root" /> </template> ChartView.vue<script setup> import { computed, ref, onMounted } from "vue"; import BarChart from "@/components/Charts/BarChart.vue"; import * as chartConfig from "@/components/Charts/bar.chart.config.js"; const chartData = ref(null); const fillChartData = () => { chartData.value = chartConfig.sampleBarChartData(); }; onMounted(() => { fillChartData(); }); </script> <template> <div style="width: 800px"> 여기는 대시보드 bar chart <bar-chart :data="chartData" class="h-96" /> </div> <template> bar.chart.config.jsexport const sampleBarChartData = () => { const labels = ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"]; const datasets = [ { label: "# of Votes", data: [12, 19, 33, 5, 2, 3], backgroundColor: [ "rgba(255, 99, 132, 0.2)", "rgba(54, 162, 235, 0.2)", "rgba(255, 206, 86, 0.2)", "rgba(75, 192, 192, 0.2)", "rgba(153, 102, 255, 0.2)", "rgba(255, 159, 64, 0.2)", ], borderColor: [ "rgba(255, 99, 132, 1)", "rgba(54, 162, 235, 1)", "rgba(255, 206, 86, 1)", "rgba(75, 192, 192, 1)", "rgba(153, 102, 255, 1)", "rgba(255, 159, 64, 1)", ], borderWidth: 1, }, ]; const options = { scales: { y: { beginAtZero: true, }, }, }; return { labels, datasets, options, }; }; 보여지는 화면 api 호출(mock서버에서)데이터는 아래와 같이 등록되어 있습니다.https://0604916b-347f-4b44-bb75-60dd4b41d9cb.mock.pstmn.io/test/yeardata[ { "labels": "Red", "vote": 12 }, { "labels": "Blue", "vote": 19 }, { "labels": "Yellow", "vote": 33 }, { "labels": "Green", "vote": 5 }, { "labels": "Purple", "vote": 2 }, { "labels": "Orange", "vote": 3 } ] CallApiView.vue<script setup> import BarChart from "@/components/Charts/BarChart.vue"; </script> <script> import axios from "axios"; import { Chart, registerables } from "chart.js"; Chart.register(...registerables); export default { setup() {}, data() { return { chartList: {}, }; }, mounted() { this.getChartList(); }, methods: { async getChartList() { try { //mock서버에서 호출 const res = await axios.get( "https://0604916b-347f-4b44-bb75-60dd4b41d9cb.mock.pstmn.io/test/yeardata" ); console.log("res ===> ", res.data); const labels = res.data.map((row) => row.labels); const datas = res.data.map((row) => row.vote); console.log("new labels ===> ", labels); console.log("new datas ===> ", datas); //여기에서 자료가공을 하려고 했으나 안됨.. this.chartList = { data: { labels: this.labels, datasets: [ { label: "# of Votes test", data: this.datas, }, ], }, }; console.log("new chartList ===>", this.chartlist.data); } catch (e) { console.error("chart error===>", e); } }, }, }; </script> <template> <div style="width: 800px"> new 여기는 대시보드 bar chart <bar-chart :data="chartList" class="h-96" /> </div> </template>
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 백조 문제 메모리 초과 질문
http://boj.kr/54cbfbf55f6946edbeb3beb93d88f6bc안녕하세요 강사님! 여태 틀린 문제 다시 한번 풀어보고 있습니다. 백조 문제에서 메모리 초과가 나서 제가 생각하기에 의심되는 부분들 (queue에 중복 좌표를 여러번 푸시하는 경우)을 없애고도 메모리 초과가 나길래 어느 부분이 문제일지 한번 봐주시면 감사하겠습니다..로직 자체는 강사님 코드와 거의 비슷하게 떠올린 것 같은데 2차원 배열을 너무 많이 쓴 것이 문제인지.. 특정 케이스에서 queue가 너무 커지는 것이 문제일지 잘 감이 안 옵니다 ㅜ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
복합키에서 시퀀스 컬럼에 대한 질문 드립니다.
[질문 내용]안녕하세요.개인 토이 프로젝트를 JPA를 활용하여 개발하다가 복합키와 관련하여 질문 드립니다.현재 계좌라는 테이블에 1:N 매핑되어 거래 이력을 관리하는 이력 테이블을 설계했습니다. 해당 엔티티에 대한 기본키를 복합키로 설정했는데요. 식별관계 복합키로 계좌번호(FK)+거래날짜+시퀀스로 방향을 잡았습니다.복합키 설정 중, 더 객체지향적인 방식이라는 @EmbeddedId 방식을 채택해서 사용했는데요. 복합키를 정의한 클래스의 필드에 시퀀스 필드에@GeneratedValue를 붙여 db에 저장될 시에 시퀀셜하게 번호가 채번될 거라고 생각했는데 결과는 널값이 들어 가더군요. 구글링을 해보니, 마찬가지 경우를 겪은 분들의 글을 보았고, @EmbeddedId 방식에서는 해당 @GeneratedValue를 사용 못한다는 것을 알게 되었습니다. 이에 대한 대안으로 다른 분들은 아예 복합키를 사용하지 않고, @GeneratedValue를 적용한 ID필드로 하나의 기본키를 두거나, 복합키의 또 다른 방법 중 하나인 @IdClass를 활용하고, @SequenceGenerator를 적용하여 시퀀스를 따로 관리해주는 식으로 하여 제가 처음 원하던대로 복합키에서도 시퀀스를 사용하는 것을 보았습니다.질문은 실무에서는 이런 이력성 엔티티에 대해 어떤 방식은 사용하는지 궁금합니다. 사실 별도의 기본키 하나를 두고, 구현을 하자면.. 결과적으로 나중에 이력을 조회하고자 한다면 기본키가 아닌 값들로 조건을 줘서 쿼리가 나가게 될텐데.. DB 성능적인 부분에서 비효율적이지 않을까 싶고,,, @IdClass로 복합키를 설정하자니 이렇게 하는게 적절한 방법인가 싶습니다.긴 질문 읽어주셔서 감사합니다!! :)
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
confidence score의 정의에 대해
confidence score가 어떤 곳에서는 class score인지 object 인지 아닌지를 판단하는 object score인지 아니면 어떤 곳에서는 저 두개의 곱으로도 나타내더군요.혹시 정의에 대해서 확인해봐도 되겠습니까
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
output.worldPosition 질문드립니다
worldPosition을 따로 저장해야하는 이유는 버텍스 쉐이더로 넘어가게 되면 결국 스크린좌표계로 까지 변환이되어서 원하는 좌표로 남지 않아서 된다는 것은 이해했습니다.강의에서보면 output.worldPosition = input.position;로 저장하게 되는데 이렇게 저장하게되면 로컬 좌표계로 저장이되기 때문에output.position = mul(input.position, W);output.worldPosition = output.position;이렇게 저장해야 해당 모델의 월드좌표계가 저장되는 것이 맞는것 같은데 혹시 제가 잘못 이해한 부분이 있을까요?
-
미해결문과생도, 비전공자도, 누구나 배울 수 있는 파이썬(Python)!
jupyterlab가 화면에 열렸어요, 그러면 이 화면으로 앞으로 계속 공부하면 되나요?
아래 화면과 같이 문의드렸던 질문에 대하여답변을 주셔서 감사합니다설명해주신데로 아래의 화면과 같이 Anaconda Prompt 창의 맨 아래줄에 있는 웹 주소를아래 화면과 같이 브라우저 주소란에 복사 후 붙여넣고 엔터를 치니까jupyterlab 화면이 아래와 같이 열렸습니다이제 앞으로 jupyterlab 공부를 하려면, 매번 공부할때마다계속 http://localhost~~~ 주소를 브라우저의 주소란에 입력해서 jupyterlab화면을 열고 공부해야 하나요?
-
미해결실전! 스프링 데이터 JPA
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 성능 테스트를 해보고 QueryHint 를 적용할지 고민하라고 하셨는데 성능 테스트란 정확하게 어떤 걸 의미하나요? 부하 테스트 인지 맞다면 예시가 뭐인지 궁금합니다.그리고 성능 테스트를 하면 QueryHint 를 쓰는게 더 성능이 좋게 나올텐데 그럼 쓰는 게 낫지 않나 하는 궁금증이 듭니다.
-
미해결처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)
챕터별 퀴즈 자료 문의
강의 덕분에 빠르게 언어에 대하여 이해를 하는 중입니다. 감사합니다.혹시 퀴즈에 대한 공유 문서는 제공이 안되는 것인가요? 문제를 한번에 풀고 영상을 보고 싶은데 퀴즈 파일은 따로 공유받은것이 없습니다..!
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
Entity, Dto 관련해서 궁금증이 있습니다! (오류 사항은 아니지만.. 갑자기 궁금해져서 글을 남기게 되었습니다.)
안녕하세요. 해당 강의를 보다가 궁금증이 생겨서 글을 남기게 되었습니다.Entity는 디비 테이블의 컬럼들을 작성(실제 컬럼 및 디비에 없는 컬럼들까지)하고 Dto는 요청에서 받는 타입들을 작성하고 해당 타입들을 Controller 전에 검증해주는 클래스라고 알고 있었습니다. 궁금한건 아래 2가지 인 것 같습니다.Entity는 디비 테이블의 컬럼을 / Dto는 타입 검증을 위한 데코레이터들을 작성하는 클래스로 분리되는 개념으로 생각해왔었는데 잘 못 생각하고 있었던건가요??만약, Dto 클래스에 있는 컬럼들을 생략하면 nickName?: string; 처럼 선택적 옵션들과 @IsString()등 타입 검증을 해주는 데코레이터들을 전부 Entity에 작성해주는 건가요?? 저는 Entity는 건들이지 않고 Dto에서 선택적 옵션과 타입 검증들의 데코레이터를 사용하고 있었어서 궁금해졌습니다..!
-
미해결[실전]텍스톰 TEXTOM 실전 강의: 빅데이터 논문 작성을 위한 텍스트 분석/텍스트마이닝
기 정제한 데이터의 영문 수정 가능 여부
강의 잘 들었습니다.그림, 표 영문 작성 논문의 경우 워드클라우드의 한글 텍스트를 영문으로 변경하고 싶은데 프로그램 내에서 변경 가능할까요?
-
미해결스프링 핵심 원리 - 기본편
인텔리제이 깃 다운시 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의 내용을 git으로 private로 커밋하여 다른 강의를 옮겨듣던 기존의 노트북에 내려받았습니다.내려받은 경우 화면과 같이 애너테이션이 작동하는건지 안하는건지.. 그냥 디스플레이 설정이 다른건지는 잘 모르겠는데 좌측에 .bean 초록색이나 실행버튼이 노출되지 않는 현상은 어떠한 현상일까요..?
-
미해결
수강중 시간이 지난후 들을려고하니 기록이 없음ㅡ무제한 수강가능과목 ㅡAWS CI CD 등
수강중 시간이 지난후 들을려고하니 기록이 없음ㅡ무제한 수강가능과목 ㅡAWS CI CD 등 해결요망
-
미해결
수강중 시간이 지난후 들을려고하니 기록이 없음ㅡ무제한 수강가능과목 ㅡAWS CI CD 등
수강중 시간이 지난후 들을려고하니 기록이 없음ㅡ무제한 수강가능과목 ㅡAWS CI CD 등
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-X 시간초과 질문입니다!
안녕하세요!extendCCTV함수 부분에서 강의 코드와 살짝 다르게 모든 while문을 다음과 같이 작성했더니 시간 초과가 발생합니다! 내부의 조건문을 이렇게 작성했을 때 시간초과가 발생하는 이유가 궁금합니다..!while(true) { int ny = y + dy[dir]; int nx = x + dx[dir]; if(ny<0 || ny>=n || nx<0 || nx>=m || a[ny][nx]==6) break; if(a[ny][nx] == 0) { a[ny][nx] = 8; _change.push_back({ny, nx}); } y = ny; x = nx; }
-
미해결Slack 클론 코딩[실시간 채팅 with React]
프로젝트에 사용할 상태와 로직 관리 라이브러리 훅 사용 질문입니다.
로그인 및 인증,인가(세션,jwt둘다 사용), 게시판(이미지포함), 댓글, 소켓채팅 정도의 기능을 구현하여 테스트 코드와 docker로 띄워서 CI/CD까지 구현하려고 합니다. 상태랑 로직 관리를 useReducer, React Context API, React Query, redux, graphql 정도로 생각하고 있는데 어떤걸로 하는게 좋을까요?!
-
미해결[React 1부] 만들고 비교하며 학습하는 React
프로젝트에 사용할 상태와 로직 관리 라이브러리 훅 사용 질문입니다.
로그인 및 인증,인가(세션,jwt둘다 사용), 게시판(이미지포함), 댓글, 소켓채팅 정도의 기능을 구현하여 테스트 코드와 docker로 띄워서 CI/CD까지 구현하려고 합니다. 상태랑 로직 관리를 useReducer, React Context API, React Query, redux, graphql 정도로 생각하고 있는데 어떤걸로 하는게 좋을까요?!