묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결생활코딩 - React
20.3 update에서 state변경이 안되는지 변경이 안됩니다
app.js import './App.css'; import { Component } from 'react'; import TOC from "./Components/TOC"; import ReadContent from "./Components/ReadContent"; import CreateContent from "./Components/CreateContent"; import UpdateContent from "./Components/UpdateContent"; import Subject from "./Components/Subject"; import Control from "./Components/Control"; class App extends Component { constructor(props){ super(props); this.max_content_id = 3; this.state = { mode: 'create', selected_content_id: 2, Subject: {title: "WEB", sub: "world wide web~~ hyun"}, welcome: {title: "Welcome", desc: "Hello, React~~"}, contents: [ {id:1, title:'HTML', desc:'HTML is for information'}, {id:2, title:'CSS', desc:'CSS is for Design'}, {id:3, title:'JavaScript', desc:'JavaScript is for interactive'} ] } } getReadContent() { var i = 0; while(i < this.state.contents.length){ var data = this.state.contents[i]; if(data.id === this.state.selected_content_id){ return data; break; } i = i + 1; } } getContent(){ var _title, _desc, _article = null; if(this.state.mode === 'welcome'){ _title = this.state.welcome.title; _desc = this.state.welcome.desc; _article = <ReadContent title={_title} desc={_desc}></ReadContent> }else if(this.state.mode === 'read'){ var _content = this.getReadContent(); _article = <ReadContent title={_content.title} desc={_content.desc}></ReadContent> }else if(this.state.mode === 'create') { _article = <CreateContent onSubmit = {function(_title, _desc){ // add content to this.state.contents this.max_content_id = this.max_content_id + 1; // this.state.contents.push ( // {id:this.max_content_id, title:_title, desc:_desc} // ); var _contents = this.state.contents.concat( {id:this.max_content_id, title:_title, desc:_desc} ) // var newContents = Array.from(this.state.contents); // newContents.push({id:this.max_content_id, // title:_title, desc:_desc}); this.setState ({ //contents:this.state.contents contents: _contents }); console.log(_title, _desc); }.bind(this)}></CreateContent> } else if(this.state.mode === 'update') { _content = this.getReadContent(); _article = <UpdateContent data={_content} onSubmit = { function(_id, _title, _desc){ // add content to this.state.contents // 14 line에 this.max_content_id = 3; 는 create에 사용된 것이므로 아래내용주석처리 // this.max_content_id = this.max_content_id + 1; //복제기능 수행 : 원본을 복사한 새로운 배열 생성 var _contents = Array.from(this.state.contents); //수정하고자하는 원소값과 같은 것을 찾는다. var i = 0; while(i < _contents.length){ //_contents[i].id갑과 입력한 id값이 같다면 if(_contents[i].id === _id){ _contents[i] = {id:_id, title:_title, desc:_desc}; break; } i = i + 1; } this.setState ({ //contents:this.state.contents //contents: newContents contents:_contents }); console.log(_id, _title, _desc); }.bind(this)}></UpdateContent> } return _article; } render() { console.log('App render'); return ( <div className="App"> <Subject title= {this.state.Subject.title} sub= {this.state.Subject.sub} onChangePage = { function () { this.setState({ mode:'welcome'}); }.bind(this)} > </Subject> <TOC onChangePage = { function (id) { this.setState({ mode:'read', selected_content_id:Number(id) }); }.bind(this)} data={this.state.contents}></TOC> <Control onChangeMode={function(_mode) { this.setState ({ mode:_mode }); }.bind(this)}></Control> {this.getContent()} </div> ); } } export default App; UpdateContent.js import { Component } from 'react'; class UpdateContent extends Component { constructor(props){ super(props); this.state = { id:this.props.id, title:this.props.data.title, desc:this.props.data.desc } this.inputFormHandler = this.inputFormHandler.bind(this); } inputFormHandler(e) { this.setState({[e.target.name]:e.target.value}); } render() { //this.props.title = 'hi; console.log(this.props.data); console.log('UpdateContent render'); return ( <article> <h2>Update</h2> <form action='/create_process' method='post' onSubmit={function(e){ e.preventDefault(); this.props.onSubmit( // state의 동기화 this.state.id, //e.target.title.value, // _title this.state.title, //e.target.desc.value // _desc this.state.desc ); }.bind(this)} > <input type="hidden" name="id" value={this.state.id}></input> <p> <input type="text" name="title" placeholder='title' value={this.state.title} //onChange = {this.inputFormHandler.bind(this)} onChange = {this.inputFormHandler} ></input> </p> <p> <textarea // onChange = {this.inputFormHandler.bind(this)} onChange = {this.inputFormHandler} name="desc" placeholder='description' value={this.state.desc}></textarea> </p> <p> <input type="submit" ></input> </p> </form> </article> ); } } export default UpdateContent;
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
jenkins 설치 후, 플러그인 설치 시 오류
echo '======== [4] OpenJDK 설치 ========' # yum list --showduplicates java-17-openjdk yum install -y java-17-openjdk echo '======== [5] Gradle 설치 ========' yum -y install wget unzip wget https://services.gradle.org/distributions/gradle-7.6.1-bin.zip -P ~/ unzip -d /opt/gradle ~/gradle-*.zip cat <<EOF |tee /etc/profile.d/gradle.sh export GRADLE_HOME=/opt/gradle/gradle-7.6.1 export PATH=/opt/gradle/gradle-7.6.1/bin:${PATH} EOF chmod +x /etc/profile.d/gradle.sh source /etc/profile.d/gradle.sh echo '======== [6] Git 설치 ========' yum install -y git-2.39.3-1.el8_8 echo '======== [7] Jenkins 설치 ========' wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key yum install -y java-11-openjdk jenkins-2.414.2-1.1 systemctl enable jenkins systemctl start jenkins위 설치 스크립트를 바탕으로 jenkins를 설치 후에, 플러그인을 설치하고 있었는데 위와 같이 몇몇 플러그인이 설치가 되지 않았습니다 ㅠ제가 이 강의하면서 jenkins를 거의 처음 써봐서 이런 경우 어떻게 대처해야할지 잘 모르겠습니다...!추상적으로 여쭤봐 죄송하지만, 혹시 어떤 대처를 하면 될지 알려주시면 감사드리겠습니다.혹시 자바 설치 버젼도 필요하실까봐 올려드립니다ls /usr/lib/jvm/ java-11-openjdk-11.0.18.0.9-0.3.ea.el8.x86_64 jre-11-openjdk-11.0.18.0.9-0.3.ea.el8.x86_64 java-17-openjdk-17.0.6.0.9-0.3.ea.el8.x86_64 jre-17 jre jre-17-openjdk jre-11 jre-17-openjdk-17.0.6.0.9-0.3.ea.el8.x86_64 jre-11-openjdk jre-openjdk ## java --version openjdk 17.0.6-ea 2023-01-17 LTS OpenJDK Runtime Environment (Red_Hat-17.0.6.0.9-0.3.ea.el8) (build 17.0.6-ea+9-LTS) OpenJDK 64-Bit Server VM (Red_Hat-17.0.6.0.9-0.3.ea.el8) (build 17.0.6-ea+9-LTS, mixed mode, sharing) 젠킨스 로그인 후 dependency 오류 내용Some plugins could not be loaded due to unsatisfied dependencies. Fix these issues and restart Jenkins to re-enable these plugins. Dependency errors: Timestamper (1.26) Plugin is missing: antisamy-markup-formatter (159.v25b_c67cd35fb_) Pipeline: Declarative Extension Points API (2.2150.v4cfd8916915c) Plugin is missing: workflow-cps (3791.va_c0338ea_b_59c) Pipeline Graph Analysis Plugin (216.vfd8b_ece330ca_) Plugin is missing: workflow-cps (3659.v582dc37621d8) Pipeline (596.v8c21c963d92d) Plugin is missing: workflow-cps (2660.vb_c0412dc4e6d) Plugin is missing: pipeline-groovy-lib (593.va_a_fc25d520e9) Pipeline: GitHub Groovy Libraries (42.v0739460cda_c4) Plugin is missing: pipeline-groovy-lib (629.vb_5627b_ee2104) Checks API plugin (2.0.2) Plugin is missing: plugin-util-api (3.3.0) Pipeline: Multibranch (770.v1a_d0708dd1f6) Plugin is missing: workflow-cps (3691.v28b_14c465a_b_b_) Gradle Plugin (2.10) Plugin is missing: workflow-cps (2660.vb_c0412dc4e6d) Bootstrap 5 API Plugin (5.3.2-3) Plugin is missing: font-awesome-api (6.4.2-1) Folders Plugin (6.858.v898218f3609d) Plugin is missing: ionicons-api (56.v1b_1c8c49374e) Some of the above failures also result in additional indirectly dependent plugins not being able to load. Indirectly dependent plugins: JUnit Plugin (1265.v65b_14fa_f12f0) Failed to load: Bootstrap 5 API Plugin (bootstrap5-api 5.3.2-3) Pipeline (596.v8c21c963d92d) Failed to load: Pipeline: Multibranch (workflow-multibranch 770.v1a_d0708dd1f6) Matrix Project Plugin (822.824.v14451b_c0fd42) Failed to load: JUnit Plugin (junit 1265.v65b_14fa_f12f0) Pipeline: REST API Plugin (2.34) Failed to load: Pipeline Graph Analysis Plugin (pipeline-graph-analysis 216.vfd8b_ece330ca_) Workspace Cleanup Plugin (0.45) Failed to load: Matrix Project Plugin (matrix-project 822.824.v14451b_c0fd42)
-
미해결
java scanner 오류
txt파일에는 아래와 같이 저장되어 있습니다. 점수가 가장 높은 학생의 이름을 출력해야하고 점수가 동일할 경우 모두 출력하는 프로그램입니다.김일번 64김이번 83김삼번 26김사번 36김오번 78김육번 54김칠번 60김팔번 85김구번 45김십번 85프로그램을 실행했을 때Exception in thread "main" java.util.InputMismatchExceptionat 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)이렇게 오류가 발생합니다. 해결방법 아시는 분 가르쳐주세요!!ㅜㅜpackage kh; import java.io.*; import java.util.Scanner; class Student { //int id; String name; int grade; Student(String name, int grade) { //this.id=id; this.name=name; this.grade=grade; } } class StudentTable{ Student[] st; StudentTable(int size) { st=new Student[size]; } void maxStudent() { int maxGrade=0; for(Student student : st) { if(student.grade > maxGrade) { maxGrade = student.grade; } } System.out.println("최고 점수를 가진 학생:"); for(Student student : st) { if(student.grade == maxGrade) { System.out.println(" " + student.name + " " + student.grade); } } } } public class homework05{ public static void main(String[] args) { StudentTable stable; try { FileInputStream fin=new FileInputStream("C:\\Users\\user\\Desktop\\student_score.txt"); Scanner scanner = new Scanner(fin); int size=scanner.nextInt(); stable=new StudentTable(size); for(int i=0; i<stable.st.length; i++) { //int id=scanner.nextInt(); String name=scanner.next(); int grade=scanner.nextInt(); stable.st[i]=new Student(name,grade); System.out.println(" "+name+" "+grade); } scanner.close(); stable.maxStudent(); } catch(FileNotFoundException e) { System.out.println("file not exist"); } } }
-
미해결
크롤링 질문입니다
웹사이트에서 크롤링한 데이터? 코드를 파이어베이스 안에 저장하여 불러올 수 있나요?
-
미해결
원본에서 가져오기 bs4를 확인할 수 없습니다.
import requests from bs4 import BeautifulSoup # naver 서버에 대화를 시도 response = requests.get("http://www.naver.com/ ") # 네이버 에서 html 줌 html = response.text # 네이버 에서 html 줌 soup = BeautifulSoup(html, 'html.parser') #id 값이 ~~인 것 한개를 찾아냄 word=soup.select_one('#_blank') #텍스트 요소만 출력함 print(word)이거 하는데 제목과 같이 막혀서 못 하고 있습니다. 어떻게 해결해야 할까요?
-
해결됨김영한의 실전 자바 - 기본편
오타있어요.
caw -> cow로 바꿔야할 것 같습니다. 교재랑 예제 파일 다 caw로 되어있어요.
-
미해결
안녕하세요.. 로지심 회로 질문 해도 될까요?
공부 시작해보려는 새싹입니다..!덧셈기 만들어보는데 뭐가 잘못된건지 잘 모르겠어요그리고 4비트 데이터를 2개의 7-segment 에 표현하려는데 덧셈기 없이 만드는 게 맞겠죠..?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Thymeleaf 3.1에서의 thymeleaf-extras-java8time 관련 업데이트 사항
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의에선 인텔리제이 우측 Gradle의 Dependencies에서 thymeleaf-extras-java8time 라이브러리를 찾을 수 있었는데, 제 인텔리제이에선 찾을 수 없더라고요. 검색해 보니 아래 링크에서https://www.thymeleaf.org/doc/articles/thymeleaf31whatsnew.html 1.4. Core support for the java.time package 항목에 The thymeleaf-extras-java8time extras module has been integrated into the Thymeleaf core: the #temporals expression utility object is now always available. 이렇게 나와 있습니다.타임리프 3.1부터는 스프링 부트가 자동으로 라이브러리를 추가해 줄 필요도 없이, 바로 사용할 수 있는 거로 변경된 거라고 보면 될까요? +)https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#appendix-b-expression-utility-objects 타임리프 3.1 공식 문서 튜토리얼에 Temporals(java.time) 관련 내용이 추가되었습니다.1. 타임리프 - 기본 기능.pdf(v20240224)에 있는 공식 문서는 3.0이라서 링크 첨부드립니다.
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
swingbench 2.6 다운이 안받아져요
swingbench 2.6 설치하려고 아래 사이트 갔는데 not found 뜨네요...다른곳에서 다운받을 수 없을까요?ㅜ https://www.dominicgiles.com/downloads.html
-
미해결Microservice 구현 (with EDA,Hexagonal, DDD)
음성 부분이 너무 깨지는데...
이런 부분은 빨리 보안해 주셔야 하지 않을까요?중간 내용이 알아 들을수 없어서 너무 답답 합니다.싼강의도 아니고... 만들어 진지 좀 된거 같은데 빠른 보안이 필요해 보입니다.그리고 인프런은 이런부분은 한번은 검증해야 하지 않나요.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
왜 요청에다가 AthenticFilter를 적용할까요?
apigateway의 application.yml을 보면 get요청에는 authorizationHeaderFilter를 적용시키고 있습니다. authenticFilter는 그저 로그인 요청시 attempthAuthentication메소드와 successfulAthentication메소드를 통해 인증을 처리하고 response헤더에 토큰을 추가하는 역할입니다. 따라서 로그인 요청에만 적용하면 될 것 같은데, 깃허브의 최신코드 버전을 보면 거의 모든 요청에 authenticationFilter를 적용하고 있습니다. 왜 로그인요청이 아닌 다른 요청에다가 AthenticFilter를 적용할까요? apiGateway-service에서 GET요청만 AuthoriztionFilter를 적용하면 되지않나요??http.authorizeHttpRequests((authz) -> authz .requestMatchers(new AntPathRequestMatcher("/actuator/**")).permitAll() .requestMatchers(new AntPathRequestMatcher("/h2-console/**")).permitAll() .requestMatchers(new AntPathRequestMatcher("/users", "POST")).permitAll() .requestMatchers(new AntPathRequestMatcher("/h2-console/**")).permitAll() // .requestMatchers(new AntPathRequestMatcher("/welcome/**")).permitAll() // .requestMatchers("/**").access(this::hasIpAddress) .requestMatchers("/**").access( new WebExpressionAuthorizationManager("hasIpAddress('127.0.0.1') or hasIpAddress('172.30.1.48')")) .anyRequest().authenticated() )
-
해결됨[개정판] 파이썬 머신러닝 완벽 가이드
분류실습 중 데이터 분리 후 학습에 대해서 질문있습니다.
권철민 교수님! 늘 감사드립니다.늘 업데이트도 해주셔서 정말 감동입니다 :) 질문 있습니다!산탄데르 만족예측관련해서 주신 실습코드에 보면,XGBoost의 "early_stopping_rounds" 를 사용하기 위해학습데이터 셋 분리분리된 데이터에서 조기종료 검증셋 분리모델학습이렇게 구성되어있습니다. ## 1. 학습셋 분리 X_train, X_test, y_train, y_test = train_test_split(X_features, y_labels,test_size=0.2, random_state=0,stratify=y_labels) ## 2. X_train, y_train을 다시 학습과 검증 데이터 세트로 분리. X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.3, random_state=0, stratify=y_train) ## 3. 모델 훈련 from xgboost import XGBClassifier from sklearn.metrics import roc_auc_score # n_estimators는 500으로, learning_rate 0.05, random state는 예제 수행 시마다 동일 예측 결과를 위해 설정. xgb_clf = XGBClassifier(n_estimators=500, learning_rate=0.05, random_state=156) # 성능 평가 지표를 auc로, 조기 중단 파라미터는 100으로 설정하고 학습 수행. xgb_clf.fit(X_tr, y_tr, early_stopping_rounds=100, eval_metric='auc', eval_set=[(X_tr, y_tr), (X_val, y_val)])여기서 질문이 있습니다.최종적으로 모델을 만들때는 X_train, y_train 셋으로 사용해야 더 많은 데이터로 학습을 하기에 성능이 좋지 않나요? 아무래도, X_tr 보단 X_train셋의 데이터가 많으므로 좋을거 같아서요.. 물론, 조기종료(early_stopping_rounds)를 사용하지 못하겠지만... 아니면 일단 조기종료를 통해 하이퍼파라미터를 찾고, 그 파라미터로 맨 마지막에 X_train을 사용하라는 의미로 생각해도 될까요?? 교수님께 늘 감사드리며, 24년도 늘 건강하고 행복한 일들로만 가득하길 기원합니다^^. 좋은 하루 되세요!
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
파티션 복제의 성능이슈는 없나요?
안녕하세요 강의 잘 보고 있습니다.복제강의 수강중 궁금한점이리더 - 팔로워 간의 복제시 팔로워에서 리더의 오프셋을 확인해 차이점이 있다면 팔로워로 저장한다고 이해했는데요.이러한 복제 과정으로 인해 리더파티션에 이슈가 생길만한 케이스가 있는지 궁금합니다.기본적으로 리더 파티션이 프로듀서 - 컨슈머와의 통신을 담당하기에 팔로워 파티션에서 복제과정을 담당하게 되는 형태인것 같아 문제가 없을것 같긴한데 .. 꼭 이렇게 생각하고 넘어가면 문제가 생기더라구요 ㅎ..혹시 복제과정이 리더 파티션 성능에 영향을 주게될만한 이슈가 있을지 우려되서 질문드립니다
-
미해결눈떠보니 코딩테스트 전날
코딩 처음인데 환경 세팅을 어떻게하는지 모르겠어요
VScode만 써봤는데 다른것 같더라고요. 어떤 환경에서 코딩하는건지 설명해주는 영상은 없나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Mvc방식에서 메서드의 파라미터에 Model model을 사용하는 이유가 무엇인가요? 그리고 api방식에서의 질문이 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]뒷 내용이 어려워서 다시 복습하는중인데 파라미터에 Model model을 사용하는 이유가 궁금합니다. 파라미터로 받지 않고 메서드 내부에서 Model model;model.addAttribute(모델데이타, value); 이렇게 사용할 수 는 없는건가요? 그리고 api통신에서 어노테이션에 @ResponseBody를 확인하면 html로 반환하지 않는다고 인식 후 return이 스트링인지 객체인지 확인 후 어떤 형식으로 반환할지 정해지는것인가요?객체를 반환할 때 서버에 반환하던 웹 브라우저에 반환하던 스프링은 누구에게 반환을 하는건지 몰라도 되는것인가요? 예를 들면 현 강의에서는 웹 브라우저에 반환을 하였지만 리액트를 이용할 때는 노드환경(노드환경을 서버로 이해하였습니다.)에 반환을 하는 방식인데 스프링은 요청한 주체와 반환되는 값이 어디로 가는지는 알 필요가 없는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인자로 전달되는 request, response 객체는 참조값으로 공유되는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]FrontControllerServletV2 에서 호출한 MemberListControllerV2 인스턴스 내부에서 인자로 받은 요청 객체에 members 값을 setAttribute 로 설정한것을 봤습니다. 이후 해당 인스턴스에서 반환한 MyView 객체를 통해 render를 수행하던데, 이때 req 에는 MemberListControllerV2에서 요청객체에 설정했던 members 값이 들어가는 것 같던데 원리가 무엇인가요?.. 저는 요청,응답 객체를 다른 인스턴스에 인자로 전달(복사)한다고 생각했습니다. 어떻게 frontControllerServletV2에서 MemberListControllerV2 에서 설정한 members 객체를 사용할 수 있는 건가요?
-
해결됨C개발자를 위한 최소한의 C++
차이점을 잘 모르겠습니다.
주신 프로그램 중 constructSelect.cpp 에서 디폴트 생성자를 지우면 에러가 발생하는데 virtualFunction 에서는 디폴트 생성자가 없어도 동작합니다. constructSelect.cpp 에서 선언 방식이 아닌 new 연산자를 사용해서 해봐도 에러가 발생하고객체 내에 멤버메서드가 없어서 그런가 해서 멤버를 만들어도 에러가 발생합니다VirtualFunction 내의 소멸자의 virtual 을 제거해도 이건 잘 작동합니다.눈으로 봐서는 도저히 차이점을 모르겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ModelAttribute 사용 이유가 헷갈립니다.
@Slf4j @Controller @RequiredArgsConstructor public class LoginController { private final LoginService loginService; @GetMapping("/login") public String loginForm(@ModelAttribute("loginForm") LoginForm form) { return "login/loginForm"; } @PostMapping("/login") public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if (loginMember == null) { // 정보 불일치 시... // reject : 글로벌 오류 bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다."); return "login/loginForm"; } // 로그인 성공 처리 // TODO return "redirect:/"; // 성공 시 홈으로 리다이렉트 } }안녕하세요 '로그인 기능' 강의를 듣고 궁금한 점이 생겨 질문을 올립니다. @GetMapping("/login") public String loginForm(@ModelAttribute("loginForm") LoginForm form) { return "login/loginForm"; }위 메서드는 "/login"이라는 GET 요청이 오면 loginForm 파일을 실행하게 됩니다. 따라서 단지 화면을 출력하는 역할에 불과한데, 왜 @ModelAttribute("loginForm") LoginForm form을 작성하신건지 이해가 잘 가지 않습니다. @GetMapping("/login") public String loginForm() { return "login/loginForm"; }그냥 위처럼 작성하면 안되는건가요? 만약 PostMapping처럼 데이터를 저장하는 요청이라면, ModelAttribute를 통해 LoginForm의 인스턴스를 저장하는 것이 이해가 가지만,GetMapping에는 왜 작성하신건지 이해가 잘 안갑니다 ㅠㅠ감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링메세지 소스 사용 오류
@SpringBootTest public class MessageSourceTest { @Autowired MessageSource ms; @Test void helloMessage() { String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } }를 실행했더니org.opentest4j.AssertionFailedError: Expecting: <"??">to be equal to: <"안녕">but was not.필요:"안녕"실제 :"??" 2024-04-07 17:34:37.790 INFO 6288 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'오류가 뜹니다. 이유가 뭔가요?
-
해결됨C개발자를 위한 최소한의 C++
이동생성자 관련
안녕하세요. 선생님 이동 생성자 강의 내용 중 질문이 있습니다. (아래 코드 참고) delete pnData를 하면, 포인터 변수가 해제되어pnData = rhs.pnData;를 실행할 수 없는 것이 아닌지 궁금합니다. 실재로는 포인터 값은 그대로고, 가리키는 값(int 0)만 삭제되는 것인가요? 포인터 값은 놔두고 가리키는 값만 없애는 문법은 어떻게 되나요? delete를 안하고, pnData = nullptr; 로만 수정해도 됬을 것 같습니다. class TestData { public: TestData(){ pnData = new int(0); } ... TestData(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } ... TestData& operator=(TestData&& rhs) noexcept{ delete pnData; pnData = rhs.pnData; rhs.pnData = nullptr; } }