묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Next + React Query로 SNS 서비스 만들기
얇은 복사 value.pages 질문
강의 17분 50초 정도에 말씀하신 얇은 복사중에서 왜 이런식으로 복사해야하는지 이해가 잘 되지 않습니다. const shallow = { ...value }; value.pages = { ...value.pages }; value.pages[pageIndex] = [...value.pages[pageIndex]];제가 강의를 보기전 테스트할때는 해당 코드로 작성하였는데 해당 코드는 정상적으로 작동하지 않았습니다 const shallow = { ...value }; shallow.pages = { ...value.pages }; shallow.pages[pageIndex] = [...value.pages[pageIndex]];혹시 왜 첫번째 코드블록처럼 코드를 작성해야하는지 간단하게 설명해주시면 감사하겠습니다
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
hashtag 검색 결과 없는 경우 status code처리
강의에서는 해시태그 검색결과가 없는 경우404로 처리하는 방향으로 가고 있습니다궁금하여 다른 곳에서는 어떻게 하나 확인해보았습니다아마존의 경우 200 OK처리하여주는데검색 결과가 있고 없고에 대한 응답처리는 api 작성자에 따라 다르게 처리가 가능한 영역인가요?
-
해결됨Spring Boot JWT Tutorial
setAuthentication
안녕하세요JwtFilter 에서 StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)조건을 만족하면 아래와 같이 SecurityContextHolder.getContext().setAuthentication(authentication); 인증정보를 저장하는데 컨트롤러에서 또 인증정보를 저장하는건가요 ??정보를 그럼 총 2번 저장하는건가요??위 JwtFilter 에서 (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) 이조건이 만족했을떄
-
미해결Airflow 마스터 클래스
postgres port 설정 질문있습니다
안녕하세요 선생님!지금 DBeaver에 DB 연결하는 과정 진행중에있는데, 제가 기존에 5432포트를 사용하고있어서 그런지 아래와같이 에러가 발생합니다.이런 경우에는 yaml 파일에서 포트를 임의로 수정해도 괜찮을까요? 임의로 수정했을때 혹시 이후의 과정에서 문제가 없는지 궁금합니다.그리고 동일번호의 포트는 DBeaver에서 2개 이상 쓸수없는게 맞는지도 궁금합니다
-
미해결스프링 프레임워크는 내 손에 [스프2탄]
스프링 시큐리티 질문
package kr.bit.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration //스프링 컨테이너 설정파일이라고 메모리에 올림 @EnableWebSecurity public class SecurityConfiguration { @Autowired private UserDetailsServiceImpl userDetailsService; //패스워드 인코딩 객체를 스프링 컨테이너에 등록 @Bean public PasswordEncoder PasswordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(csrfConfig -> csrfConfig.disable() ) .authorizeHttpRequests(authorizeRequests -> authorizeRequests .anyRequest().permitAll() ) .formLogin(login -> login .loginPage("/member/login") .defaultSuccessUrl("/board/list") ) .logout(logout -> logout .logoutUrl("/member/logout") .logoutSuccessUrl("/") ) .userDetailsService(userDetailsService); return http.build(); } } 모든 접근에 대해 permitAll()을 하면 http://localhost:8080/m15/http://localhost:8080/m15/member/login둘다 잘 접속 되지만package kr.bit.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.factory.PasswordEncoderFactories; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration //스프링 컨테이너 설정파일이라고 메모리에 올림 @EnableWebSecurity public class SecurityConfiguration { @Autowired private UserDetailsServiceImpl userDetailsService; //패스워드 인코딩 객체를 스프링 컨테이너에 등록 @Bean public PasswordEncoder PasswordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(csrfConfig -> csrfConfig.disable() ) .authorizeHttpRequests(authorizeRequests -> authorizeRequests .requestMatchers("/", "/member/**").permitAll() .requestMatchers("/board/**").authenticated() ) .formLogin(login -> login .loginPage("/member/login") .defaultSuccessUrl("/board/list") ) .logout(logout -> logout .logoutUrl("/member/logout") .logoutSuccessUrl("/") ) .userDetailsService(userDetailsService); return http.build(); } } requestMatchers 로 permitAll()하면http://localhost:8080/m15/로 접속하면http://localhost:8080/m15/member/login로 이동하면서 에러가 발생합니다. 스프링 부트 버전은 3.2.1입니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
26분에 pet을 nullptr로 바꾸는 이유
소멸자에서if (_pet) 은pet이 nullptr이 아닐 때 참이되어 _pet을 지울건데 이동대입연산자에서 knight의 _pet을 nullptr로 바꾸면소멸자의 if문을 통과하지 못해서_pet이 삭제되지 않는거 아닌가요?? 이동대입연산으로 똑같은 pet을 만든 다음에pet을 넘겨줬으니까삭제해도 되는거 아닌가 해서 질문드립니다
-
미해결Vue 3 & Firebase 10 커뮤니티 만들기 풀스택 - "활용편" (with Pinia, Quasar, Tiptap, VueUse)
구글 로그인 안돼요 ㅠ
구글 로그인 하기 똑같이 따라했는데, 구글 계정으로 로그인하기 시 반응이 없습니다. 몇번 돌려봐도 코드는 똑같은데 왜 반응이 없을까요 ..
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JdbcTemplateMemberRepository 에러
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]섹션 6 순수 JDBC강의 중 에러가 나서 질문 드립니다line 3에서 이런 오류가 나는데 왜 발생하는 건가요?line 3 을 주석 처리하고 실행하면 이런 오류가 뜨고 localhost로 접속 후 회원가입을 하면 Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Mon Jan 01 19:33:51 KST 2024There was an unexpected error (type=Internal Server Error, status=500). 이런 에러가 뜹니다
-
미해결[리뉴얼] 처음하는 파이썬 데이터 분석 (쉽게! 전처리, pandas, 시각화 전과정 익히기) [데이터분석/과학 Part1]
수강자료 다운로드 오류
수강자료 다운로드 받았는데 자꾸 확인되지 않음 이라고 뜨네요어떤 오류인지 모르겠습니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
client url 질문
redirect를 이해했다고 생각했는데 아직 제대로 이해하지 못한 것 같아서 질문 남겨요 그냥 redirect: 이걸 안쓰면 client의 URL은 바뀌지 않는거잖아요?근데 왜 redirect를 안써도 client의 URL도 바뀌는 거죠? @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model){ Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "basic/item"; }이거 쓰면 /itemId 가 붙은 URL로 바뀌잖아요. 그럼 redirect 안써도 url이 자동으로 바뀌는거 아닌가요?? 근데 왜 redirect: 를 안쓰면 client의 URL은 바뀌지 않는다는 것일까요...제가 어디를 이해 못하고 있는건지 아니면 어디를 잘못 생각하고 있는건지 모르겠습니다...AI 답변 말고 다른 사람께서 답변 달아주시면 정말 감사하겠습니다ㅠㅠㅠ
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
jetbrain에서 디버거 사용
안녕하세요, 젯브레인 사용중이라 혹시 도움될까싶어 글 남겨요.버전에 따라 조금씩 다를지 모르겟는데, 우측 상단에Current File > Edit Configurations... 클릭 Run/Debug Configurations 화면에서+ 또는 Add new... 클릭NodeJS 선택 후 Name은 Debug로 입력 그리고 아래 Configuration 탭에서 Node Parameters: node_modules/@nestjs/cli/bin/nest.js start --debug --watchJavascript File: src/main.ts그리고 Apply, OK 로 설정 완료 후 처음 Current File 부분이 Debug로 변경되어있는것 확인 후, 우측 실행버튼 클릭그러면 하단에 실행 화면이 나오는데, 스크롤 위로 올려보면 ws://127.0.0.1:..../aaaa-bbbb-cccc-dddd 링크 클릭 > Threads & Variables 탭 누르면나머진 강의하고 똑같이 나오니 강의 설명으로 참고하시면 돼요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberServiceIntegrationTest 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. MemberServiceIntegrationTest의 회원가입 테스를 진행 중에 오류가 발생하여 질문을 남깁니다..제가 알아본걸로는 빈 자동 주입이 2개이상여서 안되는것 같아서 어노테이션들도 확인해봤는데 없었고 다른 이유들도 많이 봤지만 오류를 찾을 수 없어 질문 남깁니다.... [에러 코드]org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springConfig' defined in file [/Users/hyrki/Desktop/study/hello/build/classes/java/main/hellospring/hello/SpringConfig.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springDataJpaMemberRepository' defined in hellospring.hello.repository.SpringDataJpaMemberRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is org.springframework.data.repository.query.QueryCreationException: Could not create query for public abstract java.util.Optional hellospring.hello.repository.MemberRepository.findfById(java.lang.Long); Reason: Failed to create query for method public abstract java.util.Optional hellospring.hello.repository.MemberRepository.findfById(java.lang.Long)! No property 'findfById' found for type 'Member'; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional hellospring.hello.repository.MemberRepository.findfById(java.lang.Long)! No property 'findfById' found for type 'Member' ㅠㅠㅠㅠㅠㅠㅠㅠ부탁 드리겠습니다.....
-
미해결Next + React Query로 SNS 서비스 만들기
useSWR, react-query 중 어떤것을 사용해야하는지 선택하는 기준점에 대해서 알고싶습니다.
예를들어, 이런 소셜 네트워크 서비스같은 경우에는 useSWR보다, react-query가 다양한 기능을 제공해주어, 적합하다고 생각이 되어집니다. 1 . 단순 데이터만 갖고오는 사이트가 아니라면, 대부분 react-query가 더 좋다고 생각하는데, useSWR은 어떤 서비스에서 주로 채택하면 좋은지에 대해 알고싶습니다. react-query와 useSWR을 혼용해서 사용했을때 더 좋아지는 경우가 있을까요? 어떠한 서비스를 만들때, useSWR, react-query를 선택해야한다면, 어떤 기준으로 판별하는 것이 좋은지에 대해서도 알고 싶습니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
안녕하세요. Component 동작으로 이해하기 강의 도중 궁금한 점이 있어 질문을 남깁니다.
안녕하세요, 강의 듣는 도중 궁금한 점이 있어서 글을 남깁니다.1. worker node를 master node에 join 시킨 다는게 무엇인지, 구체적인 의미가 궁금합니다.worker component와 worker node는 동일한 개념인지? worker component에 application을 올리기 위한 공간이라면, kubelet은 왜 worker component에 포함이 되지 않는지Addon은 어디에 설치되는 것인지, 검색해보니 addon은 control plane component와 구분되는 개념인 것 같은데, 그림 상에서는 control plane component 내부에 있어서 관련되어 있는지 궁금합니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
redirect 질문
초반에 redirect를 이해한거 같다가 들으면서 제가 제대로 이해하고 있는지 몰라서 확인차 질문 남겨요 redirect는 목적이 client의 URL을 바꾸는게 맞나요? redirect를 안쓰면 즉 "redirect:" 이 구문이 없는 viewname을 String으로 return하면 viewResolver가 viewname에 맞는 뷰를 리턴하고 client의 URL은 안바뀌고 화면만 바뀌는거고 redirect를 쓰면 화면도 바뀌고 client의 URL도 바뀌는거 맞나요? 그래서 저는 client가 POST 중복 요청을 보낼 수 없도록 redirect를 써서 client의 URL까지 바꿔주는 작업이라고 이해했는데 이거 맞는건가요? +근데 그냥 redirect 안써도 화면도 바뀌고 url도 바뀌는데 그럼 그냥 redirect 안써도 되는거 아닌가요? 예를 들어 제가 상품목록에서 A 상품을 누르면 url도 basic/items/1 이렇게 바뀌는데 이럴때는 redirect를 안쓰잖아요? 그럼 redirect랑의 차이점이 없는거 같은데요..?
-
해결됨깃헙 블로그(Github blog)로 차별화 된 나만의 홈페이지 만들기!
bundle exec jekyll serve
PS D:\Programming\VSC\blog> bundle add webrickFetching gem metadata from https://rubygems.org/...........Resolving dependencies...Fetching gem metadata from https://rubygems.org/...........Resolving dependencies...PS D:\Programming\VSC\blog> bundle exec jekyll serveC:/Users/Lee/.local/share/gem/ruby/3.3.0/gems/jekyll-4.3.3/lib/jekyll.rb:28: warning: csv was loaded from the standard library, but will no longer be part of the default gems since Ruby 3.4.0. Add csv to your Gemfile or gemspec. Also contact author of jekyll-4.3.3 to add csv into its gemspec.C:/Users/Lee/.local/share/gem/ruby/3.3.0/gems/liquid-4.0.4/lib/liquid/standardfilters.rb:2: warning: bigdecimal was loaded from the standard library, but will no longer be part of the default gems since Ruby 3.4.0. Add bigdecimal to your Gemfile or gemspec. Also contact author of liquid-4.0.4 to add bigdecimal into its gemspec.Configuration file: D:/Programming/VSC/blog/_config.ymlTo use retry middleware with Faraday v2.0+, install faraday-retry gemSource: D:/Programming/VSC/blogDestination: D:/Programming/VSC/blog/_siteIncremental build: disabled. Enable with --incrementalGenerating...Jekyll Feed: Generating feed for postsDeprecation Warning: Using / for division is deprecated and will be removed in Dart Sass 2.0.0.Recommendation: math.div(9, 16)More info and automated migrator: https://sass-lang.com/d/slash-div╷31 │ $mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.)│ ^^^^╵D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\magnific-popup\_settings.scss 31:39 @importD:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\magnific-popup\_magnific-popup.scss 3:9 @importminimal-mistakes.scss 13:9 @importD:\Programming\VSC\blog\assets\css\main.scss 4:9 root stylesheetDeprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0.Recommendation: math.div($value, 16px) or calc($value / 16px)More info and automated migrator: https://sass-lang.com/d/slash-div╷28 │ @return $value / 16px * 1em;│ ^^^^^^^^^^^^^╵D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\_helpers.scss 28:13 base-conversion()D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\_helpers.scss 20:13 breakpoint-to-base-em()D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\parsers\single\_default.scss 8:29 breakpoint-parse-default()D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\parsers\_single.scss 22:14 breakpoint-parse-single()D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\_parsers.scss 153:18 breakpoint-parse()D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\_parsers.scss 48:22 breakpoint()D:\Programming\VSC\blog\_sass\minimal-mistakes\vendor\breakpoint\_breakpoint.scss 46:16 breakpoint()D:\Programming\VSC\blog\_sass\minimal-mistakes\_reset.scss 13:3 @importminimal-mistakes.scss 18:9 @importD:\Programming\VSC\blog\assets\css\main.scss 4:9 root stylesheetDeprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0.Recommendation: math.div(5px, 2) or calc(5px / 2)More info and automated migrator: https://sass-lang.com/d/slash-div╷28 │ margin-bottom: (5px / 2);│ ^^^^^^^╵D:\Programming\VSC\blog\_sass\minimal-mistakes\_forms.scss 28:21 @importminimal-mistakes.scss 20:9 @importD:\Programming\VSC\blog\assets\css\main.scss 4:9 root stylesheetDeprecation Warning: Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0.Recommendation: math.div(($red 299) + ($green 587) + ($blue 114), 1000) or calc((($red 299) + ($green 587) + ($blue 114)) / 1000)More info and automated migrator: https://sass-lang.com/d/slash-div╷68 │ $yiq: (($red*299)+($green*587)+($blue*114))/1000;│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^╵D:\Programming\VSC\blog\_sass\minimal-mistakes\_mixins.scss 68:9 yiq-is-light()D:\Programming\VSC\blog\_sass\minimal-mistakes\_mixins.scss 81:14 yiq-contrast-color()D:\Programming\VSC\blog\_sass\minimal-mistakes\_mixins.scss 91:10 yiq-contrasted()D:\Programming\VSC\blog\_sass\minimal-mistakes\_buttons.scss 46:7 @importminimal-mistakes.scss 25:9 ...이하 생략 실시간 반영은 잘되는데... 이런 오류는 왜 뜨는건가요?괜히 찝찝하네용...
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
기억 (누적합)
문제 1. 수열 (#2259)오타 혹은 백준 문제번호가 바뀐 것 같습니다.2259 -> 2559 문제 2. 수열 가장 크게 만들기 (#1912)모든 수열이 음수인 경우 0번째 index의 값이 가장 크게 되므로 print(max(prefix[1:])) 로 해주면 좋을 것 같습니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
윈도우에서 java은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 오류 나시는 분들 참고하시면 좋을것 같습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.'java'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. 라는 오류는아래 블로그 참고해서 해주시면 됩니다!!2번 단계부터 진행하시면 되요~!!https://m.blog.naver.com/under0tree/222343927513다만, 경로 같은 경우는 intellij에서 File -> Project Structure -> SDKs 에서 JDK home path 에서 확인하시면 될 것 같습니다!!저는 D 드라이브에 설치해놔서 따로 설정해줬습니다!!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
build.gradle로 프로젝트를 open 해야 하는 이유가 뭘까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]그냥 프로젝트 폴더를 선택해서 열어도 build.gradle 파일을 읽는 것 같은데, 꼭 build.gralde 파일을 선택해서 열어야 하는 이유가 있나요?
-
해결됨스프링 핵심 원리 - 기본편
강의 프로토타입 질문입니다
public class SingletonTest { @Test void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(SingletonBean.class); SingletonBean singletonBean2 = ac.getBean(SingletonBean.class); System.out.println("singletonBean1 = " + singletonBean1); System.out.println("singletonBean2 = " + singletonBean2); Assertions.assertThat(singletonBean1).isSameAs(singletonBean2); ac.close(); } @Scope("singleton") static class SingletonBean { @PostConstruct public void init() { System.out.println("SingletonBean.init"); } @PreDestroy public void destroy() { System.out.println("SingletonBean.destroy"); } } } 영한님이 AnnotationConfigApplicationContext(SingletonBean.class); 여기에 SingletonBean.class를 넣으면 componentscan이 된다고하셨는데 AnnotationConfigApplicationContext는 @Component 혹은 @Bean으로 등록이 되어있는걸 스프링컨테이너로 만들어서 라이프사이클을 관리한다는건데 여기서는 자동으로 빈이나 수동으로 빈을 등록하는게 없는데 어떻게 컴포넌트 스캔으로 관리가되는거죠? 두번째, 컴포넌트스캔이 @SpringBootApplication에 내장되어있어서 자동으로 진행되는건알고있는데 @Test에도 영향을미치나요? 저는 test는 별도로 component를 해줘야하는지 생각했는데 아닌거같아서요