묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 핵심 원리 - 기본편
@Bean 어노테이션 사용에 대한 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 강의를 보다가 궁금증이 생겨 질문해 봅니다!@Bean 어노테이션을 달면 해당 인스턴스를 생성하여 스프링 컨테이너에서 관리하는 것으로 알고 있습니다.만약 서비스가 커지게 된다면, 스프링 컨테이너도 많은 빈을 관리하기 어려워지게 되고 최대한 효율적으로 생성해야 할 것 같다고 생각했습니다.@Configuration public class AppConfig { @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy(){ //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy()); } }위와 같이 AppConfig 코드를 작성을 하다가 문득 생각이 들었습니다. 'discountPolicy , memberRepository 는 AppConfig 안에서만 사용이 되는 메서드인데, Bean으로 관리하면 효율이 떨어지고 낭비가 아닐까?' 라는 생각이 들게 되었습니다.여기서 두 가지 질문을 드리고 싶습니다.자신의 클래스에서만 사용될 객체라면, @Bean으로 등록하여 관리할 필요가 있을까요? 자신의 클래스에서만 사용될 객체라면, private로 선언하여 해당 클래스에서 안전하게 사용하고 외부에서 사용 못 하게 감추는 것이 더 좋지 않을까요?
-
해결됨토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
MemberRegisterTest에서 @SpringBootTest 질문
MemberRegisterTest를 진행할 때 @SpringBootTest를 사용해서 테스트를 진행했는데요서비스 테스트에는 @ExtendWith(MockitoExtension.class)를 사용하는 경우를 많이 봤습니다 헥사고날 아키텍처에서는 애플리케이션과 도메인이 중심이 되기 때문에 서비스에서 @SpringBootTest를 사용한걸까요?
-
미해결나도! 스프링으로 인공지능을 할 수 있다(인프1탄)
강의 코드 변경 요청
선생님 강의 잘 듣고 있습니다. 강의를 보면서 예제 코드를 작성하고 있는데 선생님께서 영상을 찍어주셨을 때의 코드와 현재 버전의 코드가 차이가 많이 있는거 같습니다. 첫 강의 자료 중에 코드가 바뀐 부분만 현재 버전의 코드로 수정하여 올려주시면 감사하겠습니다 ㅠㅠ
-
미해결나도! 스프링으로 인공지능을 할 수 있다(인프1탄)
getContent(), getText() 질문
public String chatMessage(String message) { return chatClient.prompt() .user(message) .call() .chatResponse() .getResult() .getOutput() .getText(); } 선생님 현재 스프링 ai 1.0.1버전을 사용중입니다. 그러면 getText()가 아닌 getContent()를 사용해서 프롬프트를 생성해야되는거 아닌가요?! 왜 getConetent()를 사용할 수 없는걸까요?!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
자바 스크립트에서 객체 변하는법 가르켜 준다고 하였는데, 안보여서 물어봅니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 가르쳐 주지 안으셔서 질문을 드립니다.자바 스크립트 코드에서<script>나머지 내용 생략....//객체 var user = [[${user}]];</script>객체 코드 오류를 없애는 법을 나중에 설명해준다고 하였는데요.(5:27-5:38)2번을 들어봤지만. 나오는 이야기가 없어서 요청을 합니다. 가르쳐 주시면 감사하겠습니다. 이렇게 요청을 한 이유는 영한님이 가르쳐 준다고 하였고, 자바 스크립트에서 이렇게 하신 이유가 있다고 생각해서 배워야 겠다는 생각이 들어서요.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
ApiControllerAdvice에서 2개 이상의 Exception 타입 핸들링
안녕하세요.ApiControllerAdvice에서 하나의 Handler 메서드에서 아래 2개 Exeception 타입을 처리하시도록 변경하셨는데요.- DuplicateEmailException- DuplicateProfileException 이렇게 할 경우, 아래와 같이 두 Exception의 공통 타입인 RuntimeException 객체로 파라미터를 받아야 하는거 아닐까요?@ExceptionHandler({DuplicateEmailException.class, DuplicateProfileException.class}) public ProblemDetail duplicateExceptionHandler(RuntimeException e) { return getProblemDetail(HttpStatus.CONFLICT, e); } 감사합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
Member와 MemberDetail의 연관관계 주인이 바뀐게 아닌가 싶습니다.
안녕하세요.Member와 MemberDetail의 연관관계 주인이 바뀐게 아닌가 싶습니다.비록 1:1 관계이고, 두 객체 인스턴스가 동시에 생성되고 테이블에 영속화 되게끔 설정된 거는 맞지만,논리적으로 Member 엔터티가 상위 엔터티이고, MemberDetail이 하위 엔터티가 맞는 것 같아요.추후 Member 엔터티를 참조하는 다른 엔터티가 만들어질텐데,MemberDetail을 참조하는게 아니라 Member를 참조해야 하고요.관련한 의견 부탁 드립니다.감사합니다.
-
미해결토비의 클린 스프링 - 도메인 모델 패턴과 헥사고날 아키텍처 Part 1
DuplicateEmailException에 @ResponseStatus(HttpStatus.CONFLICT) 애너테이션 사용
안녕하세요.도메인 영역에 @Entity, @Query 애너테이션을 사용하는게 문제가 없다는 내용과 이유를 강의에서도, 질문&답변에서도 잘 설명해 주셨고, 모두 확인했습니다. 동일한 이유로,강의에서 DuplicateEmailException에 @ResponseStatus 애너테이션 사용 시, 의존성 문제에 대해서 언급한 부분도, JPA 애너테이션을 사용할 수 있다는 동일한 근거로 허용되어도 문제가 없는게 아닐까요?물론, @ResponseStatus 사용 시에 상태 코드 외에 추가적인 메시지 설정이 불가능하다는 등 단점이 있어서 사용하지는 않겠지만요. 그저 기술 의존성 침투 관점에서 궁금해서 문의 드립니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
GlobalException 클래스 설정 관련 문의
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요.영한님 강의를 듣고 한 가지 궁금한 점이 있습니다.강의에서 "보다 디테일한 예외가 잡힌다"고 설명해주셨는데,혹시 @Order(0) 설정을 하지 않으면 GlobalExceptionHandler에서만 예외가 처리가 잡히는데요,즉, 예외 처리 클래스를 여러 개로 분리했다면 @Order를 지정하지 않으면 세부 예외 처리 핸들러가 아닌 글로벌 핸들러로만 잡히는 이유가 클래스 분리 때문인지 궁금합니다. @RestControllerAdvice @Order(0) public class BoardExceptionHandler { /** * 게시판을 찾을 수 없을 때 발생하는 예외 처리 */ @ExceptionHandler(BoardNotFoundException.class) public ResponseEntity<ErrorResponse> handleBoardNotFound(BoardNotFoundException ex) { ErrorResponse response = ErrorResponse.builder() .code("BOARD_NOT_FOUND") .message(ex.getMessage()) .status(HttpStatus.NOT_FOUND.value()) .timestamp(LocalDateTime.now()) .details(Collections.singletonList("게시판 ID를 확인해주세요.")) .build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); } /** * 게시판 수정 / 삭제 권한이 없을 때 발생하는 예외 처리 */ @ExceptionHandler(BoardPermissionDeniedException.class) public ResponseEntity<ErrorResponse> handleBoardPermissionDenied(BoardPermissionDeniedException ex) { ErrorResponse response = ErrorResponse.builder() .code("BOARD_PERMISSION_DENIED") .message(ex.getMessage()) .status(HttpStatus.FORBIDDEN.value()) .timestamp(LocalDateTime.now()) .details(Collections.singletonList("해당 게시글에 대한 권한을 확인해주세요.")) .build(); return ResponseEntity.status(HttpStatus.FORBIDDEN).body(response); } }@RestControllerAdvice public class GlobalExceptionHandler { /** * 글로벌 예외 처리 */ @ExceptionHandler(Exception.class) public ResponseEntity<ErrorResponse> handleGenericException(Exception ex) { ErrorResponse response = ErrorResponse.builder() .code("INTERNAL_SERVER_ERROR") .message("서버에서 오류가 발생했습니다.") .status(HttpStatus.INTERNAL_SERVER_ERROR.value()) .timestamp(LocalDateTime.now()) .details(Collections.singletonList(ex.getClass().getName())) .build(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); } }
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:block th:each의다른 예가 없는지 궁금합니다.(지금의 예로는 사용하는 이유를 모르겠습니다.)
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. th:block이라는 태그를 통해 하는 것을 보았습니다. 근데 들으면서 이렇게 하면 th:block 없어도 될 것 같다는 생각이 들어서, 코드를 고쳐서 해보았습니다.이렇게 코드를 넣어봤고, 결과는 사진과 같이 똑같이 나왔습니다.(하나 추가 한게 무슨 이유인지 모르겠지만, 사용자 나이 밑에 br태그없이 span을 쓰면 붙여서 나와서 br태그를 씀) 그래서 솔직히 th:block 태그 보다는 div에 th를 넣고 아래에 방법 처 할것 같은데. th:block의 다른 예가 없는지 궁금합니다.답변 부탁 드립니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
전략적 침투: Spring Boot Application 실행에대해서
./gradlew bootRun --args='--spring.batch.job.name=systemTerminationSimulationJob'위에 코드로 터미널에서 실행하는데 System.out.println로 출력해둔 건 나오지않고 스프링부트 로그만 뜨고 끝나버리더군요 AI에게 물어봤더니 그럴경우 강제적으로 하는방법이 있다고해서 ApplicationRunner를 주입시켜서 해봤는데 또 잘나옵니다. ApplicationRunner를 계속 둘수도 없는거라 ApplicationRunner없이 안나오는경우에는 어떠한 설정문제일까요? 일단 AI가 해보라는데로 다해봤지만 실패했습니다.
-
미해결죽음의 Spring Batch: 새벽 3시의 처절한 공포는 이제 끝이다.
각파일들의 디렉토리 위치가 없는데 임의적으로 해야하나요?
각파일들의 디렉토리 위치가 없는데 임의적으로 해야하나요?예를들어 BatchConfig파일을 어디에 생성해야하는지 안보이는거 같아요
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
400번대 에러 응답이 모두 404.html로 됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1. resources/templates/error/4xx.html 만 존재할 때localhost:8080/error-404 -> 4xx.html 응답localhost:8080/error-400 -> 4xx.html 응답resources/templates/error/4xx.html, resources/templates/error/404.html 이 모두 존재할 때localhost:8080/error-404 -> 404.html 응답localhost:8080/error-400 -> 404.html 응답 -> 여기서 4xx.html이 응답해야하는거 아닌가요? 파일 경로에는 문제가 없는데 페이지 소스를 봐도 404.html이 맞습니다.
-
해결됨실시간 채팅 서버 구축: 분산 처리부터 성능 최적화까지
그레이스풀 셧다운과 데몬 스레드의 관계 질문
안녕하세요 강사님 좋은 강의 잘 듣고 있습니다강의에서 말씀하신 그레이스풀 셧다운과 데몬스레드의 관계까 제가 이해한 의미와 조금 달라서 여쭤봅니다.저는 그레이스풀 셧다운을 진행 중인 작업을 마무리하고 안전하게 종료하는 것으로 이해하고 있는데 데몬 스레드는 JVM 종료 시 작업이 중간에 끊길 수도 있다고 알고 있습니다. 그래서 “레디스 이벤트 처리 과정이 백그라운드에서 알아서 들어가기 때문에 데몬 스레드를 사용하면 자연스럽게 그레이스풀 셧다운이 된다”라는 설명에서 레디스의 백그라운드 이벤트 처리 방식과 데몬 스레드 사용이 어떤 식으로 연결되는지를 조금 더 구체적으로 알고 싶습니다. 또, 메시지를 소비하는 도중에 애플리케이션이 종료된다면 메시지 손실 가능성은 없는지도 궁금합니다. 그리고 실무 환경에서도 보통 이런 방식(데몬 스레드 기반)으로 Redis Pub/Sub 리스너를 구성하는지 아니면 다른 종료 처리 방식을 더 선호하는지도 알고 싶습니다.좋은 강의 잘 듣고있습니다! 감사합니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
21강 생성자에서 의존성 주입과 관련하여 질문 있습니다.
생성자에서 필드에 의존성 주입하면예를 들어 컨트롤러 생성자를 만들때 서비스 필드에 의존성 주입해주면 그때는 @Autowired가 자동으로 존재한다고 했는데 이 @Autowired 는 생성자의 파라미터를 전부 빈으로 등록시켜주는건가요?만약 그렇다고 한다면 생성자의 파라미터가 객체가 아닌 경우는 어떻게 되는건가요?혹시 객체 타입 파라미터만 빈으로 등록시켜주고 객체가 아닌 파라미터는 빈으로 등록시켜주지 않나요?
-
해결됨카카오 면접관이 알려주며 가장 쉽게 배우는 Kafka
일부 영상들에 스크립트가 누락되었어요 ㅠㅠ
강사님 안녕하세요!스크립트가 2분부터 약 10분간 누락되었네요 ㅠ이번 영상 말고도 다른 영상들에도 누락된게 있는 것 같아요.개인적으로 영상을 2번 시청하는데 두번째는 스크립트로 보면서 하는 편이라 인프런 측에 요청 부탁드려도 될까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
섹션2 -타임리프 기능 : 14.반복(html: border 부분 수정 해야 할까요? 아니면 계속 써야 할까요?)
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.궁금증이 생겨서 질문을 드립니다.반복 강의에서 each.html을 복사하고 붙여놓기를 하였는데요.<table border="1"> 이 부분에서 border부분이 흰색 취소선 칠해져 있다는것 을 발견하였습니다. 그래도 뭐 일단 돌려보기는 하였는데 잘나오는데. 뭔가 찜찜해서.. 그 보더에 마우스를 대보니 사진 처럼 이런 글이 나와서 구글에 이 나오는 글을 복사하고 해보았더니이렇게 사진처럼(80%로 측소) 나왔는데 사진에 나오는 글처럼 <table style="border: 2px solid black;"> 이렇게 바꾸는게 나을까요?아니면 그냥 계속 <table border="1"> 이런 방식으로 써야 할까요?w3schools도 살펴 봤지만 전체 적용 하는 것들만 있어서 모르겠네요.답변 부탁 드립니다.
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
20강 강의 내용중 Interface 만드는 부분에서 질문이 있어요
Interface 만드는 중에 메서드 정의할때 public은 추상 메서드라면 지우셨는데 추상 메서드는 public을 왜 지워야 하나요? 아니면 안 지워도 되는데 어떤 이유로 인해 지운건가요?
-
미해결실전! 스프링 데이터 JPA
순수 JPA 리포지토리 코드 수정부분
[질문 내용]메소드 이름으로 쿼리 생성 챕터의 첫 예제 코드에서JPA로 직접 작성한 findByUsernameAnd... 메서드 내부createQuery 부분에서 Member.class 를 파라미터로 같이 전달해야 할 것 같아서 글 작성합니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
html 변경하는 부분 적용 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]html을 templates로 옮겨 타임리프를 이용한 경로 수정에서 app을 다시 실행하고 웹을 새로고침해도 바로 적용되지 않고 Gradle를 refresh해야만 적용이 되는데 혹시 프로젝트 생성 초기 intelliJ 설정할 때 Gradle 프로젝트에서 빌드 및 실행은 IntelliJIDEA로 바꾸는 것에서 영향이 간건지 아니라면 gradle refresh 자동화를 할 수 있는지 궁금합니다.