묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! FastAPI 입문
실수도 DB todo테이블을 삭제했습니다
contents내용을 수정하려다가 꼬여서 drop명령어로 새로 테이블을 작성하고 할려했는데 테이블을 그대로 만들었는데 uvicorn main:app 이 명령어를 수행하면 500internal error가 뜹니다. ㅠㅠ 어디서부터 뭘 수정해야 할지 모르겠는데 다시 파이썬프로젝트와 DB를 연결할수 있게 할수 있는방법 있을까요??
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
그래들 디펜더시 버전 명시
안녕하세요, 궁금한 게 있어 질문드립니다!현재 강의까지 그래들에 3개의 디펜던시를 추가해주었는데요, 기존 자바-스프링부트 환경에서는 디펜던시에 라이브러리 버전을 명시하지 않아도 스프링부트가 내부적으로 호환되는 버전을 찾아 사용하는 것으로 알고 있습니다.반면, 코틀린-스프링부트에서 디펜던시를 사용할 때 세 경우 모두 버전까지 명시해 사용했는데요, 혹시 코틀린을 사용할 땐 매번 이렇게 최신의 안정화된 버전을 찾아 사용해야 하는 것인지 궁금합니다.또한 검색해보니 groovy gradle 대신 사용하는 kotlin-dsl이라는 것도 봤는데요, 혹시 고급편에 이 내용이 포함되어 있을지도 궁금합니다.항상 정성들인 답변 감사합니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
Open 키워드를 사용해야 하는 이유
안녕하세요 강사님 덕분에 편히 배우고 있습니다.다름이 아니라 이번 강의 초반에 @Transactional 어노테이션을 사용할 시 open 키워드를 클래스와 매서드에 다 사용해주어야 하고, 만약 이게 싫다면 플러그인을 적용해야 한다고 말씀하셨는데요,찾아보니 코틀린에서는 기본적으로 모든 클래스가 최종 클래스고, 그렇기 때문에 상속이 되지 않아 open 키워드를 사용해 상속 가능성을 열어두어야 한다는 것 같더라구요.그런데 왜 이게 @Transactional 어노테이션을 사용할 때도 해당되는 내용인지 잘 모르겠습니다. 프록시 객체가 생성되기 때문인 걸까요?제가 코틀린 기본 강의를 들었음에도 잘 기억이 나질 않아 질문드립니다. 항상 감사드립니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
코틀린 오류가나네요..
Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.6.0. 이런 오류가 나는데요 코틀린 버전을 바꿔야할까요?
-
미해결만들면서 배우는 리액트: 컴포넌트 설계와 리팩토링
<> </> 의미
function App() { const [count, setCount] = useState(0) return ( <> ... </> ) }제가 놓쳤을수도 있는데, <> , </> 의미를 뒷부분에 설명한다고 했는데, 끝까지 설명이 안나온것 같습니다.
-
해결됨만들면서 배우는 리액트: 컴포넌트 설계와 리팩토링
handler 정의시 const 로 정의하는것과 function으로 정의하는것 차이
안녕하세요, 섹션2 "할 일 저장 기능 구현" 강의를 보다가 function으로 handler를 정의하는것과const 로 정의하는것과 동작상에는 차이가 없는것 같은데,const로 정의하는 특별한 이유가 있나요?
-
미해결만들면서 배우는 리액트: 컴포넌트 설계와 리팩토링
질문있습니다 (SSR 빌드)
안녕하세요, 강의 첫부분 프로젝트 생성 강의 중에 궁금해서 질문남깁니다. React는 이제 install 에는 next.js (SSR)과 같은 기법으로 프로젝트 생성하는 방법만 제안하는것인가요?홈페이지에 떡하니 윗부분에 있길래 그런생각이 들었습니다. 기존 CSR같은 방법도 홈페이지 메뉴얼에 있을법한데, 왜 next.js를 default (젤 윗부분)에 있고, CSR 방법은 메뉴얼에 없는지 궁금합니다. 참고로 svelte 도 잠시 공부해봤는데, sveltekit이란 빌드도구도 기본 SSR로 되도록 동작하는거같더라고요..
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
QClass 생성시 EnumPath 문제
안녕하세요 강의 실습 따라 진행하다가 조금 다른 점이 생겨서 문의 드립니다.package com.group.libraryapp.domain.book; import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.PathMetadata; import javax.annotation.processing.Generated; import com.querydsl.core.types.Path; /** * QBook is a Querydsl query type for Book */ @Generated("com.querydsl.codegen.DefaultEntitySerializer") public class QBook extends EntityPathBase<Book> { private static final long serialVersionUID = -608098416L; public static final QBook book = new QBook("book"); public final NumberPath<Long> id = createNumber("id", Long.class); public final StringPath name = createString("name"); public final EnumPath<BookType> type = createEnum("type", BookType.class); public QBook(String variable) { super(Book.class, forVariable(variable)); } public QBook(Path<Book> path) { super(path.getType(), path.getMetadata()); } public QBook(PathMetadata metadata) { super(Book.class, metadata); } } 위와 같이 EnumPath의 경우에 type 패키지 아래에 정의해 둔 이넘 클래스를 제대로 가져오지 못하는 문제가 발생하고 있습니다.QUserLoanHistory에서도 UserLoanStatus에 대해 똑같은 상황이 발생해서 생성된 QClass를 수동으로 고쳐서 사용중입니다. 이게 제 IDE에서만 이상 현상이 발생하는 것인지 모르겠습니다.public final EnumPath<com.group.libraryapp.type.UserLoanStatus> status = createEnum("status", com.group.libraryapp.type.UserLoanStatus.class); 이 부분도 수정 전에는 아래와 같은 상태였습니다.public final EnumPath<com.group.libraryapp.domain.user.UserLoanStatus> status = createEnum("status", com.group.libraryapp.domain.user.UserLoanStatus.class); 제가 설정을 무언가 잘못한 부분이 있는 걸까요?감사합니다.
-
해결됨실전! FastAPI 입문
섹션3 testcode get_단일조회 api
여기까지 코드 잘 따라서 작성하였고 #200부분을 잘 작동합니다. #404 부분코드를 삭제하고 실행하면 잘 돌아가는데404부분 코드를 작성하니까 48번째 줄에서 자꾸 오류가 뜨는데 해결방법이 있을까요??
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
빌드가 안되는 데 확인해 봐 주실 수 있나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 빌드를 하면 아래와 같은 오류가 나옵니다. 9강 부터 소스를 받아 계속 업데이트 해본 소스입니다. java.lang.IllegalAccessError: superclass access check failed: class org.jetbrains.kotlin.kapt3.base.javac.KaptJavaCompiler (in unnamed module @0x41bcd726) cannot access class com.sun.tools.javac.main.JavaCompiler (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.main to unnamed module @0x41bcd726 at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1018) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427) at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421) at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at org.jetbrains.kotlin.kapt3.base.KaptContext.<init>(KaptContext.kt:68) at org.jetbrains.kotlin.kapt3.KaptContextForStubGeneration.<init>(KaptContextForStubGeneration.kt:40) at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.contextForStubGeneration(Kapt3Extension.kt:287) at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:171) at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:102) at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:115) at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:125) at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:99) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:301) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:55) at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:113) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:292) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:102) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:60) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:172) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:54) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:91) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:43) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:93) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:471) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:123) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:367) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally$default(IncrementalCompilerRunner.kt:309) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl$rebuild(IncrementalCompilerRunner.kt:115) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:167) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:77) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:623) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:101) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1718) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200) at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197) at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196) at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) build.gradle 은 아래와 같습니다. plugins { id 'org.springframework.boot' version '2.6.8' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'org.jetbrains.kotlin.jvm' version '1.6.21' id 'org.jetbrains.kotlin.plugin.jpa' version '1.6.21' id 'org.jetbrains.kotlin.plugin.spring' version '1.6.21' id 'org.jetbrains.kotlin.kapt' version '1.6.21' // for queryDSL } group = 'com.group' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' implementation 'org.jetbrains.kotlin:kotlin-reflect:1.6.21' implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3' implementation 'com.querydsl:querydsl-jpa:5.0.0' kapt("com.querydsl:querydsl-apt:5.0.0:jpa") kapt("org.springframework.boot:spring-boot-configuration-processor") runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' } tasks.named('test') { useJUnitPlatform() } compileKotlin { kotlinOptions{ jvmTarget = "11" } } compileTestKotlin { kotlinOptions{ jvmTarget = "11" } }
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
6강. assertThat import 문제
태현님 안녕하세요.assertThat이 정상적으로 import가 되질 않아 문의 드립니다. 태현님 6강 강의도중 보면 org.assertj.core.api를 import하는걸로 보이는데요. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' implementation 'org.junit.jupiter:junit-jupiter:5.8.1' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' }혹시 import에 문제가 있나 싶어https://mvnrepository.com/artifact/org.assertj/assertj-core/3.6.1이걸 참고해 dependencies를 추가했는데도 안되더라고요;; 일단 스크린샷도 첨부하긴 했습니다..제가 뭘 잘못한 걸까요..
-
해결됨실전! FastAPI 입문
BackgroundTask 인자값 전달
안녕하세요 강사님 강의 재밌게 잘보고 있습니다BackGround task 강의에서 궁금한게 생겨서 질문 남깁니다. 아래는 verify_otp_handler 의 선언부인데def verify_otp_handler( request : VerifyOTPRequest, background_tasks : BackGroundTasks ... ) backgound_tasks 라는 객체는 DI로 받지도 않고 있는데 어떻게 함수 내부에서 사용될 수 있는지가 궁금합니다. request 라는 객체는 request 헤더부에서 넘어온 값이 프레임워크에 의해서 VerifyOTPRequest로 전처리되거라 어디서부터 왔는지 그 출처를 알겠지만, backgound_tasks는 DI도 되지 않았고 헤더부에서 넘어온 것도 아닌데 어떻게 생성된건지 궁금합니다.
-
해결됨만들면서 배우는 리액트: 컴포넌트 설계와 리팩토링
github 404 뜹니다~
공유해주신 리포지토리 404 뜹니다. private 인거 같네요 ^^
-
미해결실전! FastAPI 입문
docker mysql 연동
docker에서는 mysql에 정상적으로 접속이 되는데python console을 통해서 연결을 시도하면 sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2059, "Authentication plugin 'b'auth_gssapi_client'' not configured")다음 에러가 나옵니다.select host, user from mysql.user where user= 'root';쿼리를 통해서 user 정보를 확인해보면 정상적으로 user가 셋팅 되어있습니다.
-
해결됨실전! FastAPI 입문
pytest는 어떻게 모킹함수를 인지하는지
안녕하세요 강사님강의 정말 재밌게 보고 있습니다.수강 도중 궁금한 내용이 생겨 질문 남깁니다.mocker.patch("main.get_todo_by_todo_id", return_value=Todo(id=1,contents="todo",is_done=True))여기서 인자값으로 문자열 main.get_todo_by_todo_id 를 전달했는데, pytest는 어떻게 저 함수를 모킹대상으로 인지하나요? 개념적으로 설명해주시면 감사합니다~!! response = client.patch("/todos/1", json={"is_done":False})해당 api 를 호출하고 실행하는 과정에서main_get_todo_by_todo_id 함수를 호출할 때 어떻게 모킹처리가 되는지 궁금합니다.
-
해결됨실전! FastAPI 입문
타입힌트 질문
안녕하세요 강사님강의 듣는 도중 조금 궁금한 내용이 생겨서 질문드립니다. 코드에서 아래와 같이 타입힌트를 사용하는 경우가 있는데def done(self) -> "Todo": self>is done = True ~ 왜 Todo에 "" 를 감싸주시는걸까요??그냥 Todo 라고 타입힌트를 줘도될거 같은데 이유가 궁금해서요
-
해결됨실전! FastAPI 입문
코드 질문
안녕하세요.파이썬 2.7만 주로 쓰다 오랜만에 쓰니 좀 헷갈리는게 있어 질문드립니다.encoding: str = "UTF-8"service 작성하시면서 설명해주신 코드인데,encoding = "UTF - 8" 이렇게 써도 encoding 변수에 뭐가 들어가는지 바로 확인이 되는데 굳이 : str 과 타입을 명시할 이유가 있나요 ? 이렇게 작성하였을 때 왜 이렇게 작성하고 어떠한 장점이 있는지 궁금합니다.비슷한 질문으로 def save_user(self, user: User) -> User:다음과 같이 반환 타입을 적어줘야 하는 것도 설명 부탁드립니다.작성하면서도 이걸 굳이 적어줘야 하는지가 궁금해서 질문드립니다.
-
해결됨실전! FastAPI 입문
router testcode 문의
router test code 에서 test_main.py 파일에 api.todo라고 main을 바꾸어 줬는데 import를 따로 안 시켜줘도 되나요 ?main.py는 from api import todo로 import 시키는데 test_main.py는 안 그래도 되는지 궁금합니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
태현님 안녕하세요!
좋은강의 만들어주셔서 감사합니다.잘보고있습니다. 테스트 코드 관련 궁금증이 생겨서 문의드립니다.BeforeEach 나 AfterEach 를 사용해서deleteAll() 등을 할때 Mysql 같은 DB 보다 In memory db가 조금더 적합할것같은데요 혹시현업에서도 로컬환경으로 개발하실때 DB 를 H2 In Memory DB 를 주로 사용하여 개발하셨는지 궁금합니다 !
-
해결됨실전! FastAPI 입문
docker 설치 에러
안녕하세요.윈도우 os 사용중이고 docker desktop 설치 시 이후데몬이 활성화가 안되어 질문드립니다.데몬 활성화를 위해서는 가상화 지원이 되어야 하는데, bios 세팅 및 os 가상화 설정을 모두 하여서 작업관리자에서 가상화:사용 이라고 까지 표기가 되어도 하이퍼바이저 지원이 안된다는 에러가 나옵니다.wsl 설치 또한 가상화가 지원이 안된다는 에러와 함께 설치가 안되어 구글링 이후 문의 드립니다.