묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[UI3 업데이트] 피그마 배리어블을 활용한 디자인 시스템 구축하기
인스턴스 섹션이 보이지 않습니다.
create instance swap property를 적용하려는데, 인스턴스 섹션이 안보입니다. 어디서 찾을 수 있나요? 오른쪽 바에는 보이지 않습니다. 회사 일 관계로 빠른 답변이 어려울 수 있으며, 최대 3일 이내에 답변드리도록 하겠습니다. 이해를 돕기 위해서 스크린샷 이미지, 피그마 파일 링크를 반드시 첨부해주세요. 마지막으로 먼저 유사한 질문이 있는지 한번 찾아보시는 걸 권장 드립니다. 인프런 서비스 운영 관련해서는 1:1 문의하기로 인프런 쪽으로 연락 주시기 바랍니다.
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
데이터 분석, 데이터 과학 로드맵 질문
질문에 앞서 먼저 좋은 강의를 제작해주셔서 감사합니다. :)여러 강의를 들어봤는데 해당 수업이 가장 이해하기 좋은 예제와 설명을 해주셔서 공부하는데 너무 큰 도움이 됐습니다.ㅡㅡㅡㅡㅡㅡㅡ질문내용ㅡㅡㅡ"데이터 분석, 데이터 과학 전과정을 쉽게! 단계별로! 꼼꼼하게 익히기" 로드맵을 통해 "파이썬입문과 크롤링기초 부트캠프를 수료한 학생입니다.다름 아니라 로드맵 코스 중 "처음하는 SQL과 데이터 베이스 부트캠프" 와 처음하는 MongoDB와 No SQL 강의가 있는데MongoDB 강의도 필수적으로 들어야 후에 있는 커리큘럼 강의를 이해할 수 있는지 궁금합니다."처음하는 SQL과 데이터베이스 부트캠프" 강의 수료 후, 바로 "처음하는 파이썬 분석(pandas) 강의와 이후 강의를 들어도 강의를 이해하는데 문제가 없는 지 질문드립니다.
-
미해결김영한의 실전 자바 - 중급 2편
제네릭 메서드
영한님 좋은 강의 올려주셔서 감사합니다.제가 문제와 풀이 강의를 들으면서 든 의문이 있어서 커뮤니티 글을 봤는데 저와 비슷한 질문을 하신 분이 계시더라고요.근데 그분의 코드를 보면서 질문이 생겼습니다. static <T extends Shuttle> void printV1(T shuttle)static <T extends BioUnit> void printV1_1(Shuttle<T> shuttle) 위 두 코드의 차이가 뭔가요?제가 생각하기엔 첫번째 코드의 T는 Shuttle<Marine> 이고 두번째 코드의 T는 Marine인데 맞는건가요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관적 락 무한루프 질문
강사님의 강의를 보며 현재 제 프로젝트에 낙관적 락을 적용시켜 보았습니다.구현하고자 하는 서비스는 쿠폰 발급 서비스이며, DB 구조는user 1 : N user_coupon N : 1 coupon 입니다. @Transactional public void issueCoupon(CouponIssueParam param, User user) { // 쿠폰 조회 Coupon coupon = getCoupon(param.getCouponId()); // 쿠폰 발급 UserCoupon userCoupon = UserCoupon.CreateUserCoupon(coupon, user); userCouponQueryService.saveUserCoupon(userCoupon); }public static UserCoupon CreateUserCoupon(Coupon coupon, User user) { // 쿠폰 검증 coupon.validateCoupon(); // 재고 감소 coupon.decreaseQuantity(); return UserCoupon.builder() .coupon(coupon) .user(user) .build(); }위 코드와 같이 유저가 특정 쿠폰 Id 를 통해 쿠폰 발급 요청을 하고, 중간 테이블에 관계가 매핑됨으로써 쿠폰 발급이 이루어집니다. public void validateCoupon() { if(this.stockStatus.equals(StockStatus.OUT_OF_STOCK)) throw new IllegalArgumentException("쿠폰이 매진되었습니다."); if(this.expiredAt.isBefore(LocalDateTime.now())) throw new IllegalArgumentException("쿠폰이 만료되었습니다."); }이때 user_coupon 생성 전 쿠폰의 매진 및 만료 상태에 따라 예외를 던지는 검증 메서드가 존재합니다. public void decreaseQuantity() { this.remainQuantity = this.remainQuantity - 1; if(this.remainQuantity <= 0){ this.stockStatus = StockStatus.OUT_OF_STOCK; } }추가로 쿠폰 내부에 재고가 감소하는 메서드가 존재하며 0에 다다를 경우 상태값을 변경해줍니다. 이때 동시성 이슈가 발생하는 이유는 user_coupon 을 insert 하면서, 부모 테이블인 coupon 의 재고를 update 하는 과정에서 발생하는 것으로 파악했습니다. 이에 쿠폰 발급 초기에 coupon 을 조회할 때 @Lock(LockModeType.OPTIMISTIC) @Query("select c from Coupon c where c.id = :couponId and c.isDeleted = false") Optional<Coupon> findOneCouponByCouponId(@Param("couponId") Long couponId);이처럼 낙관적 락 어노테이션을 달아주었으며 @Component @RequiredArgsConstructor public class OptimisticLockFacade { private final CouponService couponService; public void issueCoupon(CouponIssueParam param, User user) throws InterruptedException { while (true) { try { couponService.issueCoupon(param, user); break; } catch (Exception e) { Thread.sleep(50); // 재시도 전 잠시 대기 } } } }위와 같이 퍼사드 클래스를 생성하였습니다. @Test @DisplayName("쿠폰 여러 명 발급") void 쿠폰_여러_명_발급() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { final int threadNumber = i + 1; int key = i; executorService.submit(() -> { try { optimisticLockFacade.issueCoupon(param, users.get(key)); System.out.println("Thread " + threadNumber + " - 성공"); } catch (PessimisticLockingFailureException e) { System.out.println("Thread " + threadNumber + " - 락 충돌 감지"); } catch (Exception e) { System.out.println("Thread " + threadNumber + " - " + e.getMessage()); } finally { latch.countDown(); } }); } latch.await(); executorService.shutdown(); Long count = userCouponRepository.countByCouponId(param.getCouponId()); assertThat(count).isEqualTo(100); } 쿠폰의 재고가 100개며, 1,000 명의 유저가 32개의 스레드 환경에서 쿠폰 발급을 요청할 때 예상되는 발급 쿠폰 수는 100개가 되어야 합니다. 이렇게 낙관적 락을 적용하여 테스트를 수행하니 무한 루프에 빠지게 되었습니다.무한루프로 인해 테스트가 종료되지 않자, 강제적으로 정지 시킨 후 DB 를 확인했는데 쿠폰의 수는 예상한 대로 100개가 생성된 것을 확인할 수 있었습니다. 그런데 왜 메서드가 종료되지 않고 무한루프가 돌아간 것인지 이유를 모르겠습니다. public void issueCoupon(CouponIssueParam param, User user) throws InterruptedException { while (true) { try { couponService.issueCoupon(param, user); break; } catch (IllegalArgumentException e) { System.out.println("쿠폰 발급 실패: " + e.getMessage()); break; } catch (Exception e) { Thread.sleep(50); // 재시도 전 잠시 대기 } } } 혹시나 하여, 쿠폰 발급 로직에 쿠폰이 매진이 될 경우 예외를 던지는 검증 메서드가 존재했고 이에 퍼사드 클래스에서 해당 예외를 잡아내면 루프를 빠져나오게 설정했습니다. 이렇게 구현하니 테스트는 성공적으로 통과하였습니다. 현재 제가 구현한 서비스 구성에서는 이런식으로 접근하는 게 맞는 걸까요 ?
-
해결됨PM을 위한 데이터 리터러시(프로덕트 데이터 분석)
문제풀어봤어요
안녕하세요 🙂 열심히 적어봤습니다. 적고 다른 사람들 제출내용 봐야겠네요1. 화면구성성공여부: CTR, CVR 설정 후 넓은 영역, 가운데, 위 등 중요 영역일수록 높은 수치가 나와야 함.검색기능 만족평가: 검색 결과에서 스크롤을 적게 한 뒤 전환율 확인(검색결과 상위 클릭, 재검색 낮도록)필터기능 평가: 필터 선택 후 스크롤 적게 움직이고 CTR, CVR 확인(검색 후 클릭/스크롤양)배달앱지표: 전환까지 걸리는 시간 / 소비자는 배고픈게 문제고 빨리 문제를 해결하기 위해 / 맞춤,추천기능, 빠른배달업체 제안, 전환단계 축소, 카테고리로 빠른 진입커머스추천알고리즘성능확인지표: 구매전환율 / 평소 관심있어하던 제품을 적절한 가격으로 추천하여 구매하게 만드는 성능파악자주사용하는서비스의 지표:인스타: 광고클릭률 / 주요수입원임 / 접속 빈도, 체류시간유튜브(프리미엄의 경우): 구독 지속율 / 주요수입원이므로 / 체류시간, 첫 화면에서 영상 선택율네이버뉴스: 기사길이에 따른 스크롤양 / 뉴스에 얼마나 집중하는지 / 다른 뉴스 클릭률, 댓글작성이나 감정표현가입퍼널 온보딩 효과: 가입전환율 상승, 온보딩중 이탈율, 가입 후 사용비율, 제품사용관련 문의율
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
섹션3-2 문제 6번에서
섹션3-2 문제 6번에서 아래와 같이 풀면 왜 정답이 달라지는지 알 수 있을까요??? 어느 부분을 수정하면 될까요?? import pandas as pd df = pd.read_csv("members.csv") # 제거 전 views 표준편차 std_before = df["views"].std() df["age"] = df["age"] == round(df["age"], 0) df["age"] = df["age"] > 0 # 제거 후 views 표준편차 std_after = df["views"].std() round(std_before + std_after, 2)
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
ScannerWhileEx4 Question
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 아니오3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.강사님께서 보여주신 코드대로 작성하였는데, System.out.println("총 비용 : " + totalCost);이 문구를 println 으로 넣으면 제대로 동작하지만,print로 코드를 고치면 강사님께서 주신 예제 코드를 넣어보면 총 비용이 110000이 아닌 1100001이 나옵니다. 이 점에 대해서 둘의 차이는 단순한 줄 넘기기밖에 없는 것으로 아는데, 어떠한 것에서 이러한 결과가 나온 것인지 궁금합니다..!
-
미해결스프링 핵심 원리 - 기본편
영상이 안 보입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 제목 그대로 인데요mac에서 강의를 듣던중에 다음강의로 넘어가니 그이후 강의부터는 영상이 안 보입니다모바일로는 보이는데 pc로 보려면 어떻게 해야할까요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
섹션 5의 세션 고정 보호 강의 질문
섹션 5의 세션 고정 보호 강의 실습 부분을 보면, 루트경로(/) 로 요청했을때도 응답에 세션아이디가 저장된 쿠기가 날라왔습니다.즉, 세션 생성 정책이 디폴트(ifRequired ) 인데 서버에 세션이 생성된 것인데, 혹시 세션이 어느부분에서 생성되었는지 알수 있을까요..?? ++ 추가)) 섹션 5의 SessionManagementFilter / ConcurrentSessionFilter - 2 강의를 보니 .maximumSessions() 설정을 해야만 세션관련 작업을 하는 필터들이 정상적으로 등록된다고 설명돼있는데 위의 실습은 이 설정을 하지 않아서 필터들이 등록되지 않은 걸까요..??근데 세션 고정 보호 적용은 어떻게 적용된건지 모르겠네요..ㅠㅠ
-
해결됨Verilog FPGA Program 1 (HIL-A35T)
SPI MASTER 모듈에 관한 질문입니다.
현재 SPI MASTER 부분을 공부하고 있습니다. 제가 인터넷에 찾아보며 공부한 바로는 SPI 통신은 동기적 통신을 사용한다고 하는데, 해당 코드 전체적으로 always @(posedge clock or negedge reset)을 사용하는 것을 보면 이는 비동기 방식을 사용하여서 이에 대해 궁금해서 여쭤보고 싶습니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
basic.html 내용을 어디서 복사하는 것인지 알 수 있을까요?
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]basic.html 내용을 어디서 복사하는 것인지 알 수 있을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
createQuery에서 i와 m의 차이점이 뭔가요? (select i from i / select m from m)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요강의에 나오는return em.createQuery("select i from Item i", Item.class)저 부분이 JPQL?을 만드는 쿼리 문장이라고 기억합니다.근데 저 부분이 예전에는 "select m from m"이라는 식으로 진행 되었던 것에 비해, 이번 강의에서는 "select i from i"식으로 진행이 되길래 이 i와 m은 무엇의 차이인지 궁금합니다.그리고 i와 m이 각각 무엇을 위해 쓰이는지도 궁금합니다긴 글 읽어주셔서 감사합니다!
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
양방향 연관관계와 연관관계의 주인1 - 기본 7분 내용 문의
em.flush();em.close();까지 진행하고 디비를 조회하면 데이터가 들어간 것이 확인이 됩니다. 그러나 Member findMember = em.find(Member.class, member.getId()); 까지 코드를 실행시키면 db에 값이 들어가지 않아서 결과적으로 for(Member m : Members) { System.out.println("m = " + m.getUsername();} 프린트문이 찍히지 않습니다. 해당 문제 관련하여 코드를 첨부합니다. 좋은 답변 부탁드리겠습니다 ㅠㅠ https://drive.google.com/file/d/1Y6wHODqbUjAcB035pgx0sZabI1n3rkqg/view?usp=drive_link
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
안녕하세요 public void, public Item, public Member ... 등등 고민입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요!강의 내용에서 메소드를 만들 때 public void + 메소드명public Member + 메소드명public Item + 메소드명이런식으로 붙는데 왜 public void로 통일 되지 않는지 궁금합니다.★1. 왜 public Member 혹은 Item이 붙는지★2. 그 붙은 Member와 Item은 어떤 역할을 하는지★3. 제가 이 부분에 대해 왜 무지한지(자바 혹은 스프링 중 어떤 부분이 제가 부족한 것 인지) --위 부분들에 대하여 궁금합니다!답변 해주시면 정말 감사하겠습니다!긴 글 읽어주셔서 감사합니다.
-
해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
npx create-reacp-app src폴더 누락
npx create-react-app을 통하여 react를 설치하려 했는데 node_modules와 pakage.json만 생성되고 public 폴더와 src 폴더는 생성이 되지 않습니다. 이미지에 나온 문구대로 입력도 해보고 nodejs를 완전히 삭제 후 재 설치도 해보았지만 폴더 누락이 계속 일어나고 있습니다. 왜 이런 현상이 나타나는 건가요?
-
해결됨Flutter 앱 개발 기초
수강 기간이 존재하는데...
제가 이거 수강기간이 존재하는 것을 모르고 구매하고지금 아직 듣지 못한 상태인데 2개월이 남았더라구요. 수강기간이 끝나면 이 강좌는 닫히고 들으려면 재구매를 해야되는건가요??제 다른 구매 강좌들은 다 수강기간이 무제한이어서 제대로 안보고 구매했네요
-
미해결
H2 초기연결 오류 디비연결
스프링부트 3.0부터는 2.대의 h2로 받으래서 최신버전으로 재설치했는데 Unsupported database file version or invalid file header in file 이런오류로 호환이 안된다고 뜨네요 도대체 어떻게 해야하나요..
-
미해결[리뉴얼] 처음하는 파이썬 데이터 분석 (쉽게! 전처리, pandas, 시각화 전과정 익히기) [데이터분석/과학 Part1]
EDA기본패턴 적용을 위한 pandas문법에서 필요한 파일이 파이썬에서 안옮겨집니다
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.covid-19-master 폴더를 다운로드 한후 파일을 파이썬으로 파일 옮길려고 하는데 Failed to read file COCID-10-master가 뜨면서 파일이 안옮겨지는데 혹시 어떻게 해결해야 하나요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
localhost:8080/hello 창이 열리지 않습니다.
. ____ _ /\\ / ___'_ __ (_)_ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.5)2024-05-21T15:07:05.718+09:00 INFO 7852 --- [servlet] [ main] hello.servlet.ServletApplication : Starting ServletApplication using Java 21.0.3 with PID 7852 (C:\Study\servlet\servlet\out\production\classes started by wo12l in C:\Study\servlet\servlet)2024-05-21T15:07:05.725+09:00 INFO 7852 --- [servlet] [ main] hello.servlet.ServletApplication : No active profile set, falling back to 1 default profile: "default"2024-05-21T15:07:07.089+09:00 WARN 7852 --- [servlet] [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed2024-05-21T15:07:07.110+09:00 INFO 7852 --- [servlet] [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.2024-05-21T15:07:07.176+09:00 ERROR 7852 --- [servlet] [ main] o.s.boot.SpringApplication : Application run failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1223) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1161) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:202) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:788) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:606) ~[spring-context-6.1.6.jar:6.1.6] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-3.2.5.jar:3.2.5] at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na]Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:62) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-3.2.5.jar:3.2.5] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1257) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:951) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1217) ~[spring-beans-6.1.6.jar:6.1.6] ... 16 common frames omittedCaused by: java.lang.ClassNotFoundException: jakarta.servlet.annotation.WebServlet at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na] ... 22 common frames omittedProcess finished with exit code 1코드를 4:32초까지의 강의 내용을 따라적었는데 위 내용과 같이 뜨면서 종료가 됩니다. 해결방법알려주시면 감사하겠습니다.
-
미해결모던 안드로이드 - Jetpack Compose 입문
나만의 웹 브라우저 03 - UI와 ViewModel 연동 강의에서 질문들이 있습니다.
WebView를 remember로 만든 이유가 무엇인가요?@Composable fun rememberWebView(): WebView { val context = LocalContext.current val webView = remember { WebView(context).apply { settings.javaScriptEnabled = true webViewClient = WebViewClient() loadUrl("https://google.com") } } return webView } MyWebView Compose의 파라메타로 ScaffoldState를 받았는데요. 이건 SnackBar를 위한 것인데 파라메타로 고차 함수를 받아 SnackBar에 띄울 메시지만 전달 해도 될 것 같은데 파라메타로 받는 것이 더 좋은 건가요?@Composable fun MyWebView(viewModel: MainViewModel, onSnack: (String) -> Unit { LaunchedEffect를 2개를 선언하고 각각 사용을 하였는데요. 하나의 LaunchedEffect에 둘 다를 넣고 사용하면 뒤에껏이 동작을 안하던데 혹시 그 이유를 알 수 있을까요?LaunchedEffect(key1 = Unit) { viewModel.undoShardFlow.collectLatest { if (webView.canGoBack()) { webView.goBack() } else { scaffoldState.snackbarHostState.showSnackbar("더 이상 뒤로 갈 수 없음.") } } viewModel.redoShardFlow.collectLatest { if (webView.canGoForward()) { webView.goForward() } else { scaffoldState.snackbarHostState.showSnackbar("더 이상 앞으로 갈 수 없음.") } } } 3번에서 제가 잘못 코딩한 것이 아니라면 LaunchedEffect 하나 당 하나의 Flow만 처리가 가능한 것이라면 처리해야하는 Flow가 많다면 그 수 만큼 LaunchedEffect를 선언해야 한다면 뭔가 코드가 지저분해 질 것 같은데 좋은 방법은 없을까요?