학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from member where name = ?] Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "MEMBER" not found (this database is empty); SQL statement: select * from member where name = ? [42104-214] org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select * from member where name = ?] 통합테스트를 진행시키면 위와 같은 에러가 나옵니다. 강의를 들으면서 MemberServiceIntegrationTest.java를 작성했고, jdbc 템플릿을 이용해 db 구축도 했습니다. 오타가 있는지 계속 확인해보았지만 오타로 보이는것이 없어 질문 올립니다. 스프링이 완전 처음이라 강의를 100퍼센트 이해하면서 코드를 따라 짜지 못했기 때문에, 질문을 정확하고 자세하게 말씀 못드려서 죄송합니다... https://github.com/ffe4el/Spring_prj/tree/main/hello-spring 오류가 나는 코드를 깃허브 위 주소에 올려놓았습니다. 살펴봐주세요...ㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] Run이 실패하는데 제가 환경변수를 잘못 설정한건지 설ㅍ치를 잘못 한건지 뭐가 문제인건지 모르겠네요ㅠㅠㅠ
우선 좋은 강의 감사하다는 말씀드립니다. 올려주신 강의 2편 모두 잘 보고 있고 실무에서 많은 도움을 받고 있습니다. 강사님께 배운 내용을 토대로 인증시스템을 구성해보려던 중 질문 사항이 있어 질문드립니다. 강의에서는 웹애플리케이션 기반 인증에 비중을 두고 설명을 잘 해주셨는데, 모바일 애플리케이션에 대상으로 인증을 구성을 해보려하니 조금 헷갈리는 부분이 있네요. 요구사항은 아래와 같은데요, 추후 내부 리소스를 외부서비스에 제공하기 위한 자체 OAuth2.0인가 서버 구성 모바일 애플리케이션에서 JWT기반 인증을 할 수 있는 인증 및 회원 가입 API 자체 OAuth2 인가서버와 연계하여 구성되는 리소스서버 구성 소셜로그인 기능 인증 시스템을 구성하기 위해 아래와 같은 방법을 생각하고 있습니다. 자체 인증 시스템을 통한 로그인의 경우 자체 모바일앱에 별도의 web view를 생성하고 싶지 않으므로 API로 로그인 정보를 바로 받아서 내부적으로 Resource Owner Password Flow 처리하여 토큰 반환 유저가 모바일앱 UI에 OAuth2 인가서버 계정정보(ID/PASSWORD)를 직접 입력 로그인 버튼 클릭 시, 서버가 계정 정보를 API로 직접 전달받아 내부적으로 Resource Owner Password Flow를 통해 검증하고 토큰 및 인증 필요 정보를 클라이언트에 반환 소셜로그인의 경우, 안전한 인증을 제공하기 위해 모바일 UI에 별도의 webView를 띄우고 Authorization Code Grant방식으로 인증진행 webView를 통해 외부서비스에 대한 Authorization Code Grant 흐름이 진행. 최종적으로 서버가 리다이렉트 주소를 통해 code를 전달받아 소셜 인증이 완료되는 경우(최초 회원인 경우 가입 처리하고), 서버는 자체 리소스서버에서 검증할 수 있는 Access Token을 따로 발급하여 응답하고 이를 모바일앱이 수신하여 인증처리. 질문은 아래와 같습니다. OAuth2.0 인가서버를 운용하는 경우 자사 모바일 앱의 자체로그인을 Resource Owner Password Flow로 직접 처리하는 것이 일반적인 방법인지? 더 좋은 방법은 없는지? 외부 소셜 로그인의 경우 패스워드 없이 가입처리를 해야하는데 자체인가서버의 회원과 어떻게 일괄적으로 관리가 가능할지? 외부 소셜 로그인의 경우라도 최종 발급되는 토큰은 자체 리소스서버에서 검증가능하도록 자체로그인과 일괄된 방법으로 JWT 발급이 되어야 할 것 같은데, Spring Authorization Server를 통해 효율적으로 구성이 가능할지? 소셜로그인의 경우 서버가 리다이렉트 주소를 통해 code를 받아오더라도 OAuth2AuthorizedClient까지만 확인하고 세션에 인증정보를 저장하고 싶지 않은데 어떻게 효율적으로 custom 가능할지? oauth2Client API 및 OAuth2AuthorizedClientManager를 통해 토큰을 받아오는 것을 생각하고 있는데 더 합리적인 방법은 없을지? 긴 질문 읽어주셔서 감사합니다. 질문가지수가 많아서 죄송하네요. 답변 주실 수 있는 부분까지만 주셔도 괜찮습니다.혹시 제가 구상하는 방법에서 개선되어야 하는 부분이나 혹시나 제가 잘못 생각하고 있는 부분은 없을 지 이런 부분도 조언해주시면 너무 감사하겠습니다.
안녕하세요. 선생님 강의 들으면서 실무에 Spring Batch를 잘 녹여보고자 노력하고 있는 직장인입니다. 다름이 아니라 부서에서 Spring Batch를 활용해 배치의 성능을 높여야 하는 상황이라, 스케일 아웃을 고려하고 있는데요. 문제는 스케일 아웃을 하되 워커(혹은 슬레이브) 서버에서는 DB에 접근을 하지 못하는 상황이라, read-process-write의 구조에서 read/write는 마스터 서버에서 처리 해야 하는 상황입니다. 그래서 처음에는 AsyncItemProcessor/AsyncItemWriter를 활용하여, 마스터 프로세스에서 워커 서버들에 HTTP API를 호출하고 결과를 리턴 받으면 write를 하는 방식을 고려 했는데요. 그런데, chunk 단위로 순차적으로 read-process-write를 하다보니 기대보다는 성능이 안나오고 있습니다 😭 사실 기대했던 바는 process를 하고 있을 때 read/write도 동시에 진행되면 어떨까였습니다. (이 부분이 혹시 잘못됐다면 지적해주세요.) 그래서 든 생각이 read-process-write가 chunk 단위로 순차적으로 되는 진행되는 것이 아니라, reader와 processor와 writer가 서로 publisher-subscriber 구조로 개별적으로 동작하는게 어떨까라는 생각이 들었습니다. 조금 더 말씀드리면 reader가 파일을 읽어 큐에 넣고 processor는 큐의 데이터를 읽어 처리하고 writer가 보고 있는 queue에 넣으면 writer가 해당 큐를 참조하여 파일 write를 하는 방식입니다. 혹시 이 아이디어에서 제가 잘못 생각하고 있는게 있을까요? 아니면 기존의 chunk oriented tasklet을 손보면 말씀드린 것과 같은 구조를 만들 수가 있나요?
안녕하세요 토비님!! @Component 스캔 강의 마지막 즈음에 1. @RestController는 내부에 @ResponseBody를 메타어노테이션으로 가지고 있기에 디스패처 서블릿 이 컨트롤러에 @ResponseBody가 붙어있는 것으로 인지할 수 있고 2. 더 나아가 @RestController와 @Controller가 클래스 레벨에 붙게 되면 @RequestMapping을 삭제할 수 있기 때문에 디스패처 서블릿 이 내부적으로 매핑 정보가 있음을 인식한다고 말씀하셨습니다!! 이전에 자바 웹 프로그래밍 Next Step 책으로 공부를 했을때 디스패처 서블릿 은 내부적으로 핸들러에 대한 매핑 을 가지고 있고 핸들러 매핑 구현체는 ApplicationContext 를 통해 @Controller 어노테이션이 붙어있는 클래스를 요청하여 받아와 사용하기 편리한 형태의 오브젝트로 만들어 보관하는것으로 알고 있습니다! 만약 책에서 공부했던 내용과 실제 Spring MVC 구조가 동일하다면, 위와 같은 상황 때문에 디스패처 서블릿이 내부적으로 매핑 정보가 있음을 인식한다고 말씀하신것인지 확인차 질문드립니다!! 그리고 1번의 경우를 실제 코드레벨로 보고 싶어서 찾아보고 있는데 어떤 코드를 봐야할지 모르겠습니다.. 혹시 약간의 힌트를 주실 수 있을까요?
좋은 강의 올려주셔서 정말 감사합니다. spring boot, jvm을 모니터링하고 있는데 system cpu, proess cpu 같은 치수들을 보면서 무엇이 위험한 수치이고 어떻게 대응해야 하는 지 감이 오지 않아서 제 나름대로 공식 문서나 구글링을 찾아보곤 하는데 혹시 어떤 문서를 읽는 것이 좋은 가요? 예를 들면 cpu 사용량이 0.006정도 되는데 얼마의 치수가 되면 위험하고 대응해야 하는 지 궁금합니다... 읽어주셔서 정말 감사합니다.
안녕하세요. 많이 찾아봤는데 없는것같기도 하고, 7:31초쯤을 시작으로 영속상태가 끊긴 멤버가 반환이 된다라는 말씀을 듣고 질문드립니다. Service에서 반환이 되는 Controller에서 Entity Manager를 사용하기 위해서 @PersistenceContext 어노테이션을 사용해서 em을 주입받았습니다. # MemberApiController # MemberService # 로그 이렇게 됬을때 PK가 1인 Member를 Controller에서 찾아보았는데, 만약에 영속성이 끊긴 Member가 반환이 된다면 로그에 "???"이라는 문구 사이에 Select문을 통해서 PK가 1인 멤버를 가져와야하지 않나요? 영속성컨텍스트에서 관리를 하지 않은 Member를 반환했고, 그 Member를 다시 찾으려고 시도하기때문입니다. # EntityManager.contains 사용 영속성 컨텍스트에서 관리되는 Object인지 확실히 확인하기 위해서 EntityManager의 contains 메서드를 통해서 확인해보았을때 로그가 아래와 같이 나왔습니다. 결론적으로 memberService.update를 통해서 반환된 Member객체는 영속성이 끊기지 않은 객체이지 않나요?? 감사합니다 :D
마지막 강을 들으면서 전체 테스트를 돌려보니 deleteAccount 테스트만 오류가 발생했습니다. 에러 로그를 확인해보니 Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement: delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKDDVHOIEDLDMC0I8PA6JUY4X69: PUBLIC.TRANSACTION_TB FOREIGN KEY(DEPOSIT_ACCOUNT_ID) REFERENCES PUBLIC.ACCOUNT_TB(ID) (CAST(1 AS BIGINT))"; SQL statement: delete from account_tb where id=? [23503-214]]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement at app//org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) account의 delete 쿼리가 실행될 때 transaction_tb의 외래키 때문에 무결성 오류가 발생한 것으로 보입니다. Transaction 엔티티에서 @ManyToOne 부분에 cascade 설정을 해줘야 할까요?
스프링 부트 공부하다가 왜 이렇게 되는지 찾아봐도 제대로 설명해주는 곳이 없어서 아쉬웟는데 강의를 들으면서 정말 만족하면서 듣고 있습니다. 테스트 코드에 사용하는 클래스나, 매서드들은 배우는 입장에서는 강사님께서 알고계신 정보를 주입해주는 방법말고는 스프링 지식이 부족해서 알기가 어렵더라구요 강사님이 강의 진행을 하시면서 사용하시는 테스트 코드나 매서드들의 정보는 스프링 doc나 어디를 가야 공식문서처럼 볼수있는 곳이 있을까요? 스스로 필요한 테스트 클래스나 매서드들 찾아서 공부해보고 싶어서 문의를 남겨봅니다,
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 현재 맥(m1)에서 프로젝트를 빌드하는 도중에 해당 에러가 발생했습니다. 이전 질문에서도 똑같은 에러가 있길래 답변을 확인해봤으나 프로젝트의 sourceCompatibility = '17' 과 java -version의 openjdk version "17.0.6" 2023-01-17를 확인하니 자바 버전은 동일한 것 같습니다. 그런데 왜 해당 오류가 발생하는지 의문입니다. 프로젝트를 초기 세팅할 때도 스프링부트 3 버전과 자바 17버전으로 잘 세팅했습니다. 에러가 나는 이유를 알 수 있을까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예 [질문 내용] 안녕하세요. test 진행 시 해당 사진 처럼 오류가 발생합니다. Run tests using 도 인텔리제이로 변경해 놓은 상태인데 너무 답답해 죽겠습니다...ㅠㅠ
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의에서는 Springboot 3 + JDK 17 환경인데요. com.gorylenko.gradle-git-properties 플러그인을 build.gradle 에 반영하고, build 하면 강의에서 보여주신 것처럼 git.properties 파일이 정상적으로 생성됩니다. 그러나, SpringBoot 2.7 + JDK 11 환경에서 동일하게 작업해보면, git.properties 파일이 생성되지 않습니다. com.gorylenko.gradle-git-properties 플러그인의 버전 호환성 문제일까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 평소에 생각하지 못했던 부분인데, 강의를 들으면서 좀 궁금한 점이 생겨서 질문드립니다.. 만약 엔티티에 setter 메소드를 구현하지 않았다면, @GeneratedValue를 사용해서 데이터가 DB에 저장될 때 PK값이 생성되도록 했다면, 그 생성된 PK값이 영속성 컨텍스트에서 관리되는 엔티티 객체에 어떻게 저장되는 것인지 궁금합니다.
안녕하세요. 강의 수강 도중 제가 이해를 잘하지 못하여 질문 남기게 되었습니다. 16:28~ 부분에서 주문과 배송의 경우 일대일 단방향 관계라고 말씀하셨는데, 회원 엔티티 분석 이미지를 보았을 때 Order 에서 delivery: Delivery, Delivery 에서 order: Order 이면 단방향이 아니라 양방항 관계인 것 같은데 왜 단방향 관계인지 궁금합니다. ㅜ
안녕하세요 정수원 선생님 브랜치 Part11에 관해 동작문의가 2개 있습니다. 1) SendJobConfiguration에서 apiJob이 제일 먼저 실행이 되는 job이고 apiJob에서 apiStep1 (시작로그를 남기는) , apiStep2(끝냈다는 로그를 남기는) 사이에 주입받은 jobStep을 실행시키는데 이 jobStep은 SendChildJobConfiguration에 있는 jobStep 인가요? 2) 이후에 jobStep에서 apiMasterStep을 실행시키고 Partition으로 쪼개서 3개의 스레드에 할당할때는 apiSlaveStep에서 read부터 각 스레드가 담당하는것이 맞나요?
클린 아키텍처 (및 헥사고날) 설계 시 JPA 영속성 계층을 어디에 두어야하는지 궁금합니다. 일반적으로 해당 아키텍처에선 영속성 계층을 도메인 계층에서 분리시켜야 한다고 주장하던데 (육각형 안 Entity는 POJO이며, JPA Entity는 바깥의 Adapter에 구현하고 Mapper로 변환하는 형식), 이렇게 되면 JPA가 제공하는 lazy loading이나dirty checking 등의 이점은 포기해야 되는것일까요? 도메인 모델에 JPA 코드를 사용하자니 이러한 아키텍트 원칙에 위배되는거 같고, 그렇다고 이걸 분리해놓으면 따로 구현해야될게 많아지니 고민입니다.. 타협을 한다면 어느 방식으로 하는게 좋을까요? 애초에 이러한 아키텍트 방식과 JPA는 (지향점이 다르기에) 어울리지 않는 것일까요?