묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
[질문X] orderV6 for문으로 발라내기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]복붙 하려다 못참아서 그만.. ㅎㅎ @GetMapping("/api/v6/orders") public List<OrderQueryDto> ordersV6(){ List<OrderFlatDto> orderFlats = orderQueryRepository.findAllByDto_flat(); Map<Long, List<OrderItemQueryDto>> orderItemMap = new HashMap<>(); Map<Long, OrderQueryDto> orderMap = new HashMap<>(); orderFlats.forEach(orderFlat -> { Long orderId = orderFlat.getOrderId(); if(orderMap.get(orderId) == null){ orderMap.put(orderId,new OrderQueryDto(orderId, orderFlat.getName(), orderFlat.getOrderDate(), orderFlat.getOrderStatus(), orderFlat.getAddress())); } if(orderItemMap.get(orderId) == null){ orderItemMap.put(orderId,new ArrayList<OrderItemQueryDto>()); } orderItemMap.get(orderId).add(new OrderItemQueryDto(orderId, orderFlat.getItemName(), orderFlat.getOrderPrice(), orderFlat.getCount())); }); orderItemMap.forEach((orderId, orderItem)->{ orderMap.get(orderId).setOrderItems(orderItem); }); return new ArrayList<OrderQueryDto>(orderMap.values()); }stream 저처럼 잘 모르시는 분들은 이게 더 와 닿으실 거임.. 아 보람차다 ㅎㅎㅎ
-
해결됨실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
batch는 정확히 등록된 엔티티를 조회해 올때만 작동되는 건가요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]from 해서 엔티티에서 가져오는 거니 Dto로 가져와도 왠지 먹힐 줄 알았는데 아니었네요..정확히 fetch 등이나 엔티티 자체를 가져올 때만 되는 거 맞나요?
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
springframework를 import하는 곳에서 빨간색이 나옵니다.
aws 하기 전에 다시 복습해보고 싶어서springboot를 하나 다시 만들었습니다. 이때 버전을 3.0.12로 생성을 했구요 그렇게 생성해서 새로운 프로젝트를 열기만 했는데 어떤 에러가 나서 찾아보니 사용자 폴더에 있는 .gradle을 삭제하고 다시 프로젝트를 열어보라고 하더라고요. 그래서 삭제하고 새로 만든 프로젝트를 열어보니까 오류 없이 아주 잘 실행이 됩니다. 그렇게 혼자 배운 것들을 연습하다가 다시 강의 들으면서 작성했던 프로젝트를 열어보니 다 빨간색으로 나오네요.. 스프링에 관련된 거는 모두 빨간색으로 나오는거 같아요 사용자 폴더에 있던 .dradle 폴더를 지워서 이렇게 오류가 나오는 걸까요? 버전에 다른 프로젝트를 만들어서 충돌이 생긴 건지 어떤 이유인지 모르겠습니다. 기존 프로젝트 코드는 건들인게 하나도 없는데 왜 그런거죠? 아 그리고 강의 듣기 전에도 다른 책을 보면서 만든 프로젝트도 있는데 그 프로젝트를 열어보니 똑같이 빨간색으로 나오더라구요. 그 프로젝트도 버전이 3인가 그랬는데... 살려주세요 선생님!!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
webDataBinder
ArgumentResolver가 파라미터를 만들 때 WebDataBinder에 존재하는 validator를 순차적으로 찾아서 적용시키는 건가요??
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
file.dir 경로
[질문 내용]여기에 질문 내용을 남겨주세요.윈도우 사용자라 드라이브 명 포함 절대경로를 다 넣어주었구요.그런데 post로 잘 동작하는데 막상 파일에 가서 새로고침을 해보면 파일이 들어가있지 않습니다.다음 내용인 스프링으로 파일 업로드 해도 포스트로 잘 저장이 되었다고 나오지만 파일에 들어가보면 이미지가 없어요 ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
test오류
테스트 오류가 계속 노란색 불로 생기는데 어떻게 해결해야 하나요??java.lang.IllegalStateException: Failed to load ApplicationContextCaused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not setError creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
-
해결됨스프링부트 시큐리티 & JWT 강의
UsernamePasswordAuthenticationToken 질문 !
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()); 여기서 사용한 Token 은 그저 로그인 정보를 담아서 authenticationManager에 담기 위한 토큰인가요 ??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 입문강의 질문이요
김영한선생님 스프링입문강의10강 회원 도매인과 리포지토리테스트2:50초 나오는 코드 똑같이 쳤는데 오류가 나오네요 원인이 무엇인가요?
-
미해결스프링 핵심 원리 - 기본편
섹터5질문입니다.
싱글톤 패턴강의에서 질문있습니다.(싱글톤 컨테이너 강의 SingletonTest.class파일에서나옴) ApplicationContext ac= new AnnotationConfigApplicationContext(Appconfig.class); 웹 애플리케이션과 싱글톤강의 SingletonTest class 에서 나옴Appconfig appConfig=new Appconfig();컨테이너에 등록된 모든 빈 조회강의 ApplicationContextBasicFindTest class에서 나옴AnnotationConfigApplicationContext ac =new AnnotationConfigApplicationContext(Appconfig.class);3가지 차이가 뭐에요?세개 다 Appconfig.class를 참조하는것 같은데요. 2.강의 자료 싱글톤 컨테이너2번째 장에 아래와 같이 나왔는데요.고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다! 메모리 낭비가 심하다.해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. 싱글톤 패턴public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance(){ return instance; } private SingletonService(){ } public void logic(){ System.out.println("싱글톤 객체 호츌"); } } 위에께 강의 자료 3페이지에 나온 코드인데 해당 객체가 딱 1개만 생성되었는데요.2페이지에 나온 코드(스프링 없는 순수한 DI 컨테이너 테스트코드)가 메모리 낭비가 심하니까 위코드로 인해 메모리가 절약하는걸로 이해해도 되나요? 3.강의 자료 싱글톤 컨테이너4번째 장에 아래와 같이 나왔는데요.의존관계상 클라이언트가 구체 클래스에 의존한다. DIP를 위반한다.(클라이언트가 구체 클래스에 의존해서 OCP 원칙을 위반할 가능성이 높다.dp랑 ocp가 어디가 위반되었다는건가요? 혹시 인텔리제이에서 SingletonService 이렇게 작성하길 원할 때 대문자가 자동으로 변환되는건가요?아니면 시프티키 눌러서 대문자로 직접 변환하고 소문자로 변환하는건가요? 강의 자료 싱글톤 컨테이너에서 10페이지와 11페이지에 걸쳐진 테스트 코드에서 질문입니다. MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);위부분을 MemberServiceImpl memberService = ac.getBean("memnberService", MemberServiceImpl.class);이렇게 바꿔쓰면(이름부분에m추가하면)no bean이라고 컴파일 에러가 나옵니다. 근데 MemberServiceImpl.class파일에 memberService 이런 함수명이 없는데(강의자료에도 없음) 컴파일할 떄 어디서 참조되는건가요? 6.@Configuration과 싱글톤8분에 강의 중에 memberRepository가 5번 호출됬다가 3번 호출됬다가 그러시는데MemberServiceImpl.class에서public MemberRepository getMemberRepository(){return memberRepository;}이거 호출되는것 같은데 appconfig파일에@Beanpublic MemberService memberService(){return new MemberServiceImpl(memberRepository());}이부분이 왜 호출되는거에요?그리고 @Beanpublic MemberRepository memberRepository() {return new MemoryMemberRepository();} 이부분이 어떻게 5번이 호출되는건가요? @Configuration과 바이트코드 조작의 마법 7분 41초에 memorymemberrepasitory가 등록이 되어있어서 한번만 호출되어있다고 하셨는데 그 코드상에서 언제 등록이 된건가요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
postman message 항목 안나옴
postman 에서 요청할때 json반환값에 message에 대한 정보가 없습니다 스프링 버전차이일까요 ?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
CRUD에 따른 ResponseDto를 보내는 유형 및 ResponseDto 구성 방식에 대한 질문
안녕하십니까 영한님.영한님 덕분에 JAVA Spring 기반 백엔드 개발의시작을 할 수 있었고,이제는 5개월 차 스타트업 백엔드 개발자로써 커리어를 시작하게 되었습니다. 현업에 와서는 오히려 취준생 때 보다 더 많은 고민을 하게 되느데요, 질문 1. 그중 최근에 CRUD의 각 상황별 API 응답을 어떻게 보내는게 적절할지, 질문 2. 그리고 ResponseDto를 어떻게 구성하는것이 적절할지에 대한 고민을 팀장님과 함께 하고있어서, 영한님의 생각을 여쭙고자 질문글을 올리게 되었습니다.답변 해주시면 정말 감사할 거 같습니다! Q1. 생성, 조회 , 수정, 삭제 API의 응답을 각각 어떻게 보내시는지 여쭤보고 싶습니다. 가장 먼저 조회의 경우는 말 그대로 path의 Entity 및 관련된 Entity 정보를 조합하여 응답 DTO로 변환하여 보내고 있습니다. 그런데 나머지 Write Operation에 대한 응답을 어디까지 보내야 하냐가 이슈 입니다.예를들면 엔티티의 생성의 경우 엔티티의 응답 DTO를 보내면 - 프론트에서 별도의 조회 API 호출 없이 바로 프론트가 화면에 뿌려줄 수 있으니깐 저는 생성의 경우에도 조회와 마찬가지로 Entity의 정보를 조합하여 응답 DTO로 변환하여 보내고 있었습니다. 그런데 이러한 부분이 Command Query Sperate 원칙에 어긋나는것 같아, 영한님께서는 혹시 생성한 Entity의 Key만 보내시는지, 아니면 Entity의 정보를 DTO로 변환하여 보내시는지 궁금합니다. 만약 Entity의 Id만 보내신다면 이후에 별도로 조회API를 호출해야 하고 그 또한 비용일텐데 이러한 부분은 어떻게 하시는지 여쭤보고 싶습니다. 이제 수정 API인데요,제가 다룬 비즈니스 로직의 경우 수정 비즈니스 로직이 다양하고 , 각 비즈니스 로직의 경우 다뤄지는 Entity의 종류가 다른 경우였습니다. (중심 Entity는 동일하지만, 연관된 Entity를 누구까지 건드리냐의 차이) 그래서 하나의 통일된 응답으로 보내기 모호한 점이 첫 번째 이유이고,애초에 수정 후에 프론트 화면에서 그 엔티티의 정보를 보여줄 필요가 없어서 라는 두번째 이유에 의해서 에초에 엔티티의 Id값도 보내지 않고 있었는데요,이 수정 API의 응답을 영한님은 어떻게 진행하지는지 그 이유가 궁금합니다. 마지막으로 삭제의 경우는 정말, 프론트에게 보낼 응답이 없어도 되는 경우 라고 생각했는데요,팀장님의 의견은 만약에 나중에 삭제한 Entity를 복구하는 요구사항이 추가되는것을 고려하여Id 정도는 넘기자는 의견을 내어주셨습니다.마찬가지로 삭제의 경우도 어떤식으로 수행하시는지 그 이유가 궁금합니다. Q3. 마지막으로 Entity의 ResponseDto의 필드를 어떤식으로 구성하시는지 궁금합니다 예를들면 저의 경우는 API는 프론트와 서버 간의 스펙이라고 생각하고, Entity의 단건조회의 경우는 단건 조회용 ResponseDto를, 전체조회의 경우는 전체 조회용 SummaryResponseDto를 별도로 만들어서 사용하고 있었습니다. 저희 팀장님 께서는 프론트쪽도 일을 해오시다가 , 백엔드쪽 분야로 전향하신 케이스 인데요,그렇다 보니 어떻게 해야 프론트의 생산성이 올라가는지를 고려하시는 분이셨고,팀장님의 생각은 서버에서 넘겨주는 응답에 일관성이 있어야 그 응답을 사용하는 프론트 측도 학습이 되고 놓치는 부분 없이 생산성이 올라간다는 의견이셨습니다. 그래서 Entity별로 당장 사용하지 않더라도 가능한 모든 필드를 담은 ResponseDto를 하나만 만들고,해당 ResponseEntity의 조합으로 각 API별 응답 Dto를 만들어서 사용하면 ,프론트 측 에서는 일관성 있는 응답값을 사용할 수 있다는 의견이셨습니다.물론 이 방법이 네트워크 패킷의 양을 쓸데없이 증가시킨다는 것을 알고 계시면서도,생산성에 큰 영향을 미치는 부분이라고 생각하셨습니다. 예를들어 다음과 같이 각 Entity의 응답 Dto의 조합별로 API의 ResponseDto를 만들 수 있습니다.ResponseDto{ UserDto{id : 1,name : “aaa”… // User엔티티의 거의 모든 필드} ItemDto{ id : 2,name : “bbb”,… // Item엔티티의 거의 모든 필드}} 저는 이러한 부분에 대해 생각해 본 적이 없이,그냥 제가 “해당 API를 호출하는 화면에서 필요한 정보들만을 담아 (혹은 여러 화면에서 쓰인다면 여러개를 고려) ResponseDto를 각각 만들어서” 넘겼는데요 영한님께서는 이러한 ResponseDto를 구성하는 부분에 있어서상황별로 필드를 재구성 하여 ResponseDto를 정의하여 사용하시는 편 인지 (SummaryResponseDto 등의 별도 Dto에 사용될 Entity의 필드들을 풀어서 정의하시는지)아니면 생산성을 고려하여 각 Entity별 Dto를 만들고, 이들을 조합하여 ReponseDto를 정의하시는 편 이신지 ,혹은 다른 규칙이 있으신지 궁금합니다. 물론 그렇다고 , 팀장님의 의견에서 전체조회시 사용하는 DTO와 단건조회시 사용하는 DTO가 동일하더라도,전체조회 후 단건조회를 할때 단건조회 API를 호출하지 말고 기존 Front가 가지고 있는 값을 쓰지는 말자는 의견 이십니다 (단건조회API는 별도로 호출해야 한다)그저 핵심은 프론트가 다루는 ResponseDto의 일관성을 위해서 입니다 (결론은 생산성을 위해) 긴글 읽어주셔서 감사합니다.항상 건강하셨으면 좋겠고,다음 강의들도 손꼽아 기다리고 있습니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
webapp 관련 질문(인텔리제이 무료버전)
[질문 내용]강의대로 main.webapp 을 만들어서 그 안에 html 파일이나 jsp 파일을 넣으면 스프링이 읽어드리지 못하는 것 같습니다.html은 main.resources.static 에 넣으면 해결은 됐지만, JSP는 아예 동작하지 않고 white label page(status:404)를 띄웁니다.해결 방법을 아시는 분이 계실까요?
-
해결됨스프링부트 시큐리티 & JWT 강의
JWT SecurityConfig.java에서 .and() deprecated
Spring Boot 3.0.0에서 최신판인 Spring Boot 3.1.2로 업데이트 되면서Spring Security도 6.1.2로 업데이터 되었습니다.이에 따라서 강사님 github - Version3 branch에 있던 프로젝트의 SecurityConfig.java에서중간중간에 .and()로 묶어주신 부분도 .and()가 deprecated 되면서 사용할 수 없게 되었습니다.이에 따라 // 이전 생략 return http.csrf(CsrfConfigurer::disable) .sessionManagement(s->s.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .formLogin(f->f.disable()) .httpBasic(h->h.disable()) .apply(new MyCustomDs1()) // custom Filter .authorizeHttpRequests(authorize-> { // 권한 부여 // authorizeRequests가 deprecated됨에 따라 authorizeHttpRequests 사용 권장 authorize .requestMatchers("/api/v1/user/**").hasAnyRole("hasRole('ROLE_USER') or hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')") .requestMatchers("/api/v1/manager/**").hasAnyRole("hasRole('ROLE_MANAGER') or hasRole('ROLE_ADMIN')") .requestMatchers(("/api/v1/admin/**")).hasAnyRole("hasRole('ROLE_ADMIN')") .anyRequest().permitAll(); });apply(new MyCustomDs1()) 이후에 authorizeRequest 메소드를 람다식으로 변환시켜서 이어줄려고 하는데, 위 캡쳐 이미지와 같이 에러가 떴습니다.내용을 보자 하니 http에 custom Filter(new MyCustomDs1())를 apply시키고 이후에 authorizeHttpRequests를 실행시켜야 하는데, authorizeHttpRequest가 MyCustomDs1 내부에 있는 함수로 인식하는거 같은데,, 어떻게 해결해야 하는지 방법을 공유해주시면 감사하겠습니다.
-
미해결토비의 스프링 부트 - 이해와 원리
스프링 로그인 제어 문의드립니다
안녕하세요 토비님제가 테더링이 제한되서 부득이 하게첨부이미지로 질문드립니다수고하세요,,
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
Compile 안됩니다...
강의 내용대로 컴파일을 시도했는데 안됩니다...저 폴더를 인식을 못하는 걸까요..[INFO] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Total time: 4.095 s[INFO] Finished at: 2023-11-15T01:23:56+09:00[INFO] ------------------------------------------------------------------------[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project studyolle: /Users/swnam/Documents/IntelliJ/java/whiteship/target/classes/static/node_modules/.bin/jdenticon -> [Help 1][ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.[ERROR] Re-run Maven using the -X switch to enable full debug logging.[ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: 오류 내용은 이렇습니다.시도한 내용.pom.xml에서 노드 얀 버전도 맞춰봤습니다.깃허브에서 클론 가져왔습니다.조금 밑에있는 커밋들은 제대로 동작을 하는데 최신 커밋내용은 안되는것같습니다..
-
미해결스프링 핵심 원리 - 기본편
java.lang.NullPointerException 오류 발생
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.영한님과 똑같이 코드를 작성했는데 AllBeanTest실행 시 java.lang.NullPointerException 오류가 발생합니다ㅠ -AllBeanTest 실행 console
-
해결됨스프링 핵심 원리 - 기본편
스프링 부트가 실행 안되는 것 같아요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]3주 정도만에 강의 들어가서 실습하려 하는데 원래 빨간 줄이 생겨 실행해보니 위 에러 코드가 떴습니다.구글링 하여Gradle Refresh첫번째 방법으로 라이브러리가 꼬인 경우가 많으니 Gradle Refresh를 해준다.(IntelliJ 오른쪽 Gradle Tab -> refresh모양 버튼 클릭)Project Structure → Problembuild가 깨지면 해당 페이지에 Problem이 표시된다. 라이브러리가 꼬인 케이스인데 여기서 수동으로 삭제해줄 수도 있다.(상위 File 탭 -> Project Structure -> Problem)File → Cache 삭제IntelliJ Cache를 삭제해보자.(상위 File 탭 -> Invalidate Cache ~ 클릭)위 3가지 방식을 활용하여 고쳐보려고 하였는데요빨강 줄은 사라지고 오류 코드는 보이지 않게 되었지만스프링 부트가 실행이 안되는 것 같습니다(톰캣 서버가 열리지 않습니다) 이유가 너무 궁금합니다.. 알려주시면 감사하겠습니다 수정) 코드의 차이는 전혀 없다고 자신하며 오랜만에 들어왔기에 인텔리제이 업데이트를 한 번 한 것 같습니다.그 이유 때문일 수도 있을까? 라는 의문이 있지만 답변에 도움이 될 수 있게 추가하였습니다
-
해결됨Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
Sinks multicast의 subscribe에 질문있습니다.
안녕하세요.Sinks multicast 예제에서 질문이 있습니다. 질문1Many<String> sinks = Sinks.many().multicast().onBackpressureBuffer(); Flux<String> flux = sinks.asFlux(); sinks.emitNext("1", EmitFailureHandler.FAIL_FAST); sinks.emitNext("2", EmitFailureHandler.FAIL_FAST); flux.subscribe(data -> System.out.println("Subscribe1 : " + data)); flux.subscribe(data -> System.out.println("Subscribe2 : " + data)); sinks.emitNext("3", EmitFailureHandler.FAIL_FAST);위 코드를 실행하면 결과는 아래와 같이 출력됩니다.Subscribe1 : 1Subscribe1 : 2Subscribe1 : 3Subscribe2 : 3강사님이 말씀하신대로면 Subscribe1 : 1Subscribe1 : 2Subscribe2 : 1Subscribe2 : 2Subscribe1 : 3Subscribe2 : 3이렇게 동작될것같은데 다르게 출력되어 질문올립니다. 질문2sinks.emitNext("3", EmitFailureHandler.FAIL_FAST);마지막 emitNext는 2개의 subscribe()가 동작이되고 다음에 동작되는데 어떻게 subscribe를 할 수 있는걸까요?
-
해결됨스프링부트 시큐리티 & JWT 강의
JwtAuthorizationFilter에서 오류가 뜹니다.
안녕하세요.. 저는 spring legacy 로 jwt를 구현했습니다.로그인 기능까지는 되었는데 인증과정에서 질문이 있습니다.@Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("인증이나 권한이 필요한 주소 요청이 됨."); String header = request.getHeader(JwtProperties.HEADER_STRING); System.out.println("jwtHeader : " + header); // header 유무 확인 if (header == null || !header.startsWith(JwtProperties.TOKEN_PREFIX)) { chain.doFilter(request, response); // 필터를 타겟에 넘겨버리고 리턴 return; } // JWT 토큰 검증 String token = request.getHeader(JwtProperties.HEADER_STRING) .replace(JwtProperties.TOKEN_PREFIX, ""); System.out.println(token); String username = JWT.require(Algorithm.HMAC256(JwtProperties.SECRET)).build() .verify(token).getClaim("username").asString(); System.out.println("토큰 검증 완료");위의 코드는 JwtAuthorizationFilter에 있는 doFilterInternal 입니다.header 까지는 잘 들어오는데 알고리즘이 자꾸 맞지 않는다고 합니다.. 포스트맨으로 테스트할 때 login 후 header 값을 복사해 인증이 필요한 페이지에 접근할 때 header에 넣어주었습니다.. 제가 뭘 잘못한 건지 잘 모르겠습니다...ㅠㅠ
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
hello=??, utf-8로 변경해도 안되면...
기본 언어는 ko로 되어있고인코딩은 3군데 모두 utf-8로 변경하고인텔리제이를 아예 껐다가 키니까 되는거 같아요