묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
EntityManager 도 Component 로 인식하는 것인가요?
안녕하세요! 이전 수업에서 Autowired로 주입 시키려면 스프링 빈에서 관리하는 객체여야한다고 배웠고, 스프링 빈에서 관리하려면 @Component 어노테이션이 있어야 한다고 이해했습니다.근데 EntityManager는 컴포넌트가 아닌데 왜Autowired 대상이 되는지 이해가 안됩니다ㅜㅜ감사합니다..
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
session:spring-session-jdbc 의존성 추가 시 mysql 설정
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.만약 MySQL로 진행하시는 분들을 위해 session-jdbc 추가 시 SPRING_SESSION 테이블 추가가 안된다면 이 링크 참고해서 해주시면 되고자 공유드립니다.https://stackoverflow.com/questions/53823174/how-to-initialize-schema-in-spring-session-with-jdbc아래처럼 application.yml에 spring 프로퍼티 안에 해당 내용을 추가하시면 될듯합니다.session: jdbc: initialize-schema: always추가로 설정이 필요한 내용이 있으면 댓글 부탁드리겠습니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
스프링 부트와 JPA 활용
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 수강생 입니다. 궁금한것이 있어 질문 합니다. JPA 를 하면서 궁금한것이 있어서 몇가지 적어 봅니다. JPA를 활용할때 JPA코드로 만들어진 테이블이 아닌 기존에 DDL로 만들어진 테이블 조회도 가능 할까요 ? - 이건 아직 제가 조회 부분을 안봐서 질문하는것일수도 있네요 ㅠ 실행하면서 JPA로 만들어진 테이블이 구성되는데 그럼 매번 실행할때마다 테이블을 지우고 생성되는건지 아니면 중복테이블을 체크하고 생성되는것일까요 ? ManyTOMany를 실무에선 안쓴다는 말이 다대다 구성을 안한다는 말씀이신거 같은데 그럼 다대다와 같은 경우를 중간테이블로 두어서 1대다 형식으로 구성하는 방안이 좋을까요 ?
-
미해결스프링 배치
flow 위에 jobparameters를 사용하기 위해서는 어떤 scope를 정의해줘야 하나요?
안녕하세요, 강사님!job > flow > step으로 구성되어 있는데 flow위에 jobparameters를 사용하기 위해서는 어떤 scope를 정의해줘야 하나요? step scope is not active라고 자꾸 오류가 나네요.강의를 봐도 잘 이해가 안 가서요. 아직 제가 개념이 덜 잡혔나봅니다. ㅠㅠ답변 감사드립니다! 코드입니다!@Slf4j @Getter @NoArgsConstructor public class CreateDateJobParameter { private String startDate; private String endDate; @Value("#{jobParameters[startDate]}") public void setStartDate(String startDate) { this.startDate = startDate; } @Value("#{jobParameters[endDate]}") public void setEndDate(String endDate) { this.endDate = endDate; } } @Slf4j @RequiredArgsConstructor @Configuration public class OrderProcessingJobConfiguration { private final JobBuilderFactory jobBuilderFactory; private final StepBuilderFactory stepBuilderFactory; private final CreateDateJobParameter jobParameterCreator; @JobScope @Bean public CreateDateJobParameter jobParameterCreator() { return new CreateDateJobParameter(); } @Bean public Job orderProcessingJob() { return jobBuilderFactory.get("orderProcessingJob") .incrementer(new UniqueRunIdIncrementer()) .start(fetchOrderDataFlow()) .next(getOrderListFlow()) .split(taskExecutor()) .add() .end() .build(); } @Bean @StepScope public Flow fetchOrderDataFlow() { log.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>fetchOrderDataFlow"); Flow flow1 = new FlowBuilder<Flow>("flow1") .start(fetchOrderDataStep1()) .build(); Flow flow2 = new FlowBuilder<Flow>("flow2") .start(fetchOrderDataStep2()) .build(); Flow flow3 = new FlowBuilder<Flow>("flow3") .start(fetchOrderDataStep3()) .build(); Flow flow4 = new FlowBuilder<Flow>("flow4") .start(fetchOrderDataStep4()) .build(); Flow flow5 = new FlowBuilder<Flow>("flow5") .start(fetchOrderDataStep5()) .build(); FlowBuilder<SimpleFlow> flowBuilder = new FlowBuilder<>("fetchOrderDataFlow"); flowBuilder.split(taskExecutor()) .add(flow1, flow2, flow3, flow4, flow5); return flowBuilder.build(); } @Bean public Step fetchOrderDataStep1() { return createFetchOrderDataStep("fetchOrderDataStep1", "store1", jobParameterCreator.getStartDate(), jobParameterCreator.getEndDate()); } ... }
-
미해결스프링 시큐리티
Ip 제한의 대한 질문이 있습니다.
강의에서 설명해주신 내용은 잘 이해했습니다.강의의 내용은 permitAll 자원을 제외하고, 나머지 인가 자원의 대한 Ip 권한 체크인데요.개인적인 생각으로는 보통 특정 자원이 아닌, 모든 자원의 대한 IP 제한을 하지 않나 싶습니다.그렇게되면, Voter로는 해당 구현이 어려워 보이는데요.[permitAll은 FilterSecurityInterceptor를 상속한 PermitAllFilter에서 처리하기 때문]모든 자원에 대한 IP 제한을 할 경우, 커스텀 필터[IpAccessFilter]를 만들어서 제한을 해야한다고 생각합니다.그러 경우, FilterSecurityInterceptor 전에 두고, 화이트 리스트 IP가 아니라면 AccessDeniedException을 발생할까 고민중입니다. 해당 필터의 위치는 어느쪽이 적합한지와 제가 질문드린 내용의 대한 강사님의 생각이 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
왜 DTO 만드실때 static 을 붙인 건가요??
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]항상 DTO 만드실때 static 클래스 꼭 붙이시길래 한번 빼고 만들면 오류가 나는 건가? 싶어서 뺴봤는데 상관이 없더라고용. 혹시 static 을 굳이 붙이신 이유가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
fetch join 과 EAGER
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예[질문 내용]제가 이해한게 맞을까요?일단 기본적으로 type을 LAZY 로 하는 이유는 조회할때 한 방에 다른 엔티티까지 쿼리가 나가고 그거에 연관된 엔티티까지 쿼리가 나가면 비효율 적이다. 그래서 LAZY 를 쓰는데 조회할때 다른 Entity 의 값도 가져오려면 LAZY 타입이니 쿼리가 많이 나가서 fetch JOIN 으로 한 쿼리로 연결 시킨다. 그러면 EAGER 바꾸면 될 것같지만, EAGER 는 예측할 수 없는 문제도 있고, 다른곳에서 조회할때는 또 다른 엔티티의 값이 필요가 없을 수도 있기 때문에 기본은 LAZY로 해두고 다른 엔티티의 값이 필요한 특수한 경우에만 fetch JOIN 을 한다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
단축키 안내창..;
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아래 초록색 단축키 보여주는거... 봐도 모르겠어요윈도우 인텔리제이 사용하거든요..그래서 윈도우 검색하거나, 대충 짐작가는 키를 사용하긴하는데... --;;
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
포스트맨 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 내용의 코드도 모두 동일한데, 포스트맨을 통한 url 요청에서 다음과 같이 오류가 발생합니다.그러다가 'http://' 를 생략하고 다시 요청했는데 이번엔 정상적으로 동작했습니다.이처럼 http:// 를 생략하니까 정상 작동하는 이유에 대해서 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
20:24 부분의 줌인
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]20:24 부분의 줌인 단축키가 있나요?코드 부분 단축키 말고 패키지 부분에 적용하는 방법은 찾지 못하겠습니다 ㅠㅠ
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
isReturn을 val로 선언해서 얻는 이점이 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 선생님의 이전 강의를 들을 때도 신기하면서도 의아하기도 했던 부분인데요그냥 그런가보다 하고 넘어갔는데 보면 볼수록 궁금해서 여쭤보게 되었습니다 fun isReturn(): Boolean { this.status == LoanStatus.RETURNED } 이 코드랑 비교했을 때 val isReturn을 필드처럼 사용하는 게 어떤 부분에서 이점이 있는 것인지 궁금합니다.별다른 이점이 없다면 오히려 팀원들이 익숙한 방향(함수 사용)으로 가는 게 맞는 것 같아서요!!
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
named arguements를 늘 작성하시나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코틀린에서 제시해주는 컨벤션을 보면 named arguements를 작성하는 걸 권장하고 있고, 선생님께서도 늘 작성하시는 것 같은데 실무에서도 똑같이 적용 중이신지 궁금합니다한 편으로는 가독성이 좋게 느껴지면서도, 한 편으로는 어차피 ide에서 해당 필드가 무엇인지 표기해주는데 공수가 늘어나는 것이 아닌가 고민이 있습니다만약 쓸거라면 아예 컨벤션 룰로 정하고 다 함께 쓰던지 말던지 하는 게 좋을 것 같아서요..
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
와 진짜 대박이네요 디폴트 파라미터 하나로 이렇게 편해질수가 ㅜ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 자바 스프링에서는 테스트용 생성자 메서드가 있어도, 매번 일일히 null을 넣어준다거나 하는 문제점들이 있어서 결국 Builder를 사용했었는데코틀린에서는 롬복 Builder가 지원되지 않는다고 해서 엄청 고민 중이였습니다근데 이번 강의 보니까 그냥 온전한 객체 만들어주는 팩터리 메서드 하나 만들어놓고 테스트용으로 필요한 인자 값들만 설정해주면 되는 거였군요진짜 미쳤다.. 갓틀린..잘 배워갑니다..
-
미해결스프링 배치
springbatch partition vs pararell 질문드립니다.
안녕하세요. 정수원 강사님스프링 배치 강의 잘 보고 있습니다. 많은 도움 받고 있어요. 정말 감사드립니다.토이 프로젝트를 진행하고 있는데 막상 구현하려니 쉽지 않네요. 어떤식으로 설계하면 좋을지 조언 구합니다.구현하려는 부분은 아래와 같습니다.rest api로 가맹점 5곳에 각각 api를 호출하여 주문id의 총 개수와 주문id 목록( total number of orderId and orderIds)을 가져와서 DB에 저장합니다.가맹점 5곳에서 받아온 total number of orderId and orderIds 를 DB에서 조회해와서 해당 목록을 chunk 사이즈로 나누어서 각각 rest api로 가맹점 5곳에 호출하여 목록을 가져와서 DB에 저장합니다.partiton과 pararell step을 이용해서 구성하려고 하는데 설계부터가 만만치 않네요.1은 pararell step을 이용하여 병렬로 각각 수행하도록 구현하려고 하고, 2는 총 개수와 grid 개수를 가지고 pagination 혹은 partiton을 이용해서 구현하려고 하는데 어떻게 해야할지 감이 잘 안 잡힙니다. 혹은 혼합하여 사용할 수도 있을까요? 강사님께서 부연설명 덧붙여 주신다면 큰 도움이 될 것 같습니다. 감사드립니다.
-
미해결스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션
AOP/필터/인터셉터 질문
안녕하세요 강사님. 본 강의에서 BindingResult를 처리하기 위해 아래와 같이 AOP를 적용하셨습니다.제가 궁금한 점은 다음과 같습니다.위의 AOP 적용을 위한 validationAdvice는 구체적으로 언제 (joinPoint 전 or 후 ?) 실행되는지 궁금합니다. joinPoint의 전후제어라고 설명해주셨는데, joinPoint의 전에 실행되는 것인지 후에 실행되는 것인지가 궁금합니다. 예를 들어, 사용자가 컨트롤러 Post or Put 요청 시 유효성 검사를 통과하지 못한 에러가 bindingResult에 담깁니다. 그리고 위의 AOP validationAdvice 코드 내부는 이미 BindingResult에 에러가 담긴 이후의 코드를 실행하도록 되어있습니다. 이때의 로직 흐름은 다음과 같은 실행 순서로 보면 될까요? 만약 맞다면, joinPoint의 후에 실행되는 것으로 보면 될까요?"컨트롤러 진입 및 실행할 Post or Put 메서드 탐색 -> 해당 api 메서드 호출을 위해 http body의 데이터들을 ReqDto 객체로 변환 -> 유효성 검사 실패로 인한 bindingResult에 담김 -> 해당 api 호출 실패 -> 해당 api 호출이 실패로 끝났으므로 이후 AOP validationAdvice 호출 (joinPoint 후처리) -> Exception 발생 위와 같이 BindingResult 처리를 AOP 대신 필터나 인터셉터를 적용하여서는 해결할 수 없을까요 ?? 필터와 인터셉터는 여러 차이가 있지만 대표적으로 호출 순서에 차이가 있다고 알고 있습니다. 디스패처 서블릿 이전에 필터가 실행되며, 디스패처 서블릿 이후에 인터셉터가 실행되는 것으로 알고 있습니다. 위에 작성한 코드처럼 AOP 적용 위치는 개발자가 지정할 수 있는 것으로 보여집니다. 실제 컨트롤러가 호출되기 전에 필터나 인터셉터 호출되므로 BindingResult 검사를 할 수 없어서 AOP로 적용하신 것인지 궁금합니다.만약 해결할 수 있다면, AOP로 적용한 이유가 궁금합니다. 추가적으로, Jwt Filter에서 필터를 이용하여 구현하셨습니다. UsernamePasswordAuthenticationFilter와 같이 이미 제공해주는 시큐리티가 있어서 그것을 활용하여 보다 편리하게 구현할 수 있는 것 같습니다. 그러나, 필터 대신 AOP나 인터셉터로도 Jwt 서버를 구현하는 것이 가능한지 궁금합니다. 좋은 강의를 듣다보니 자연스레 질문이 많아지는 것 같습니다.정말 많이 배우고 있습니다. 감사합니다 !
-
미해결생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
org.apache.commons:commons-text:1.8 보안 취약점 문제
보안 취약점이 발견되어 implementation 'org.apache.commons:commons-text:1.10.0'의존성을 변경하는 것이 좋아보입니다.
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
JWT 관련 질문입니다.
https://www.inflearn.com/questions/810394/%EC%9D%B8%EC%A6%9D%EC%9A%94%EC%B2%AD%EC%8B%9C-%EB%AC%B8%EC%9D%98%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4호돌맨님 강의 정말 잘 듣고 있습니다. 다름이 아니라 저도 이 질문과 같은 의문이 생겼는데 해답을 찾지 못해 질문드립니다. 추가적으로 accessToken이eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwiaWF0IjoxNjgzMzQwODAzfQ.4c7pfgz689iJdKBrInNP4QBf7YLc-bW_FVkb0JNHvk라고 했을 때 맨뒤 k를 다른 알파벳으로 바꿔도 정상적으로 요청이 되는 경우가 있던데 이 이유도 잘 모르겠습니다.. 알려주시면 감사하겠습니다 !!
-
해결됨실전! 스프링 데이터 JPA
편의성 메소드에 대한 질문입니다.
jpa 강의들을 보다보면entity 간에 양방향 연관관계를 설정한 경우위처럼 changeTeam 메소드를 추가 해주셨는데요.this.team = team; 의 경우 외래키(연관관계 주인) 이기 때문에 필요한 것은 이해를 했습니다. 그런데 team.getMembers().add(this); 부분의 경우기존에 member 테이블에 값들이 존재하고, 신규 회원이 새로운 트랜잭션에서 join 로직을 실행했을때, 해당 로직에서 생성된 team.members에는 기존의 member 값들은 add 되어있지 않은 상태일텐데, team.members를 제대로 사용이 가능한가 해서 질문드립니다. 제 생각에는 team.members를 정상적으로(?) 사용하려면 team과 member를 join 으로 가져 온뒤에 사용이 가능할 것 같습니다. list에 add 하는것만으로는 query가 발생하는게 아닌것으로 알고있습니다. 제가 이해를 잘 못 하고 있는 부분이 있는걸까요?아니면 단순히 편의성 메소드의 예시로 작성을 하시는건지 궁금합니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
강의 19분10 초 영속성 테스트?
해당 테스트 코드에서 맨마지막 find member == member부분 값이 true인 이유를 설명해주시는데, 잘이해가 가지 않습니다. 이해하려면 기본편 어디를 봐야 하는지 알려주실 수 있을 까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
쿼리 파라미터 로그 남기기 강의 27분28초
화면에서는 insert into member (username, id) values (?, ?) 띄고insert into member (username, id) values ('memberA', 1) 이렇게 잘 나오는데,저는 아래와 같이 한줄로 모든게 나와버려요저도 한 줄씩 띄어서 보기 좋게 나왔으면 좋겠는데 방법이 없는건가요?2023-05-06T02:12:50.026+09:00 DEBUG 9774 --- [ main] org.hibernate.SQL :insertintomember(username, id)values(?, ?)2023-05-06T02:12:50.027+09:00 INFO 9774 --- [ main] p6spy : 1683306770027|0|statement|connection 4|url jdbc:h2:tcp://localhost/~/jpashop|insert into member (username, id) values (?, ?)|insert into member (username, id) values ('memberA', 1)