안녕하세요 ! 너무나 바쁘신줄 알지만 제가 틀리게 이해하고 있는지도 모르겠는데 너무 궁금해서 질문남깁니다. MemberServiceV2의 bizLogic에서 findById를 호출할때 그냥 select하게 되어있는거 같은데 이렇게 되면 락을 획득하는게 아니라서 update를 호출 하기 전에 다른 커넥션? 에서 수정을 위해 select 또는 그사이에 update를 해버리면 현재의 커넥션?(쓰레드?)엉뚱한 값을 update 하게 될 수 있지 않을까요 ? 예를 들어 두개의 커넥션에서 동시에 findById를 호출하고 bizLogic을 수행한다면 하나의 row 에 대해 한쪽에서는 더하기를 다른쪽에서는빼기를 실행해도 최초의 값에서 더하기 혹은 빼기 둘중 하나만을 실행한 결과가 update되지 않을까 하는 생각입니다. 제가 글로 설명을 잘 못하겠는데... 멀티쓰레드에서 동기화 문제와 비슷한 문제가 발생하는건 아닐지 생각이 듭니다. 혹시 제가 제대로 이해못하고 멍청한 질문을 하는거라면 정말 죄송합니다 ㅠㅠ 바쁘신 와중에 긴글 읽어주셔서 감사합니다 그리고 강의 정말 잘보고있습니다 !!!
useDebounce함수 내에 있는 useEffect구문을 useEffect(() => {}, []); 이 형태로 바꿔주고 해봤습니다. 웹상에서 searchTerm을 입력할때마다 SearchPage가 리랜더링되고, 그 searchPage(index.js)에서 useDebounce를 사용하고 있고, 따라서 useDebounce에 있는 useEffect도 그때마다 재실행될 줄 알았습니다. 근데 아무리 searchTerm을 변경해줘도 useDebounce에 있는 useEffect는 한번만 실행됐습니다. 왜그런건가요? 제가 useEffect에 대해 잘못이해하고 있는거 같습니다만..
import random words_dict = {'사자':'lion', '호랑이':'tiger','사과':'apple','비행기':'airplane'} words = [] for world in words_dict: words.append(words) random.shuffle(words) chance = 3 for i in range(0, len(words)): q = words[i] for j in range(0, chance): user_input = str('{}의 영어단어를 입력하세요'.format(q)) english = words_dict[q] if user_input.strip().lower() == english.lower(): print('정답입니다!') break else: print('틀렸습니다') if user_input != english: print('정답은 {}입니다'.format(english)) print('모든 문제를 제출했습니다') 전체 코드는 이렇게 작성했고 오류는 line 17, in <module> english = words_dict[q] TypeError: unhashable type: 'list' 이렇게 뜨는데 unhashable type을 구글링 해봐도 튜플 관련 글만 나와서 해결이 안되더군요. 강의를 다시 봐도 제가 실수한 부분을 모르겠어서 질문드립니다.
이해가 안 가는 부분이 생겨서 질문 드립니다! postman send를 누르면 false가 나오는데 에러 사항이 다음과 같이 공란으로 나오고, 정작 몽고 DB 사이트에 들어가 콜렉션을 확인하면 데이터가 정상적으로 등록되어 있습니다. 서버에서 DB로 데이터가 정상 전달이 된다면 신경 안써도 되는걸까요..?
스프링부트가 제공하는 기능 중 errorPage를 자동으로 등록해주고 /error 라는 경로로 기본 오류 페이지를 설정한다는 부분에서 이해가 되지 않는 것이 있습니다. 이 때 /error라는 경로는 URL 경로를 의미하는 것인가요 아니면 에러 페이지가 있는 파일 경로를 의미하는 것인가요?
안녕하세요. 이전 강의에서 만든 v1 API와 이번 강의에서 만든 v2 API를 각각 호출해보면, 실행된 쿼리에 차이가 있는데요~ v1에서는 order_items 테이블을 N번(2번) 조회하고, v2에서는 조회하지 않습니다. 이 차이가 왜 발생하는지 궁금합니다. Order의 List<OrderItem> @OneToMany 매핑 시 cascade 설정을 해두었고, v1은 Order 조회 및 lazy loading 강제 초기화 이후에 orders가 그대로 응답으로 나가는 과정에서 order_items 테이블이 조회된 걸까요? 그렇다면 v2는 응답으로 사용하는 SimpleOrderDto를 생성할 때 order.orderItems를 불러오지 않기 때문에 order_items의 데이터가 필요하지 않아서 조회 쿼리가 발생하지 않은 거라고 보면 될까요? 코드는 아래와 같습니다.
안녕하세요. 코드를 따라 치다가 도저히 해결이 안되는 부분이 있어 가져왔습니다! 자꾸 아래와 같이 나타나길래 viewmodel 버전도 바꿔보고 따라해봤지만 자꾸 에러가 나네요... 위와 같이 에러가 납니다. 그리고 그냥 무시하고 앱을 실행시키면 아래와 같은 에러가 나고요. Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option 혹시 몰라 Git 코드 놓겠습니다 https://github.com/Gseungmin/MVVMStudy
안녕하세요. 유익한 강의 너무 잘 듣고 있습니다. 다름이 아니라, 팩토리 패턴으로 리팩토링 한 코드에 대해 질문이 있어서 글을 적게 되었습니다. lazy를 사용하지 않고 import('') 구문 만으로는 동적으로 모듈을 임포트 할 수 없나요?? 컴포넌트가 모두 마운트 된 후 레이지 컴포넌트가 동적으로 임포트가 모두 완료된 상태인데도 suspense가 꼭 필요하나요?? 레이지 컴포넌트에 접근할 땐 이미 임포트가 완료된 후라는 생각이 들어서 여쭤봅니다!
안녕하세요. 좋은 강의 너무 감사합니다. 강의 보면서 궁금하게 있어서 찾아보고 이리 저리 해봐도 이해가 잘 안되는 문법이 있어서 질문 드립니다. 이전 UI 연습에서 사용했던 UI_Button.cs에서는 public void OnButtonClicked(PointerEventData data) 에서 PointerEventData 를 사용하기 위해 using UnityEngine.EventSystems; 선언해주었는데 이번에 만든 UI_Inven_Item.cs에서는 ItemIcon을 바인딩하고 이벤트를 람다로 연결할때는 Get<GameObject>((int)GameObjexts.ItemIcon).AddUIEvent((PointerEventData) => { Debug.Log($"아이템 클릭! {_name}");}); using UnityEngine.EventSystems;를 선언안해주도 되더라고요.. 이리 저리 시도해보고 알아보는데 왜 그런지 잘 모르겠습니다.. 차이가 있다면 UI_Inven_Item은 AddUIEvent가 확장 메소드에서 호출이 되고 UI_Button에서는 직접 호출이 되는데.. 잘 모르겠습니다. 어느곳에서는 PointerEventData를 사용하기 위해 using EventSystems를 선언해줘야하고 어느부분에서는 안해주도되고 많이 많이 궁금한니다. ㅠ
컨트롤러에서 엔티티를 생성하지 않고 update 서비스를 만들어서 변경할 값만 dto를 만들던지, 파라미터를 전달하여 서비스에서 update를 하셨는데 saveItem을 사용하면 merge가 돼서 save를 사용하지 않고 update를 만들어서 변경감지를 사용한다는것까진 이해가 됐는데요 update를 만들때 왜 꼭 dto를 만들거나 변경할 파라미터만 넘기는건지는 잘 이해가 되지 않습니다. 좀 더 명확하게 지정하여 유지보수성을 증가시키기 위함뿐인건가요? 그 외에 merge가 실행됐을때 같은 오류가 생기는건 아닌거죠?? 그렇게 웹사이트를 만들다보면 dto가 엄청 많이 만들어질거 같은데 그게 맞는건가요? 저도 모르게 편의성을 위해 객체 자체를 넘길거 같아서 정확한 이유를 알기 위해 질문드립니다~
강의내용에 대한 질문은 아니지만 너무 답답해서 질문드립니다. 교수님 강의도 듣고 혼자 공부도 해서 c언어를 어느정도 이해하고 있다고 생각하는데 조금 어렵거나 복잡한 문제를 풀게 되면 설계하기가 너무 힘듭니다. 전 코딩을 하기 전에 먼저 설계를 하고 코딩을 하는게 맞다고 생각해서 설계 후 코딩을 하는식으로 문제를 풀고 있습니다. 간단한 문제들은 쉽게 설계가 가능하고 그 설계를 바탕으로 코드를 구현하고 있는데 복잡한 문제들을 풀때면 몇시간 며칠을 고민해도 접근자체가 잘 안됩니다. 이게 c언어에 대한 이해가 부족해서 일어나는 현상인지 아니면 따로 공부해야 하는 지식이 있는건지 궁금합니다.
클래스명.... 언제나 분쟁의 소지가 가득한 녀석이죠. 전 그냥 제 멋대로 (정확히는 어차피 제 개인플젝이라) 아래와 같이 규칙을 세웠습니다. controller 쪽의 클래스명은 get/post/put/patch 를 앞에 붙임 service쪽은 create/read/update/delete 를 붙임 @GetMapping("/{memberId}") public MemberResponse getMember(@PathVariable Long memberId) { return memberService.selectMember(memberId); } 눈치 채셨겠지만, 컨트롤러쪽은 http method에 가까우니 get, post 등을 붙인거고 service단은 DB단에 가까우니 CRUD를 넣어줌. 뭐 이런 똥같은 논리 인데, 더 경험많은 친구넘에게 컨설팅 받으니 '굳이 그럴필요 있음? 걍 똑같이 getMember로 통일 ㄱㄱ 하지?? 라고 설득 당해버렸습니다. 실은 클래스명을 둘다 동일하게 쓴다는 것도 저는 선호하지 않아서..... 저는 좀 자세히 길게 쓰는 주절주절 스탈이라.... 당연 더 잘하는 친구라 깨갱하고 따라야 하겠지만... 그래도 최후의 보루로 문의드립니다. 이런 스탈은 안쓰는건가요? ㅠ
교재 PDF 23쪽을 보면 그냥 사용하면 문자와 표현식을 각각 따로 더해서 사용해야 하므로 다음과 같이 복잡해진다. th:onclick="'location.href=' + '\'' + @{/basic/items/add} + '\''" 이렇게 나와있는데, 여기서 '\''(이스케이프)가 필요한 이유가 무엇인지 궁금합니다.