[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 안녕하세요 checked 동작과정이 계속 들었지만 잘 이해가 가지 않아서 혹시 간단하게 설명해주실 수 있으신가요..?? 추가로 체크박스 및 라디오 박스에서의 th:value의 정확한 역할이 궁금합니다 !
========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 강의자의 로드맵대로 따라 강의를 순차적으로 진행하고있습니다. 로드맵에서 추천해주신대로 실전!스프링 부트와 JPA 활용1 을 선 수강하고 이번 기본편을 수강하려고 하는데 이전 강의인 활용1편에서 H2 DB와 intellij를 최신버전으로 설치해두어 그대로 사용하려고 하는데 오류가 발생해서 문의 드립니다. 프로젝트의 내용은 학습자료인 2024 최신버전으로 프로젝트 생성하기의 소스코드를 open project 하여 진행하였으며 h2 데이터베이스의 설정도 프로젝트 생성 설명에 나와있는대로 진행하였습니다. 2월 05, 2024 6:14:22 오후 org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation INFO: HHH000204: Processing PersistenceUnitInfo [name: hello] 2월 05, 2024 6:14:22 오후 org.hibernate.Version logVersion INFO: HHH000412: Hibernate ORM core version 6.4.2.Final 2월 05, 2024 6:14:22 오후 org.hibernate.cache.internal.RegionFactoryInitiator initiateService INFO: HHH000026: Second-level cache disabled 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure WARN: HHH10001002: Using built-in connection pool (not intended for production use) 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001005: Loaded JDBC driver class: org.h2.Driver 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001012: Connecting with JDBC URL [jdbc:h2:tcp:// localhost/~/test ] 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001001: Connection properties: {password=****, user=sa} 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator INFO: HHH10001003: Autocommit mode: false 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init> INFO: HHH10001115: Connection pool size: 20 (min=1) 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl constructDialect WARN: HHH90000025: H2Dialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default) 2월 05, 2024 6:14:23 오후 org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService INFO: HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2월 05, 2024 6:14:23 오후 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop INFO: HHH10001008: Cleaning up connection pool [jdbc:h2:tcp:// localhost/~/test ] 오류 메세지입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 김영한 선생님. 선생님의 강의를 잘 듣고 있습니다. 현재 AOP 적용 부분에서 프록시 부분에 대한 설명을 듣고 있었는데요, 선생님께서는 프록시가 컨트롤러 내부에서 형성되어 그 프록시가 실질적인 서비스 부분으로 요청을 넘겨주고 처리해 줄 것이다. 이런 느낌으로 말씀해주셨던 것 같습니다. 여기서 조금 궁금했던 부분이 있습니다. 만약 다른 컨트롤러 파일 내부에서 같은 서비스에 대해서 AutoWired를 통해 의존성 주입을 받게 될 경우, 서비스를 연결하는 프록시가 컨트롤러마다 생길지에 대해서 궁금했었습니다. 제가 생각하기에는 다른 프록시가 서로 나올 거 같은데, 로그를 찍어보았을 때는 두 컨트롤러가 같은 프록시를 공유하였습니다. 혹시 프록시의 생성 기준은 서비스일까요 컨트롤러일까요? 또한 AOP를 사용하지 않는 경우 해당 파일은 프록시를 전혀 사용하지 않을까요? 그것이 궁금합니다.
안녕하세요! 지표 정의하기 연습문제를 풀어봤습니다. 피드백해주시면 학습을 이어가는 데 도움이 될 것 같습니다 😀 #1. 기능이 잘 동작하고 있는지 확인하려면 배너 영역 1) 목적 정의: 배너 영역을 통해 사용자가 배너의 상세 페이지로 유입되는가? 2) 지표 정의: 배너아이템별 클릭률(CTR) = 배너아이템별 클릭수 / 홈 화면 조회수 3) 멘탈 시뮬레이션 CTR ⬆ : 사용자의 흥미를 끌어 배너 클릭을 유도했다는 가설이 검증되므로 '배너 상세 페이지'의 목적을 달성하는지(a. 쿠폰 다운로드 b. 매장상세페이지 조회 c. 추천 상품 구매 등)를 파악하기 위한 이후 액션을 결정 → 예상 지표: 배너의 목표 액션 전환율(CVR) = 배너페이지 내 a or b or c 액션 수/배너 클릭수 CTR ⬇ : 사용자가 배너 영역에 대한 충분한 유인을 얻지 못했다고 판단하고 UX/UI 혹은 컨텐츠를 개선할 방안을 찾는 액션을 결정 UX/UI: 배너의 개수, 배너의 크기, 배너당 지속 시간 컨텐츠: 카피라이팅, 이미지 퀄리티 메뉴 카테고리 1) 목적 정의: 메뉴 카테고리를 통해 사용자가 상품 목록 페이지로 유입되는가? 2) 지표 정의 Main: 메뉴카테고리별 클릭률(CTR) = 메뉴카테고리별 클릭수 / 홈 화면 조회수 Sub: 메뉴 상품 목록 페이지 체류시간(Duration Time) 3) 멘탈 시뮬레이션 CTR ⬆ , Duration Time 5초 미만: 메뉴 카테고리에 대해 기대하는 상품 목록이 아닐 경우 체류시간이 많이 짧을 수 있으므로 이후 메뉴 분류 변경과 같은 액션 결정 CTR ⬇ : 상품 사용자가 메뉴 아이템을 클릭할 유인이 부족했으므로 배너와 마찬가지로 UX/UI 측면을 고려하거나, 특정 메뉴의 클릭률만 낮다면 해당 메뉴의 사용자 세그먼트별 클릭률, 시간별 클릭률을 파악하여 유지 여부 결정 이런 음식 어때요 1) 목적 정의: 이런 음식 어때요 영역을 사용하여 사용자가 상품 상세 페이지로 유입되는가? 2) 지표 정의: 이런 음식 어때요 상품 클릭률(CTR) = 이런 음식 어때요 상품 클릭수 / 홈 화면 조회수 3) 멘탈 시뮬레이션 CTR ⬆ : 사용자가 추천을 통해 상품 상세 페이지 조회까지 유도했다는 가설이 검증되므로 상품 주문 전환율을 분석해 이후 액션을 결정 → 지표: 상품 주문 전환율(CVR) = 이런 음식 어때요로 진입한 사용자의 상품 주문수 / 이런 음식 어때요 상품 클릭수 CTR ⬇ : 추천 기능의 성능 문제인지 판단하기 위해 가로 스크롤 이벤트를 발생시킨 사용자의 클릭 전환율(CVR)과 발생시키지 않은 사용자의 클릭 전환율(CVR)을 분석 → 1. 스크롤 이벤트를 발생시키지 않았는데 클릭 전환율이 높다면 상위 추천 항목 노출 성능이 유효하다고 판단 → 2. 스크롤 이벤트를 발생시켰는데 클릭 전환율이 낮다면 추천 성능이 유효하지 않다고 판단 동네 맛집 1) 목적 정의: 동네 맛집 영역을 통해 사용자가 매장의 상세 페이지로 유입되는가? 2) 지표 정의: 매장 카드 클릭률(CTR) = 매장 카드 클릭수 / 홈 화면 조회수 3) 멘탈 시뮬레이션 CTR ⬆ : 이런 음식 어때요 기능과 유사하게 상품 주문 전환율을 고려하여 다른 조건과의 비교를 통한 후속 액션 도출 (검색을 통한, 메뉴를 통한, 배너를 통한, 이런 음식 어때요를 통한 CVR과 비교) → 지표: 상품 주문 전환율(CVR) = 동네 맛집으로 진입한 사용자의 상품 주문수 / 동네 맛집 카드 클릭수 CTR ⬇ : 내용 측면에서 동네의 범위가 적절한지, UX/UI의 측면에서 불편함이 있는지 검증하는 후속 액션 수행 #2. 검색 만족도 지표 1) 문제 정의: 검색 기능을 통해 선호도가 높은 상품을 발견할 수 있는가? 2) 지표 정의: 스크롤 깊이별 클릭률(CTR) = 최종 스크롤 깊이가 얕을수록 가중치 * 클릭수 / 검색 결과 페이지 조회수 만족도를 정의하기 위해 반대로 검색에 불만족해 문제의식을 가지는 경우, 상세페이지를 조회할 정도로 관심이 있는 상품을 발견하기까지 스크롤을 많이 하거나 시간이 몇 분이상 소요되는 경우를 떠올릴 수 있습니다. 좋은 상품이 많아 어떤 것을 클릭할지 고민하는 시간이 길 수 있기 때문에 체류시간은 비례하기 어렵지만 스크롤 깊이가 깊다면 상단에 원하는 검색 결과가 노출되지 않았다고 유추할 수 있기 때문에 더 실험효과가 좋은 지표라고 생각합니다. 3) 멘탈 시뮬레이션 CTR ⬇ : 사용자별 개인 구매 데이터를 통한 알고리즘 고도화 #3. 검색 필터 기능의 활성화 지표 1) 문제 정의: 사용자는 검색 필터 기능을 적극적으로 활용해 원하는 결과를 조회하는가? 2) 활성화 지표 정의 메인 지표: 검색 필터 기준별 클릭률(CTR) = 기준별 검색 필터 내 '적용하기' 버튼을 클릭한 사용자 수 / 검색하기 액션을 한 사용자수 서브 지표: 검색 필터 기준별 검색결과 조회 전환율(CVR) = 검색 결과 가게 클릭수 / 검색 필터 적용수 메인 지표로 검색 필터가 얼마나 '많이' 사용되고 있는지, 서브 지표로 검색 필터가 '잘' 사용되고 있는지 판단합니다. 3) 멘탈 시뮬레이션 CTR ⬆ CVR ⬇ : 검색 필터 자체의 사용률은 높으나 검색 필터의 결과가 사용자의 마음에 들지 않는다는 판단을 할 수 있다. 기준별로 검색 필터가 적용된 결과 데이터의 적합성을 판단해 데이터 라벨링 및 정렬 가중치 등을 개선한다. CTR ⬇ CVR ⬆ : 검색 필터의 UI를 변경해야 할 수 있다. 검색 필터 내 UI별 클릭률을 통해 후속 액션을 결정한다. 너무 작거나 다른 버튼과 차별화되지 않아 사용자의 눈에 띄지 않거나 '적용하기'를 누르기까지 필터 내부의 사용자 동선을 개선한다. #4. 배달 서비스에서 가장 중요한 지표 1) 목적 정의 비즈니스 관점: 소비자의 주문건을 증가시켜 매출을 증대시킬 수 있을까? 이유) 배달 서비스의 Revenue Stream은 광고 수익, 배달 대행 수수료, 결제 수수료이므로 결제건을 증가시켜야 광고, 결제 수수료를 통한 수수료를 증대시킬 수 있다. 사용자(가게, 판매자) 관점: 소비자의 주문건을 증가시켜 플랫폼을 통해 얻는 주문 매출을 증대시킬 수 있을까? 2) 지표 정의 메인지표: 기간별 주문건수 서브지표: 기간별 주문전환율(CVR) = 총 주문 수 / 서비스 총 방문자 수 이유) 배달 서비스 플랫폼과 판매자 모두에게 필요한 소비자의 최종 행동은 '주문'이기 때문이다. 3) 멘탈 시뮬레이션: 어떻게 하면 기간별 주문건수를 증가시킬 수 있을까? 서비스 사용성 관점: 주문에 이르기까지 활성화, 리텐션 퍼널별 전환율을 증가시킨다. 마케팅 관점: 최초의 퍼널인 유입을 증가시킨다. #5. 추천 알고리즘의 성능 지표 1) 문제 정의: 알고리즘이 순위기반으로 추천한 상품에 만족할까? 2) 지표 정의: MAP 사용자가 원하는 아이템을 얼마나 상위권에 올려 놓는지 평가: 1000개의 추천리스트에 사용자가 원하는 상품이 있는 것과 10개의 추천리스트에 사용자가 원하는 상품이 있는 것은 확연히 다르다. 따라서 추천시스템에서는 precision과 recall을 precision@k, recall@k와 같이 상위 k개의 추천에 대한 평가지표로 표현한다. precision@k = K 개 내의 추천 항목 중 유관 항목의 수 / K 개 내의 추천 항목 수 예측한 것중에 정답의 비율 recall@k = (K 개 내의 추천 항목 중 유관 항목의 수) / (전체 유관 항목 수) 찾아야 할 것중에 실제로 찾은 비율 추천리스트 내의 rank에 따른 평가: K개의 추천리스트에서 순위도 중요하다. 사용자가 원하는 상품을 첫 번째로 보여 주는 것이 10 번째로 보여 주는 것보다 좋은 평가를 받아야 한다. → MAP(Mean Average Precision) : precision@k에서 k를 점점 늘려가며 얻게되는 precision score를 평균내고 User별 전체 평균을 낸다 6. 자주 사용하는 서비스 'Duolingo'의 지표 1) 문제 정의: 더 많은 사용자가 서비스에 만족하여 구독 서비스에 가입할 수 있을까? 듀오링고는 수익의 70%를 '슈퍼 듀오링고'라는 서비스 구독료로부터 얻는다. 이미 활성사용자를 충분히 확보한 상태에서 플랫폼 입장에서 현재 가장 중요한 문제는 더 많은 구독자를 만드는 일일 것이다. 2) 지표 정의 메인 지표: 구독 서비스 결제 전환율(CVR) = 구독서비스 결제 수 / 서비스 방문자 수 그 외 지표: 연속 학습 리텐션, 이탈율 활성사용자수를 유지하지 위해 사용자가 결제까지 도달하지 않고 이탈하는 이유를 판단하거나 지속적으로 연속 학습을 이어갈 수 있는 유인을 마련하기 위한 보조 지표를 측정한다. 7. 퍼널 개선 프로젝트 1) 문제 정의: 가입 퍼널에 온보딩을 진행함으로서 가입자를 증가시킬 수 있을까? 2) 지표 정의: 가입 전환율(CVR) = 회원가입 수 / 온보딩 진행 완료 수 일별 리텐션 : 온보딩 과정 삽입 이전 대비 삽입 이후, 회원가입 완료자의 일별 서비스 유지율 이유) 온보딩을 진행함으로써 1. 회원가입까지 완료하여 서비스를 이용하고 싶어지는지, 2. 실제로 서비스의 가치가 홍보되어 회원가입 이후 서비스 이용이 지속되는지 두 가지 가설을 확인해 기대효과가 충족되는지 확인한다.
한 GameObject 내부에서 선언되는 Parent, Children와 한 MeshRenderer 내부에서 선언되는 Mesh, Material 등등과 같은 리소스들은 각각 Scene과 ResourceManager내부에서 관리(생성, 파괴)되기 때문에 이런 관리해주는 클래스 에서만 shared_ptr로 생성해주고 다른 클래스 에서는 weak_ptr로 전해받았었습니다. 그런데 문뜩 든 생각이 결국 다른 클래스에서 이런 객체들을 사용하기 위해 프레임마다 weak_ptr::lock을 사용하여 shared_ptr로 만들어서 사용할텐데 이러면 비용 부담이 너무 많이되어 배보다 배꼽이 큰 상황이 발생하는 것 같다는 생각이 들었고 이럴바엔 그냥 왠만한 클래스에선 리소스를 shared_ptr로 선언하고 사용한 후 관리해주는 클래스(Scene, ResourceManager)들에서 삭제될때 여기서도 동시에 shared_ptr를 지워버리는식으로 관리를 해주는게 더 좋을 것 같다고 생각을했는데 과연 옳은 생각인 건가요?
시험준비자는 익스텐션 auto rename tag html to css autocompletiom htmltagwrap bracket pair colorizer 2 indent-rainbow material theme html css support beautify color picker liveserver 전부 설치하면 안되나요? 그리고 color picker 없으면 색깔이 안뜨는데 그러면 색이름만 적나요?
안녕하세요. 강의 잘 보고 있습니다. remote data source impl 관련해서 질문이 있습니다. @prod @Singleton(as: CommunityRemoteDataSource) class CommunityRemoteDataSourceApiImpl implements CommunityRemoteDataSource { final _dio = Session().dio; @override Future<CommunityResponseDTO> fetchCommunities() async { Response<dynamic> response = await _dio.get('get/community/path'); final responseDto = CommunityResponseDTO.fromJson(response.data); return responseDto; } } CommunityRemoteDataSource 의 구현체 CommunityRemoteDataSourceApiImpl 를 만들어서 사용중입니다. ApiImpl 은 실제 서버와 통신중 이며, http 라이브러리 Dio를 사용하고 있습니다. 여기서 테스트를 위해 DioMock 객체를 만들어서 사용하고자 합니다. 원래 CommunityRemoteDataSourceApiImpl 에 final _dio = Session().dio; 로 싱글턴으로 dio를 내부에 객체를 생성하고 있는데 이거를 주입받는 식으로 변경하여 테스트 시만 CommunityRemoteDataSourceApiImpl(DioMock()) 을 넣는 것인지, 아니면 CommunityRemoteDataSourceApiMockImpl 를 새로 또 만드는지 궁금합니다. 만약 CommunityRemoteDataSourceApiImpl(DioMock()) 로 주입을 받는 식이라면 Response<dynamic> response = await _dio.get('get/community/path'); final responseDto = CommunityResponseDTO.fromJson(response.data); 해당 코드들이 Dio() 일 때, DioMock() 일 때 달라야 할 것 같은데 어떻게 처리하는 것이 맞는지 궁금합니다. 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. resolverException이 빈 ModelAndView객체를 반환하는 이유가 이해가 가지 않습니다. 왜 빈 객체를 반환하는 것인가요? 만약 객체를 반환하지 않으면 어떻게 되는 것인지 궁금합니다. 추가로, package hello.exception.resolver; import com.fasterxml.jackson.databind.ObjectMapper; import hello.exception.exception.UserException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import java.io.IOException; import java.util.HashMap; import java.util.Map; @Slf4j public class UserHandlerExceptionResolver implements HandlerExceptionResolver { private final ObjectMapper objectMapper=new ObjectMapper(); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { try{ if(ex instanceof UserException){ log.info("UserException resolver to 400"); String acceptHeader = request.getHeader("aceept"); //헤더를 꺼냄 response.setStatus(HttpServletResponse.SC_BAD_REQUEST); // 상태코드 400으로 변경 if("application/json".equals(acceptHeader)){ log.info("Start to change json"); Map<String,Object> errorResult=new HashMap<>(); errorResult.put("ex",ex.getClass()); errorResult.put("message",ex.getMessage()); String result = objectMapper.writeValueAsString(errorResult); response.setContentType("application/json"); response.setCharacterEncoding("utf-8"); response.getWriter().write(result); return new ModelAndView(); } else{ log.info("Start to text"); return new ModelAndView("error/500"); } } }catch(IOException e){ log.error("resolver ex",e); } return null; } } 이렇게 작성하였는데 결과가 자꾸 text.html로 나옵니다. 로그를 찍어보니 if문이 안나오고 else문으로 나오게 됩니다. 포스트맨 출력 결과는 이렇습니다 원인을 알 수 있을까요?
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
중간쯤에 나오는 문제인데요 (1번) data1=int(input()) if 100>=data1>=81: print("A") elif 80>=data1>=61: print("B") else: print("C") (2번) data1=int(input()) if data1<=100 and data1 >=81: print("A") elif data1<=80 and data1>=61: print("B") else: print("C") 전 위의 1번 방식으로 풀었는데 강사님은 2번방식으로 하더라고요 위의 2개가 차이가 있을까요??? 답은 동일하게 나오는데요~