var numbers = [20, 10, 9,8,7,6,5,4,3,2,1]; var sortfunc = function(a, b) { console.log(a, b); if(a > b) { return 1; } else if (a < b) { return -1; } else { return 0; } } numbers.sort(sortFunc); 위 코드를 작성해주면 왜 정렬된 배열이 출력되는지 이해가 가지 않네요. if 문이 이해가 되지 않습니다.
안녕하세요 총 두 가지 질문사항이 있습니다. 1. 매 영상마다 브랜치를 바꾸셔서 하는데 이렇게 작업을 하시는 이유가 궁금합니다. 2. 2-vue 수강시, 브랜치를 바꿔서 작업할 때마다, 2-vue의 models 폴더가 파일로 인식되고 , 그 내용은 ../../1-vanilla/js/models 라고 적혀져 있습니다. 또한, 2-vue의 style.css도 위와 같이 1-vanilla의 css파일 위치만 적혀져 있어서 늘 복사와 붙여넣기로 해결중입니다. 크게 불편함이 있는 것은 아니지만, 개발환경설치도 모두 완수했음에도 이런 차이가 나는 것이 궁금합니다. ps. 저는 git clone 을 통해서 파일들을 받았습니다.
하루종일 고민 해보았지만 답을 찾을 수 없어서 질문을 남깁니다. 지금 vue / springboot 를 사용하여 프로젝트 중인데요.. 본인인증 외부 모듈을 붙이는 과정에서 골치가 아프네요.. 상황은.. 1. vue에서 window.open으로 인증모듈 팝업 호출 (여기까지는 성공) 2. 인증모듈에서 본인인증을 마친후 인증모듈이 제공하는 데로 XXX.jsp 파일에 인증 결과 값을 받아옴( XXX.jsp는 프로젝트 내에 생성한 것이며, js로 받을 수는 없다고 하더라구요..) 2번에서 궁금한 점이.. jsp팝업에서 parent.opener ... document.form.XXX.vlaue = "가져온 인증 데이터" 와 같은 식으로 데이터를 매핑하고 self.close()로 창을 닫고 있습니다. 원래 계획은 어쨋든 인증 창이 닫히면서, 부모창(vue)의 함수를 실행하여 인증 데이터를 받아서 처리 할 예정이었는데요.. opener의 함수명을 적어도 없는 함수로 나오고, 그렇다고 vue의 watch가 작동하지도 않습니다.. 화면의 element에서는 값이 바뀌는데, vue가 관리하는 데이터(?)에서는 값이 변하지 않는 것 같습니다. 궁금한 점은.. 1.vue를 사용하지 않은 일반 jsp파일에서 부모창(vue)의 데이터나 함수에 접근 하여 실행 할 수 있나요..? 2. vuex를 사용하면 이러한 문제를 해결 할 수 있나요? (아직 vuex까지 적용하지 않았습니다....)
안녕하세요 김영한 선생님. 저번에 아크를 JPA에서 매핑 하는 방법에 대해 질문 드렸던 학생입니다. https://www.inflearn.com/questions/14583 저번 답변은 제가 가지고 있던 의문점을 많이 해소해 주셨습니다. JPA를 재미있게 공부할 수 있게 해주셔서 다시 감사드립니다.^^ 저번 질문에 이어서 질문을 달려다가 다른 주제인것 같아서 새로 질문 드립니다 :D Spring boot 2.1.7 에서 선생님이 주셨던 코드를 기반으로 JPA를 공부 하던 중 생긴 궁금증을 혼자서 해결하지 못했습니다.. `EntityManager`를 스프링으로부터 주입 받아서 사용하는 경우와, `EntityManagerFactory.createEntityManager()`로 생성하여 사용하는 경우에 트랜잭션(세션)의 범위(?)에 대한 질문입니다. 모든 FetchType은 LAZY로 설정 했습니다. `entityManager`는 스프링으로부터 주입 받은 상태 입니다. void selectPoint () { String jpql = "SELECT p FROM Point p" ; TypedQuery < Point > query = entityManager . createQuery ( jpql , Point . class ); final List < Point > resultList = query . getResultList (); System . out . println ( " ============================" ); for ( Point point : resultList ) { final Member member = point . getMember (); System . out . println ( "member.getMemberId() = " + member . getMemberId ()); System . out . println ( "member.getName()= " + member . getName ()); } 예제 코드의 엔티티는 `Point`, `Member` 2개고, 관계는 아래와 같습니다. @ManyToOne ( fetch = FetchType . LAZY ) @JoinColumn ( name = "member_id" ) private Member member ; 1. 위 코드를 기반으로 `selectPoint()`를 실행 시키면 `member.getName()` 시점에 select query를 할거라 기대 했지만, `member.getName()` 부분에서 Caused by: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 에러가 발생합니다. ------------------------------------------------- void selectPoint () { EntityTransaction transaction = entityManager . getTransaction (); transaction . begin (); String jpql = "SELECT p FROM Point p" ; TypedQuery < Point > query = entityManager . createQuery ( jpql , Point . class ); final List < Point > resultList = query . getResultList (); System . out . println ( " ============================" ); for ( Point point : resultList ) { final Member member = point . getMember (); System . out . println ( "member.getMemberId() = " + member . getMemberId ()); System . out . println ( "member = " + member . getName ()); } transaction . commit (); } 2. 위 코드에서는 EntityTransaction 으로 직접 관리를 하고 실행 시켜 보면 `entityManager.getTransaction()`에서 Caused by: java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead 에러가 발생합니다. ------------------------------------------------- 3. 그래서 `@Transactional` 어노테이션으로 실행을 시켜 보면 `member.getName()`에서 1번과 같은 에러가 발생합니다. @Transactional void selectPoint () { String jpql = "SELECT p FROM Point p" ; TypedQuery < Point > query = entityManager . createQuery ( jpql , Point . class ); final List < Point > resultList = query . getResultList (); System . out . println ( " ============================" ); for ( Point point : resultList ) { final Member member = point . getMember (); System . out . println ( "member.getMemberId() = " + member . getMemberId ()); System . out . println ( "member = " + member . getName ()); } } ------------------------------------------------- 4. 그래서 `EntityManagerFactory`를 주입 받아 아래와 같이 `EntityManager`와 `EntityTransaction`을 직접 관리 해보면 void selectPoint () { final EntityManager entityManager = entityManagerFactory . createEntityManager (); EntityTransaction transaction = entityManager . getTransaction (); transaction . begin (); String jpql = "SELECT p FROM Point p" ; TypedQuery < Point > query = entityManager . createQuery ( jpql , Point . class ); final List < Point > resultList = query . getResultList (); System . out . println ( " ============================" ); for ( Point point : resultList ) { final Member member = point . getMember (); System . out . println ( "member.getMemberId() = " + member . getMemberId ()); System . out . println ( "member = " + member . getName ()); } transaction . commit (); } 제가 기대했던 대로 `member.getName()`에서 select query가 실행 됩니다. ------------------------------------------------- 제가 스프링 쓰고 있으니까 2번의 결과는 OK. 4번도 OK. 궁금한 부분은 1, 3번인데 A. entityManager를 스프링으로 주입 받아 쓰는 1번 예제에서 왜 세션이 미리 종료 되는지 궁금합니다. B. 1. 번 예제에서 트랜잭션의 범위를 제가 지정해주지 않았으니 쿼리 하나 실행하고 알아서 트랜잭션 종료했다고 치면 그나마 OK. 그럼 `@Transactional` 어노테이션으로 범위를 명확히(?) 지정해준 3번의 예제는 왜 `selectPoint()` 함수가 끝나지도 않았는데 트랜잭션이 종료되어 `member.getName()`을 가져오지 못하는 걸까요ㅠㅠ 매 번 질문을 드릴 때 마다, 이제 혼자 해결 해야지 하면서도 답변을 너무 잘해주시니, 마약처럼 쉽게 끊질 못하겠네요.ㅠ