강사님 안녕하십니까 강의 너무 재밌게 잘 듣고 있습니다! 다름이 아니라 이번 강의에서 다룬 Team에 존재하는 Member 객체 리스트는 왜 조회되지 않을까?에 대한 부분이 헷갈려서 해당 강의 부분에 있는 QnA를 보면서 코드도 작성해보면서 공부했는데, 제가 생각한 것이 맞는지 궁금하여 질문드립니다. 1) 1번만 주석처리 안할 경우 Team에 있는 Member형 리스트에서 member가 조회됨. 쿼리는 commit 때 나감 왜? 여기서 select쿼리가 나가지 않는 이유는 캐시에 존재하기 때문 2) 2번만 주석처리 안할 경우 insert 쿼리 나가고, DB에 select 쿼리 보내어 조회 왜? clear해서 영속성 컨텍스트는 비워져있어, db에서 가져오면서 캐시에 저장함 3) 1, 2번 둘 다 주석처리할 경우 findTeam.getMembers() 하면 Member형 리스트는 불러올 수 있다. 왜? Team 안에서 리스트를 이미 초기화해주었기 때문이다. 그러나 이 안에 아무것도 들어있지 않아 member를 조회할 수 없음 4) 여기서 2번이 중요 어떻게 Team의 members에 객체를 add하지 않았는데 조회가 될까? 영속성 컨텍스트에 team이 없음(clear 때문) 그래서 JPA가 DB에서 까지 다녀와 Team 객체를 만든다. 이 때, 연관관계 매핑이 되어있기 때문에 team.getMembers(), member.getTeam()의 값을 채워준다. https://www.inflearn.com/questions/27517 위 qna에 관해 강사님께서 새로운 영속성 컨텍스트는 member가 없기 때문에 DB에서 새로 member를 조회하고, JPA가 member 객체를 생성합니다. 그리고! JPA가 member 객체를 생성할 때, 연관관계 매핑이 되어 있기 때문에 member.getTeam()은 물론이고, team.getMembers() 모두 값을 채워줍니다.(물론 지연 로딩을 사용할 수도 있습니다.) 방금 말씀드린 부분을 코드로 짜서 하나씩 실행을 해보면 이해가 되실꺼에요^^! 이렇게 말씀을 해주셨습니다. 5) JPA가 채워준다는 의미는 그냥 아.. db에서 가져오면 연관관계가 된 프로퍼티를 채워준다? 라고 생각하면 되나요? Member에서는 Team 프로퍼티를 채우고, Team에서는 Member 프로퍼티를 채운다. 요런 느낌으로요! 6) 5번과 관련해서 for문에서 members를 조회하는데 왜 select 쿼리를 보내는지 궁금합니다. db에서 가져오면 채워준다고 말씀을 하셨는데 다른 걸 채워주는건가요?? try { Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); em.persist(member); // team.getMembers().add(member); //1번 em.flush(); //2번 em.clear(); System.out.println("===================="); Team findTeam = em.find(Team.class, team.getId()); List<Member> members = findTeam.getMembers(); System.out.println("===================="); Member member2 = em.find(Member.class, member.getId()); System.out.println("===================="); System.out.println("member2 = " + member2.getId()); System.out.println("======================"); for (Member member1 : members) { /////1번 질문 System.out.println("member1 = " + member1.getUsername()); } System.out.println("======================"); tx.commit(); 긴 글 죄송합니다.. 처음에는 이해가 됐는데 코드를 작성할수록 이해가 되질 않아서 질문드립니다. 감사합니다!
vultr에서 포테이너 도커스웜으로 stack배포를 해서 여러가지 프로젝트를 진행중입니다! 좋은 강의 만들어주셔서 감사합니다ㅎㅎ 그런데 한가지 궁금한것이 있습니다. stack배포후에 도커스웜으로 배포되는 docekr image를 수정하려면 db를 날리지 않고 진행하는 방법은 없는걸까요...??? docker swarm, stack, docker image변경 세가지 키워드로 구글링 하고있는데 방법이 잘 검색이 안되네요...ㅠㅠㅠ 알려주시는게 좀 까다롭다면 관려된 링크나 검색해볼 키워드라고 알려주시면 정말 감사하겠습니다....ㅠㅠㅠ
선생님 강의를 잘 들었습니다. 다름이 아니라 다 만들었는데 저같은 경우 home section에 네비 메뉴를 넣어뒀습니다. 그래서 각 section에 클래스 옆에다가 아이디로 해당 네비게이션 이름을 지정해놨습니다, 그래서 네비게이션버튼을 눌렀을 때 넘어갈 줄 알았는데 넘어가지를 않아서 아무리 고민을 해봐도 답이 안나와서 글을 남기게 되었습니다. 밑에 코드랑 화면 같이 남기도록 하겠습니다. 감사합니다. < body data-hijacking =" on " data-animation =" scaleDown "> < section class =" cd-section visible " id =" home "> < div > < div class =" content "> < video src =" video/Tomorrowland Presents _ THIS WAS TOMORROW Official Movie Trailer (1080p)_1.mp4 " autoplay muted loop ></ video > </ div > </ div > </ section > < section class =" cd-section " id =" about "> </ section > 각 섹션별로 아이디를 동일하게 지정해놓은 상태입니다. header영역 < header > < div class =" head_inner "> < h1 class =" logo ">< a href =" # ">< img src =" images/android-icon-48x48.png " alt =" logo "></ a ></ h1 > < div class =" gnb "> < ul > < li >< a href =" #home "> Home </ a ></ li > < li >< a href =" #about "> About </ a ></ li > < li >< a href =" #lineup "> LineUp </ a ></ li > < li >< a href =" #md "> MD </ a ></ li > < li >< a href =" #directions "> Directions </ a ></ li > < li >< a href =" #contact "> Contact </ a ></ li > </ ul > </ div > < div class =" slogan "> Make Some Noise </ div > </ header >
저는 스마트 펙토리 업무를 했었고, c# 윈폼이랑 mssql를 사용했었습니다. 웹 개발을 처음인데요. mssql이 아닌 몽고db를 사용하는 이유가 무엇일까요? - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
STATICFILES_DIRS = [ os . path . join ( BASE_DIR , "static" ) ] 추가하셨는데 에러나신다면 ? NameError: name 'os' is not defined 에러 뜨시는분들은 settings.py 에 import os 추가! 강의 영상 중간에 끊고 작성 중인데 뒤에 짚어주실지는 모르겠으나 글 남깁니다. 에러떴는데 그냥 못넘어가서요ㅠ
안녕하세요 ! JPA 관련 강의를 전부 듣고 개인적으로 공부를 하던 과정에서 궁금한점이 하나생겨 문의드립니다 ! Book이라는 엔티티가 존재하고 수량이라는 컬럼이 존재한다고 가정하고 고객들이 주문을 하게되면 수량이 계속해서 감소하는 로직을 구현했을경우 고객이 동시에 Book을 주문하려고 하는 상황에서 고객1 : 주문전 Book 엔티티 조회(영속성상태)시 수량 20개 고객2 : 주문전 Book 엔티티 조회(영속성상태)시 수량 20개 고객1이 Book 10개를 주문하여 수량이 10개 감소한상태로 변경감지로 업데이트문이 나갈텐데 고객2에 주문전 Book 엔티티는 10개가 감소한 10개인상태에서 차감이 이루어져야할것같은데 WEB환경에서는 서로다른 트랜잭션에서 DB를 처리하게되므로 고객2에 주문전 Book 엔티티는 여전히 20개인상태에서 주문한 수량만큼 차감되어 업데이트가 실행되 두개 주문사이에 수량이 맞지않는 현상이 발생할것같은데 멀티스레드환경에서 각 엔티티가 동시성을 지원하는지 혹은 이러한방법으로 개발하는걸 지양해야하는지 궁금합니다 !!
이전까지는 회원추가 목록 조회가 잘 됐는데, 디비 연결 이후부터 whitelabel error page가 뜨네요. 처음 화면은 잘 뜨지만, 회원조회에 들어가면 에러 페이지가 뜹니다. 그대로 따라한 것 같은데 정확한 이유를 몰라 드라이브에 코드와 함께 남깁니다! https://drive.google.com/drive/folders/1zgtAWYEhacuXg-N3KcMy5sPy4HSbR18F?usp=sharing
안녕하세요, 다른 분들의 질문을 참고해봐도 혼자서 이해하는게 너무 버거워서 질문을 남깁니다. 여기저기 출력문을 찍어보니 ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); 에서 "스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백" 까지 한번에 된다는 사실을 알았습니다. public class BeanLifeCycleTest { @Test public void lifeCycleTest() { System.out.println("rmfjadjswptodtjdeh;a??1"); ConfigurableApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); System.out.println("rmfjadjswptodtjdeh;a??2"); NetworkClient client = ac.getBean(NetworkClient.class); ac.close(); } @Configuration static class LifeCycleConfig { @Bean public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); //networkClient.setUrl("http://hello-spring.dev"); System.out.println("stestesatestasetasetaset"); return networkClient; } } } 1. setUrl은 생성자 주입처럼 동시에 의존관계가 주입되는게 맞을까요?? 2. 여기서 setUrl은 다른 분들의 질문을 보니 값 주입이라고 하던데 의존관계 주입이나 값 주입이나 비슷하다고 이해하고 넘어가면 될까요?? 3. afterPropertiesSet() 은 따로 호출을 하지 않았는데, 어떻게 호출을 하는건가요?? 4. 초기화 콜백은 '무조건' 호출이 되는 걸까요? 실제로 setUrl을 주석 처리해도 콜백함수가 호출이 됩니다. 질문이 조금 많지만 답변 부탁드립니다 ㅠㅠ 감사합니다.
editForm.html 파일만 코드가 파란색으로 되면서 html 문법이 적용 안되는거같더라구요.. 재밌는건 editForm.html 이라는 이름의 파일만 그렇고 다른 이름이면 괜찮네요.. 또 editFoom.html 이라고 생성해서 코드를 넣고 이름을 editForm.html로 바꾸면 또 코드가 저렇게 바뀝니다. 뭐가 문제일까요..? 실제로 돌려보면 작동하긴 합니다만...ㅠ
클로저 공부를 하다가 인터넷에서 이런 예시가 있어서 RunJS에서 따라쳐봤는데요. person.age를 30으로 바꿨고, person.age를 출력했을 때는 30이 찍히는데, 왜 person.getAge( ); 로 찍었을 때는 15로 계속 나오는지 도저히 이해가 안되네요ㅠ 왜 이런 현상이 발생하는 건가요??? ;;;;;;;
예시를 RunJS에서 따라쳐봤는데요. person.age를 30으로 바꿨고, person.age를 출력했을 때는 30이 찍히는데, 왜 person.getAge( ); 로 찍었을 때는 15로 계속 나오는지 도저히 이해가 안되네요ㅠ 왜 이런 현상이 발생하는 건가요??? 제가 이해력이 부족해서, 강의만으로 온전히 이해가 안되네요. 이 부분에 대해서 좀 더 자세한 설명 부탁드리겠습니다. 감사합니다. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
고생 많으십니다. 아래처럼 npx sequelize db:create 입력시 connect ECONNREFUSED 127.0.0.1:3333으로 표시되고 있습니다. 연결되지 않았다는 뜻 같은데 해당 포트 주소가 DB 주소로 설정한 상태입니다. 워크벤치를 통해서도 해당 주소로 잘 접속되고 있고 터미널을 통해서도 mysql을 켜둔 상태입니다. config.js에도 잘 입력하여 back 서버에 git pull로 잘 적용한 상태입니다. 왜 이런걸까요??
선생님 안녕하세요 TOP EARNERS 문제에서 SELECT MONTHS * SALARY AS EARNINGS , COUNT(*) 로 값은 구했는데 값 말고 이 문제의 예시 output처럼 earning 도 함께 추가된 모든 컬럼을 추출할려면 어떻게 해야하나요?? SELECT MONTHS * SALARY AS EARNINGS 다음 * 로 하면 추출될줄 알았는데 안되네요 ㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이 제대로 잘 적은거 같은데 오류 나는 이유 알수 있을까여?ㅜㅜ 용해주세요.
안녕하세요 교수님. 양질의 강의를 제공해주셔서 감사합니다. 다름이 아니라 VOC Dataset은 CLASS가 20개이고 COCO Dataset은 80개의 클래스를 가지고 있는 것으로 알고 있습니다. config_file과 checkpoint_file 또한 coco로 맞추어져 있는데 train_detector를 실행하면 위의 사진과 같이 size mismatch라는 출력이 나오게 됩니다. 우려와는 다르게(?) 결과는 잘 나오는데 혹시나 문제가 되지 않을까 하여 질문 드립니다. 감사합니다.