앞전 강의에서 마우스 오버했을때 서브 메뉴들이 display 되면서 나오는 강좌가 있었는데 그건 jquery가 안들어가도 됐는데.... 그거와 차이점은 스크립트함수가 있는 slideDown을 쓸수있느냐 없느냐 차이인건가요? 그래서 좀더 부드럽게 나오게 하는차이인가요? jquery안쓰고는 slidedown효과를 줄수없는거죠?css만 가지고는요.?
회원가입을할때 같은 이름의 회원이면 duplication exception이 뜨도록 예외처리를 해놨고, 정말 동시에 두사람이 같은이름으로 가입하게 되면 오류가뜰수있어서 member의 name을 유니크 인덱스로 설정해줘야해요 근데 ... 뭔차이인지 잘 모르겠어서요 유니크인덱스로 설정한다는게 중복값을 허용하지 않도록 설정하는거잖아요? 그거랑 duplication exception이랑 뭐가 다른건가요? https://www.inflearn.com/questions/59250 이걸 참고해봐도 둘의 차이는 잘 모르겠어서요 -- duplication exception만했을 경우엔 디비에 직접 접근해서 insert를 중복으로 하면 오류가 생기겠네요 그래서 유니크 제약조건이 필요한것같아요 근데 개발자가 디비에 직접 접근할수는 있어도 사용자는 디비에 직접 접근할 일이 없지않나요?
안녕하세요 영한님. 늘 강의 잘 듣고 있습니다. 강의에서는 Controller단에서 찾아서 넘기면 JPA와 관계가 없는 애가 넘어온다고 하셔서 아래 코드로 테스트 해보았는데, 값이 변경되길래 조금 찾아보았고, 제가 이해한 것이 맞는건가 확인차 질문 올립니다. 1. Spring에서 Controller단의 경우 트랜잭션 범위 밖이기 때문에 읽기만 가능하며, 읽을때에도 영속성 컨텍스트에 등록은 된다. (기본적으로 open-in-view : true이기 때문에) 2. 하지만 말 그대로 "읽기"이기 때문에 persist / merge / flush 등을 호출시 에러를 터트려 트랜잭션 범위 밖에서는 값을 변경할 수 없다. 3. 그럼에도 아래의 코드로 item의 price와 name이 변경되는 것은 1번에 의해 item은 영속성 컨텍스트로 관리되고 있었기 때문이고 orderService의 order()가 종료될 때 플러시 발생 -> 더티체킹 동작시 DB에서 불러왔을때와 다르니 정상적으로 update 발생 4. 만약 application.yml에서 open-in-view : false로 변경 시 컨트롤러단에서 find 한 엔티티들은 영컨에 등록되지 않아 더티체킹도 안될 뿐더러 넘겨받은 member / item을 service단에서 그대로 사용하려 할 경우 에러 발생 (org.hibernate.LazyInitializationException: could not initialize proxy ) ``` @PostMapping ( "/order" ) public String order ( @RequestParam ( "memberId" ) Long memberId , @RequestParam ( "itemId" ) Long itemId , @RequestParam ( "count" ) int count) { // orderService.order(memberId, itemId, count); // 테스트 Member member = memberRepository .findOne(memberId) ; Item item = itemRepository .findOne(itemId) ; item.setPrice( 88888 ) ; // 더티체킹이 일어나는 시점은 트랜잭션 종료 지점이라 해당 지점에서는 변경이랑 관련이 없다 . // 그래서 트랜잭션이 있는 서비스 메소드 부분을 주석쳐버리면 변경은 일어나지 않는다 . // 얘네는 다 에러 // entityManager.flush(); // memberRepository.save(member); // itemRepository.save(item); orderService .order(member , item , count) ; return "redirect:/orders" ; } @Transactional public Long order (Member member , Item item , int count) { item.setName( " 변경된 책 이름 " ) ; // 배송정보 생성 Delivery delivery = new Delivery() ; delivery.setAddress(member.getAddress()) ; delivery.setStatus(DeliveryStatus. READY ) ; // 주문상품 생성 OrderItem orderItem = OrderItem. createOrderItem (item , item.getPrice() , count) ; // 주문 생성 Order order = Order. createOrder (member , delivery , orderItem) ; // 주문 저장 orderRepository .save(order) ; return order.getId() ; } ``` 으로 이해했는데 맞는지 모르겠습니다...
안녕하세요 강사님 배운 것을 토대로 게임도 만들어보고 2번째 게임 제작 중입니다. 게임 오브젝트를 드래그 앤 드롭으로 던지면 해당 속도만큼 게임 오브젝트가 날라가는 것을 구현하려고 합니다. 해당 구현부만 테스트 중이며 구글링으로는 마우스 클릭 시 오브젝트가 날라가는(?) 형식의 글 밖에 안보여서 질문드립니다. 제 나름대로 어느정도 구현을 하였는데 마우스 드래그 시작 시 이전 속도를 없애는 코드가 작동하지 않습니다. 그리고 귀찮으실 수 있겠지만 실제 게임에서는 구현을 어떤 식으로 하는지 궁금합니다. using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class Test : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { Rigidbody rb; float y; float startTime, endTime; Vector3 startPostion, endPostion; private void Awake() { // y축 고정 y = transform.position.y; rb = GetComponent<Rigidbody>(); } // 드래그 중일 시 해당 객체가 따라오도록 설정 public void OnDrag(PointerEventData eventData) { transform.position = GetPosition(eventData); } public void OnBeginDrag(PointerEventData eventData) { startTime = Time.time; startPostion = GetPosition(eventData); // 드래그 시작 시 속도를 0으로 만듬(작동안함) rb.velocity = Vector3.zero; } // 드래그 종료 시 속도를 구해 해당 방향으로 날려보냄 public void OnEndDrag(PointerEventData eventData) { endTime = Time.time; endPostion = GetPosition(eventData); // 속도 = 이동거리 / 걸린시간 Vector3 dir = (endPostion - startPostion).normalized; float dis = (endPostion - startPostion).magnitude; float speed = dis / (endTime - startTime); // 해당 방향으로 속도의 10배에 가하는 힘을 가한다. rb.AddForce(dir * speed * 10f); } // 레이캐스트는 해당 객체가 아닌 해당 객체 뒤의 물체에 하며, 그 물체의 좌표를 반환 Vector3 GetPosition(PointerEventData eventData) { RaycastHit[] hits; Ray ray = Camera.main.ScreenPointToRay(eventData.position); //Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f); hits = Physics.RaycastAll(ray, 1000f); foreach (RaycastHit hit in hits) { if (hit.collider.name != transform.name) { return new Vector3(hit.point.x, y, hit.point.z); } } return transform.position; } }
구글링 해봐도 어떻게 해결해야할지 이해가 안되서 질문드려요 에러코드입니다. 어떻게 해야 해결할 수 있을까요? The plugins `cloud_firestore, firebase_auth` use a deprecated version of the Android embedding. To avoid unexpected runtime failures, or future build failures, try to see if these plugins support the Android V2 embedding. Otherwise, consider removing them since a future release of Flutter will remove these deprecated APIs. If you are plugin author, take a look at the docs for migrating the plugin to the V2 embedding: https://flutter.dev/go/android-plugin-migration. Launching lib\main.dart on sdk gphone64 x86 64 in debug mode... Running Gradle task 'assembleDebug'... Plugin project :firebase_core_web not found. Please update settings.gradle. FAILURE: Build failed with an exception. * Where: Build file 'C:\Users\user\StudioProjects\insta_clon\android\build.gradle' line: 27 * What went wrong: A problem occurred evaluating root project 'android'. > A problem occurred configuring project ':app'. > Failed to notify project evaluation listener. > 'org.gradle.api.file.DirectoryProperty org.gradle.api.file.ProjectLayout.directoryProperty(org.gradle.api.provider.Provider)' > Cannot invoke method afterEvaluate() on null object * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 23s Exception: Gradle task assembleDebug failed with exit code 1
안녕하세요 영한님! 스프링 기본편 강의에서 회원관리 도메인과 주문관리 도메인을 설계하는 코드를 따라서 쳐보던 중, repository와 service의 관계에 대해 궁금한 부분이 생겨 질문 드립니다. 서비스를 설계하다 보면 다른 쪽의 서비스 (ex. OrderService에서 member과 관련된 기능 필요) 기능이 필요해질 때가 많이 있는데 그럴 때면 한 서비스 내에서 다른 쪽의 repository를 내부에서 참조하는 것이 맞는지, 아니면 service를 참조하는 것이 맞는지 궁금해져 인터넷을 통해 찾아본 적이 있었습니다. 제가 찾아본 글에서는 repository 와 service는 반드시 1대1로 매핑이 되어있어야 한다고 설명이 되어있었는데 영한님의 OrderService 예제에서는 OrderService 내부에서 private final MemberRepository 로 repository를 참조하고 있다는 것을 알게되었습니다. 사실 저는 service 내에서 다른 쪽의 service를 참조하면 잘못된 설계로 인해 빈 순환참조 오류 등의 문제가 생길 수도 있을 것이라 생각하여 repository를 참조하는 쪽이 더 낫지 않나, 라는 생각을 가지고 있었는데 repository를 참조하는 것과 service를 참조하는 것 둘 중에 맞는 방법, 또는 영한님께서 생각하시기에 이게 더 낫다 라고 생각하시는 방법이 무엇인지 여쭤보고 싶습니다! 올려주시는 강의 항상 잘 듣고 있습니다, 감사합니다
안녕하세요. 항상 강의 잘 수강하고 있습니다. 감사합니다. 제가 궁금한 것은 2가지 있는데요 첫번로 build를 한 후 jar파일을 만들 때 브랜치에 따라서 버전을 다르게 운영할 수 있는지 궁금합니다. 예를 들어서 master 브랜치 상태에서 build하고, 다른 브랜치 상태에서 build 했을 때 차이가 있는지 알고 싶습니다.(build 파일 없는 상태 조건에서) 두번째는 jar를 생성한 이후 프로젝트 내용이 수정된다면, 기존 jar 파일을 제거하고 재빌드 를 해야할까요? 아니면 자동으로 업데이트가 되나요?
이런 경고가뜨는데 왜 뜨는걸까요? RootStoreProvider 쪽에서 문제가 되는것같아서 찾아봤는데 RootStoreProvider에서 경고가 뜨는데 저게 찾아보니 스택오버플로에 hooks 쓸때 16버전 부터는 useEffect() 로 감싸라는것같은데 서버사이드렌더링은 클라이언트에서 화면그리기전에 먼저 store 세팅하는거라 어떻게 해야될까요?
안녕하세요 강사님? 먼저 좋은 강의 감사드립니다 ! 수강 중 궁금한점이 있어 질문드립니다. 현재 Authorization Header에 대한 검증이 아래 2필터에서 이뤄지고 있습니다. - filter3 - BasicAuthenticationFilter 얕은 지식으로 고민해보았을 때, Authorization의 검증은 BasicAuthenticationFilter에서만 처리해도 충분하지 않을까? 라는 의문이 들었습니다. filter3( addFilterBefore) 에서 이뤄지는 Authorization 헤더의 검증이 어떤 의미가있을까요?? 큰 의미가 없다면.. 어떠한 경우에 자주 활용되는지 궁금합니다 ! 또, 일반적으로 Authorization을 검증하는 Best Practice가 궁금합니다 ..!