묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
act 함수와 renderHook 함수 내 rerender 차
안녕하세요 궁금한게 있습니다. act 함수에 대해 이해했는데 act 함수없이 아래와 같이 해도 테스트가 통과되더라구요. 혹시 차이가 있을까요?it('훅의 toggleIsModalOpened()를 호출하면 isModalOpened 상태가 toggle된다.', () => { const { result, rerender } = renderHook(useConfirmModal); result.current.toggleIsModalOpened(); rerender(); expect(result.current.isModalOpened).toBe(true); });
-
해결됨실전! Querydsl
Q파일 생성 위치 질문
안녕하세요현재 프로젝트 세팅 및 테스트를 진행 중입니다. spring boot가 3이상으로 제한된 상황속에서 진행중이며, 강의 내용을 따라하고 있습니다! build.gradle은 https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit#heading=h.vfy9wirpglmx를 복/붙 하였습니다.plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') } 질문은 크게 3가지입니다. build/other/compileQuerydsl은 표기가 안되는데 다른 답변을 보니 springboot3으로 올라가며 compileQuerydsl은 표기가 안된다고 하신 것 같은데 맞을까요?정확한 Q파일의 생성 위치가 궁굼합니다.!강의상에서는 src/main에 둬도 괜찮지만, 버전관리 시스템(git)에는 추가 되지 않는게 좋다고 하셨던 것 같은데 맞나요?build에만 Q파일이 생성되는게 좋나요?올려주신 google doc의 build.gradle로 진행하면, Q파일이 build/annotationProcessor아래 생성됩다... 뭐가 문제일까요? docs에 올려주신 build.gradle에서 build clean을 진행할 때 'src/main/generated'의 폴더를 삭제하는 이유가 무엇일까요? (현재 저는 Q파일을 build/ 아래 관리하고있는데, src/main/generate 아래 Q파일을 생성하시는 분들에만 해당 되는 내용인가요?)답변해주시면 감사하겠습니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
엔티티 변경 후 일대다
@JoinColumn(name = "MEMBER_ID) List<AddressEntity> addressHistory = ..다대일이 아닌 일대다로 매핑한 이유가 있을까요?앞에서 다쪽에 @JoinColumn하는 것을 추천하셨는데 일쪽에 연관관계 주인을 잡은 이유가 궁금합니다.
-
해결됨스프링 핵심 원리 - 고급편
spring-boot-starter-jdbc dependency 추가 시 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]커리큘럼 완강 후 샘플 프로젝트 만들면서 공부 중에 질문이 생겼습니다. 빈 후처리기 적용하는 과정 중에 추가로 jdbc dependency를 넣었습니다. build.gradle 파일에implementation 'org.springframework.boot:spring-boot-starter-jdbc'위와 같이 추가하고 실행하면create proxy: target class=class hello.proxy.app.v3.OrderRepositoryV3$$SpringCGLIB$$0 proxy class=class jdk.proxy2.$Proxy63 The bean 'orderRepositoryV3' could not be injected because it is a JDK dynamic proxy OrderRepositoryV3의 target 클래스가 SpringCGLIB로 생성되서 오류가 나고JDBC dependency를 주석 처리하고 gradle 빌드 후 다시 실행해보면 잘 실행됩니다. jdbc dependency를 추가해서 오류가 발생하는 이유와 해결 방법이 궁금합니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
react에서 코드 작성하실때 태그 작성하시는것 질문 있습니다.
리액트 강의에서 코드 작성하실 때input이나 button 같은 태그를 작성하실 때한 태그만 작성하실 때에도 굳이 div태그를 만들어서 그 안에 작성하시던데 그 이유가 있을까요??JSX문법에서 전체 태그를 하나의 부모 태그로 감싸야 하는 것은 알고 있지만 왜 태그 하나 하나를 다 div태그로 감싸는지 궁금합니다
-
미해결
자바스크립트 vs 타입스크립트 공부순서
안녕하세요 자바스크립트와 타입스크립트 공부 시작하려고 합니다. 그런데 저는 기본 js인 자바스크립트를 먼저 공부하고, 그 후에 타입스크립트나 기타 언어들을 배우려고 하는데요. 현업 재직 중인 지인 분이 ts를 먼저 배우고js를 공부하면 js는 빠르게 이해 가지만, js를 먼저 배우는 경우 ts는 이해가 바로 되지는 않는다고 하시더라구요.효율상 ts를 먼저 배우는 게 좋다고요. 현업재직중이시거나 실제로 두 스크립트 다 공부하셨던 분들 중공부 순서에 따라 습득의 차이가 실제로 있는 지 조언 부탁 드립니다.
-
해결됨Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
프로젝트 시작시 명령어 npm create vue@latest 사용해도 될까요?
안녕하세요.vscode에서 깃 배쉬를 기본 터미널로 사용하고 있습니다.공식문서를 읽어보다가 npm create vue@latest 를 입력하니까, 자동으로 프로젝트를 생성해주는데 혹시 이 명령어로 수업을 따라가도 될까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
따로 function 빼기
제가 강의 듣기 전function solution(num) { let answer = []; for (let x of num) { let isPrime = true; x = Number(x.toString().split("").reverse().join("")); if (x <= 1) continue; for (let i = 2; i <= x / 2; i++) { if (x % i === 0) { isPrime = false; break; } } isPrime && answer.push(x); } return answer; } let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100]; console.log(solution(arr)); 이런식을로 풀었는데영상에 보니까 isPrime(n) 을 따로 빼서 하신것같은데이렇게 함수를 따로 빼야하는 이유가 있는건가요??
-
미해결실전! Querydsl
compileQuerydsl없음
안녕하세요현재 프로젝트 세팅부터 막혀서 질문 드립니다.질문은 크게 3가지입니다. build 잘됨Gradle Tasks other compileQuerydsl -> 없음 ( spring boot3이상으로 되면서 안보이는게 맞나요)? build.gradleplugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //test 롬복 사용 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } tasks.named('test') { useJUnitPlatform() } def querydslSrcDir = 'src/main/generated' clean { delete file(querydslSrcDir) } tasks.withType(JavaCompile) { options.generatedSourceOutputDirectory = file(querydslSrcDir) } https://docs.google.com/document/d/1j0jcJ9EoXMGzwAA2H0b9TOvRtpwlxI5Dtn3sRtuXQas/edit위의 docs 설정만 build.gradle에 기입하면 src/main/generated가 생성이 안되는데 이유가 뭔가용??build폴더 말고, main/generated폴더에 Q파일이 생성되었는데 잘못 생성된건가요.? 답변 주시면 감사하겠습니다.. 추가로,, 현재 build.gradle에 $buildDir은 사용이 안된다고 하네요..!
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
비연결성에 대해 이렇게 이해하면 될까요?
HTTP는 기본적으로 비연결성 이지만 일정시간 연결을 가진다.기존에는 http는 3wayhandshake하고 보낼거 보내고 소켓 자원을 낭비 하지 않기 위해 바로 연결을 끊었다.하지만 이후에는 html파일 외에 css ,js등 각종 리소스들을 보내야되기때문에 일정시간동안 약 30초동안은 tcp연결을 끊지않고 대기한다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@Controller 질문있습니다.
@Controller가 붙으면 로직을 수행하는 컨트롤러가 되고 이 컨트롤러에서 수행되는 로직은 요청과 동일한 @RequestMapping이 붙은 메소드가 실행된다 라고 생각하면 되는건가요? @Controller가 붙은 클래스가 컨트롤러가되서 HandlerMapping에 등록된 후 내부적으로 @RequestMapping으로 구분을 하는건지 아니면 각각의 메소드가 컨트롤러가 되서 HandlerMapping에 등록되는건지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
http://localhost:8080/ 접속 웹페이지 오류
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의를 따라서 코드를 작성했습니다.http://localhost:8080/ 으로 접속하면 home.html 이 아니라 static 폴더의 index.html 이 열립니다. 어떻게 해결하면 될까요?
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 컬렉션 HashSet 타입인 favoriteFoods를 수정할 때 궁금한 것이 있습니다.
<Member 클래스>@ElementCollection @CollectionTable(name = "FAVORITE_FOOD", joinColumns = @JoinColumn(name = "MEMBER_ID") ) @Column(name = "FOOD_NAME") // 값이 하나라 가능 private Set<String> favoriteFoods = new HashSet<>();<JpaMain 함수>try { Member member = new Member(); member.setUsername("member1"); member.setHomeAddress(new Address("homeCity", "street", "10000")); member.getFavoriteFoods().add("치킨"); member.getFavoriteFoods().add("족발"); member.getFavoriteFoods().add("피자"); member.getAddressHistory().add(new Address("old1", "street", "10000")); member.getAddressHistory().add(new Address("old2", "street", "10000")); em.persist(member); em.flush(); em.clear(); System.out.println("=========== START ==========="); //todo: 값 타입 수정 Member findMember = em.find(Member.class, member.getId()); Address a = findMember.getHomeAddress(); findMember.setHomeAddress(new Address("newCity", a.getStreet(), a.getZipcode())); // HashSet이라서 set 메서드 활용 불가 findMember.getFavoriteFoods().remove("치킨"); findMember.getFavoriteFoods().add("한식"); tx.commit();위의 메인함수를 여러 번 실행했는데 HashSet임에도 불구하고 순서가 지켜진 체로 DB에 저장된 결과가 다음과 같습니다.그러나, em.flush()와 em.clear()를 주석처리하고 다시 실행해보면 DB로 조회할 때 순서가 지켜지지 않고 무작위로 저장이 됩니다. 제 예상은 em.flush()가 add()로 저장된 컬렉션 값을 먼저 DB에 반영하니까 순서가 보장되서 항상 같은 결과가 나오지 않나 생각됩니다. 이것이 맞나요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
질문
제가 영상 보기 전 혼자 풀어보았는데function solution(n, arr) { let answer = 0, max_sum = 0; for (let x of arr) { let sum = 0, temp = x; while (temp) { sum += temp % 10; temp = Math.floor(temp / 10); } if (max_sum < sum || (max_sum === sum && answer < x)) { answer = x; max_sum = sum; } } return answer; } let arr = [128, 460, 603, 40, 521, 137, 123]; console.log(solution(7, arr)); 저는 if 문을 (max_sum < sum || (max_sum === sum && answer < x)) 이렇게 하나로 묶어서 썼는데 괜찮을까요 ? 그리고 선생님께서 max를 초기화할때 Number.MIN_SAFE_INTEGER 로 하셨는데 어차피 각자리수의 합이 0보다는 클것이라는 생각이 들어서 저의 경우엔 0으로 초기화 했는데 괜찮을까요?
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
scanner 문제와 풀이 첫 번째 문제 질문
import java.util.Scanner; public class ScannerEx1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { System.out.print("당신의 이름을 입력하세요: "); String str= sc.nextLine(); System.out.print("당신의 나이를 입력하세요: "); int Z1= sc.nextInt(); System.out.println("당신의 이름은 "+str+"이고, 나이는"+Z1+"입니다"); } } }이런 식으로 코드를 짜고 실행하면 처음 할 때는 잘 작동하는데 두 번째부터 재입력 할 때 이름은 입력 안 되고 나이만 입력이 되니까당신의 이름을 입력하세요: 존당신의 나이를 입력하세요: 12당신의 이름은 존이고, 나이는12입니다당신의 이름을 입력하세요: 당신의 나이를 입력하세요: 234당신의 이름은 이고, 나이는234입니다당신의 이름을 입력하세요: 당신의 나이를 입력하세요: 23당신의 이름은 이고, 나이는23입니다당신의 이름을 입력하세요: 당신의 나이를 입력하세요: 존존Exception in thread "main" java.util.InputMismatchException at java.base/java.util.Scanner.throwFor(Scanner.java:947) at java.base/java.util.Scanner.next(Scanner.java:1602) at java.base/java.util.Scanner.nextInt(Scanner.java:2267) at java.base/java.util.Scanner.nextInt(Scanner.java:2221) at day16.ScannerEx1.main(ScannerEx1.java:15)Process finished with exit code 1이런 식으로 뜨네요 이름입력이 건너 뛰게 되는 이상한 현상이 있는데 어떻게 된 걸까요?
-
미해결실전! 스프링 데이터 JPA
1.프로젝트 환경설정 Test 설정
import 가 안됩니다.. import 문을 지우고 다시 해도 된다는 글이 있어서 따라해봤는데 그대로입니다.캐시비우기 및 재시작 해도 그대로고 gradle rebuild 해도 그대로 원인조차 파악하기 어렵습니다. 도움주십쇼.깃 링크:git@github.com:choiinsoochoi/jpa.git
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
기본 디렉토리 구조 설정이 궁금해요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]localhost:8080/jsp/members/new-form.jsp경로에서 webapp 밑에 있다는건 어디서 알 수 있는 정보인지 궁금합니다.또한, 그 설정을 개인적으로 설정할 수 있다면 그 방법이 궁금합니다
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
for 문을 1부터 마지막 인덱스까지
안녕하세요 제가 강의 보기전에 혼자 풀어봤는데function solution(s) { let answer = s[0]; let cnt = 1; for (let i = 1; i < s.length; i++) { if (s[i] === s[i - 1]) { cnt++; continue; } if (cnt > 1) { answer += cnt + s[i]; cnt = 1; } else { answer += s[i]; } } return answer; } let str = "KKHSSSSSSSE"; console.log(solution(str)); 저 같은 경우 미리 answer 에 첫번째 글자를 넣어서 시작했고for 문을 1부터 시작해서 그 전의 값과 비교하는 식으로했는데 이렇게 풀어도되는걸까요?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
import 시 뜨는 에러 (타입스크립트 파일에서만 사용할 수 있습니다.)
안녕하세요! 강의 잘 보고 있습니다 ㅎㅎ다름이 아니라, import * as getters from './getters' 를 했는데 'import ... ='는 TypeScript 파일에서만 사용할 수 있습니다. ts(8002)라며 에러가 나네요 ㅠㅠ저는 뷰 3를 이용하고 있습니다!
-
해결됨실전! Querydsl
gradle .gradle폴더 차이
안녕하세요!프로젝트 세팅을 하고 test파일을 실행해보니,gradle폴더와 .gradle폴더가 생성된 것을 확인했습니다. 혹시 두개의 폴더가 무슨 차이가 있나요?out 폴더에는 무슨 폴더고 어떤것들이 들어가나요? 답변 해 주시면 감사하겠습니다!