묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
toHaveClass 테스트코드 관련하여 질문 남깁니다!
안녕하세요 현재 섹션2 관련하여 강의 듣고 있는 수강생입니다. 다름이 아니오라, 현재 강의에선 순수 css를 통해 클래스명 테스트 코드를 작성해주셨는데요..! 만약에 css 모듈이나, vanilla-extract 같이 클래스명이 동적으로 생성되는 경우에는 어떤식으로 테스트 코드를 작성해야할까요 ? 예전에 혼자서 vanilla-extract 관련해서 테스트 코드를 작성해보려고 했던적이 있는데, 단순히 toHaveClass로만 하려고하니까, 클래스명이 동적으로 결정이 되어서 에러가 계속 발생하더라구요..! (예를 들어서 클래스명이 header라면, headerhnfgbvds341 이런식) 강의 너무 잘 듣고 있습니다! 읽어주셔서 감사합니다. import React from "react"; import { render, screen } from "@testing-library/react"; import TestComponent from "@/components/TestComponent"; import { testContainer } from "@/components/testComponent.css"; describe("Example Component Test", () => { test("클래스명에 대한 테스트", () => { render(<TestComponent />); const exampleElement = screen.getByText("TestComponent"); expect(exampleElement).toHaveClass(testContainer); }); }); ```
-
미해결버그헌팅과 시나리오 모의해킹 전문가 되기
45010.c 파일 문의
권한 상승 단계 - 시스템 커널 취약점을 이용한 상위 권한 획득강의에서 45010.c 파일을 45010으로 만들고./45010으로 실행했는데 [!] failed to load prog 'Permission denied'이렇게 권한 문제가 나옵니다. 어떻게 해야 위 오류가 풀릴까요?
-
미해결코틀린 문법부터 실무까지 (실전 자바->코틀린 변환)
build.gradle.kts 변경시 오류가 발생합니다.
안녕하세요. build.gradle.kts 로 변경하고 내용을 입력했는대 오류가 발생해서 질문드립니다.해당 파일에 전체 빨간줄이 그어지며 there are no configurations available kotlin 라는 메시지가 뜨는대요 실행자체는 되는대 문제는 util 파일 변경 강의를 수강하려고 convert to kotlin 을 누르니까 kotlin 설정이 안되어 있다고 나오면서 변환이 되지 않습니다. 제가 인텔리제이 2020년 버전을 사용중인대 kotlin버전이 최대 1.6까지 설치가 되더라고요 kts 파일안에는 1.9.20버전이던대 이것때문에 인식을 못하는걸까요? ㅠㅠ1.6으로 kotlin 버전값을 바까도 인식을 못하는대 도움이 필요합니다. 이렇게 뜨고요... 물론 cache clean restart랑... gradle 폴더 지우고 실행해도 마찬가지내요...회사 컴퓨터에 설치된 intellij 버전도 동일해서 해밨는대 증상은 동일하고요...
-
해결됨우아한 고성능 프로그래밍 언어 Rust 입문 및 활용
Lifecycle 강의에서 두 문자열 슬라이스를 비교해 긴 문자열 슬라이스를 리턴하는 것 관련 질문
강의 내용에서는 어떤 값이 길지 컴파일러가 예측하지 못하기 때문에 라이프사이클을 명시해야한다고 했는데 이 부분이 이해가 되지 않습니다로컬변수를 리턴하려고 하는 게 문제가 되는게 아닌가요?
-
해결됨제미니의 개발실무 - 지속 성장 가능한 소프트웨어를 만들어가는 방법
모듈에 대한 단방향 의존
안녕하세요. 제미니님 이번에도 좋은 강의를 제공해주셔서 감사합니다.모듈 분리에서 궁금한 내용이 있는데요. 제미니님이 제공해주신 PaymentAPI 와 DB 모듈을 별도로 했다고 했을 때 API 규격에 맞게 DB 모듈이 구현이 되어야 한다고 생각하고 있습니다. 즉, 해당 PaymentAPI 에서 제공하는 DB 접근에 대한 인터페이스를 DB 모듈이 구현하는 의존성 역전 원칙을 적용한 상황입니다.하지만, 이 상황에서 단방향 모듈 참조를 하게 된다면 DB 모듈은 PaymentAPI 가 제공하는 인터페이스의 유무를 알 수가 없게 되는데요. 저는 위 문제에 대한 해결방법으로 두 가지가 떠오릅니다.모듈 분리 시 API 모듈에 인터페이스를 만들고 DB 모듈 교체에 따른 새로운 구현체를 구현한다.(모듈 교체에 따라 이전 모듈에 대한 클래스 참조가 사라져 컴파일에러가 발생하게 되고 주석처리가 필요하다) 모듈 교체 시 이전 모듈에서 사용했던 인터페이스를 하위 모듈에서 똑같이 생성해주고 동일한 인터페이스를 참조하도록 하여 상위 모듈에는 변화를 주지 않는다. (변화가 최소화되지만 인터페이스가 많을 수록 구현도가 올라간다. 인터페이스를 동일하게 만들거라는 보장이 되어야 한다.)1번 코드paymentAPI { // implementation 'project:paymentDB' // implementation 'project:paymentDB2' interface CommandPort { fun save(command: PaymentCommand) } class PaymentDBImplV1 : CommandPort { override fun save(command: PaymentCommand) { paymentDB.saveV1(command); // paymentDB2 모듈 사용 시 주석 처리 } } class PaymentDBImplV2 : CommandPort { override fun save(command: PaymentCommand) { paymentDB2.saveV2(command); // paymentDB1 모듈 사용 시 주석 처리 } } } paymentDB { implementation 'A.DB' } paymentDB2 { implementation 'B.DB' }2번 코드paymentAPI { // implementation 'project:paymentDB' // implementation 'project:paymentDB2' class PaymentAPILogic(val paymentDB: CommandPort){ fun save(command: PaymentCommand) { paymentDB.save(command); // paymentDB2 모듈 사용 시 주석 처리 } } } paymentDB { implementation 'A.DB' interface CommandPort { fun save(command: PaymentCommand) } class PaymentCommandImpl : CommandPort { override fun save(command: PaymentCommand) { DB.save(command); } } } paymentDB2 { implementation 'B.DB' interface CommandPort { fun save(command: PaymentCommand) } class PaymentCommandImpl : CommandPort { override fun save(command: PaymentCommand) { DB.save(command); } } }간단하게 코드를 작성하면 위와 같은 형태가 될 것 같습니다.제미니님은 어떠한 방향으로 설계를 하시는지 혹은 제 질문에서 제가 잘 못 이해한 부분이 있어 이러한 방법으로 사고가 흘러가는지 말씀을 들어보고 싶습니다.마지막으로 유튜브 및 인프런에서 귀한 지식과 귀한 시간을 제공해주셔서 항상 감사합니다!
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
영구적/일시적 리다이렉션은 논리적인 의미 구분인가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]영구적 리다이렉션과 일시적 리다이렉션이 의미에 따라 나눠지는것 말고 따로 기술적인 차이가 있는 지 궁금합니다. 관련하여 구체적인 질문 2개가 있습니다. 두 리다이렉션 모두 요청을 보낸 후 응답의 Location 헤더를 참고하여 URI 를 이동하게 되는데 그럼 두 리다이렉션의 기능은 동일하지만, 단순히 내가 처음에 보냈던 URI 가 유효한 주소인지, 그렇지 않은지에 따라, 즉 의미에 따라 나눠진건가요?일시적인 리다이렉션 설명에서 리소스의 URI가 일시적으로 변경된 것이기 때문에 검색 엔진 등에서 URL 을 변경하면 안된다고 하셨는데, 응답의 location 을 참고해 다른 URL 로 요청을 보내는것은 이와 다른 의미인가요?(예시의 /order -> /order-result/19 와 같은) 그렇다면 검색 엔진에서 URI을 변경하면 안된다는게 무슨 뜻인지 궁금합니다.
-
해결됨스프링 핵심 원리 - 기본편
Bean Configuration / Dependency Injection 에 관해 질문드립니다 :)
안녕하세요 영한님,Dependency Injection에 관해서 궁금한점이 있어 질문드립니다. 제가 실무중이나 code review중에 아래같은 코드를 자주봤는데 지금까지는 그냥 그런가보다 하고 넘어갔지만, 그래도 강사님께 좀 자세한 mechanism을 들으면 좀더 개념확립에 도움이 될것같아서 질문드립니다.//SecretVault.java @Component public class SecretVault { private final String secret = "Secret123"; public SecretVault() { } public String getSecret() { return this.secret; } } //SecretService.java public class SecretService { private SecretVault vault; public SecretService() { } public SecretService(SecretVault vault) { super(); this.vault = vault; } public String revealSecret() { return vault.getSecret(); } } //CoreApplication.java @SpringBootApplication public class CoreApplication { public static void main(String[] args) { SpringApplication.run(CoreApplication.class, args); } @Bean SecretService secretService(SecretVault vault) { return new SecretService(vault); } } //테스트 클래스 //JUnit Test Pass //MiscTest.java @SpringBootTest public class MiscTest { @Autowired ApplicationContext ac; @Test void testSecret() { SecretService service = (SecretService) ac.getBean("secretService"); Assertions.assertEquals(service.revealSecret(), "Secret123"); } }테스트 결과, secretService bean안에 vault 필드가 제대로 주입되어있습니다. 빈 생성하는 method parameter가 spring이 관리하는 bean이면 저절로 찾아서 넣어주나요? 저는 method parameter bean이 같은 configuration 클래스 안에서 생성되었을 경우에만 가능한걸로 알았는데, 위 예제의 dependency injection이 어떻게 일어나는지 궁금합니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
스마트포인터에 대해질문있습니다
안녕하세요 gamobject 객체에서 addcomponet 를 호출 하여 weak_ptr 로 gameject 를 componet 클래스에서 참조하고있다고 할때 gameobject 가 소멸하면 component 도 소멸하는건가요?
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
lightsail instance를 종료해도 서버를 연결된 상태로 유지하려면 어떻게 해야 할까요?
안녕하세요. 강의 잘 보고 있습니다. lightsail instance 터미널에 연결후에 서버를 실행해 주고 난 뒤 터미널을 종료하면 어느정도 시간이 지나면 서버가 연결이 끊기네요. 계속 연결을 지속시키려면 어떻게 할 수 있을까요?
-
미해결
nextjs react-quill 이미지 저장 질문이용
nextjs에서 react-quill에서 이미지 업로드 시 nestjs에서 multer로 이미지 받아서 저장하려고 하는데 개발 초보라 아무리 구글링해도 왜 안되는지 모르겠네요 ㅜㅜ 포스트맨에서 nest.js upload api 보내면 정상적으로 파일 저장 되는데 next.js에서 upload 요청 보내면 nest.js에서 file이 undefined 출력됩니다. QuillEditor.tsx에서 const file = input.files[0] 콘솔로 찍어보면 아래 이미지처럼 표시되는데 이거 formdata 제대로 생성된게 맞나요? 구글링하면서 몇시간 테스트해도 안되네요. 포스트맨에서 요청하면 정상적으로 되는거 보면 next.js 쪽 문제 맞는거 같은데 아무리 구글링해봐도 이유를 모르겠네요.. QuillEditor.tsx"use client"; import ReactQuill from "react-quill"; import { useMemo, useRef, useState } from "react"; import "react-quill/dist/quill.snow.css"; import imgUpload from "./imgUpload"; export default function QuillEditor() { const [content, setContent] = useState(""); const quillRef = useRef(null); const imageHandler = () => { const input = document.createElement("input"); input.setAttribute("type", "file"); input.setAttribute("accept", "image/*"); input.click(); input.onchange = async () => { const file = input.files[0]; // 현재 커서 위치 저장 // const range = getEditor().getSelection(true); // const range = quillRef.selection; // 서버에 올려질때까지 표시할 로딩 placeholder 삽입 // quillRef.getEditor().insertEmbed(range.index, "image", `'로딩중'`); const formData = new FormData(); formData.append("file", file); try { // console.log(formData.get("file")); // console.log(url); // quillRef.getEditor().deleteText(range.index, 1); // quillRef.getEditor().insertEmbed(range.index, "image", url); // quillRef.getEditor().setSelection(range.index + 1); const result = await imgUpload(formData); // console.log(result); } catch (error) { console.log(error); } }; }; const modules = useMemo(() => { return { toolbar: { container: [ [{ size: ["small", false, "large", "huge"] }], [{ header: "1" }, { header: "2" }, { font: [] }], [{ align: [] }], ["bold", "italic", "underline", "strike"], [ { list: "ordered" }, { list: "bullet" }, { indent: "-1" }, { indent: "+1" }, ], [ { color: [], }, { background: [] }, ], ["link", "image", "video"], ], handlers: { image: imageHandler }, clipboard: { matchVisual: false, }, }, }; }, []); const formats = [ "font", "header", "bold", "italic", "underline", "strike", "blockquote", "list", "bullet", "indent", "link", "align", "color", "background", "size", "h1", "image", "video", ]; return ( <> <div> <ReactQuill ref={quillRef} style={{ width: "800px", height: "600px" }} modules={modules} formats={formats} onChange={(e) => { setContent(e); console.log(e); }} // onChange={setContent} theme="snow" /> </div> </> ); } imgUpload.tsimport axios from "axios"; export default async function imgUpload(file: any) { console.log(file.get("file")); const result = await axios .post( `${process.env.NEXT_PUBLIC_API_SERVER}/files/upload`, { file, }, { headers: { // Accept: "image/*", "Content-Type": "multipart/form-data", }, } ) .then((res) => { return res.data; }); console.log(result.data); return result; } nest.js @Post('upload') @UseInterceptors(FileInterceptor('file')) async uploadFile( @UploadedFile() file: Express.Multer.File, ) { console.log(file); // return await this.filesService.fileUpload(files); }
-
해결됨개발자를 위한 쉬운 도커
sudo docker-compose up -d
안녕하세요! 먼저 정말 유익한 강의 감사합니다. 깃허브 오픈소스의 리드미 파일이나블로그에서는 주로 아래와 같은 명령어가 보였습니다.sudo docker-compose up -d그런데 강의에서 보이는 명령어는 docker와 compose 사이에 대쉬('-')가 보이지 않는데요.Docker의 버전이 올라가면서 명령어도 바뀐건가요?
-
미해결Next + React Query로 SNS 서비스 만들기
리액트 v5 useQuery onSuccess 관련 질문드립니다!
리액트 쿼리v5 부터 useQuery onSuccess 가 사라진걸로 알고있는데요! useQuery로 데이터패칭이 끝나면 zustand나 전역상태관리에 받아온 데이터를 저장하고싶은데 어떤식으로 하면될까요??
-
해결됨Flutter로 SNS 앱 만들기
검색하는거는 어떻게 하는겁니까
저는 안보이네요..
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
<WHERE>태그 대신
<WHERE>태그 대신 WHERE 1=1 주고 강제적으로 true 준 이후에 and조건을 <if>안에 사용하는데 그게 더 안좋은 방법일까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
자바 17버전으로 업데이트했는데도 윈도우에서 빌드가 안 됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 빌드가 잘 되지않아 여러 질문글을 읽고hello-spring 폴더를 복사하여 C폴더 아래 dev 폴더를 넣어 빌드를 진행했습니다.이런 오류 내용이 뜨는데 뭐가 문제일까요? gradle 파일에서 자바 17버전을 요구하는 것을 확인헀고, 자바 17을 설치하고 환경변수 JAVA_HOME에 경로 넣기, path에서 \bin 변수 넣어 최상단으로 올리기까지 설정했습니다. cmd에서 버전확인하면 17로 나옵니다. 계속 빌드가 안 되는데 원인을 모르겠습니다 뭐가 문제일까요..?
-
해결됨AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
강의 소스코드 제공 요청드립니다.
강의 타이핑 그대로 따라했는데도, npm run build, npm run test에서 redis time out error가 발생하네요. 버전이 안맞는건지.. 강사님과 동일하게 버전 맞추고 진행하고 싶은데 package.json이라도 제공해주시면 감사드리겠습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
answer 변수 없이 풀기
function solution(n) { if (n == 0) return ""; return solution(Math.floor(n / 2)) + String(n % 2); }
-
미해결[리뉴얼] 처음하는 파이썬 데이터 분석 (쉽게! 전처리, pandas, 시각화 전과정 익히기) [데이터분석/과학 Part1]
XML 파일 파싱 시 read_xml()함수 사용
강의 중 xml파일을 파싱하는 내용이 두 강의에 걸쳐서 길게 있는데 판다스 라이브러리 1.30 이상부터 쓸 수 있다는 pandas.read_xml 함수를 이용하면 안될까요? csv는 read_csv()를 자주 사용하는 것 같은데 xml 파일은 매번 복잡하게 데이터 프레임으로 바꿔야 하는건지 두렵네요..ㅎ 혹시 read_xml 함수를 일부로 사용하지 않으시는 거라면 그 이유도 궁금합니다!
-
미해결김영한의 실전 자바 - 중급 1편
ChronoUnit, ChronoField 주입 에러
현재 java 21버전으로 강의를 따라가고 있었고 ChronoUnit, ChronoField 부분을 찾지 못하는 것 같습니다. import java.time.temporal.ChronoUnit 으로 import 해도 intellij 가 찾지 못하고 있습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문있습니다
안녕하세요! 강의 내용 복기중에 몇가지 의문점이 생겨 질문드립니다! 서비스에서 MaxSessionCount, SessionCount의미 -> 제가 이해한거로는 클라가 한명 연동 될 때마다 SessionCount가 1씩 증가하고 MaxSessionCount는 최대 허용 접속 수라고 이해하고 있는데 맞는지 궁금합니다.-> 이게 맞다면 한계치는 어느정도로 정하고 기준은 무엇인지 궁합니다. 리스너에서 AcceptEvent N개 사용의 의미-> StartAccept 부분에서 5개 만들고서 그거를 각각 Register에 등록했다는 말은... 동접 5명을 받을 수 있다는 의미인가요? -> 만약 동접 의미로의 N개 사용이라면 포폴 수준에서는 1개만 사용해도 무방한가요? 테스트해보니까 패킷 전송 속도에는 별 차이가 없어보여서요! C++ 서버 & 유니티 클라 연동 ? -> 패킷 정보가 Proto가 중간 역할 해주고 있고 직렬화 하면서 결국 정수로 데이터 핑퐁이라고 이해되고있는데 이게 맞다면 저런 관계의 연동에도 문제가 없나요? 이제 강의 막바지가 되어가고 복기를 쭉 해나가면서 질문들이 계속 나올것 같은데 지금처럼 커뮤니티 게시판에 질문드리면 될까요? 아니면 따로 질문 올리는 곳이 있을까요??