묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
강의 자료 문의
안녕하세요. 강의에서 사용한 ppt 자료 어디서 받을 수 있는지 궁금합니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-J 질문
안녕하세요 강사님 해당 문제를 강사님과 동일한 방법으로 푸는데 배열 a가 [100][100]이면 틀렸다고 나오더라구요입력은 s를 통해 받고 저장은 a에다 해서 버퍼 문제가 없을거 같은데 왜 틀리는건가요….?
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
쿼리 테이블 별칭
선생님꼐서 쓰는 쿼리를 보면 select m from Member m 이런식으로 m별칭주시는데 m.*이런식이나 테이블이 하나라면 별칭 없이 가는것과 무슨 차이가 있을까요?? 그냥 단순히 개발자 스타일일까요??
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
Exercise 22. 문자열 다루기 (strip) 문의
code = ' 000660\n abc'print (code)print (code.strip(' \n')) 결과 000660 abc 000660 abc로 \n 이 제거가 되지 않고 줄 바꿈 되었습니다.잘못 코딩한 부분이 어디인지 문의 드립니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
리포지토리를 다른것으로 변경시 어노테이션만 다른곳으로 옮기면 되나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]의존관계 자동 주입을 위해 @Repository를 사용하였는데 메모리멤버맃포지토리가 아닌 데이타베이스멤버리포지토리를 사용하려면 메모리멤버리포지토리에 있는 @Repository어노테이션을 지우고 실제 사용할 데이타베이스멤버리포지토리에 @Repository어노테이션을 사용하면 되나요?
-
미해결생활코딩 - 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이 스트링인지 객체인지 확인 후 어떤 형식으로 반환할지 정해지는것인가요?객체를 반환할 때 서버에 반환하던 웹 브라우저에 반환하던 스프링은 누구에게 반환을 하는건지 몰라도 되는것인가요? 예를 들면 현 강의에서는 웹 브라우저에 반환을 하였지만 리액트를 이용할 때는 노드환경(노드환경을 서버로 이해하였습니다.)에 반환을 하는 방식인데 스프링은 요청한 주체와 반환되는 값이 어디로 가는지는 알 필요가 없는건가요?