학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 코드를 package poly.car0; public class Driver { //private K3Car k3Car; K3Car k3Car = new K3Car(); // public void setK3Car(K3Car k3Car) { // this.k3Car = k3Car; // } public void drive() { System.out.println("자동차를 운전합니다."); k3Car.startEngine(); k3Car.pressAccelerator(); k3Car.offEngine(); } } 이렇게 작성해도 정상 작동 되는데 왜 아래처럼 코딩한 거에요? 이유를 알려 주세요. package poly.car0; public class Driver { private K3Car k3Car; //K3Car k3Car = new K3Car(); public void setK3Car(K3Car k3Car) { this.k3Car = k3Car; } public void drive() { System.out.println("자동차를 운전합니다."); k3Car.startEngine(); k3Car.pressAccelerator(); k3Car.offEngine(); } }
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 1. 정적 중첩 클래스를 사용하기 위해 다음과 같은 코드를 강의에서 사용했는데요. NestedOuter.Nested nested = new NestedOuter.Nested(); static 클래스라면 인스턴스화가 되지 않은 클래스라고 생각하는데, new 생성자를 통해 생성하는 이유가 궁금합니다. NestedOuter.Nested.print(); 다음과 같이 사용해야하지 않을까? 생각도 했습니다만 직접해보았을 때, print() 메서드는 static 메서드가 아니기 때문에 다음과 같이 사용할 수 없었습니다. 2. 그래서 다음과 같은 실험도 해보았습니다. public static void main(String[] args) { NestedOuter outer = new NestedOuter(); NestedOuter.Nested nested1 = new NestedOuter.Nested(); NestedOuter.Nested nested2 = new NestedOuter.Nested(); nested1.print(); nested2.nestedInstanceValue = 2; nested1.print(); nested2.print(); } print() 메서드는 정적 중첩 클래스의 필드인 nestedInstanceValue 를 출력하고, 초기값으로 1을 넣어두었습니다. 결과는 1 1 2 가 나왔습니다. nested2 에서 필드를 2로 수정을 한 후 nested1 과 nested2 에서 print() 를 호출했는데, 1 2 2 를 예상했지만 1 / 1 / 2 가 나왔습니다. 그렇다면 클래스에 static이 들어간다는 것이 의미하는 것이 무엇인지 궁금합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 다른 강의의 내용에서 스프링 빈에 dataSource와 JdbcTemplate이 등록이 되어 있는 내용을 보았습니다. 그래서 dataSource를 통해 DB와 커넥션을 만드는 부분에서는 새로운 객체를 생성하지 않고 dataSource를 받아와 의존성 주입을 받았는데 여기에서는 JdbcTemplate의 새로운 객체를 생성하여 의존성 주입을 받는데 그러면 싱글톤에서 위배가 되는것 아닌가요? 다른 강의에서는 SQL을 DB로 사용하였습니다. 혹시 DB의 차이에 따라 위와 같이 새로운 JdbcTemplate의 객체를 생성할 수 있는 걸까요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 현재 컨트롤러에서 직접 리포지토리를 접근하는데 예전 강의에서 단순 엔티티 조회할때는 실용적인 관점으로 서비스를 통해 접근하는 것이 아닌 리포지토리로 바로 접근하기도 한다는걸 들었습니다. 이번 강의에 그 점이 적용이 된거 같습니다. 여기서 궁금점은 jpa의 모든 데이터 변경은 트랜잭션 안에서 실행된다고 하셨는데 현재 레포지토리에 바로 접근하면서 @Transactional 애노테이션을 사용안하는 것을 확인하였습니다. 단순 조회에서는 트랜잭션을 시작할 필요가 없는 건가요? 아니면 숨겨진 기능이 있는건지 궁금합니다!
플러시가 발생하여 쓰기 지연 저장소에 쌓여있던 쿼리들이 DB에 보내지게 되면 쓰기 지연 저장소에 쌓여있던 쿼리들은 삭제되나요 아니면 그대로 남아있나요? pk 생성 전략이 identity일 경우 persist()할때 쓰기 지연 저장소로 가는게 아니라 DB로 바로 보내지고 id 값을 얻어온다고 이해 했습니다. 그러면 persist()할때 생긴 insert into 쿼리가 DB로 보내지는데 이때 커밋하기전이라 DB에는 반영이 안되는건가요? DB 내부에서 버퍼? 같은 곳에서 보관했다가 커밋했을때 insert into 쿼리가 작동되는건지 궁금합니다.
안녕하세요 강사님.. 제가 일주일이 넘는 기간 동안 계속 이것저것 시도를 해봤음에도 왜 분류 성능이 10%인지를 모르겠어서 실례를 무릅쓰고 질문을 올리게 되었습니다.. cifar10 이미지가 32 크기여서 128 정도로만 rescale을 했고, normalize도 진행했음에도 계속 성능이 10%대이고, loss는 줄어들었다가 갑자기 튀기도 하면서.. 제대로 학습이 되고 있지 않은 것 같습니다ㅠㅠ 바쁘시겠지만 문제의 원인이 무엇인지 여쭤보고 싶습니다ㅠㅠ 감사합니다.. https://drive.google.com/file/d/1FEsv1dex9y9I4AFqX42gBIhVeeOcgQXQ/view?usp=sharing
안녕하세요 :) Member refMember = em.getReference(Member.class, member.getId()); em.clear() refMember.getName(); 이때 LazyInitializationException이 일어나는 것에 대해 질문드립니다. 프록시 객체 refMember는 getName()을 호출할 때 최초로 단 한번 초기화되는 것으로 이해했습니다. 그렇다면 이전에 em.clear()로 영속성 컨텍스트를 초기화하여도, refMember.getName() 시점에 다시 DB에서 member 엔티티를 찾아 영속성 컨텍스트에 올리면 되지 않나요? refMember는 그 엔티티를 target으로 하고요. 왜 예외가 일어나는 것인지 궁금합니다!
개발자가 까먹거나 상상하지 못한 오류가 발생할 때 오류가 안 뜨고 바로 정상로직으로 진행되서 문제가 일어날 가능성이 크지 않나요?? if else로 하면 해당 조건 정상로직이 아니면 오류라서 문제가 덜 발생하지 않을까요?? 그거보다 가독성이 중요하거나 제가 생각 못 하는 다른 이유가 있을까요?
강사님 안녕하세요. 좋은 강의 잘 들었습니다. querydsl의 정점 중 하나로 where 조건문을 분리하고 재사용한다고 했는데, 예를 들어 UserRepository, StudyRepository라는 2개의 querydsl을 사용하는 repository가 있다 했을 때, 각각의 respository 에서 조회를 할 때 동일한 조건을 사용해야 할 경우가 있습니다. UserRepository.java public User getUser(Long UserId) { return selectForm(user) .where(userId); } private BooleanExpression eqUser(Long userId) { return user.userId.eq(userId); } StudyRepository.java public User getUser(Long UserId) { select(study) .from(study.user, user) .join(study.user) .where(user.userId.eq(UserId)); } private BooleanExpression eqUser(Long userId) { return user.userId.eq(userId); } 이렇게 .where(user.userId.eq(1L)) 가 2개의 파일에서 반복되는 경우 각각의 파일에 메소드로 사용하는게 좋을까요? 아니면 다음처럼 공통 유틸 파일을 만들어서 공통으로 사용하는게 좋을까요? QueryUtils.java public static BooleanExpression eqUser(Long userId) { return user.userId.eq(userId); } 실무에서는 어떻게 사용 할까요? 이런 경우가 빈번해서 질문 드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 안녕하세요 해당 부분에서 오류 발생되는데 왜 그런 걸까요 public class MemoryMemberRepository implements MemberRepository { 이부분에 빨간줄이 있습니다. package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.*; /** * 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려 */ public class MemoryMemberRepository implements MemberRepository { private static Map<Long, Member> store = new HashMap<>(); private static long sequence = 0L; @Override public Member save(Member member) { member.setId(++sequence); store.put(member.getId(), member); return member; } @Override public Optional<Member> findByID(long id) { return Optional.ofNullable(store.get(id)); } @Override public List<Member> findAll() { return new ArrayList<>(store.values()); } @Override public Optional<Member> findByName(String name) { return store.values().stream() .filter(member -> member.getName().equals(name)) .findAny(); } public void clearStore() { store.clear(); } }
자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
안녕하세요! 섹션3 마지막 부분쯤 나온 @Component 어노테이션에 대해 질문이 있습니다! 이 어노테이션은 다음과 같은 경우에 사용된다고 하셨는데요! 컨트롤러, 서지스, 리포지토리가 모두 아니고, 개발자가 직접 작성한 클래스를 스프링 빈으로 등록할 때 사용된다. 제가 궁금한 것은 Service 나 리포지토리 모두 우리가 직접 작성한 클래스 아닌가요?? 그러면 컴포넌트 어노테이션 아닌가요?? 답변해주시면 감사하겠습니다
교재 내용중에 아래와 같은 내용이 있습니다. "데이터가 변해도 식별자로 지속해서 추적 가능 회원 엔티티의 키나 나이값을 변경해도 식별자로 인식가능" 여기서 궁금한 부분이 회원 엔티티의 키가 식별자라고 생각하는데 여기서 키가 바뀌게 되면 식별자도 바뀌게 되어 추적이 불가능하지 않나요?
public List<Order> findSearchOrders(OrderSearch orderSearch){ return em.createQuery("select o from Order o join o.member m" + " where o.orderStatus = :status" + " and m.name like :name", Order.class) .setParameter("status", orderSearch.getOrderStatus() ) .setParameter("name", orderSearch.getMemberName()) .setMaxResults(1000) .getResultList(); } public List<OrderQueryDto> findQueryOrder() { List<OrderQueryDto> result = findAllOrder(); for (OrderQueryDto order : result) { List<OrderItemQueryDto> orderItems = findOrderItem(order.getId()); order.setOrderItems(orderItems); } return result; } public List<OrderItemQueryDto> findOrderItem(Long orderId) { String query = "select new jpabook.jpashop.repository.order.query." + " OrderItemQueryDto(oi.order.id, oi.orderPrice, oi.count )" + " from OrderItem oi " + " join oi.item i" + " where oi.order.id = :orderId"; return em.createQuery(query,OrderItemQueryDto.class) .setParameter("orderId", orderId) .getResultList(); } public List<OrderQueryDto> findAllOrder(){ String query = "select new jpabook.jpashop.repository.order.query." + " OrderQueryDto(o.id, m.name, d.address, o.orderStatus, o.orderDate) " + " from Order o " + " join o.member m" + " join o.delivery d"; return em.createQuery(query, OrderQueryDto.class).getResultList(); } 첫번째 코드 블럭은 order를 select 할때 member를 join 하면 member를 프록시 객체로 가져오는걸로 알고 있습니다. join fetch 를 하게 되면 바로 객체로 가지고 오는걸로 알고 있습니다. 하지만, 두번째 코드 블럭은 그냥 join을 했는데, 왜 프록시 객체에서 객체로 전환? 프록시 객체가 객체를 가르키는 행위를 하지않고도 dto에 바로 삽입이 가능한가요? ex) order.getName() , member.getName()
부모를 삭제 시에는 CascadeType.ALL과 CascadeType.REMOVE가 똑같이 동작한다고 이해해서 이 둘에 대해 동시에 질문 하겠습니다. 만약에 하나의 게시글이 있고 이 게시글에 달려있는 첨부파일들이 100개 라고 하겠습니다. 이때 CascadeType.ALL 옵션을 사용하면 게시글 삭제 시 100개의 첨부파일들도 삭제 된다고 이해를 했습니다. 궁굼한 부분은 게시글 삭제 시 게시글에 달린 100개의 첨부파일에 대해 delete 쿼리가 따로 따로 보내지는건지 아니면 jpa가 최적화 해서 한번에 보내는건지 궁금합니다. 만약에 1번 질문에서 Jpa가 알아서 최적화해서 delete 쿼리를 DB로 보낸다고 가정하겠습니다. 그러면 100개의 첨부파일에 대한 Id 값을 다 뽑아서 이 값들을 delete 쿼리의 where절의 in에 넣어서 삭제 쿼리를 보내는것 대신에 Jpa가 최적화 해서 delete 쿼리를 보내는 방식이 더 좋은지 궁금합니다.
안녕하세요? PINN 이 무엇인지 매우 궁금하던 차에 인프런에서 강의가 개설되어 수강하게 되었습니다. 짧은 시간에 PINN 의 개념과 큰 그림을 이해하는데 매우 도움이 많이 된 강좌여서 정말 감사하다는 말씀을 먼저 드리고 싶습니다 ^^ 제조업체에서 AI 적용을 고민하는 직무에 있다보니 PINN 이 어떤 분야를 대체하기 위해 고안된 것인지 등... business 적용에 대한 몇 가지 질문을 드려 보고자 합니다. 일단 PINN 에 대한 저의 이해도가 정확한지 부터 확인하고 싶은데요, 네트워크 구조에는 다른 딥러닝 방법론과 차이점이 없어보이고, 변수에 미분방정식의 변수가, loss function 에는 지배방정식인 미분방정식이 적용되고, 해당 미분방정식을 규제해 주기 위한 초기값이나 경계조건도 Loss 에 반영되어야 한다는 것으로 이해했습니다. 그러다 보니 데이터가 없어도 학습이 가능하고, 일부데이터가 있다면 loss 값에 포함을 시켜서 모델의 오차를 보정시켜 주는 용도로 활용이 되는 것 같습니다. 제가 이해한 것이 맞는지요? 그렇다면 제조업계에서의 PINN 이 어느 분야에 잘 맞는지...에 대한 근본적인 질문을 드리고 싶은데요, 해당 시스템 behavior 를 설명할 수 있는 미분방정식이 명확하다는 말은, 그냥 해당 미분방정식에 수치를 넣어서 계산하면 딥러닝에 적용하는 것 보다 더 명확하고 신뢰도 높은 solution 을 얻게 될 것으로 생각이 되어서요.. 만약 CPU solving 자원이 넉넉하다면 굳이 PINN 적용 할 필요 없이 해당 분야에 신뢰도가 높은 지배방정식 자체를 사용해서 문제를 풀면 되는 것은 아닌지요? CAE solving 과정이 미분방정식을 푸는 과정이고 제조업체에서 명확한 지배방정식이 정의 될 수 있는 분야는 CAE analysis 가 가능한 분야라고도 볼수 있을 텐데, 그렇다면 PINN 적용이 가능한 거의 대부분의 문제가 현재 CAE 로도 solving 가능한 분야로 거의 한정되는 것으로 이해하면 될지도 궁금합니다. 그렇다면 PINN 의 효용성이란 것은 CAE 보다 좀 더 효율적인 (CPU or GPU 자원도 적게 사용하고 예측시간도 CAE solving 시간보다 많이 짧은) 방법이다.. 정도로 이해 되기도 하는데, '효율성' 이외에도 PINN 이 지배방정식을 컴퓨터로 직접 solving 하는 것보다 더 우수할 수 있는 장점이 있다면 어떤것 들이 있을지요..? 왠지 PINN이 지배방정식이 성립하거나 성립하지 않는 분야를 모두 가지고 있는 일반 제조업체에서 딥러닝을 적용하는 경우보다는 차세대 solver 를 연구하는 CAE software 회사에 더 중요한 방법론인것 같은 느낌도 들어서.. 드리는 질문입니다. 꼭 미분방정식이 아니더라도 해당 물리현상의 거시적인 현상을 설명할 수 있는 모종의 수식 혹은 미분방정식은 아니지만 현상적으로 검증된 실험식이 존재한다면 (세부적으로 들어가자면 오차는 존재하지만 거시적인 경향을 따라가는), Loss function 에 PIMM 을 적용해 볼 수 있을지.. 에 대한 질문도 드립니다. 예를 들어 3차원 이미지를 input 받아서 3차원 이미지를 3D convolution layer 로 prediction 하는 경우 (3차원의 pixel level prediction) input 좌표 x,y,z 에 따라서 output 이미지의 좌표 x,y,z 에서의 특성치 u가 모종의 좌표에 따른 함수 관계로 trend 를 따라간다는 것이 이미 증명이 되어 있는 경우라면, u = f(x,y,z) 와 같은 함수를 loss function 에 반영해 놓고, 수집한 데이터에 와 모델이 예측한 값에 대한 MSE 를 더한 loss function 을 minimize 하는 방향으로 학습을 시키는 것도 의미를 가질 수 있는 PINN 활용 방안이 될 수 있는지.. 궁금합니다.