묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
API 요청시 인증에 대한 질문
인사안녕하세요.일단 강의에 감사한 마음에 그랜절 바치고 질문 시작하겠습니다🙇🙇 호돌킹 강의 들으며 한명의 더 열심히 하는 수강민수가 되기 위해 요즘 공부중인 코틀린으로 토이 프로젝트를 해보며 본 강의를 듣고 있습니다. 덕분에 강의 한 강의 들을때마다 오래 걸리기는 하지만 많은 공부가 되고 있습니다. 궁금하진 않으시겠지만 혹시 질문에 답변을 주시는데 필요할 까 싶어 링크도 남겨 봅니다https://github.com/QUIDEV/quidev 질문질문 내용은 다름이 아니라.. 제가 프로젝트에서 스프링 시큐리티를 적용 해 두었는데요, 이번 강의부터 API 요청을 vue.js 에서 보내다 보니 인증부분이 발목을 잡네요.지금까지는 항상 코드를 짤 때 프론트 부분은 템플릿 엔진을 썼었고, vue.js 를 사용 하더라도 라이브러리처럼 사용했던터라 굉장히 당황스러운 상황입니다. 당장의 강의를 마치기 위해 시큐리티를 걷어내고, 작성자를 기록하기 위해 비즈니스 로직에도 파고들어간 부분을 걷어낼 수는 있겠지만 어차피 언젠가는 마주쳤을 문제라고 생각해서 이번기회에 물리쳐 보려고 합니다. Vue.js 와 스프링 시큐리티 검색어로 이것 저것 찾아 본 결과 대세가 JWT 로 굳어지는 것 같은데 JWT를 공부해서 적용 시키면 될까요? 아니면 호돌맨은 다른 방법을 권장하실까요? 귀찮으시겠지만 선생님의 고견을 여쭙습니다. 조공으로 미리 5성 수강평도 남겼습니다. 감사합니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
강사님 처럼 바로 바로 출력이 되지를 않아요
이제 겨우 환경 설정 하고 수업들으려는데 수업에서 보는 것 처럼 print를 추가 할때 마다 추가되서 출력이 되지 않아요. 매번 Ctrl F5 를 눌러야 입력한 값이 포함 되어 출력 됩니다. 그리고 출력 내용도 복잡해요. 왜 그런가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
source-connect 등록 시 에러 질문이요
안녕하세요 강사님 강의 잘 듣고 있습니다.제가 기존에 윈도우에서 mariadb를 설치하고 3307포트를 사용하고 있었습니다.그런데 윈도우에서 진행하면 여러가지 오류로 때문에docker에다 mariadb를 pull 받고 run 해서 3308포트를 포트바인딩으로 3306포트를 사용하게 했습니다.docker run --name mariadb -d -p 3308:3306 --restart=always -e MYSQL_ROOT_PASSWORD=비민번호 mariad포트바인딩한 이유는도커로 실행한 mariadb 에서 port가 3306을 사용중이어서 그랬습니다.(도커로 받은 이미지는 안 건드는게 좋을 것 같아서 포트바인딩을 했습니다.) 결국 주키퍼, 카프카, 카프카커넥트를 모두 켜고 my-source-connect를 아래와 같이 등록했습니다.{ "name" : "my-source-connect", "config" : { "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url":"jdbc:mysql://localhost:3306/mydb", "connection.user":"root", "connection.password":"비민번호입력함", "mode": "incrementing", "incrementing.column.name" : "id", "table.whitelist":"users", "topic.prefix" : "my_topic_", "tasks.max" : "1" } }그러면 response body에 my-source-connect가 성공한 response가 201로 응답되고127.0.0.1:8083/connectors 로 get 요청해도my-source-connect가 잘 뜹니다. 하지만 문제는127.0.0.1:8083/connectors/my-source-connect/status 으로 get 요청하면 다음과같이FAILD가 뜹니다.{ "name": "my-source-connect", "connector": { "state": "FAILED", "worker_id": "192.168.56.1:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:59)\r\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:94)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:185)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:210)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:332)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:140)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:117)\r\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\r\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:750)\r\nCaused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)\r\n\tat com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)\r\n\tat com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)\r\n\tat java.sql.DriverManager.getConnection(DriverManager.java:664)\r\n\tat java.sql.DriverManager.getConnection(DriverManager.java:208)\r\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:80)\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:52)\r\n\t... 12 more\r\nCaused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\r\n\tat java.lang.reflect.Constructor.newInstance(Constructor.java:423)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)\r\n\tat com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)\r\n\tat com.mysql.cj.NativeSession.connect(NativeSession.java:120)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818)\r\n\t... 20 more\r\nCaused by: java.net.ConnectException: Connection refused: connect\r\n\tat java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)\r\n\tat java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)\r\n\tat java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\r\n\tat java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\r\n\tat java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\r\n\tat java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)\r\n\tat java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\r\n\tat java.net.Socket.connect(Socket.java:613)\r\n\tat com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153)\r\n\tat com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)\r\n\t... 23 more\r\n" }, "tasks": [], "type": "source" }예전에 윈도우에 있던 mariadb로 3307포트로 요청하고 get하면 정상적으로 잘 됐습니다.하지만 docker에서 run해서 컨테이너를 생성한 3306포트의 mariadb라서 문제가 있는거 같습니다..response로 온 trace를 검색해도 원인을 파악하기는 어렵네요뭐가 문제로 보이시고 어떻게 해결하는게 좋을까요?감사합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
프록시와 스프링 빈에 대한 질문입니다.
강의 회차 : 트랜잭션 적용 확인안녕하세요 강의를 보다가 궁금한게 생겨서 질문 드립니다.일단 이번 강의에서 클래스 안에 @Transactional이 하나라도 있으면 트랜잭션 AOP가 프록시를 만들어서 basicService$$CGLIB를 스프링 컨테이너에 등록된다고 하였는데, 스프링 핵심 원리 강의에서도 스프링 빈에 객체를 등록하면 "빈 이름$$CGLIB"가 등록되었는데, 스프링 핵심 원리에서 보았던 스프링 컨테이너에 등록된 빈 하고 이번 강의에서 나온 프록시가 스프링 빈에 등록되는 것하고 같은 개념인지 궁금합니다.
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
504에러가 뜹니다;;
클라이언트 쪽에서 에러는 이렇게 나옵니다. List.js의 코드입니다.import React, { useState, useEffect } from 'react';import axios from 'axios';function List(props) { const [Text, setText] = useState(''); useEffect(() => { axios .post('/api/test') .then((res) => { console.log(res); setText(res.data.text); }) .catch((error) => { console.log(error); }); }, []); return ( <> {props.ContetnList.map((변수이름1, 인덱스) => { return <div key={인덱스}>내용: {변수이름1}</div>; })} <h3>{Text}</h3> </> );}export default List; server.js의 코드입니다.const express = require('express');const path = require('path');const mongoose = require('mongoose');const { urlencoded } = require('express');const app = express();const port = 5050;const BASIC_URL = '../../client/build';app.use(express.static(path.join(__dirname, ${BASIC_URL})));app.use(express.json());app.use(express, urlencoded({ extended: true }));const { Post } = require('../Model/Post.js');app.listen(port, () => { mongoose .connect('일부러 비워놓음') .then(() => { console.log(`Example app listening on port ${port}`); console.log('Connecting mongoDB...'); }) .catch((err) => { console.log(`${err}`); });});app.get('/', (요청, 응답) => { 응답.sendFile(path.join(__dirname, ${BASIC_URL}/index.html));});app.get('*', (요청, 응답) => { 응답.sendFile(path.join(__dirname, ${BASIC_URL}/index.html));});app.post('/api/test', (요청, 응답) => { // console.log(요청.body); const CommunityPost = new Post({ title: 'test', content: '테스트입니다.' }); CommunityPost.save() .then(() => { 응답.status(200).json({ success: true, text: '안녕하세요.' }); }) .catch((err) => { console.log(err); });}); 몽고디비 모델 강의쪽에서부터 막힙니다;;
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
점보트론
혹시 점보트론을 왜 쓴건가요? 점보트론을 안써도 되지 않나요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2차원 배열 fill 초기화 질문드려요~
안농하세요 선샌님~❣무식하지만 확실한 이중 for문으로만 2차원 배열 초기화를 하다가 이번에 새로운 방법으로 초기화해보고 싶어서 fill을 사용해보았습니당. 교안 39페이지 2차원 배열 초기화 부분을 참고해서 2-J번 문제를 풀어보려고 했는데초기화하는 방법을 제가 잘못 이해한 것 같아서 질문 드리고자 합니다.먼저 제가 처음 교안을 보고 이해한 방법대로 fill 함수를 사용해본 코드는 다음과 같습니다.// 수정 전 코드 fill(&result[0][0], &result[0][0] + H * W , -1);두번째 인수 값으로 &배열[0][0]에 세로 * 가로를 더해주면 되는구나!로 이해를 했는데 의도했던 결과가 안 나왔습니다..ㅜㅜ 다시 fill 함수 부분을 제 마음대로 수정해서 제출했을 때는 맞았습니다! 라고 나왔지만.. 아니 이게 왜 돼?.. 이렇게 쓰는건가?... 싶은 의혹이 들어서 확인차 찾아오게 되었습니다.// 수정한 코드 fill(&result[0][0], &result[H][W], -1);교안을 보고 이해한 코드와는 사뭇 달라서 fill 함수의 올바른 초기화 사용 방법을 여쭤보고자 질문드립니다! 2-J번 풀이 전체 코드입니다.#include <bits/stdc++.h> using namespace std; int H, W; char arr[104][104]; int result[104][104]; int main(){ ios::sync_with_stdio(0); cin.tie(0); scanf("%d %d", &H, &W); fill(&result[0][0], &result[H][W], -1); // for(int i = 0; i < H; i++){ // for(int j = 0; j < W; j++){ // result[i][j] = -1; // } // } for(int i = 0; i < H; i++){ for(int j = 0; j < W; j++){ scanf(" %c", &arr[i][j]); if(arr[i][j] == 'c'){ result[i][j] = 0; } } } for(int i = 0; i < H; i++){ int cnt = 1; bool isCloud = 0; for(int j = 0; j < W ; j++){ if(isCloud && arr[i][j] != 'c') result[i][j] = cnt++; if(arr[i][j] == 'c'){ isCloud = 1; cnt = 1; } } } for(int i = 0; i < H; i++){ for(int j = 0; j < W; j++){ printf("%d ", result[i][j]); } printf("\n"); } return 0; }
-
미해결홍정모의 따라하며 배우는 C언어
(2:49) 코드의 진행 방식이 머릿속에서 꼬여버려서 while문을 추가하였을 때, 정상적으로 출력되는 이유를 모르겠습니다.
디버그를 해보았는데도 이해가 되질 않아 질문을 올립니다.둘 다 실행했을 때, y입력 후 엔터를 쳤다고 가정하고제 나름대로 작동 순서를 글로 작성해보았습니다.1번째 코드 (while문, continue 없음)이것이 처음 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 빠져나오지 않고 count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기→ (버퍼에 있던 \n)if문에서 입력한 문자 \n과 n을 검사하여 통과 [검사]count++실행"Current count is 2. Continue? (y/n)" 출력 후 입력 대기2번째 코드 (while문, continue 추가)이것이 두번째 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 반복문(while(1))을 빠져나오지 않는다.while(2)문에서 y 검사(참) → continue 실행 [무시]while(2)문에서 \n 검사(거짓) → 빠져나옴count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기if문에서 입력한 문자 '\n'과 n을 비교한다. [검사]if문을 빠져나와 while문의 조건(거짓)을 만족시키지 못한다.count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기------------------------------1. 2번째 코드에서 while(2)문과 continue;의 조합으로 작성한 코드가 어째서 '첫번째 글자를 제외한 나머지를 버퍼에서 싹 지워주기 위함'인지 잘 모르겠습니다.결과적으로 while문-continue는 첫번째 글자 포함, 그 이후 글자까지 무시한 후 \n은 false이므로 아무 작용을 하지 못하는 것이 아닌가 싶습니다.→결국 2번째 반복(cycle)에서 버퍼에 남아있는 \n을 if문에서 판단하고, 결국 1번째 코드와 동일하게 작동하는 것이 아닌가요?
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
랜덤 명언 노출 기능 추가 수강 후 초기값 고정에 대하여
안드로이드 스튜디오의 버전이 달라서 그런 건지 정확한 원인은 모르겠지만 random() 을 쓸 경우 초기의 값이 똑같이 나와 검색해보니 아래와 같이 한다면 초기값부터 랜덤으로 나오는 것을 확인할 수 있었습니다.검색해보니 random() 은 규칙이 있다고 하더라구요. 혹시 저처럼 초기값이 계속 똑같이 나오거나 다르게 나오더라도 규칙이 예상 되지 않는 랜덤값을 넣고자 하시는 분은 아래 코드 참고 하시면 좋을 거 같습니다. import java.security.SecureRandom val secureRandom = SecureRandom() Log.d("MainActivity222", sentenceList[secureRandom.nextInt(sentenceList.size-1)]) binding = DataBindingUtil.setContentView(this,R.layout.activity_main) binding.showAllSentenceBtn.setOnClickListener { val intent = Intent(this, SentenceActivity2::class.java) startActivity(intent) } binding.goodWordTextArea.setText(sentenceList[secureRandom.nextInt(sentenceList.size-1)])
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter 질문
안녕하세요 flutter 강의를 듣고 있는 수강생입니다. 섹션12에 프로젝트 세팅하기, GoRouter 세팅하기, Go 함수 이렇게 3개의 강의를 그대로 따라하고 있습니다. 그런데 context.go() 함수가 실행이 되지 않습니다. 에러 메시지가 따로 뜨지는 않는데 혹시 강사님께서는 현재도 실행이 잘 되시나요? go_router 버전은 4.2.2로 강의와 동일하게 맞춰주었고 flutter 버전은 3.0.5입니다. 감사합니다.
-
해결됨외워서 끝내는 SSL과 최소한의 암호기술
키 쌍 중 하나는 public으로 공개하는 이유가 궁금해요
공개키를 public으로 공개한다는 것이 꽤 의아한데요, 키 페어 중 하나가 공개된다는 것은 해커가 데이터를 가지고 암호화나 복화 둘 중 하나를 할 수 있다는 것으로 받아들여집니다.만약 그렇다면 왜 굳이 키를 공개하는지 궁금한데요, 두 키를 모두 private key로 만들어서 클라이언트, 서버 상호간만 교환하는 방식은 적용할 수 없는 건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
오류
이런 식으로 에러가 뜨는데 뭐가 문제인지 모르겠습니다...2022-10-03 20:09:18.454 ERROR 3909 --- [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : Table "COURSE" not found; SQL statement:insert into course (id, created_at, modified_at, title, tutor) values (default, ?, ?, ?, ?) [42102-214]2022-10-03 20:09:18.458 INFO 3909 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2022-10-03 20:09:18.468 ERROR 3909 --- [ main] o.s.boot.SpringApplication : Application run failedjava.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.4.jar:2.7.4] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.4.jar:2.7.4] at com.sparta.week02.Week02Application.main(Week02Application.java:18) ~[main/:na]Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into course (id, created_at, modified_at, title, tutor) values (default, ?, ?, ?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:259) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:233) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551) ~[spring-orm-5.3.23.jar:5.3.23] at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) ~[spring-tx-5.3.23.jar:5.3.23] at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) ~[spring-tx-5.3.23.jar:5.3.23] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152) ~[spring-tx-5.3.23.jar:5.3.23] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:174) ~[spring-data-jpa-2.7.3.jar:2.7.3] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.23.jar:5.3.23] at com.sun.proxy.$Proxy107.save(Unknown Source) ~[na:na] at com.sparta.week02.Week02Application.lambda$demo$1(Week02Application.java:26) ~[main/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) ~[spring-boot-2.7.4.jar:2.7.4] ... 5 common frames omittedCaused by: org.hibernate.exception.SQLGrammarException: could not prepare statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:37) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:186) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:111) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.prepare(GetGeneratedKeysDelegate.java:52) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3279) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3885) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:84) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:330) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:123) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:185) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:128) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:55) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:107) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:756) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:742) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:311) ~[spring-orm-5.3.23.jar:5.3.23] at com.sun.proxy.$Proxy104.persist(Unknown Source) ~[na:na] at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:666) ~[spring-data-jpa-2.7.3.jar:2.7.3] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:530) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:286) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:640) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:164) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:139) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:81) ~[spring-data-commons-2.7.3.jar:2.7.3] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) ~[spring-tx-5.3.23.jar:5.3.23] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388) ~[spring-tx-5.3.23.jar:5.3.23] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) ~[spring-tx-5.3.23.jar:5.3.23] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.23.jar:5.3.23] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.23.jar:5.3.23] ... 14 common frames omittedCaused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "COURSE" not found; SQL statement:insert into course (id, created_at, modified_at, title, tutor) values (default, ?, ?, ?, ?) [42102-214] at org.h2.message.DbException.getJdbcSQLException(DbException.java:502) ~[h2-2.1.214.jar:2.1.214] at org.h2.engine.SessionRemote.readException(SessionRemote.java:637) ~[h2-2.1.214.jar:2.1.214] at org.h2.engine.SessionRemote.done(SessionRemote.java:606) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.CommandRemote.prepare(CommandRemote.java:78) ~[h2-2.1.214.jar:2.1.214] at org.h2.command.CommandRemote.<init>(CommandRemote.java:50) ~[h2-2.1.214.jar:2.1.214] at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:480) ~[h2-2.1.214.jar:2.1.214] at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116) ~[h2-2.1.214.jar:2.1.214] at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92) ~[h2-2.1.214.jar:2.1.214] at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:1044) ~[h2-2.1.214.jar:2.1.214] at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:344) ~[HikariCP-4.0.3.jar:na] at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java) ~[HikariCP-4.0.3.jar:na] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$2.doPrepare(StatementPreparerImpl.java:109) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:176) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] ... 62 common frames omitted
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
안녕하세요 entity generateEmailCheckToken 생성자 관련 질문드립니다.
dto 에generateEmailCheckToken 생성자를만들어서처리해주어도 문제없을까요?현재 save 처리도Dto 클래스에서dto를 entity화 해서 처리해준 상황입니다.completeSignUp 등등 생성자를dto에서 만들고 싶은데문제가 있을까요~?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
공부방향을 잘 모르겠어요
강의를 따라 들으면서 드는 생각이 돌아가는 흐름을 강사님께서 쭉 이어나가는데 그 와중에 getWriter같은 함수는 뭔지 Websevlet의 name은 뭔지 urlpattern은 뭔지 다른 속성은 뭔지 이런 의문이 해결되지 않고 계속 흘러가는데 이런걸 하나하나 다 짚고 넘어가야 되나요 아니면 흐름을 보면서 공부하면 되나요?
-
미해결
객체와 메소드가 정확히 뭔가요?
입문자 자바스크립트 기초 강의를 수강하는데, 객체와 메소드에 관한 이야기가 나옵니다.그런데 객체에 대해서는 '값 또는 기능을 가진 데이터'라는 모호한 정의 설명에 그치고 메소드에 대해서는 충분한 설명 없이 그냥 자연스럽게 나와서 예시를 아무리 봐도 무슨 개념인지 이해할 수가 없습니다. 이후의 강의 영상에서도 객체나 메소드 얘기가 계속 나오는데 처음부터 개념을 이해할 수 없으니 수업을 따라가기가 어렵습니다.
-
미해결Vue.js + TypeScript 완벽 가이드
권한요청드립니다.
두번째 프로젝트 권한 요청드립니다.ssppoollsem@gmail.com
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이해한 내용이 맞는지 궁금합니다
데드락은 서로 락을 걸어버려 상대가 락을 풀때까지 하염없이 기다리는 상태먼저 AccountManager에서 ProcessLogin이 먼저 실행이 되었다고 가정했을 때 lock_guard를 사용하여 ProcessLogin이 끝날 때까지 다른 쓰레드의 AccountManager 접근을 막아버린다. 그와 거의 동시에 UserManager의 ProcessSave도 실행이 되면서 ProcessSave를 실행하는 쓰레드가 다른 쓰레드의 접근을 막아버린다. 이 때 ProcessLogin에서 UserManager::Inst()->GetUser를 실행하면 다른 쓰레드에서 UserManager에서 접근하지 못하도록 락을 걸고 GetUser를 실행해야 하는데 먼저 ProcessSave에서 user lock을 걸었기 때문에 추가적인 락을 하지 못하게 된다.또 GetAccount를 실행할 때도 ProcessLogin에서 먼저 account lock을 걸었기 때문에 GetAccount에서 lock_guard를 하지 못하고 멈춰서 다른 곳에서 account lock을 풀어줄 때까지 하염없이 기다리게 된다. 안녕하세요 강사님이렇게 이해를 했는데 맞는지 궁금합니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
이 경고는 어떻게하면 없어지나요?
찾아보니 mounted 확인하고 리턴시켜라는데 mounted가 존재하지 않네요.무시해도 상관없겠지만 개인적으로 노란줄 뜨는거 싫어해서 해결 방법이 있다면 알고 싶습니다.
-
미해결비전공 기획자 및 관리자를 위한 IT 필수 지식
안녕하세요! 강의자료 요청드립니다!
jmonism@gmail.com으로 강의자료 요청드립니다!
-
미해결피그마(Figma)를 활용한 UI디자인 입문부터 실전까지 A to Z
그리드 관련해서 질문이 있습니다.
에릭님 안녕하세요. '그리드 만들기' 강의에서 Mobile 예시를 설명해 주실 때 가로 375의 크기로 설명해 주셨습니다.거기에 그리드 칼럼에서 4개, center, width=64, gutter=30이라고 하셨는데 그렇게 하면 좌/우의 offset이 15/15가 아니고 15/14가 됩니다.영상에서 Container 345px이라고 적혀 있는데 실제로 해보면 346px이 나옵니다. (사진 첨부)이렇게 홀수의 프레임에서는 그리드 칼럼을 center가 아닌 stretch에 마진을 15로 줘야 할까요?(Left 또는 Right으로 하면 좌 또는 우에 14px offset이 나오게 됩니다.) 추가로 궁금한 점이 있습니다.저희가 OS에 관계없이 모바일 UI를 설계한다고 하면 피그마는 벡터 기반이기에 한 프레임 사이즈에서 ui를 설계하고 이를 개발자에게 전달하면 되지 않을까 싶습니다.물론 OS에 따라 기본 ui구조가 다를 것 같지만 이를 배제하고 동일한 디자인을 가져간다고 생각할 때 어떤 프레임 크기를 설정하고 작업을 하는게 좋을까요?감사합니다.