PDF를 보면서 복습을 하는데 1. 핸들러어댑터호출 핸들러어댑터를 통해 new-form 이라는 논리뷰 이름을 획득한다. 2. ViewResolver 호출 new-form 이라는뷰 이름으로 viewResolver를 순서대로호출한다. BeanNameViewResolver 는 new-form 이라는 이름의스프링 빈으로등록된 뷰를찾아야하는데 없다. InternalResourceViewResolver 가 호출된다. 3. InternalResourceViewResolver 이뷰 리졸버는 InternalResourceView 를반환한다. 4. 뷰 - InternalResourceView InternalResourceView 는 JSP처럼포워드 forward() 를호출해서 처리할수 있는경우에 사용한다. 5. view.render() view.render() 가호출되고 InternalResourceView 는 forward() 를사용해서 JSP를실행한다. 그런데 코드를 찾아보니까 render()가 실행되면서 resolveViewName()로 viewResolver를 순회하던데 이때 InternalResourceViewResolver가 호출되는게 맞나요 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. if (failsafe_flag == 1 || failsafe_flag == 2 || low_bat_flag == 1 || iBus.SwC == 2000) { TIM3->PSC = 1000;
안녕하세요. 장고에서 보안이 필요한 SECRETKEY 등의 내용은 .gitignore로 설정한 json 파일에 따로 저장하여 사용하고 있습니다. csrf token 값도 이렇게 저장하고 업데이트 하여 필요에 따라 json 파일로 부터 가져오거나, 업데이트하여 사용 중에 있습니다. 개발환경에서는 어느 뷰함수에서 새로운 값으로 업데이트 한 후에, 다른 뷰함수에서 이 값을 가져오면 당연히 업데이트 한 값이 나타나는데, 문제는 운영환경(AWS)에서는 업데이트 되어 있지 않고 이전의 저장된 값이 나타난다는 점입니다. json 파일에 대한 컨트롤은 기존의 settings.py를 환경에 따라 셋으로 분리한 모듈 중 하나인 settings/base.py에서 처리하고 있습니다. 공통 요소는 base.py, 운영 환경은 prod.py , 개발 환경은 local.py에 각각 설정하였습니다. base.py 에서 다음과 같이 json 파일을 다루고 있습니다. #settings/base.py secret_file = os.path.join(BASE_DIR, 'secrets.json') with open(secret_file) as f: secrets = json.loads(f.read()) # key가 setting인 value 가져오기 def get_secret(setting, secrects=secrets): try: return secrets[setting] except KeyError: error_msg = "Set the {} environment variable".format(setting) raise ImproperlyConfigured(error_msg) # key/value 신규 저장 또는 기존 값 업데이트 def update_secret(key, value): secrets[key] = value with open(secret_file, 'w') as outfile: json.dump(secrets, outfile, indent=1) SECRET_KEY = get_secret('SECRET_KEY') 그리고 base.py 의 get_secret 함수 또는 update_secret 함수를 views.py 에서 호출하여 필요한 값을 가져오고 있습니다. 개발 환경에서는 이러한 값들을 업데이트 하고 가져오면, 너무나도 당연히 그 업데이트 된 값으로 나타나지만, 운영 환경에서는 이전에 저장되었던 값이 나타납니다. 예를 들면 다음과 같습니다. # 개발환경 / views.py from config.settings import base def view_1(request): ... # 새로운 csrf_token 값('bbb') 받아오기 csrf_token = request.POST.get('csrfmiddlewaretoken') # csrf_token 값 업데이트(기존 값 'aaa') base.update_secret('csrf_token', csrf_token) ... def view_2(request): ... # 업데이트 된 csrf_token 값 가져오기 csrf_token = base.get_secret('state') # 개발환경 : 업데이트 된 값 'bbb' 가져옴 # 운영환경 : 이전의 저장된 값 'aaa' 가져옴 희한하게 운영 환경에서도, view_1 에서 csrf_token 을 업데이트한 시점에 json 파일을 열어보면 업데이트 된 값으로 바뀌어 있다는 점입니다. 그런데도 어디서 이전의 값을 참조하는 건지 도무지 알 수가 없어서 너무나 답답합니다.
안녕하세요! spring 부트 3.0.3 버전에서 자바 17을 이용해서 강의 내용을 따라하는 중에 HelloServlet을 만들고 localhost:8080/hello에 접속을 시도했으나 localhost :8080페이지와 같은 Whitelabel Error Page가 뜨네요. 다른 질문 들을 참고하여 @ServletComponentScan이나 세팅에서 자바로 실행하도록 설정을 변경하였으나 같은 문제가 발생합니다. 도움을 주신다면 정말 감사합니다
따라하며 배우는 노드, 리액트 시리즈 - 레딧 사이트 만들기(NextJS)(Pages Router)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. user.ts하고 auth.ts에서 이 부분이 같은데 user.ts는 유저정보를 가져오기위한 미들웨어이고 auth.ts는 인증을 위한 부분인데 if(!user)이 둘다 있는 이유가 있을까요? 그저 user.ts가 user정보를 가져오는데 조건에 해당하는 user정보가 없으면 안되니까(null) user.ts에 if(!user)이 있는건가요?? 제가 제대로 이해하고 있는지 헷갈려서요 ㅠㅠㅠ
선생님 수업 잘 듣고 있습니다! 선생님의 컴퓨터 공학 기초 강의를 듣고 운영체제 강의로 넘어왔습니다. 컴퓨터 공학 기초 강의에서는 보지 못했던 User mode에서 App과 Service 계층에 대해 궁금한게 있습니다. App Layer에 있는 Process가 Service Layer에 있는 API를 호출한다고 하셨습니다. c언어에서 printf같은 함수들이 모여있는 lib 폴더가 있는 곳을 Service Layer로 보면 되는건가요? 그리고 App과 Service Layer가 너무 생소한데 그냥 무조건 User mode에 저런게 있다고 외우면 될까요?
안녕하세요. 문의드립니다. 광고 상품 대신에 로켓상품도 표기하고자 합니다. if len( link.select (".ad-badge-text")) > 0: print("광고상품") 를 아래와 같이 수정하면 될까요? 해봤는데 아무표기가 안되서요. if len( link.select ("span.badge rocket")) > 0: print("로켓상품") 그리고 광고상품 로켓상품 둘다 표현하고자 하면 아래와 같이 표기하면 될까요? if len( link.select (".ad-badge-text")) > 0: print("광고상품") elif len( link.select ("span.badge rocket")) > 0: print("로켓상품")
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 이렇게 오류가 나서 해결이 안되는데 방법이 있을까요?
광고상품 광고상품 표기외에 상품명도 보고자하는데요. 아래와 같이 에러가 납니다. 상품명도 보려면 어떻게 해야 할까요? https://www.coupang.com//vp/products/7119405125?itemId=17821748239&vendorItemId=84985642101&sourceType=srp_product_ads&clickEventId=f08dcc16-7eb1-4918-979f-8e4d3e2f2314&korePlacement=15&koreSubPlacement=1&clickEventId=f08dcc16-7eb1-4918-979f-8e4d3e2f2314&korePlacement=15&koreSubPlacement=1 <div class="name">디엑스 DX320QHD 32인치 QHD 75Hz IPS 고성능 게이밍 컴퓨터 모니터, DX320QHD(일반)</div> Traceback (most recent call last): line 45, in <module> print(ad_name).text AttributeError: 'NoneType' object has no attribute 'text' print(ad_name).text에서 text를 빼고 실행시켜보았는데 다른 상품인데 아래와 같이 모두 상품명이 동일하게 나옵니다. <div class="name">인터픽셀 60.5cm FHD 75Hz IPS 평면 게이밍 모니터 화이트, IP2422(무결점)</div> 광고상품 https://www.coupang.com//vp/products/6070742312?itemId=11207404701&vendorItemId=78484994606&sourceType=srp_product_ads&clickEventId=2981eff0-533f-432a-ace7-a9dbbc8cf39b&korePlacement=15&koreSubPlacement=12&clickEventId=2981eff0-533f-432a-ace7-a9dbbc8cf39b&korePlacement=15&koreSubPlacement=12 <div class="name">인터픽셀 60.5cm FHD 75Hz IPS 평면 게이밍 모니터 화이트, IP2422(무결점)</div> 광고상품 https://www.coupang.com//vp/products/1955685399?itemId=3323143682&vendorItemId=71310006110&sourceType=srp_product_ads&clickEventId=8ab74e64-bccb-400c-968d-9fe175da93a9&korePlacement=15&koreSubPlacement=15&clickEventId=8ab74e64-bccb-400c-968d-9fe175da93a9&korePlacement=15&koreSubPlacement=15 <div class="name">인터픽셀 60.5cm FHD 75Hz IPS 평면 게이밍 모니터 화이트, IP2422(무결점)</div> 광고상품 for link in links: print(ad_name).text <-이부분 때문에 에러가 나는것 같습니다. 어떻게 표기를 해야 할까요?
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] getBean() 함수를 (1번 코드) MemberService memberService = applicationContext.getBean("memberService", MemberService.class); 이렇게 사용을 해주셨는데 인텔리제이에서 자동완성 기능을 사용했더니 (2번 코드) MemberService memberService = applicationContext.getBean(MemberService.class); 이런 식으로 나오더라구요. (1번 코드)처럼 파라미터를 두개로 사용할 때, bean 이름과 파라미터 name 값이 다르면 오류가 생겨요. 그러면 애초에 name 파라미터 값이 필요한 이유가 있는걸까요?? 그리고 또 궁금한 것이 (2번 코드)로 사용을 안하고 왜 (1번 코드)로 사용을 하는 것인지 궁금해요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] @ModelAttribute() 에서 regions() 는 map을 사용했고 itemTpyes()는 배열을 사용했고 deliveryCodes()는 리스트를 사용하셨는데 각각을 이렇게 사용하신 이유가 따로 있을까요??
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 좋은 강의 잘 듣고 있습니다. 감사합니다. 다름이 아니라 제가 혼자서 토이프로젝트를 만드는중에 ADMIN / USER 권한을 분리하고 인터셉터를 통해서 권한이 없으면 /admin/**이 포함된 url에는 접근을 못하도록 코드를 구현했습니다. 포스트 맨으로 확인을 해 보았을 때, 실제로 권한이 없으면 원하는 값이 나오지 않지만 HTTP 상태코드가 200(OK)로 나옵니다. 제가 이해한게 맞다면, 인터셉터의 역할은 올바른 요청일 땐 정상 흐름으로 작동하고 잘못된 요청(return false;)일 땐 리다이렉트 처리해서 흐름을 바꿔주는(?) 것으로 알고 있습니다. 혹시 인터셉터를 통해서 상태코드도 변환할 수 있는 방법이 있는지 궁금합니다! 혹시 안된다면 다른 방법이 있는지도 궁금합니다!
OSIV의 옵션이 true 일때는 동작이 다음과 같다고 하셨습니다. 클라이언트의 요청이 들어오면 서블릿 필터나, 스프링 인터셉터에서 영속성 컨텍스트를 생성한다. 단 이 시점에서 트랜잭션은 시작하지 않는다. 서비스 계층에서 @Transeactional로 트랜잭션을 시작할 때 1번에서 미리 생성해둔 영속성 컨텍스트를 찾아와서 트랜잭션을 시작한다. 서비스 계층이 끝나면 트랜잭션을 커밋하고 영속성 컨텍스트를 플러시한다. 이 시점에 트랜잭션은 끝내지만 영속성 컨텍스트는 종료되지 않는다. 컨트롤러와 뷰까지 영속성 컨텍스트가 유지되므로 조회한 엔티티는 영속 상태를 유지한다. 서블릿 필터나, 스프링 인터셉터로 요청이 돌아오면 영속성 컨텍스트를 종료한다. 이때 플러시를 호출하지 않고 바로 종료한다. 즉 영속성 컨텍스트는 뷰 렌더링 범위까지 존재하나 트랜잭션이 존재하는것은 아니다. 하지만 영속성 컨텍스트가 존재하는데 트랜잭션이 존재하지 않는것이 신기해 GPT에게 한번 더 질문을 했더니 아래 사진과 같았습니다. '요청이 발생하면' 이라는 말이 애매해서 다시 질문한 결과 클라이언트에서 요청을 보낸때 라고 답변을 줬습니다. 요약하면 HTTP 요청이 들어오면 트랜잭션이 바로 생겨나고 엔티티매니저도 그때부터 생성되는걸로 이해했습니다. OSIV 옵션이 켜져있으면 엔티티매니저 뿐아니라 트랜잭션도 범위가 더 커지는건지 궁금합니다.