안녕하세요 강의 잘 듣고 있습니다. 다름이 아니라 프로젝트를 업그레이드 하는 과정에서 오류가 생겨 질문 드립니다. package ShopProject.myShopProject.Domain; import ShopProject.myShopProject.Domain.Item.Item; import ShopProject.myShopProject.Domain.Order.Order; import jakarta.persistence.*; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.Getter; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; @Embedded private Address address; @OneToMany(mappedBy = "member",cascade = CascadeType.REMOVE) private List<Order> orders = new ArrayList<>(); private String loginId; private String password; @OneToMany(mappedBy = "member") private List<LikedItem> likedItems = new ArrayList<>(); } package ShopProject.myShopProject.Domain; import ShopProject.myShopProject.Domain.Item.Item; import jakarta.persistence.*; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter public class LikedItem { @Id @GeneratedValue @Column(name = "likedItem_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "item_id") private Item item; } 보시는 것처럼 멤버와 좋아요 상품은 Lazy 관계에 있습니다. OneToMany는 기본이 Lazy이므로 명시하지 않았습니다. 따라서 좋아요 상품은 직접 조회될 때만 DB에서 조회되고, 다른 경우는 프록시 형태로 존재합니다. //아이템 상세 정보 @GetMapping("item") public String itemDetail(@RequestParam("itemId") Long itemId, @SessionAttribute(name = "loginMember") Member loginMember, Model model) { log.info("item 호출"); Item item = itemService.findOne(itemId); log.info(loginMember.getLoginId() + " " + loginMember.getName()); // 좋아요 여부 추가 model.addAttribute("isLiked", memberService.isliked(loginMember, item)); //이 부분입니다!! model.addAttribute("item", item); model.addAttribute("member", loginMember); if (item.getCategory().equals("Book")) { return "items/item/book"; } if (item.getCategory().equals("Album")) { return "items/item/album"; } if (item.getCategory().equals("Movie")) { return "items/item/movie"; } return "items/item"; } 위 컨트롤러를 호출하면, isliked라는 매소드를 실행하게 됩니다. 좋아요 여부를 확인하는 메소드입니다. //좋아요 아이템이 아니면 false 반환 @Transactional public Boolean isliked(Member member, Item item) { log.info("좋아요 확인 메서드 실행"); // log.info("멤버 정보" + member.getName() + " " + member.getLoginId()); for (LikedItem likeditem: member.getLikedItems()) { //여기에서 lazyinitializationError 발생 if (likeditem.getItem().getName().equals(item.getName())) { log.info("좋아요인 경우"); return true; } } log.info("좋아요 아닌 경우"); return false; } 그런데 여기에서 맴버의 좋아요 목록을 불러오면 lazyinitialization 에러가 발생합니다... 정말 많이 원인도 구글링해보았는데, 영속성 컨텍스트가 종료 된 후 접근할 때 발생하는 것을 알았습니다. 영속성 컨텍스트의 생명주기는 트렌잭션과 거의 동일하다고 알고 있습니다. 만약 위 메소드에 트렌젝션 어노테이션이 없다면 member.getLikedItems() 의 결과를 초기화해주지 않으면 오류가 발생할 것입니다. 따라서 트렌젝션 어노테이션을 넣으므로서, member.getLikedItems()를 가져오고, 직접 DB에서 불러오는 과정을 한 트랜젝션 안에서 수행하도록 했습니다. 그런데 이 메서드에서 계속 LazyinitializatoinError가 발생합니다. 이 부분의 원인을 전혀 못 찾겠습니다.. 해결책으로는 DTO를 사용하거나, fetch Join을 사용해서 멤버와 같이 조인하여 한번에 가져옴으로 해결할 수있을 거라 생각합니다. 하지만 해결책은 알았지만, 위 코드의 무슨 오류가 있는지 정말 궁금합니다. 따라서 이 코드의 오류를 알고 싶습니다. 또한 저의 이해에 오류가 있다면 그 부분도 알려주시면 감사하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 궁금중이 생겨서 질문을 남깁니다. Period클래스를 이용해서 지정 범위 의 시간을 구한 것을, 다시 LocaDate로 값을 바꾸고 싶을때, 아래의 코드처럼 코딩을 하였는데요, LocalDate startDate = LocalDate.of(2024, 1, 1); LocalDate endDate = LocalDate.of(2024, 11, 21); Period period = period.between(startDate, endDate); LocalDate localDate = LocalDate.of(period.getYears(),period.getMonths(),period.getDays()); 이런 코드 스타일이라고 할까요? 이렇게 코드 짜는게 맞나요? (TestBetween클래스 코드를 좀 수정 한 것입니다.) 답변 부탁 드립니다. (추가) - 코드 변경 + 내용 수정 글을 다시 보니 글이 너무 이상하네요. 좀 죄송합니다. 저가 너무 서포터즈님 들의 도움만 바라는 것인가? 라는 생각도 좀 드는데.. 이것도 지적해주시면 감사하겠습니다.
안녕하세요 강의 너무 잘 듣고 있습니다 ! 예전에 앱 만들다가 궁금했던 것이 두가지 정도 있어 여쭤보려고 합니다. 페이지 페이지 가 연결되는 느낌이 아니라 아예 다른 페이지로 넘어가고 싶은데, Tab, NavigationLink 말고 다른 방법이 있을까요? 보통 이럴 때는 그냥 NavigationLink 로 이동시키고 hidden을 false를 주는건가요? 그리고 페이지 내 컴포넌트 안에 있는 컴포넌트에서 버튼을 눌렀을 때 Sheet이 올라오게 하고 싶은데 그럴 때 Sheet의 전체 크기가 전체 화면 기준이 아니라 그 컴포넌트가 기준이 되어 작게 나타났을 때가 있었습니다.이런 경우에는 어떻게 해결하나요? 답변해주시면 감사하겠습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 위처럼 join_membership하면 체크표시가 뜨고 한글로 작성하면 No tests were found라고 뜨는 이유는 뭔지 궁금합니다
Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부
안녕하세요. 수업 잘 듣고 있습니다~ 백프레셔 전략 중 DROP과 LATEST 전략은 결국 버퍼가 비워질 때까지 Publsiher에서 emit되는 데이터를 제거(drop or discard)하는 것으로 이해했습니다. 버퍼가 비어지는 시점 이후로 emit되는 데이터를 다시 버퍼에 채운다는 점에서 두 전략은 같은 것으로 보입니다. 차이점을 알려주시면 감사하겠습니다~
struct MatchedGemomatryEffectInter: View { @State private var isToogle: Bool = false var body: some View { VStack { RoundedRectangle(cornerRadius: 20) .frame(width: 100, height: 100) .offset(y: isToogle ? UIScreen.main.bounds.height * 0.7 : 0) Spacer() } .frame(maxWidth: .infinity,maxHeight: .infinity) .background(.green) .onTapGesture { withAnimation(.spring()) { isToogle.toggle() } } } } 안녕하세요. 동일하게 작성했는데 저는 상하 safeArea 가 채워진체 나옵니다. 타겟은 iOS15 입니다. 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
같은 패키지 내부에 Test.java 와 BusObject.java 가 있습니다. Test에서 BusObject객체를 만들어서 사용하는 것을 테스트하고자 하는데 다음과 같이 에러가 나옵니다. javac BusObject.java Test.java java BusObject.java Test.java (java BusObject Test 도 동일하게 안 됩니다ㅜㅜ) Error: Could not find or load main class week11.BusObject Caused by: java.lang.ClassNotFoundException: week11.BusObject 뭔가 문제인가요..? 지금까지 컴파일할때 week11.하고 패키지도 붙여보고, -classpath . 도 해봤습니다...
토이 프로젝트를 진행하던 중 궁금한 내용이 생겨서 질문 드립니다. 과거 Mybatis와 같은 것을 활용해 진행할 때는 코드 매핑 테이블에 코드값 (기본키)과 코드명 이렇게 있고 특정 테이블에서는 이러한 코드 값 키를 들고 있어 서브쿼리를 활용해 코드 명을 가져오는 방식으로 활용했습니다. JPA에서 위 구조를 활용하려면 특정 엔티티에 코드 엔티티를 넣고 서로 연관관계를 걸어 준 후에 fetch join으로 select 하는게 베스트 일까요?
예제를 전부 구현한 상태에서 아래 코드를 통해서 뱃지 숫자를 1씩 올려서 보내게 되어 있습니다. func scheduleNotification() { //notification 내용 설정 let content = UNMutableNotificationContent() content.title = "Local Notification 테스트 1" content.subtitle = "앱 알람 테스트 중입니다." content.sound = .default content.badge = NSNumber(value: UIApplication.shared.applicationIconBadgeNumber + 1) 하지만 아래 코드에 의해 뱃지가 0 으로 리셋되기에 항상 1만 발송하게 됩니다. .onChange(of: scenePhase) { newValue in if newValue == .active { UIApplication.shared.applicationIconBadgeNumber = 0 } } 추가적으로 5초 딜레이로 설정후 로컬노티 여러번 누른후에 앱을 종료하고 기다리면 노티가 여러개 오지만 모두 뱃지 1로 오기 때문에 앱아이콘에 뱃지는 1로 계속 옵니다. 실무에서 로컬노티에 카운터를 현재 뱃지 카운터에 + 1 해서 보내는건 실효성이 없어보이는데요. 따로 해결할 방법이 있을까요 ? 조언 부탁드립니다. 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
17:29 부분에서 변수명 scenePhase 타이핑중 sce 까지만 타이핑 하고 바로 화면 이동 됩니다. 컷 편집 잘못된거 같아요. 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
@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; Integer key = i; executorService.submit(() -> { try { couponService.issueCoupon(param, usersMap.get(key)); } catch (PessimisticLockingFailureException e) { .... } 쿠폰 발급 동시성 처리 관련해서 테스트 코드 작성 간 궁금한 점이 있어서 질문을 올립니다. 구글링해서 작성해봤는데, 제가 이해하는 게 맞나 싶어서요... Executors.newFixedThreadPool(32) 이렇게 설정해주면, 32 개의 고정된 스레드 풀을 생성한다는 것이고 1,000 명의 유저가 해당 스레드 풀이 나눠서 작업이 수행된다는 것인가요 ? 그러니까 하나의 스레드에서 약 31명의 유저를 담당한다는 뜻일까요 ? 아니면 순차적으로 1,000 명의 유저를 하나의 스레드에 한 명씩 배치하여 작업하는 것이고, 실질적으로 한 순간에 32명의 유저만 작업한다는 뜻일까요 ? ㅠㅠㅠ
강의 중 함수내 코드폴딩 단축키는 커맨드 + 옵션 + 왼쪽 방향키 입니다. Sorted,Filter,Map 강의 8:14 에 커맨드 + 쉬프트 + 왼쪽 방향키로 설명 되어 있어서 있어서 혼동 했네요. 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
안녕하세요. .scrollTransition 에서 phase 값을 실시간으로 확인해 보고 싶습니다. swiftUI 에서 print 를 통해 콘솔에 디버깅 하고 싶은데 어떻게 하면 좋을까요 ? 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
안녕하세요. 이전 문의에 대한 답변 잘 확인했습니다. 답변 감사합니다. //GridLayout @Published var gridLayout: [GridItem] = [GridItem(.flexible())] @Published var gridColumn: Double = 4.0 //init init() { gridSwitch() } //func func gridSwitch() { print("gridSwitch") gridLayout = Array(repeating: GridItem(.flexible()), count: Int(gridColumn)) } 방금 실습 프로젝트 진도 마무리하고 grid 쪽 다시 보고 있는데요 gridSwitch() 함수에 print 넣고 체크해 보니 슬라이더 움직이면 위에 함수가 2번씩 호출됩니다. gridLayout 과 gridColumn 2개 값이 @ObservedObject 되어 있어서 각각 변경이 되서 총 2번 호출되는건지요 ? 차후 저런 변수가 많이 들어가 있는 함수는 갯수만큼 호출될꺼 같은데. 어떻게 대응해야 하는지 효율적인 방식이 있는지 조언 부탁드려도 될까요 ? 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요
시뮬레이터나 디바이스에서 YoutubeView 에 로딩된 유튜브화면 플레이버튼 누르면 아래처럼 워닝이 쭉 뜹니다. 어떻게 해결 해야 할까요 ? (영상이 플레이는 되는데, 로그에 저렇게 나오네요) Snapshotting a view (0x106f3acb0, _UIButtonBarStackView) that is not in a visible window requires afterScreenUpdates:YES. https://www.youtube.com/embed/IRRCX1ZQdVY Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)}> 0x178060270 - ProcessAssertion::acquireSync Failed to acquire RBS assertion 'WebKit Media Playback' for process with PID=10,676, error: Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)} Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)}> 0x1780603b0 - ProcessAssertion::acquireSync Failed to acquire RBS assertion 'WebKit Media Playback' for process with PID=10,512, error: Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)} Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)}> 0x178060cc0 - ProcessAssertion::acquireSync Failed to acquire RBS assertion 'WebKit Media Playback' for process with PID=10,678, error: Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple .runningboard.assertions.webkit AND originator doesn't have entitlement com.apple .multitasking.systemappassertions)} Visual isTranslatable: NO; reason: observation failure: noObservations Request to remove background on an unsupported device. Error Domain= com.apple .VisionKit.RemoveBackground Code=-8 "(null)" Error generating mask only remove background image for analysis: <VKCImageAnalysisResult: 0x104b69d80> - Error Domain= com.apple .VisionKit.RemoveBackground Code=-8 "(null)" [MADService] Client XPC connection invalidated LaunchServices: disconnect event interruption received for service com.apple.lsd.open 강의 관련된 질문은 언제나 환영입니다 😄 코드 관련 상세하게 작성해주시면 더 좋아요! (상세코드를 붙여넣기 해주세요) 마크다운을 사용해서 편리하게 글을 작성하세요 먼저 유사한 질문이 있었는지 먼저 검색 해보는 습관~ 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요