양방향 연관관계에서는 양쪽에 값을 설정해주어야 합니다. 1. OrderItem의 경우 Item을 생성 메서드의 orderItem.setItem(item)을 통해 값을 설정해 준 것인가요? 2. 일대다 에서 일에서 다로 가는 단방향 연관관계에서는 '다' 쪽이 외래키를 가지므로 '다' 쪽에서 '일'쪽의 값을 설정해 주어야하나요?
안녕하세요 수업을 듣다 의문이 들어 질문 남깁니다. findMemberDTO() 작성시 team을 set하는 부분에서 아래와 같이 하셨는데 (테스트코드 크게 신경쓰시지않고 하신걸로 생각되는데..) Member m1 = new Member("AAA", 10); m1.setTeam(team); 아래와 같이 연관관계편의 메소드(changeTeam)를 통해 작성된 생성자 (3rd param이 team 주입)를 사용하는게 양방향 정합성 측면에서 나은게 아닌지 생각되어 질문드립니다. Member m1 = new Member("AAA", 10,team); 연관관계편의메소드 사용과 setter 사용이 항상 좀 헷갈리네요. 의견부탁드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 6:10초에 MemberRepository memberRepository = new MemoryMemberRepository(); 객체와 할인 객체를 생성할 떄 앞에 private final 해주는 이유가 무엇인가요? private final 안 쳐도 잘 되는데 저걸 쳐 주는 이유가 있나요? 앞 강의에서 MemberServiceImpl에서는 해 주고 뒷 강의에서 MemberApp과 OrderApp에서는 private final을 안 해주던데 하는 것과 안하는 것이 무슨 차이인지, 왜 필요한지 궁금합니다.
안녕하세요. 강의 잘 듣고 있습니다. 문득 궁금한점이 생겨서... @Test void inner_rollback_requires_new() { log.info("외부 트랜잭션 시작"); TransactionStatus outer = txManager.getTransaction(new DefaultTransactionAttribute()); log.info("outer.isNewTransaction()={}", outer.isNewTransaction()); log.info("내부 트랜잭션 시작"); DefaultTransactionAttribute definition = new DefaultTransactionAttribute(); definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionStatus inner = txManager.getTransaction(definition); log.info("inner.isNewTransaction()={}", inner.isNewTransaction()); log.info("외부 먼저 트랜잭션 커밋"); txManager.commit(outer); log.info("그다음 내부 트랜잭션 커밋"); txManager.commit(inner); } 위와같이 외부 트랜잭션이 먼저 시작되고, 내부보다 먼저 커밋이나 롤백한 이후에 나중에 시작한 트랜잭션인 내부 트랜잭션의 커밋이라 롤백을 호출하면 IllegalStateException을 던지더라구요. (사실 @Transactional을 이용하면 이런일이 발생하지 않게되어서 이상한 코드 인것같습니다만.., 내부트랜잭션에서 커밋이나 롤백을 누락하거나 / 멀티쓰레드 환경인데 커넥션을 파라미터로 받아서 사용한다거나 하면 겪게 될 수도 있을듯 해서요...) 사실 두 커넥션 간의 연관관계가 없다 생각했는데, 어떠한 이유로 연관이 있나보네요. 일단은 아직 고급편강의를 듣지 않았지만.. 고급편도 곧 들을 예정입니다. 고급편에서 확인할 수 있는 내용일까욤?? 일단, 트랜잭션 동기화 매니저는 내부적으로 커넥션을 생성한 쓰레드로 그룹핑을 하여 관리한다고 생각하고.. 같은 쓰레드로컬 내에서 커넥션이 여러개 있을때, 먼저 생성된 커넥션이 먼저 반납되는 것 자체가 이상상태로 스프링은 취급한다 라고 생각하면 맞을까요..? 질문을 다시요약해보면, 1. 트랜잭션 전파옵션을 PROPAGATION_REQUIRES_NEW로 하여 2개의 별도의 커넥션이 생성됨. 2. 한 쓰레드로 부터 생성된 커넥션은 2개인 상태. 3. 먼저생성된 커넥션의 커밋이 먼저 수행됨. 4. 나중에 생성된 커넥션의 커밋을 수행할때 illegalStateException 예외 발생. -> 두개의 커넥션간의 연관관계는 사실 없다고 생각드는데, 예외가 발생한것에 대해 의문점이 생깁니다! 5. 스프링은 동일한 쓰레드로 부터 여러 커넥션이 생성되었을때, 나중생성된 커넥션부터 순차적으로 커밋되지 않으면 이것 자체를 이상상태로 취급? 하는것인지 궁금합니다!
는지 검 dservice 문에서 for 문을 돌려 받은 map list 를 Dao로 보내 어 이런 데이터 값을 받았습니다. [{orderProductQty=3, productCd=4}, {orderProductQty=2, productCd=1}] . 여기서 이 데이터 값이 mybatis에서 update가 되지 않고 있습니다. foreach 문을 다양한 방법으로 변경 해 보았으나 1, <foreach collection="list" item="productMap" separator=";"> 2,<foreach collection="list" item="productMap" separator=";" open="" close=""> 3. <foreach collection="list" item="productMap" separator=";" close=";"> 4, <foreach collection="list" item="productMap" separator=","> 5. <foreach collection="list" item="productMap" separator=";" open=";" close=";" > 모두 같은 에러의 연속이네요. 이거 어떻게 해결 할 수 있을까요? 도와 주시면 너무너무 감사드립니다.
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요~ 최태현님 테스트 코드 작성에 있어서 고민이 있어 문의남깁니다. 이전까지 다른 강의 영상에서는 repository를 mocking해서 서비스를 테스트하는 영상을 많이 봤습니다. 그래서 서비스 테스트시에는 repository 를 mocking 하는것이 실무에서 흔한 방식이고 best practice라고 생각했습니다 그런데 실무에서 적용해보니 mocking을 하게되면 테스트 코드가 서비스 메소드의 내부 구현에 대해 너무 잘 알게되더라구요, 그러다보니 실제 코드의 내부 구현이 바뀌면 테스트 코드도 바뀌게 될 여지가 많더라구요.. 반면 스프링부트 테스트로 h2에 연결해서 하는 테스트는 상대적으로 느려 피드백이 늦는것이 단점일것같습니다. 개인적으로는 강의에 나온것처럼 스프링 부트 테스트로 h2에 연결해서 테스트하는 후자가 더 마음에 드는데요. 실제로 현업에서는 서비스 테스트시 둘중 어떤걸로 사용하시나요 ? 실제 강의하신것처럼 후자로 테스트를 많이 하시나요 ? 좋은 강의 감사합니다~
주니어 개발자 분들이 지금 이 말을 잘 듣고 느끼시길 바래봅니다. 세상이 편해져도 노력없이 얻는건 없습니다. 오히려 4차 산업 5차 산업으로 발전할 수록 기본 지식을 더 많이 필요할 뿐이지 편하다고 생각하시지 마시고 기술이 편해진다는 건 더 많은 지식을 요구한다는 것으로 받아 드리시고 루틴 처럼 자기 개발 잘 하셔서 고액 연봉자 또는 훌륭한 사업자로의 길로 가시길 기원해 봅니다. 대한민국 개발자 화이링!! ^^
안녕하세요? 강사님. 덕분에 Springboot 수월하게 학습하고 있습니다. 좋은 강의 항상 감사드립니다. 다름이 아니라 Transaction 적용구간에 대한 문의 드립니다. 아래 가상 소스를 예를 들면 방안1, 방안2 모두 문제점들이 있는데 실제 현업에서는 주로 어떠한 방법으로 해결하시는지 고견을 듣고 싶습니다. 물론, Controller 외부에서 별도 호출하는 방식으로 아래 문제를 피해갈 수 있을것 같지만, 서비스 관리 특성성 하나의 메서드로 관리하고 싶다는 전제 입니다. 방안1) 경우 메소드에 Transaction을 적용하면 순수 DB처리 이외도 처리도 포함되어 트랜잭션 처리이 짧을 수록 좋은데 길어질 수 있는 문제가 있습니다. 방안2) 경우 메소드를 쪼개어 순수DB 처리 메소드에만 Transaction을 적용할 수 있겠지만, external 메소드, 등록(), 의 경우 프록시 특성상 외부에서 내부 메서드 호출시 트랜잭션이 적용되지 않습니다. 방안1) BasicService { @Transactional public void 등록() { 1. 이미지 파일 저장 2. 이미지 파일 리사이징 3. ----트랜잭션 구간--- 3-1) 내용 등록 3-2) 업로드 파일 등록 } } 방안2) BasicService { public void 등록() { 파일업로드(); DB저장(); } public void 파일업로드() { 1. 이미지 파일 저장 2. 이미지 파일 리사이징 } @Transactional public void DB저장() { 3. ----트랜잭션 구간--- 3-1) 내용 등록 3-2) 업로드 파일 등록 } } 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요. 강사님 강의 잘 듣고있습니다. 강사님 제가 강의에서 들은 내용을 토대로과거 만들었던 프로젝트를 리팩토링하려고 하는데 어려움이 있어 질문올립니다. 강사님 위와같은 형식으로 회원가입을 진행하려고 하는데 과거에는 ajax를 사용해서 아래와 같이 <input type="text" id="signup-form-nickname" placeholder="닉네임을 입력해주세요." check_result="fail" required> <button type="button" id="check-nickname-btn" style="margin-left: 14px;" value="N">중복확인</button> check_result="fail"를 활용해 중복체크를 하면 check_result="success"값으로 바꿔 회원가입을 진행하는 방법을 사용했었습니다. 그런데 Thymeleaf에 와서는 어떤식으로 중복체크를 해야할지 감이 안잡혀 질문을 남깁니다. 타임리프는 ajax를 사용하지도 않고 중복체크 div도 form안에 있어 이것만 따로 보내는 방법도 알지 못하겠어 찾아보았으나 답이 나오지 않아 질문드립니다. 좋은 강의 만들어주셔서 감사합니다. 후기는 취업하고 올리려고 벼르고 있습니다. ㅇㅁㅇ
1. 예를들어 자유게시판, 건의게시판 이렇게 여러개가 있고 기능은 거의 똑같지만 건의에는 사진업로드 기능이 추가로 존재할 때 자유게시판 컨트롤러, 레파지토리, 모델, ... 건의게시판 컨트롤러, 레파지토리, 모델, ... 이렇게 다 각자 만들어줘야 하나요? 아니면 컨트롤러 레파지토리 모델 자유,건의 게시판 통합해서 만드나요? 2. DB에서 테이블도 자유, 건의 게시판 따로 만들어서 개발하나요? ( title, content 이런 것들 )
안녕하세요. 스프링은 스프링 빈중 @Controller 혹은 @RequestMapping이 붙어있을 때 요청정보와 컨트롤러를 매핑한다고 저번시간에 배웠습니다. 제가 이때 이해한 것은 요청정보URL-객체 매핑이 저장된다는 것이었는데, 이렇게 컨트롤러 클래스를 하나로 통합하게 된다면 매핑이 url-메소드 관계가 형성이 되는 것 같습니다. 이 부분이 저희가 지금까지 MVC 프레임워크를 만드는 과정과 조금 결이 다른 부분이라 어떤 식으로 매핑정보가 등록되는 것인지 잘 이해가 가지 않습니다. 매핑이 클래스 단위로 일어날 수도 있지만 메소드 단위로 일어날 수 도 있는 것으로 이해하면 될까요?
안녕하세요 영한님! 질문드립니다..! 아래와 같이 로그인 시 세션에 로그인 회원정보를 보관하고 //로그인 성공 처리 TODO //세션이 있으면 있는 세션 반환, 없으면 신규 세션을 생성 HttpSession session = request.getSession(true); //세션에 로그인 회원 정보 보관 session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember); 아래와 같이 세션에서 SessionConst.LOGIN_MEMBER가 key 값으로 session 에서 SessionConst.LOGIN_MEMBER와 매칭되는 value인 Member 객체를 꺼내오는 것으로 이해하고 있는데,, Member loginMember = (Member) session.getAttribute(SessionConst.LOGIN_MEMBER); 위와 같은 로직으로 여러회원이 로그인 할 텐데... 어떻게 하나의 key 값으로 여러개의 Member 객체를 구별 할 수 있는지 궁금합니다...! 감사합니다.!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. JPA에서 enum을 활용할 때 질문드리겠습니다. 요일을 enum 타입으로 만들어 (0~6, 일~월 이런 형식) 체크 박스로 입력을 받아, 체크를 선택한 요일은 매장의 휴무일로 지정하는 로직을 구현하는 중입니다. @ElementCollection을 활용하여 간단하게 처리하려고 했으나, 추천하시는 방식이 따로 있길래 어떤 식으로 로직을 작성해야 하는지가 너무 궁금해졌습니다. https://www.inflearn.com/questions/21303 1. 위에서 영한님께서 해주신 답변 중, 2번의 경우를 추천하셨기에 2번으로 진행하려고 하였습니다! 혹시 이 경우, 2번 방법을 추천하신 이유가 무엇인지가 궁금합니다!!! 2. 위 링크의 2번 로직으로 코드를 작성하면 다대다 엔티티 매핑이 발생하는데 개인적인 생각에 요일과의 매핑은 단순히 요일과 요일에 엮여있는 매장 ID값만 알면 되는 것 같아 @ManyToMany를 그대로 사용해도 되는 건가?? 라는 생각이 들었습니다. 그대로 사용을 해도 좋은지 아니면 1 : N, N : 1로 풀어주는 것이 좋은지 궁금합니다!!!! 또, 이렇게 요일을 처리하는 구현을 Enum보다 추천하실만한 방법이 있는지, 있다면 어떤 방식인지도 말씀해주시면 감사드리겠습니다!! 날씨가 많이 더운데 더위 조심하시고 폭우 조심하세요! 감사합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] WebConfig에서 등록하는 fomatter는 항상 글로벌로 적용되나요? 특정 Controller class에만 적용되게 하거나, Annotation 기반 formatter처럼 특정 method에만 적용되게 할 순 없는건가요?