묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
application build 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]오늘 날짜 기준 스프링부트 스타터에 2.x 버전이 없어 3.1.6버전으로 설치 했는데 build 실행 시 Error: Could not find or load main class 패키지명.자바명 Caused by: java.lang.ClassNotFoundException" 이 에러가 자꾸 뜹니다. 자바 버전도 17이고 sdk 버전도 17이고 캐시 삭제까지 해봤는데 안되네요 ㅜ 2.x버전으로 다운받을 곳이 있을까요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 리포지토리 테스트 케이스 작성에서
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 선생님은 repository.findAll(); 쳤을 때, 자동으로 List<Member> all = repository.findAll(); 로 바뀌던데 이거 어떻게 하는 건가요 ??
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
rollbackOnly 값 변경에 대해 질문 있습니다!
내부 트랜잭션이 롤백되면 rollbackOnly 값을 true로 설정하고, 외부 트랜잭션 커밋시점에 트랜잭션 매니저가 이 값을 확인하여 롤백한다. 그리고 만약 내부 트랜잭션이 롤백 되어도 외부 트랜잭션은 커밋을 유지시키고 싶다면, REQUIRES_NEW를 사용하여 구현 가능하다는 것으로 이해하였습니다!그런데 이때 REQUIRES_NEW를 사용하는 대신 rollbackOnly 값을 다시 false로 변경하여 해결할 수는 없는건가요? (TransactionStatus 메서드에도 true로 변경하는 메서드만 있더라구요)스프링이 이렇게 값 변경을 막은(?) 이유가 궁금합니다..!
-
미해결스프링 핵심 원리 - 기본편
DI 컨테이너를 의미하는 오브젝트 팩토리와 ObjectFactory는 다른 건가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]pdf로 복습하던 중 질문 있습니다.3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용.pdf의 24페이지에 다음과 같은 내용이 있습니다. "IoC 컨테이너, DI 컨테이너는 어샘블러, 오브젝트 팩토리 등으로 불리기도 한다." 그리고9. 빈 스코프.pdf의 16페이지에 다음과 같은 내용이 있습니다. "지정한 빈을 컨테이너에서 대신 찾아주는 DL 서비스를 제공하는 것이 바로 ObjectProvider이다. 참고로 과거에는 ObjectFactory가 있었는데, 여기에 편의 기능을 추가해서 ObjectProvider가 만들어졌다." 첫 번째의 경우엔 오브젝트 팩토리가 DI 컨테이너를 의미하고,두 번째의 경우엔 ObjectFactory는 DI 컨테이너가 아니라, DL 서비스를 제공하는 것을 의미하는 거로 이해했습니다. 그럼 여기서의 '오브젝트 팩토리'와 'ObjectFactory'는 다른 것을 의미하고 있는 거로 느껴지는데 맞나요? 둘 다 오브젝트 팩토리라서.. 이름만 같을 뿐 전혀 다른 개념이 맞는지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 데이터베이스 설정시 url관련 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 내용을 보면이렇게 url 자리에 mv.db 파일을 설치할 곳을 쓰라고 하셨는데 이 자리에 스프링 프로젝트 파일의 위치를 넣으면 되는 건가요 jpashop이 프로젝트 이름이어서 여쭤봅니다.저가 c드라이브에 인텔리제이 프로젝트들을 저장해서 jdbc url 자리에 "jdbc:h2:(c드라이브내 프로젝트 파일 경로)" 를 적고 url이 application.yaml에 있는 spring:data:source:rul과 동일해야 한다 해서 이 자리에도 같은 경로를 집어넣었습니다. 그런데 계속 오류가 납니다. 혹시 어디가 잘못된 것인지 알 수 있을까요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 서비스 개발, 테스트 시 throw new IllegalStateException(); 코드 작성 오류
1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)[질문 내용]회원 서비스 개발 강의와 그 다음 강의에서 throw new IllegalStateException("이미 존재하는 회원입니다.") 이 코드를 작성하면 저는 try catch 로 감싸라고 오류가 나옵니다. 왜 선생님은 오류가 나지 않으시나요?
-
미해결스프링 핵심 원리 - 기본편
의존 관계 화살표와 연관 관계 화살표
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 자료로 복습 중에 질문이 있습니다.소프트웨어 공학 책에 있는 화살표를 아래 그림에 적용해 보면MemberServiceImpl에서 MemberService로 향하는 화살표와 MemoryMemberRepository에서 MemberRepository로 향하는 화살표는 '구현 관계'를 나타낸 듯하고, AppConfig에서 MemberServiceImpl과 MemoryMemberRepository를 향하는 화살표는 '의존 관계'를 나타낸 듯하고, MemberServiceImpl에서 MemberRepository를 향하는 화살표는 '연관 관계'를 나타낸 것처럼 보이는데요 연관 관계 화살표로 표현된 MemberServiceImpl에서 MemberRepository로 향하는 관계는 의존 관계라고 봐도 되나요? MemberServiceImpl이 MemberRepository를 의존하고 있으니깐.. 연관 관계 화살표로 표현된 이유가 궁금합니다. 제가 UML 다이어그램을 제대로 공부하진 않았는데 의존 관계 주입에서의 의존 관계와, UML 다이어그램에서의 의존 관계는 조금 다른 건가요?
-
해결됨스프링 핵심 원리 - 기본편
스프링 컨테이너 생성 시 DI 컨테이너를 인스턴스로 생성하지 않고 .class로 생성하는 이유가 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 내용 중 아래의 방법으로 스프링 컨테이너를 생성할 수 있었습니다.ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);그런데 AnnotationConfigApplicationContext는 new를 통해 런타임 시점에 초기화가 되는데 AppConfig는 왜 new AppConfig()가 아닌 AppConfig.class 로 클래스 명세만을 필요로하는지 궁금합니다.가령 아래와 같이 AppConfig를 런타임 시점에 생성하여 Bean을 등록하는 것도 가능해야 할 것 같은데 AppConfig.class로 스프링 컨테이너를 생성할 시 어떤 이점이나 효과가 있어서 AppConfig 인스턴스를 통해 스프링 컨테이너를 생성하는 것을 제한하였는지 궁금합니다.ApplicationContext applicationContext = new AnnotationConfigApplicationContext(new AppConfig());
-
미해결스프링 시큐리티 OAuth2
http://localhost:8081 접속 에러가 뜹니다.
또한 keycloak 19.0.1 버전은 사용시 실행이 되지않아22.0.5 버전을 사용하고 있습니다.issuerUri 는 사용시 스프링부트 실행자체가 되지 않아 막아두었습니다.주석처리를 해제하면 다음과 같은 에러가 뜹니다.Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.security.config.annotation.web.configuration.OAuth2ClientConfiguration$OAuth2ClientWebMvcSecurityConfiguration': Unsatisfied dependency expressed through method 'setClientRegistrationRepository' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception; nested exception is java.lang.IllegalArgumentException: Unable to resolve Configuration with the provided Issuer of "http://localhost:8080/realms/oauth2"
-
미해결Practical Testing: 실용적인 테스트 가이드
BaseEntity 가 있음에도 불구하고 registeredDateTime 을 사용하는 이유가 무엇일까요?
안녕하세요.덕분에 좋은 강의 정말 잘 듣고 있습니다.강의를 수강하던 도중에 궁금한 부분이 생겨 이렇게 질문을 남깁니다.BaseEntity(@CreateDate) 로 인해서 객체가 생성되는 시점을 알 수 있음에도 불구하고 registeredDateTime 이라는 필드값을 정의한 이유가 궁금합니다.테스트코드를 통해 한층 더 검증하기 쉽게 하려는 용도로 사용하시는 걸까요?감사합니다
-
미해결스프링 시큐리티 OAuth2
사용하지 않을 EndPoint를 Disable할 수 있는 방법이 있을까요?
.well-known/openid-configuration을 이용해 endpoint 및 정보들을 확인했는데 많은 default 값들이 존재합니다.여기서 제가 사용하지 않는 정보들을 disable 하는 방법이 있나요??아래는 .well-known/openid-configuration 호출 시 받은 정보입니다.{ "issuer": "http://127.0.0.1:6080", "authorization_endpoint": "http://127.0.0.1:6080/oauth2/authorize", "device_authorization_endpoint": "http://127.0.0.1:6080/oauth2/device_authorization", "token_endpoint": "http://127.0.0.1:6080/oauth2/token", "token_endpoint_auth_methods_supported": [ "client_secret_basic", "client_secret_post", "client_secret_jwt", "private_key_jwt" ], "jwks_uri": "http://127.0.0.1:6080/oauth2/jwks", "userinfo_endpoint": "http://127.0.0.1:6080/userinfo", "end_session_endpoint": "http://127.0.0.1:6080/connect/logout", "response_types_supported": [ "code" ], "grant_types_supported": [ "authorization_code", "client_credentials", "refresh_token", "urn:ietf:params:oauth:grant-type:device_code" ], "revocation_endpoint": "http://127.0.0.1:6080/oauth2/revoke", "revocation_endpoint_auth_methods_supported": [ "client_secret_basic", "client_secret_post", "client_secret_jwt", "private_key_jwt" ], "introspection_endpoint": "http://127.0.0.1:6080/oauth2/introspect", "introspection_endpoint_auth_methods_supported": [ "client_secret_basic", "client_secret_post", "client_secret_jwt", "private_key_jwt" ], "code_challenge_methods_supported": [ "S256" ], "subject_types_supported": [ "public" ], "id_token_signing_alg_values_supported": [ "RS256" ], "scopes_supported": [ "openid" ] }
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form data
여기서 누르면 여기로 오구그담에 뷰가 렌더링되는데요처음에 들어가면 저기 숫자 0이 계속 적혀있어요 ...아래는 html코드입니다<!DOCTYPE html> <html lang="ko" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>form Page</title> </head> <body> <h3>form Page</h3> <form action="/" th:object="${person}" method="post"> <div> name : <input type="text" th:field="*{name}"> </div> <div> age : <input type="text" th:field="*{age}"> </div> </form> </body> </html>
-
해결됨실전! 스프링 데이터 JPA
왜 쿼리 힌트에 value=true라고 명시해 줘야 하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]이미 개발자가 @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly")) Member findReadOnlyByUsername(String usernane);이렇게 쿼리 힌트를 명시한다는 것 자체가 저 쿼리힌트를 사용하겠다는 건데, 저 value = true는 왜 명시해 줘야 하는 건가요?value=false라고 하는 것과 아예 쿼리 힌트를 명시하지 않은 것의 차이가 있는건가요?
-
미해결스프링부트 시큐리티 & JWT 강의
권한 처리 세션 사용
유익한 강의 감사드립니다.질문이 있습니다.권한처리를 위해 세션을 사용하게 되면서버가 여러대일 경우어떤 서버에는 권한정보가 있고어떤 서버에는 없을 수도 있지 않나요?이런 경우 스프링 시큐리티가 자동으로 알아서 처리를 해주는건가요?세션을 사용하지 않고 JWT 를 사용하는 이유중에 하나가서버가 여러대 일 경우의 세션 문제를 해결하기 위함도 있다고 하셨는데마찬가지로 서버가 여러대라면 권한처리를 위한 권한정보를 동일하게 맞춰(?) 주는 무엇인가가 필요하지 않나요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
컨트롤러 멀티레코드 vo 받기 문의드립니다
(사진)
-
미해결스프링 핵심 원리 - 기본편
AutoAppConfig 역할
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]new AnnotationConfigApplicationContext(AutoAppConfig.class);코드가 실행되면서 AutoAppConfig 자체가 빈으로 등록이 되면서 AutoAppConfig빈은 @ComponentScan이라는 어노테이션을 써주면서 컴포넌트를 스캔하는 역할을 하게 되는건가요?즉, AutoAppConfig빈은 ComponentScan라고 생각해두 되나요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
BeforeEach 질문이요
[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 김영한 개발자님.강의를 들으며 공부하다가 궁금점이 생겨서 질문 남깁니다.13:00 부분부터 MemoryMemberRepository memberRepository = new MemoryMemberRepository(); 부분에서 매번 다른 객체를 생성하기 때문에 beforEach 함수를 생성하고, 그 안에서 memberRepository = new MemoryMemberRepository();로 생성후에 memberService에 DI 해준다고 말씀하셨는데, 이 부분이 잘 이해가 안가요... new로 MemoryMemberRepository를 생성하는것은 전과 후가 동일한데 왜 전역으로 작성한 것과 beforeEach 문 안에 작성한 것과 차이가 있나요? 좋은 강의 늘 감사합니다.해당 글에 답변 남겨주신거 보았는데요 이해를 못하겠어서요 동일한 Repository를 사용하게 함으로 다른 DB를 사용하게 되는 부작용을 막는다는 이야기는 이해를 하겠는데요결국 @BeforeEach 에서 테스트를 진행하기전에 new로 새로운 Repository를 생성하는데 같은 Repository를 쓰게된다는 말이랑 무슨 연관이 있나요?
-
미해결스프링 핵심 원리 - 기본편
섹션 9 빈 스코프 질문입니다.
1.프로토타입 스코프 11분 28초에 preDestory같은 메소드가 실행되지 않는다고 했는데요.ac.close(); 이건 preDestory가 아닌가요? 2.프로토타입 스코프 11분 28초싱글톤 빈은 하나의 빈으로 종료까지 관여 하는거고 프로토타입스코프는 여러개의 빈이 생성되고 초기화까지만 관여하는걸로 이해해 도 되나요?3.프로토타입 스코프 10분 강의 똑같이 따라 쳤는데 아래와 같은 에러가나옵니다. 뭐가 문제인건가요?package hello.core.scope; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Scope; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class PrototypeTest { @Test void prototypeBeanFind(){ AnnotationConfigApplicationContext ac =new AnnotationConfigApplicationContext(PrototypeBean.class); PrototypeBean prototypeBean1=ac.getBean(PrototypeBean.class); PrototypeBean prototypeBean2=ac.getBean(PrototypeBean.class); System.out.println("prototypeBean2 = " + prototypeBean2); System.out.println("prototypeBean1 = " + prototypeBean1); Assertions.assertThat(prototypeBean2).isNotSameAs(prototypeBean1);//똑같은 인스턴스가 출력됨. ac.close(); } @Scope("Prototype") static class PrototypeBean{ @PostConstruct public void init(){ System.out.println("Prototype.init"); } @PreDestroy public void destory(){ System.out.println("Prototype.destory"); } } }java.lang.IllegalStateException: No Scope registered for scope name 'Prototype'이런에러가 나오는데 뭐가문제인가요?4.파란색선인 프로토타입이닛보다 빨간색프로토타입 빈2가 더빨리 나와야 하는거 아닌가요?println이 더 먼저 있는데요.
-
해결됨토비의 스프링 부트 - 이해와 원리
@Configuration 과 @ComponentScan
@Configuration @ComponentScan public class HelloApplication { public static void main(String[] args) { AnnotationConfigServletWebApplicationContext applicationContext = new AnnotationConfigServletWebApplicationContext(){ @Override protected void onRefresh() { super.onRefresh(); ServletWebServerFactory webServerFactory = new TomcatServletWebServerFactory(); WebServer webServer = webServerFactory.getWebServer( servletContext -> { servletContext.addServlet("dispatcherServlet", new DispatcherServlet(this) ).addMapping("/*"); } ); webServer.start(); } }; // applicationContext.register(HelloController.class); // applicationContext.register(SimpleHelloService.class); applicationContext.register(HelloApplication.class); applicationContext.refresh(); } }강사님 안녕하세요, 강의를 복습하다보니 @ComponentScan을 사용할 때 @Configuration이 필요한지 의문이 들더라구요 처음에 @Configuration javaDoc를 보면 @ConponentScan 부분에 @Configuration 클래스는 구성 요소 스캐닝(component scanning)을 통해 부트스트랩될 뿐만 아니라, @ComponentScan 주석을 사용하여 스스로 구성 요소 스캐닝을 설정할 수도 있습니다.라고 작성이 되었더라구요 @ComponentScan public class HelloApplication {}이 상태로 register에 등록을 해도 컴포넌트 스캔이 동작합니다. Creating shared instance of singleton bean 'helloApplication' Creating shared instance of singleton bean 'helloController' Creating shared instance of singleton bean 'simpleHelloService'@Configuration이 없어도 직접 register에 등록하면 애노테이션을 읽어서 컴포넌트 스캔이 동작합니다. 그러면 register에 @Configuration을 붙이지 않고 직접 등록한다면 @ComponentScan만 있어도 되는데 붙이는 이유가 궁금합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
도서 관리 애플리케이션 화면 질문
안녕하세요! 강의 완강하고 복습을 하고있는 수강생입니다.복습을 하는 과정에서 궁금한 점이 있어서 질문이 있는데요 선생님께서 도서관리 애플리케이션 화면은 제공해주셨는데 사용자 등록란에 이름과 나이를 입력하고 저장을 누르면 POST 메소드가 연결되고 목록에 들어가면 GET, 수정을 누르면 UPDATE, 삭제를 누르면 DELETE 메소드가 연결되는 것은 프론트엔드 작업 과정에서 어떠한 설정을 해주셔서 자연스럽게 되는건가요? 그 과정도 공부하고싶은데 자바스크립트와 리액트까지 공부하면 될까요? 강의 공부를 끝내고 나면 제 프로젝트를 한번 만들어보고싶은데 어느정도 공부해야 할지 감이 잘오지 않아서요 화면 구성부터 서버 동작하는 처음부터 끝까지 해보고싶어서 질문드립니다!