클라이언트가 로그인 하게되면 JWT를 발급받아 헤더에 이 토큰을 포함시켜서 다음 요청을 보내는 걸로 알고있습니다. 수업에서는 signin 메서드에서 token을 리턴해준 뒤에 직접 postman의 Authorization에 있는 Bearer Token 부분에 삽입해준 뒤에 다음 요청을 보냈는데 singin 메서드에서 리턴받은 token을 최종적으로 리턴하기만 하면 클라이언트에서 그 토큰을 자동으로 헤더에 포함시켜서 다음요청을 보내는 것인지 궁금합니다. 아니면 이 토큰을 프론트엔드단에서 받아서 다른 처리가 필요한지 궁금합니다.
안녕하세요. 강의 4분 40초경부터 설명이 시작되는, Ground Truth로만 학습한다는 것이 잘 이해가 되지 않아 질문 올립니다. IOU를 구하기 위해서는 G.T값 이외의 비교 대상이 필요하다 생각하는데, class를 G.T로만 정한다는 것이 이해가 잘 안되네요.. 답변해주신다면 정말 감사하겠습니다!
package com.junyharang.jwtstudy.config.jwt ; import com.fasterxml.jackson.databind.ObjectMapper ; import com.junyharang.jwtstudy.auth.PrincipalDetails ; import com.junyharang.jwtstudy.model.Member ; import lombok. RequiredArgsConstructor ; import org.springframework.security.authentication. AuthenticationManager ; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken ; import org.springframework.security.core. Authentication ; import org.springframework.security.core. AuthenticationException ; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ; import javax.servlet.http. HttpServletRequest ; import javax.servlet.http. HttpServletResponse ; import java.io.IOException ; // 스프링 시큐리티에 UsernamePasswordAuthenticationFilter 가 있다 . // /login 이 요청 오면 username, password 를 전송하면 (Post 로 ) // UsernamePasswordAuthenticationFilter 가 동작한다 . // 현재는 SecurityConfig 에서 FormLogin 을 disable 을 시켜서 동작하지 않는다 . @RequiredArgsConstructor public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager ; @Override // /login 요청이 들어오면 로그인 시도를 위해 실행되는 Method public Authentication attemptAuthentication( HttpServletRequest request , HttpServletResponse response ) throws AuthenticationException { System . out . println( "JwtAuthenticationFilter : 로그인 시도 중 입니다 !" ) ; // 1. username, password 를 받는다 . try { // BufferedReader reader = request.getReader(); // // String input = null; // // while ((input = reader.readLine()) != null) { // System.out.println(input); // } // while 문 끝 // JSON 으로 전달된 값을 Parsing 할수 있게 해주는 객체 생성 ObjectMapper om = new ObjectMapper() ; Member member = om . readValue( request . getInputStream() , Member .class ) ; System . out . println( member ) ; // Token 생성 ( 회원의 이름과 Password 를 통해 ) UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( member . getUsername() , member . getPassword()) ; // PrincipalDetailsService 의 loadUserByUsername() 이 실행 된다 . // authenticationManager 에 Token 을 넣어 호출한다 . // authentication 변수에는 Login 정보가 담긴다 . Authentication authentication = authenticationManager . authenticate( authenticationToken ) ; // authentication 객체가 Session 영역에 저장된다 . PrincipalDetails principal = ( PrincipalDetails ) authentication . getPrincipal() ; // 출력이 된다면 Login 이 되었다는 의미 System . out . println( principal . getMember() . getUsername()) ; return authentication ; } catch ( IOException e ) { e . printStackTrace() ; } // try-cache 문 끝 System . out . println( "===========================================" ) ; // 2. authenticationManager 로 정상 인지 로그인 시도하면 PrincipalDetailsService 가 호출된다 . // 해당 Class 안에 loadUserByUsername() 가 자동 호출 // 3. PrincipalDetails 를 Session 에 담는다 . // Session 에 해당 내용을 담는 이유는 담지 않으면 권한에 대한 처리를 할 수 없기 때문이다 . // 4. JWT 를 만들어서 응답해 준다 . return null ; } // attemptAuthentication(HttpServletRequest request, HttpServletResponse response) 끝 } // class 끝 안녕하세요? 25강에 해당 부분을 하다가 DB에 회원값이 들어가 있는 걸 보고, 회원가입 로직이 누락 되었다는 부분을 찾기 위해 Controller를 보고 아래 내용을 추가 하였습니다. @PostMapping( " join " ) public String join(@RequestBody Member member ) { member . setPassword( bCryptPasswordEncoder . encode( member . getPassword())) ; member . setRolse( "ROLE_USER" ) ; memberRepository . save( member ) ; return " 회원가입완료 " ; } 그리고 나서 SecurityConfig에 아래 내용을 추가 하였구요. @Autowired private MemberRepository memberRepository ; @Autowired private CorsConfig corsConfig ; @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder() ; } // passwordEncoder() 끝 private final CorsFilter corsFilter ; 근데 아래와 같은 Error가 발생 합니다. Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2022-01-19 00:25:02.184 ERROR 17752 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Parameter 1 of constructor in com.junyharang.jwtstudy.controller.RestAPIController required a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' that could not be found. Action: Consider defining a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' in your configuration.
안녕하세요 수업을 듣고 있는 수강생입니다. 다름이 아니라, 피보나치 수열에서 해당 코드는 입력받은 수까지 계속 연산을 하고 있으며, 단순히 프린트 하는 명령이 없기 때문에 프린트를 하지 않는것으로 보이는데, 해당 입력 값이 13일 때, for문 자체를 빠져나가게 하는 방법이 있을까요? else : final_fibo = n1 + n2 n1 = n2 n2 = final_fibo if final_fibo < insertNumber: print (final_fibo , " " )
어느 사이트에서든 어떤 태그 내의 id 속성값은 유일무이하게 해당 태그에서만 사용된다고 봐도 정말로 문제없나요? 이전에 html 실습하면서 공부했을 때 id속성이나 class속성이나 두개 사용하면서 크게 다른게 없다고 느꼈는데 이 영상을 보면서 id가 실무에서는 해당 태그에만 적용되도록 사용하는건지 정확히 알고싶습니다.
안녕하세요 강사님 퀄리티 높은 강의와 디테일좋은 강의 감사드립니다. 머신러닝에도 관심이 있어 공부를 하던와중에 내가직접 서비스를 하려면 백엔드의 지식도 필요할듯하여 감사하게 강의를 듣고있습니다. 머신러닝/딥러닝 서비스를 사용하기위한 백엔드 서비스가 Django 가 좋은것같은데 현업에서도 많은 사용을 하고있나요? (아마 강사님께서도 많은 컨설팅을 해주셔서 아실거라 생각이 들어 질문을 드립니다.) 딥러닝 모델을 웹에서 돌리기위해서는 병렬처리?가 필요할듯한데 Django 에서는 이러한 부분에대한 솔루션이 있는지 또한 궁금합니다. 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 하시다가 ' 함수형 프로그래밍' 에 대해서 말씀하셨는데, 이 키워드로 검색하니 많은 강좌가 나와서 올바른 결과인지 무엇보다 잘 모르겠습니다. 하나 추천해주시면 감사하겠습니다. 현 상황은 취업준비생으로, Inflearn Original 로 파이썬 초급부터 시작하여 마지막 단계까지 공부할 계획이라 초급부터 듣고 있습니다. 또한 기계공학 전공자라 CS 지식이 부족하여 정보처리기사 필기 준비와 병행하고 있습니다. (앞으로 python backend를 준비하면서 MLOps 쪽으로 커리어를 진행할까 생각 중입니다.)
which python을 입력하면 which : 'which' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + which python + ~~~~~ + CategoryInfo : ObjectNotFound: (which:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 라는 오류가 발생합니다. 어떻게 해야되나요
from selenium import webdriver driver = webdriver.Chrome('C:/Users/estee/Desktop/파이썬 작업물/chromedriver.exe') import time # 주소모음 naver_GIBH = "https://map.naver.com/v5/search/%EA%B5%AC%EC%8A%A4%EC%95%84%EC%9D%BC%EB%9E%9C%EB%93%9C%20%EB%B8%8C%EB%A3%A8%ED%95%98%EC%9A%B0%EC%8A%A4/place/505375149?c=14140682.3022615,4508106.9534795,15,0,0,0,dh" naver_GBK = "https://map.naver.com/v5/entry/place/996095686?c=14133872.9335375,4519631.0127127,15,0,0,0,dh" naver_YONGSAN = "https://map.naver.com/v5/entry/place/1905880476?c=14133837.3558283,4513226.0701902,15,0,0,0,dh" naver_adresses = [naver_GIBH, naver_GBK, naver_YONGSAN] # 평점과 리뷰 크롤링 for adress in naver_adresses : driver.get(adress) driver.implicitly_wait(10) driver.switch_to.frame('entryIframe') rating = driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[1]/div/div/div[1]/div/span[1]').text submenu_name = driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[3]/div/div/div/div/a[3]/span').text # 메뉴가 5개 나올 때는, 4번째 탭을 이용하고, 메뉴가 4개 나올 때는 3번째 탭을 이용 if submenu_name != "리뷰" : driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[3]/div/div/div/div/a[4]/span').click() else : driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[3]/div/div/div/div/a[3]/span').click() # 리뷰개수 print( driver.find_element_by_xpath('//*[@id="app-root"]/div/div/div[2]/div[5]/div[4]/div[3]/h2/span').text ) driver.close() 해당 코드는 네이버 지도의 각 매장 별 리뷰 개수를 가지고 오는 코드에요. naver_GIBH , naver_GBK 링크는 리뷰 개수를 불러오는데, 마지막 naver_YONGSAN 링크의 리뷰 개수는 들고오지 못하더라구요. 혹시 이 코드에 관해 봐주실 수 있을까요 ? + 추가 질문인데, 제가 Selenium을 통해서 리뷰개수를 찾아오는 방식은 selenium으로 리뷰 탭을 선택하고 나서, 들고 오는 거에요. 근데 네이버 지도가 인스타그램처럼 스크롤을 내리면 정보를 불러오는 방식으로 설계되어 있더라구요. 혹시 이와 관련해서 Selenium으로 클릭하지 않고, crawling 하는 방법이 따로 있을지도 질문드려요 .
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 시각화 설정 부분에서 알려주신대로 했는데 안돼서 찾아봤는데 구글 코랩을 사용하시는 분들은 다르게 해야하더라구요! 주피터 노트북하고 거의 동일하다고 생각했는데 이 부분 추가해주시면 좋을 것 같습니다ㅎㅎ 저는 구글링 통해서 글꼴깔고 리빌드 하고 재시작 하는 방법으로 플롯의 네모가 한글로 정상적으로 나왔습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ------------------------------------------------------------------------------------ 1) % 로 하는 format 방법은 블랭크에 표시하는 것이 없는가요???? print('{:_>3d}'.format(25)) 처럼 정수에서 그리고 string에서도 .format을 사용했을 때 블랭크에 언더바 같이 표시할 수 있습니다. 하지만 print('%' % ()) 문법을 사용했을 때는 표시할 수가 없나요?? 2) 강의에서 알려주신 사이트를 보니 정수형의 경우, d도 사용하지만 int의 i 도 사용가능하다고 하여 직접 해본 결과, 동일한 결과가 나왔습니다. 하지만 현업에서는 무엇을 더 많이 사용하나요???
from mmdet.apis import init_detector, inference_detector import mmcv 를 할때 런타임 다시 시작을 하는데 왜 그래야 하나요..? 설치를 하게 되면 바로 실행이 되어야 한다고 생각하는데, 그렇지 않아서 문의드립니다. 또한 런타임이 어떤 역할을 하는지 알려주시면 감사하겠습니다. +) 커널과 런타임은 같은 개념인가요?
무료로 이렇게 좋은 강의영상 올려주셔서 정말 감사합니다. 너무 많은 도움이 되네요. 전부터 JWT 토큰을 왜 사용하는지에 대해서 의문을 가지고 있었는데, 명확한 답이 나오지 않아 질문드립니다. 세션에 대한 문제점 (서버 확장시, 스티키 세션을 사용하거나, 세션 클러스터링을 해야하는 문제)를 해결하기 위해 사용된다는 것은 알겠습니다만, JWT를 사용하는 예제들 보면 리프레시토큰도 함께 사용하여, 어세스토큰을 제발급하는 용도로 사용하더군요. 그럼 리프레시토큰은 결국 세션과 마찬가지로 DB(혹은 레디스 등의 메모리 DB)등에 저장이 되어 관리되어질텐데, 그렇게 된다면 세션과 결국 별 차이점이 없지 않을까요? 이 문제를 가지고, 여러 사람들에게 물어보았으나, 딱히 세션에 비해 가지는 장점이 없어지는 것 같더라고요. 물론 리프레시토큰을 사용하지 않고 AccessToken만 사용하는 경우에는 장점이 있다는 것을 알겠습니다. 1. 정리하자면, RefreshToken을 사용하는 경우 세션에 비해 가지는 장점이 있는가? 2. 없다면 굳이 JWT는 왜 사용하는가? 입니다
안녕하세요 선생님 조금전 수강을 시작한 학생입니다. 제가 groom ide를 사용하여 django 프로젝트를 개발한 후 heroku에 배포를 하려니까 groom이 제공하는 3.7.4 버전을 지원하지 않아 git push heroku master 에서 빌드에러가 났었습니다. https://devcenter.heroku.com/articles/python-support Supported runtimes python-3.10.1 on all supported stacks python-3.9.9 on all supported stacks python-3.8.12 on all supported stacks python-3.7.12 on all supported stacks python-3.6.15 on all supported stacks 강좌가 제작되고 시간이 흘러 지금은 3.7.12까지 나왔는데요 anaconda에선 3.7.11이 최신 버전이더라고요. 강좌를 따라가다가 나중에 heroku에 배포할때 문제되는 부분은 없을까요? 또한 장고도 현재 4.0버전이 나왔고 3.0버전을 더이상 지원하지 않고 3버전 중에선 3.2.10이 최신 릴리즈라 3.2.10을 설치해놨습니다. 앞으로 강좌를 진행하며 이 부분에서 문제되는 부분이 있을까요? 감사합니다.