묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결웹디자인개발기능사 [2025년] 실기전체 (카톡질문가능)
궁금한 부분들 질문 드립니다.
선생님. 궁금한 점이 있어 글을 남기게 되었습니다.f유형 강의 업로드 시기가 어떻게 되는지 궁금합니다. 각 유형별 디자인 영상이 있던데 시험 합격과는 무관한 것이 맞나요~?그리고 이건 요청 사항인데요. 실습 자료로 실습을 하면 되긴 하겠지만, 유형별 문제 답안이 없어 공부하기 조금 불편한 부분이 있습니다. 답안도 같이 업로드 해주시면 감사 하겠습니다.니
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
MemberApiControllerv1질문있습니다.
package jpabook.jpashop.domains; import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; //import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; @Embedded private Address address; @JsonIgnore @OneToMany(mappedBy = "member") private List<Order> orders = new ArrayList<>(); } @RequiredArgsConstructor @RestController public class MemberApiController { private final MemberService memberService; @PostMapping() public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){//jason데이터를 멤버로 쫙 바꿔줌(맵핑해줌_)) Long id = memberService.join(member); return new CreateMemberResponse(id); } @Data static class CreateMemberResponse{ private Long id; public CreateMemberResponse(Long id) { this.id = id; } } }class Member에 getter,setter가 들어가 있는데 class MemberApiController에 왜 아래처럼 생성자를 생성해주는건가요? public CreateMemberResponse(Long id) { this.id = id; }2. save함수는 아래에도 있는데 굳이 saveMemberV1 할 이유가 있나요? 혹시 api를 만들때는 엔티티매니저가 사용이 안되나요?public class MemberRepository { // @PersistenceContext//스프링이 엔티티 매니저를 만들면서 주입시켜주게 됨. private final EntityManager em; public void save(Member member) { em.persist(member); }3 해당 강의에서 중간중간에 엔티티를 변경 즉 name->username으로 변경 시 api오류가나온다고 하셨는데요. 그런데 아래 코드 v1버전 중 CreateMemberResponse 매개변수에Member member가 주어지는데요. 생성자인 CreateMemberResponse(Long id)가 id만 받아와 지는데, 이 id가 (name이 아닌 id만 받아옴) member의 id기준으로 member의 전체 객체가 받아와져서 그러는건가요?package jpabook.jpashop.api; import jakarta.validation.Valid; import jpabook.jpashop.Service.MemberService; import jpabook.jpashop.domains.Member; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor @RestController public class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){//jason데이터를 멤버로 쫙 바꿔줌(맵핑해줌_)) Long id = memberService.join(member); return new CreateMemberResponse(id); } @PostMapping("/api/v2/members") public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request){ Member member=new Member(); member.setName(request.getName()); Long id=memberService.join(member); return new CreateMemberResponse(id); } @Data static class CreateMemberRequest{ private String name;//<-강의 중반주에 adreess넣을지 말지 하는 부분이 있었는데요. 만약 adress를 넣는다면, member.setadress(request.getadress());를 안넣게되면 에러인가요? } @Data static class CreateMemberResponse{ private Long id; public CreateMemberResponse(Long id) { this.id = id; } } }.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
다른 페이지갔다가 오면 게시글 불러와지는 이슈
게시글을 끝까지 스크롤하고,다른 페이지에 다녀오면다른 페이지갔다가 오면 게시글 불러와지는 이슈를 발견했습니다.index.js에서 게시글 불러오는 부분에mainposts의 조건을 붙여서 실행하면될거같은데차후 강의에서 해결해주시는 이슈인지 궁금합니다.아니면 저만 그런건지 여쭤봅니다!감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리하기 - 세션 직접 만들기 질문있습니다.
//에러상황: Non-static method 'expire(javax.servlet.http.HttpServletRequest)' cannot be referenced from a static context SessionManager.expire(request);강의에서도 해당 메소드는 void로 설정이 되어있는데 제코드에서는 static으로 변경하라고 합니다. 왜그런건가요?전체코드는 아래입니다
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 연장 신청 요청 드립니다.
안녕하세요- 수강 연장을 희망하오니 연장 부탁 드립니다. 감사합니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리하기 - 세션 직접 만들기 질문있습니다.
public class SessionManagerTest { SessionManager sessionManager=new SessionManager(); @Test void sessionTest(){ //세션을 생성 <-이게 클라이언트단에서 생성이되는건가요? 서버에서 생성하는건가요? MockHttpServletResponse response=new MockHttpServletResponse(); Member member=new Member(); sessionManager.createSession(member,response); //요청에 응답 쿠키 저장 <-서버 저장이고 MockHttpServletRequest request=new MockHttpServletRequest(); request.setCookies(response.getCookies()); //세션조회 <-클라이언트 조회가 맞나요? Object result=sessionManager.getSession(request); Assertions.assertThat(result).isEqualTo(member); }}주석에 질문 달았습니다
-
미해결
pytorch CNN 모델 output shape 관련 질문
CIFAR10 데이터셋을 이용해서 cnn을 구현하고 training 실습을 하는데 계속 모델의 output shape과 관련해서 CrossEntropyLoss를 이용해서 loss를 계산하는 부분에서ValueError: Expected input batch_size (1) to match target batch_size (4).와 같은 에러가 발생합니다. input과 labels의 배치 사이즈에 따라 마지막 output의 shape이 torch.Size([4, 10])와 같이 나와야 정상적으로 loss를 계산할 수 있을텐데 계속해서 torch.Size([1, 10])의 shape이 나옵니다. 혹시몰라 좀 더 간단한 다른 모델로 구현해보니 정상적으로 batch_size가 일치하는데 해당 모델을 이용할 때만 오류가 발생합니다. batch_size를 바꿔가면서 테스트해보니 모델에 어떤 문제로 인해 계속 output의 batch_size가 설정한 batch_size의 1/4로 나오게 되는 것 같은데 모델에서 어떤 부분이 문제인지 못 찾겠습니다. CNN 모델은 아래와 같이 구현했습니다. 모델의 output shape이 정상적으로 torch.Size([batch_size, 10])과 같이 나올 수 있으려면 어떻게 해결해야 할까요?class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() # Layer#1 self.conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3) self.conv2 = nn.Conv2d(in_channels=64, out_channels=64, kernel_size=3) self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.dropout = nn.Dropout(0.5) # Layer#2 self.conv3 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3) # Layer#3 self.conv4 = nn.Conv2d(in_channels=128, out_channels=256, kernel_size=3) # Layer#4 self.fc1 = nn.Linear(4*4*256, 512) # Layer#5 self.fc2 = nn.Linear(512, 512) # Layer#6 self.fc3 = nn.Linear(512, 10) def forward(self, x): # Layer#1 x = self.conv1(x) x = F.relu(x) x = self.dropout(x) x = self.conv2(x) x = F.relu(x) x = self.dropout(x) x = self.pool(x) # Layer#2 x = self.conv3(x) x = F.relu(x) x = self.dropout(x) x = self.pool(x) # Layer#3 x = self.conv4(x) x = F.relu(x) x = self.dropout(x) x = self.pool(x) # Layer#4 x = x.view(-1, 4*4*256) x = self.fc1(x) x = F.relu(x) # Layer#5 x = self.fc2(x) x = F.relu(x) # Layer#6 x = self.fc3(x) x = F.softmax(x) return x
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
피라미드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]제 피라미드는 안 생성되고 위아래로 나옵니다 ..
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티스레드 Job처리
제가 경험했던 환경에서는네트워크스레드(N) -> MessageQueue -> 메인스레드(1)사실상 메인로직이 싱글 스레드였습니다.그렇다 보니 Queue에 들어오는 순서대로 메인스레드에서 처리했고, 느릴수도 있었겠지만 순서는 확실하게 보장이 되었습니다 그런데 현재 구조상네트워크스레드(N) -> JobQ 메인로직(N)으로 진행되거나네트워크스레드(N, timeLimit제한) -> GlobalQ 메인로직 (N) 으로 진행되다보니 궁금한게 생겼는데요첫번째 궁금한점은패킷이 ABC 순서로 왔을때,AC는 JobQ1B는 JobQ2을 수행한다고 가정하고A, B, C를 각각 네트워크 스레드 1,2,3가 받았다면스레드1가 A(수행시간1초)를 처리하는스레드2는 B(수행시간3초)를 처리하고,스레드3은 C(수행시간1초)를 Push만 한다고 하였을때B가 먼저 들어왔지만처리시간이 늦어 C패킷보다 답장을 늦게 보내는 상황이 발생할것 같은데요,(시간이 1초 3초까진 아니겠지만 컴퓨터 입장에서는 충분히 코드의 짧은차이로도 발생 할 수 있는 경우라고 가정했을때)과정에서 B처리중 죽어있으면 클리어가 안된다거나 하는 조건이 있고, B가 먼저 수행 되었지만 C처리가 먼저 끝나버려서 B의 결과가 바뀌는 경우는 어떻게 처리를 하면 좋을지 궁금합니다.(꼭 이런 1개의 처리속도가 아니더라도, JobQ1의 작업 전부다 소모되는시간이 JobQ2의 작업 몇개를 수행하는것보다 빠르다면, 충분히 이런상황이 발생할 수 있다고 생각합니다)다른 예시로 JobQ1에는 어마어마한 양의 일감이 쌓여있는상태에서 A가추가가 되고,JobQ2에는 아무것도 없을때 B가 바로 실행이 될텐데, 이경우에도 A가 먼저 패킷이 도달했지만 B에 비해 아주 오랜 뒤에 처리가 될수 있을것 같다고 생각해서 이런경우 클라 입장에서는 분명 먼저 요청을 했는데 버그가 발생했다고 느낄수도 있다고 생각해서 질문드립니다. 두번째로 궁금한점은Part4 과정이 거의 끝나가고 있어서 질문드리는 것인데요,제가 메인스레드가 1개인것만 해봐서 멀티스레드를 어떻게 인게임컨텐츠에서 사용해야할지 감이 안잡혀서,멀티스레드로 인게임 컨텐츠 부분의 객체를 접근할때, 락을 사용하는 예제가 있는 강의가 있는지 궁금합니다.이과정이 끝나면 Part5를 바로 이어서 할예정입니다. 감사합니다
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
java -jar -jpashop-0.0.1-SNAPSHOT.jar 관련질문
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java -jar 파일을 이용해 스프링을 구동하려고 build로 경로를 바꿨는데 해당 라이브러리가 없으면libs 라이브러리를 따로 만들어야 하는지 아니면 그냥 넘어가도 되는지 궁금합니다.따로 생성시키는 방법이 있을까요?
-
미해결김영한의 실전 자바 - 중급 1편
private 선언된 내부 중첩 클래스
저는 내부 중첩 클래스가 private으로 선언된 경우 바깥 클래스를 포함한 모든 외부 클래스가 내부 중첩 클래스에 접근할 수 없는 줄 알았습니다. 왜냐면 바깥 클래스와 내부 중첩 클래스는 무관한 클래스라고 들었던 것 같기 때문입니다. 그런데, 바깥 클래스에서 내부 중첩 클래스의 인스턴스를 생성하고, 내부 중첩 클래스에 접근할 수 있는 이유는 무엇인가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2데이터베이스 테이블생성 질문입니다.
h2데이터베이스 생성하고 간단하게 member클래스를 생성해서 h2데이터베이스에서 Member 테이블이 생성되는것을 보려고하는데 코드상으로는 create table로 생성되었다고 뜨는데 db에는 테이블이 생성이안되어있습니다 ㅠㅠ이유가뭘까요?
-
미해결
타임리프 설정 질문드립니다.
spring: thymeleaf: prefix: classpath:/templates/ suffix: .html datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug org.hibernate.orm.jdbc.bind: trace # org.hibernate.type: trace 스프링 부트 타임리프 기본 설정spring: thymeleaf: prefix: classpath:/templates/ suffix: .html 강의 교재에 위와 같이 적혀져있는데 위 코드가 타임리프 설정 맞게 한 것인가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 부트 메시지 소스 설정 부분 궁금한 점 있습니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이 의미를 제가 이해한 대로라면application.properties에 제가 아무 것도 추가하지 않으면스프링 부트가 알아서 application.properties에spring.messages.basename=messages 이걸 추가하고, 이렇게 messages만 지정되어도 부가적으로 messages_en.properties, messages_ko.properties 이것들도 인식되는 거로 이해했습니다. 꼭 ko나 en 말고도messages_temp.properties 또는 messages_sdfsdf.properties 이것들도 다 인식된다고 보면 되나요? 아니면 _ 뒤에 와야 하는 건 kr이나 en 등 몇 가지가 따로 지정되어 있는 걸까요? 2) 또 하나 궁금한 점이 있습니다. 스프링 부트를 쓰지 않고@Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages"); messageSource.setDefaultEncoding("utf-8"); return messageSource; }이 코드를 쓴다고 한다면, 이때도 messageSource.setBasenames("messages"); 이렇게 messages만 지정하면 messages_en.properties , messages_ko.properties 다 인식할 수 있나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-J 반례
안녕하십니까 큰돌님코드를 작성했었는데 틀렸다고 하는데 반례 어떤게 있을까요 ??반례와 왜 안 되는지도 설명 한 번 부탁드립니다 ㅜㅠhttp://boj.kr/4eae857b9f4243aa90c9206ce1aabd15
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
포인터vs배열 질문있습니다
제가 이해한게 정확한지 궁금해서 그러는데요예를들어 배열로 char[] a = "abcef";를 만들어 줬다고하면배열은 모든 문자를 한글자씩 밀어넣는다고 하면 char이 1바이트니까 제가 만든 배열은 NULL값도 포함해서 총 6바이트가 되는게 맞는건지 궁금하고요 만약 맞다면 그러면 int타입의 배열로 선언하면 예를 들어 char[] b = {1, 3, 4}로 선언하면 int는 4바이트니까 총 NULL값까지 16바이트의 크기가 되는건가요? 그리고 포인터는 32비트 혹은 64비트냐에 따라 무조건 4바이트 혹은 8바이트 고정크기인데이유는 포인터를 이용해서 문자열을 만들면 예를들어 "Hello World"를 넣는다고하면 먼저 데이터 영역 어딘가에 Hello World의 배열이 만들어지고 그 배열 첫번째 요소인 H의 주소를 가리키는 포인터다라고 해석했는데 맞을까요??
-
미해결
oAuth2.0 로그인 후 쿠키 생성 질문
@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { // CSRF 설정 http.csrf((csrf) -> csrf.disable()); http.authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers("/").permitAll() .anyRequest().authenticated() ); http.oauth2Login((oauth2Login) -> oauth2Login .loginPage("/login") .userInfoEndpoint(userInfoEndpoint -> userInfoEndpoint .userService(principalOauth2UserService)) .defaultSuccessUrl("/", true) .permitAll() ); return http.build(); } 현재 위와 같이 우선 oAuth2.0 인증 기반을 구현했습니다.이 상태에서 로그인을 하면웹 브라우저 쿠키에JSESSIONID : 0C3706243FE7B32FF2A3C757013B164C 형식의 값이 삽입됩니다. 이후 test 용으로 작성한 "/user" 경로로 접근을 시도하면 접근이 가능하게 됩니다.만약 쿠키를 지우고 "/user" 로 접근하면 "/" 로 튕기고, 다시 로그인을 해야합니다. 여기서 궁금한 게 저는 별도의 쿠키 생성 로직을 작성하지 않았는데 oAuth 로그인 후JSESSIONID : 0C3706243FE7B32FF2A3C757013B164C이 녀석이 어떻게 생성된 것인지 궁금하며,어떻게 저 녀석으로 인증이 필요한 자원에 접근이 가능한 것인지 원리가 궁금합니다.검색해보니 톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키라고 하는데,이게 그냥 인덱스 페이지에 최초 접속할 때도 생기더라구요 ?oAuth 로 로그인하면 값이 바뀌긴 하지만,,, 구글링 해보면 세션 만들고 쿠키 만들고 하던데, 그럴 필요가 없는 거 아닌가요 ?+ 추가질문http.sessionManagement( (sessionManagement) -> sessionManagement .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) .maximumSessions(1) // 최대 허용 가능 세션 수 .maxSessionsPreventsLogin(false) // 멀티로그인 차단, false : 기존 세션 만료(default) .sessionRegistry(sessionRegistry()) ); 이와 같이 또 세션 정책을 세웠는데, 네이버 웨일로 로그인하고, 크롬으로 로그인 하면 둘 다 로그인 상태가 유지되는데 왜 이러는 걸까요...
-
미해결모두를 위한 대규모 언어 모델 LLM(Large Language Model) Part 1 - Llama 2 Fine-Tuning 해보기
checkpoint 파일이 안생겨요
제가 강의에 LLaMA 파인튜닝 코드를 변형해서 한 => 영 번역기를 만들고 있는데요. 몇일 전까지만 해도 zip파일을 해제하면 checkpoint-875 이런식으로 체크포인트가 저장된 파일이 생겼는데 갑자기 안생기네요.. 이유가 뭘까요 선생님!autotrain llm --train \ --project-name "conversational-finetuning" \ --model "TinyPixel/Llama-2-7B-bf16-sharded" \ --data-path "conversational-prompt" \ --text-column "text" \ --peft \ --quantization "int4" \ --lr 3e-4 \ --batch-size 8 \ --epochs 5 \ --trainer sft \ --model_max_length 80 import zipfile import shutil from google.colab import files folder_name = "conversational-finetuning" zip_file_name = "conversational-finetuning1.zip" shutil.make_archive(zip_file_name[:-4], "zip", folder_name) files.download(zip_file_name) extract_folder_name = '.' # 현재 디렉토리 with zipfile.ZipFile(zip_file_name, 'r') as zip_ref : zip_ref.extractall(extract_folder_name)
-
미해결스프링 핵심 원리 - 기본편
빈 충돌이 일어나는 테스트 오류를 못잡겠습니다ㅠㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]섹션7의 옵션처리 강의를 보며 테스트 코드를 같이 수정하고 있습니다.CoreApplication을 Run 했을 때 발생하는 오류입니다. *************************** APPLICATION FAILED TO START *************************** Description: Parameter 0 of constructor in hello.core.member.MemberServiceImpl required a single bean, but 2 were found: - memoryMemberRepository: defined in file [C:\Users\hotay\OneDrive\바탕 화면\study\core\core\out\production\classes\hello\core\member\MemoryMemberRepository.class] - memberRepository: defined by method 'memberRepository' in class path resource [hello/core/AppConfig.class] 이 부분을 보고 MemoryMemberRepository 와 AppConfig와 AutoAppConfig 코드를 봤는데 뭐가 문제인지 모르겠습니다.package hello.core.member; import org.springframework.stereotype.Component; import java.util.*; @Component //빈등록될때는 앞에가 소문자로, memoryMemberRepository로 등록된다. public class MemoryMemberRepository implements MemberRepository{ private static Map<Long, Member> store = new HashMap<>(); @Override public void save(Member member) { store.put(member.getId(),member); } @Override public Member findById(Long memberId) { return store.get(memberId); } }package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; //애플리케이션 전체 동작 방식을 구성(config)하기 위해 // 구현객체를 생성하고 연결하는 책임을 가지는 별도의 설정 클래스 //메서드마다 역할이 드러나게끔 한다. @Configuration //설정정보에 적어주는 어노테이션 public class AppConfig { @Bean //스프링 컨테이너에 등록이 된다. public MemberService memberService(){ return new MemberServiceImpl(memberRepository());//생성자 주입 //MemberServiceImpl이 필요로 하는 MemberRepository 의존성을 외부에서 주입 } @Bean public MemoryMemberRepository memberRepository() {//구현객체를 반환해주는 역할 return new MemoryMemberRepository(); } @Bean public OrderService orderService(){ return new OrderServiceImpl(memberRepository(),discountPolicy());//생성자 주입 } @Bean public DiscountPolicy discountPolicy(){ return new RateDiscountPolicy(); } } package hello.core; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration //설정정보 어노테이션 @ComponentScan( basePackages = "hello.core", excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)//AppConfig를 등록하지않도록 필터링 ) //컴포넌트 스캔 일일이 @bean 등록안해도됨 public class AutoAppConfig { //수동으로 빈을 등록하면 자동 빈보다 우선권을 가지게되어 오버라이딩 된다. (충돌오류X) //최근 스프링 부트에서는 수동 빈 등록과 자동 빈 등록이 충돌나면 오류가 발생하도록 기본 값을 바꾸었다. // application.properties에 spring.main.allow-bean-definition-overriding=true를 등록하면 오버라이딩 할 수 있다. /* @Bean(name = "memoryMemberRepository") public MemberRepository memberRepository() { return new MemoryMemberRepository(); }*/ } AutoAppConfig에 강사님 말씀 처럼 빈 충돌 테스트 한 부분을 주석처리해줬고 AppConfig를 등록하지 않도록 필터링 했는데도 어디에서 오류를 잡아야할지 모르겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
강의 질문있습니다.
강의 HandlerExceptionResolver 시작을 듣는데public class ApiExceptionController { }에서 괄호 부분에서 빨간줄이 나오는데 강의코드랑 같은데 왜 나오는건가요?