묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
13강 DB연결 관련 질문드립니다.
안녕하세요. 우선 좋은 강의 만들어 주셔서 감사합니다.13강을 수강하던 중 오류가 발생하여 질문드립니다. 검색해보니 테이블 명이 user로 생성을 하면 안되는 것 같아 user_table 이라는 명칭으로 테이블을 생성했습니다.CLI로 확인해본 결과 테이블 자체는 정상적으로 생성이 되었습니다. 그런데 컨트롤러와 yml 파일 설정 후 화면에서 데이터를 저장하려고 하니 오류가 발생합니다. spring: database: url: "jdbc:mysql://localhost/library" username: "root" password: "" drive-class-name: com.mysql.cj.jdbc.Driver package com.group.libraryapp.controller.User; import com.group.libraryapp.domain.user.User; import com.group.libraryapp.dto.User.request.UserCreateRequest; import com.group.libraryapp.dto.User.response.UserResponse; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @RestController public class UserController { private final JdbcTemplate jdbcTemplate; public UserController(JdbcTemplate jdbcTemplate){ this.jdbcTemplate = jdbcTemplate; } private final List<User> users = new ArrayList<>(); @PostMapping("/user") public void saveUser(@RequestBody UserCreateRequest request){ String sql = "INSERT INTO user_table (name, age) VALUES (?,?)"; jdbcTemplate.update(sql, request.getName(), request.getAge()); } @GetMapping("/user") public List<UserResponse> getUsers() { String sql = "SELECT * FROM user_table"; //람다로 변경 알트+엔터 return jdbcTemplate.query(sql, (rs, rowNum) -> { long id = rs.getLong("id"); String name = rs.getString("name"); int age = rs.getInt("age"); return new UserResponse(id, name, age); }); } } INSERT INTO user_table (name, age) VALUES (?,?) [42104-214]] with root cause org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USER_TABLE" not found (this database is empty); SQL statement: INSERT INTO user_table (name, age) VALUES (?,?) [42104-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214] at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214] at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8385) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8369) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.readTableOrView(Parser.java:8358) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.readTableOrView(Parser.java:8328) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.parseInsert(Parser.java:1632) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.parsePrepared(Parser.java:814) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.parse(Parser.java:689) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.parse(Parser.java:661) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.Parser.prepareCommand(Parser.java:569) ~[h2-2.1.214.jar:2.1.214] 위와 같이 데이터베이스가 비었다고 하고 테이블을 찾지 못하는데 제가 어느 부분을 확인해야 하는지 궁금해 질문드립니다.
-
해결됨인프라공방 - 그럴듯한 서비스 만들기
가이드 페이지 우피 이용 만료되신 것 같아요!
(사진)
-
해결됨Real MySQL 시즌 1 - Part 1
각 에피소드가 책의 어떤 장과 연결되는지 알 수 있을까요?
강의 자료가 별도로 제공되지 않아서, 책과 함께 복습하려고 하는데 정확히 어디인지 알 수 있으면 좋을거같습니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
기능 추가시 프론트 문제
안녕하세요! 강의를 따라하며 프로젝트를 진행했더니 어느덧 배포까지 끝냈는데요 다 해보고나니 대출목록 조회나 다른 추가 기능들을 혼자 구현해보고 싶다는 생각이 들었습니다. 제가 프론트에 대한 지식이 많이 부족하고 저희 프로젝트에서는 강사님이 주신 프론트를 그대로 가져다 사용하고있기 때문에 프론트가 어떤식으로 구성되어있는지 잘 모르겠습니다..ㅠ 혹시 저희 프로젝트에서 프론트 단을 어떻게 하면 수정하거나 추가할 수 있는지 알 수 있을까요? 아니면 변경이 어렵다면 백엔드 개발자가 프로젝트를 진행하면서 간단하게 프론트를 구현할 수 있는 방법이 있을까요? 감사합니다.
-
미해결비전공자의 전공자 따라잡기 - 데이터베이스,SQL
제 2 정규형 질문
제 2정규형을 보다 보니 질문이 생겼습니다.아이폰 제품에 대한 데이터베이스를 만들 때예를 들어 아래와 같이 9가지 정보만 간단히 표기하고 싶을 때 하나의 테이블에 다 넣는 것이 아니라 <I Phone 제품 테이블>-모델명-용량-출시일-OS 정보-색상-RAM-카메라-칩-시리얼 넘버 이런식으로 해야하는건가요? <I Phone 제품 테이블>-모델명-용량-출시일-OS 정보-색상-RAM-카메라-칩-시리얼 넘버 <모델명 테이블>-모델명-용량-출시일-색상 <RAM 테이블>-RAM 종류 <카메라 테이블>-카메라 종류 <칩 테이블>-칩 종류 <OS 테이블>-OS 종류
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
테스트 코드에서 JpaRepository.save 가 안되는데 문제가 뭔지 모르겠어요.
안녕하세요. 몇달간 넘 바빠서 스프링 공부를 못했네요.프로젝트를 하나 새롭게 생성한다음에 첨부터 강의 하나 하나 보면서 프로젝트에 기능을 추가 하고 있었습니다. 그리고 Repository와 Service를 까지 왔어요..이 둘의 차이점도 확인해서 비교 하고 그런데 역시 의존성 주입은 좀 어렵더라구요.. 아마 이부분을 제가 몰라서 아래 설명할 코드에 예상하지 못하는 결과가 나왔을꺼 같은데 흠... 사실 질문 하기 미안 하긴 하지만 그래도 빨리 좀 알아야해서 질문 드립니다. 일단 깃 주소부터 올립니다. justkjy/about-coffee: about coffee server (github.com)https://github.com/justkjy/about-coffee여기에 test>kotlin>... >service>PresentationServiceTest> fun insertMenuTest() {...............val testCoffeeMenu = presentationService.coffeeMenuSave(coffeeMenuDto)...............}디버깅 타서 src/main/kotlin/com/example/aboutcoffee/service/PresentationService.kt fun coffeeMenuSave(menuDTO: CoffeeMenuDTO):CoffeeMenu? { ................. resultMenu = presentationRepository.coffeeMenuSave(menuSave) ................ }이 부분 왜 null을 리턴하는지 모르겠어요...분명 데이터 저장하는게 맞는데 ....mock 설정이 잘못되서 그런거겠죠??ㅠ.ㅠ 에러를 못잡아서 잠을 못자고 있네요이 프로젝트 완료하면 react로 작성된 커피 블러그랑 연동 하려 했는데 ... 시간이 꽤 걸릴듯 하네요 ㅠ.ㅠ
-
해결됨Real MySQL 시즌 1 - Part 1
4:30 올려주신 공식문서 링크 공유드립니당
https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html#online-ddl-generated-column-operations직접 입력하기 번거로우시면 여기서 보시면 됩니다
-
해결됨Real MySQL 시즌 1 - Part 1
14:00 올려주신 공식문서 링크 올립니당
https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-isolation-levels.html직접 입력하기 번거로우시면 여기서 보시면 됩니당
-
해결됨Real MySQL 시즌 1 - Part 2
에피소드 17번에서 skip locked 질문이 있습니다.
일단 이 강의를 통해서 너무나 좋은 정보를 많이 얻어가서 감사할 따름입니다. Ep.17 강의 마지막의 정리 부분에서 "SKIP LOCKED는 데이터 큐잉 후 배치잡 처리"에 유용하게 사용 가능하다고 하셨는데, 이해가 잘 되지 않아서요. 사례를 조금만 더 설명해주시면 감사하겠습니다.
-
해결됨입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기
docker 빌드가 이루어지지 않고있어요 ㅜㅜ
혼자서 해결해보려고하는데 해결할수가 없네요 저런 에러만 나오고 알방법이 없어서 이렇게 질문드려요 깃허브링크까지 있어요 꼭 해결하고싶어요!!https://github.com/Minzion0/portfolio
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
후하 제머리로는 좀 어렵네요 mysql 설치
mysql 설치가 커뮤니티보고 다해봐도 다안돼네요 ㅠㅠ혹시 2024년 버전 해결방안 있나요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
git 질문있습니다.
강의내용 7:31초.gitignore 파일을 만들떄 자동저장 or 수도저장 할건지 물어보는 부분에서 don't ask again 클릭후 add으로 눌러버려서 수동으로 저장으로 다시 바꾸고 싶은데 어떻게 해야하나요?죄송해요 구글링해도 안나와서 이런 사소한 질문 죄송합니다!
-
해결됨Real MySQL 시즌 1 - Part 1
prepardStatement 질문있습니다.
11강 Prepared Statment 강의를 듣다가 제일 마지막에 server-side preparedstatment는 메모리 부작용이 많으니 client-sid preparestatment를 권장한다고 하셨는데.. client-sid preparestatment를 사용하면 mysql 서버측에서는 statement로 받아들이잖아요. 그러면 바인드 변수값이 아니라 상수값으로 인식하니까동일한 컨넥션 내에서 파싱트리도 공유가 안될테고.. 그런 단점이 있는데도 client-sid preparestatment가 유리한건가요?? 계속 오라클 기준으로 생각해서 그런지 해깔리네요..오라클은 oltp에서 바인딩 변수가 아니라 상수로 사용하면 literal sql로 인식해 커서 공유가 안되니까 항상 바인드 변수를 사용하라고 권장하니까 statment 보다 preparestatment를 자주사용하잖아요.. 두설없이 말씀드려서 죄송합니다. ㅠㅠ 해깔리네요 너무
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
h2 데이타베이스 연결 문제
Database "mem:library" not found, either pre-create it or allow remote database creation (not recommended in secure environments)이런 식으로 mem:library 를찾을수없다고 뜹니다 무엇이문제일까요?구굴링해도 안뜹니다 혹시 h2 데이타베이스를 설치해야하는건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
user 오류
NON_KEYWORDS=USER을 추가해도 이렇게 뜨는데 어떻게 해야할까요?
-
해결됨Real MySQL 시즌 1 - Part 1
lateral table 질문입니다.
질문1오라클에서는 인라인뷰가 복잡해서 pushdown 기능이 작동 잘 안할때 Lateral Derived Table를 쓰는 것으로 알고 있는데, mysql에서는 Lateral Derived Table 자주 사용하나요?? 질문2Lateral Derived Table가 결국 메인 테이블의 조인 조건을 ㅇ인라인뷰 안으로 넣는 것이잖아요. 스칼라 서브쿼리도 마찬가지 인데, Lateral Derived Table과 스칼라 서브쿼리 중 어떤게 더 효율적일까요?.? (만약 스칼라 서브쿼리 반환 레코드 값이 한개일 경우) 감사합니다
-
해결됨200억건의 데이터를 MySQL로 마이그레이션 할 때 고려했던 개념과 튜닝 방법
안녕하세요, 멀티컬럼인덱스 개념 후반부 내용이 이해가 가지 않아 질문 드립니다.
멀티컬럼인덱스 개념 5:53분 경부터 설명해주신 내용이 이해가 가지 않는데요,EXPLAIN SELECT hash_email, one_field, two_field FROM test1 WHERE two_field = 3;여기서 idx_col1_col2 인덱스를 타서 two_field = 3인 데이터들의 primary key 목록을 가져올 수 있으니 그를 통해 실제 데이터를 조회하면 hash_email 값도 가져올 수 있는 것 아닌가요?왜 풀스캔을 하는 건지 이해가 가지 않아 질문드립니다.실행 계획 type의 종류를 찾아보니 이런 동작 자체가 없는 것 같기도 하고..아리송하네요
-
해결됨Google Authenticator, QR, Cron을 활용하여 자동화 만들기
프로젝트 구조 질문.
안녕하세요 혹시 이 프로젝트구조에서 network 폴더 부분을 eCommerce 강의에서 사용하신 router 폴더와 다르게 이름을 지으신 이유가 있으실까요? 기능은 비슷한거 같아서 질문 드립니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
궁금한게 또 있습니다!!
강의 04:40초 부분인데요 public void saveUser(UserCreateRequest request) { User u = userRepository.save(new User(request.getName(), request.getAge())); throw new IllegalArgumentException(); }이부분에서 예외를 주고 서버를 띄어서 확인을 했는데저렇게 "서버 내부 오류입니다" 라고 뜨는 것은 예외를 던져주면 자동으로 저렇게 뜨게 설정되어있는 건가요?아니면 이렇게 예외를 던지면 ui에서 이렇게 띄어줘 라고 설정을 해주신건가요?
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
D-Day 앱 만들기에서 에러가 나옵니다ㅠㅠ
하나는 "NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null" 이런 에러인거 같은데....대체 어디서 잘못된걸까요. 에러가 여러개 인건가요?FAILURE: Build completed with 2 failures.1: Task failed with an exception.-----------* What went wrong:Execution failed for task ':app:checkDebugAarMetadata'.> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction > 5 issues were found when checking AAR metadata:* Try:> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Exception is:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:checkDebugAarMetadata'. Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction Caused by: java.lang.RuntimeException: 5 issues were found when checking AAR metadata: 1. Dependency 'androidx.appcompat:appcompat-resources:1.7.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 2. Dependency 'androidx.appcompat:appcompat:1.7.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 3. Dependency 'androidx.core:core-ktx:1.13.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 4. Dependency 'androidx.core:core:1.13.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). 5. Dependency 'androidx.annotation:annotation-experimental:1.4.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :app is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 8.0.0 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdk of at least 34. Note that updating a library or application's compileSdk (which allows newer APIs to be used) can be done separately from updating targetSdk (which opts the app in to new runtime behavior) and minSdk (which determines which devices the app can be installed on). ==============================================================================2: Task failed with an exception.-----------* What went wrong:Execution failed for task ':app:mergeExtDexDebug'.> Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Failed to transform appcompat-resources-1.7.0.aar (androidx.appcompat:appcompat-resources:1.7.0) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=24, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for DexingNoClasspathTransform: C:\Users\abc14\.gradle\caches\transforms-3\c494794d48d9429ce3837ff3d9162578\transformed\appcompat-resources-1.7.0-runtime.jar. > Error while dexing. > Failed to transform appcompat-1.7.0.aar (androidx.appcompat:appcompat:1.7.0) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=24, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for DexingNoClasspathTransform: C:\Users\abc14\.gradle\caches\transforms-3\d251d80cfc588f74172158875c7b2196\transformed\appcompat-1.7.0-runtime.jar. > Error while dexing.* Try:> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Exception is:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:mergeExtDexDebug'. Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null Caused by: java.util.concurrent.ExecutionException: com.android.tools.r8.utils.P0: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null Caused by: [CIRCULAR REFERENCE: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null]Cause 2: org.gradle.api.internal.artifacts.transform.TransformException: Failed to transform appcompat-1.7.0.aar (androidx.appcompat:appcompat:1.7.0) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=24, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. Caused by: org.gradle.api.internal.artifacts.transform.TransformException: Execution failed for DexingNoClasspathTransform: C:\Users\abc14\.gradle\caches\transforms-3\d251d80cfc588f74172158875c7b2196\transformed\appcompat-1.7.0-runtime.jar. Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing. at com.android.builder.dexing.D8DexArchiveBuilder.getExceptionToRethrow(D8DexArchiveBuilder.java:189) Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete, origin: C:\Users\abc14\.gradle\caches\transforms-3\d251d80cfc588f74172158875c7b2196\transformed\appcompat-1.7.0-runtime.jar:androidx/appcompat/app/ActionBarDrawerToggle$1.class Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null Suppressed: java.lang.RuntimeException: java.util.concurrent.ExecutionException: com.android.tools.r8.utils.P0: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null Caused by: java.util.concurrent.ExecutionException: com.android.tools.r8.utils.P0: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null Caused by: com.android.tools.r8.utils.P0: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null Caused by: [CIRCULAR REFERENCE: java.lang.NullPointerException: Cannot invoke "String.length()" because "<parameter1>" is null]