묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
metaspace 관련 문의드립니다.
안녕하세요. 좋은 강의라 너무 잘 듣고 있습니다.metaspace 관련하여 궁금한 점이 있습니다. "세대별 컬렉션 이론" 강의 - 13:00의 heap 영역 그림을 보시면,metaspace가 heap 영역 내부에 포함이 되어있는데,자바 8버전 이후로 Permanent Generation 영역이 metaspace로 변경되면서 heap 내부가 아니라 네이티브 메모리로 넘어간게 아닌가요? -XX:MaxPermSize 옵션도 없어진 것으로 알고 있습니다. 관련 내용 확인 부탁드립니다.감사합니다. :)
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@OneToOne 관계에서 연관 관계 주인이 아닌 쪽에서 LAZY가 적용되지 않는 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]LAZY를 적용하면 프록시 객체가 할당되는데, @OneToOne에서 연관 관계 필드가 null이라면 연관 관계 엔티티가 없다는 의미이고, 프록시 객체가 할당되었다는 것은 연관 관계에 해당하는 엔티티가 있다는 것을 의미한다고 이해했습니다. (프록시 객체는 연관관계 엔티티가 있을시 단지 조회를 늦추는 역할을 하는데 기여하는 객체라고 이해했습니다.) @Entity @Table(name = "Users") public class User { @Id @GeneratedValue @Column(name = "USER_ID") private Long id; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "CART_ID") private Cart cart; } @Entity public class Cart { @Id @GeneratedValue private Long id; @OneToOne(mappedBy = "cart") private User user; } 위 예시 코드를 토대로 설명해본다면 연관관계 주인(User)에서 Cart를 조회시실제 DB 테이블 관점에서 보면, FK에 null이 들어가 있으면 연관 관계 엔티티가 없다는 것을 의미하므로 cart 연관 관계 필드에 null을 할당할 수 있고, 반대로 FK에 null이 아닌 값이 있으면 연관 관계 엔티티가 있다는 뜻이어서 프록시 객체를 할당할 수 있습니다. 이렇게 되면 프록시 객체에 접근할 때 LAZY로 처리가 가능하다고 이해했습니다. 하지만 반대로, 연관관계 주인이 아닌 (Cart)에서 User를 조회 시실제 DB 테이블 관점에서 보면, 연관 관계의 주인이 아닌 테이블(Cart)에서는 FK 컬럼 자체가 없기 때문에 해당 테이블만 읽어서 연관 관계의 엔티티가 있는지 알 수 없습니다. 예를 들어, ’나를 참조하는 애가 누구지?’라는 문제입니다. 이런 상태에서는 user 연관 관계 필드에 null을 넣기도 애매하고, 프록시 객체를 만들기도 애매하기 때문에 EAGER 방식으로 동작한다고 생각해도 될까요?
-
미해결스프링 시큐리티 OAuth2
CustomOAuth2AuthenticationFilter 구현 중 질문
CustomOAuth2AuthenticationFilter으로 인증까지 처리 후home으로 리다이렉션을 하는거 까지 구현을 하였는데요HomeController에서 인증객체를 가져오려고 하면 null을 가져오는데요 CustomOAuth2AuthenticationFilter에서 securitycontext에 저장하였다가 리다이렉션할 때 새로운 스레드에서 이것을 처리해서 그 스레드에는 securityContextHolder에는인증객체가 없는 거 같은거 같은데 해결방법이 있을까요nio-8081-exec-2 스레드는 customFilter에서 holder에 제대로 저장하는데 리다이렉션 후 home에서는 nio-8081-exec-3이 받습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
404에러에 관한 질문 static 폴더밑의 jsp 파일조차 실행안됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]새 프로젝트에 계속해서 404가 뜨는 상황입니다. 정적 컨텐츠조차도 404가 뜨는 상황인데 왜그런지 함 봐주실수 있나요? { "type": "about:blank", "title": "Not Found", "status": 404, "detail": "No endpoint GET /index.jsp.", "instance": "/index.jsp"}이렇게 화면에 뜹니다.
-
해결됨김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
HelloThreadMian 코드 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. HelloThreaMain 클래스 에서 의문점이 생겨서 질문을 드립니다.코드를 보면이런 식으로 되어 있는데,저가 생각 하기로는이렇게 코드를 하는 게, 맞지 않나 싶어서, 여쭈어봅니다.helloThread.start()를 호출전이니 main.start가 아니라,helloThread.start가 되어야 맞는거 아닌가? 라는 생각을 하게 되는데요. 오류인가요? 아니면 저의 생각이 틀린건가요?답변 부탁 드립니다.
-
미해결스프링 시큐리티 OAuth2
AuthenticationManager 생성시점
가끔 securityconfig 설정 중 AbstractAuthenticationProcessingFilter 상속한 필터를 만들 때 AuthenticationManager가 필요해서 http.shareObject로 받아오면 Null을 반환하더라구요. protected void beforeConfigure() throws Exception { if (this.authenticationManager != null) { this.setSharedObject(AuthenticationManager.class, this.authenticationManager); } else { ObjectPostProcessor<AuthenticationManager> postProcessor = this.getAuthenticationManagerPostProcessor(); AuthenticationManager manager = (AuthenticationManager)this.getAuthenticationRegistry().build(); if (manager != null) { this.setSharedObject(AuthenticationManager.class, (AuthenticationManager)postProcessor.postProcess(manager)); } } 여기서 httpSecurity의 해당 메서드에서 providerManger를 생성하는 거 같으나 디버깅했을때여기보다 제가 Bean으로 정의한 SecurityFilterchain이 먼저 걸려 httpSecurity.getShareObject()를 하면 null을 반환하더라구요. 그래서 authenticationConfiguration.getAuthenticationManager()으로 넣기는 하였으나 이게 정확히 AuthenticationManager생성주기가 매우 궁금하여 질문드립니다.
-
미해결김영한의 실전 자바 - 기본편
생성자
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.name = namename1 = name2 여기서 어떤게 매개변수이고,어떤게 멤버변수인가요?구분하기 위해 1, 2로 나누었습니다
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
자바에서 2바이트 크기인 char에 할당되는 3바이트 크기의 한글...?
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. OutputStreamWriter, InputStreamReader를 이용해 한글을 파일에 쓰고 읽는 내용이 수업에 있는데요.UTF-8은 한글을 3바이트로 저장한다고 되어있고, 수업 때 작성한 코드를 보면 한글을 char 타입으로 저장이 잘 되는 것을 확인할 수 있습니다. (수업에서는 int형으로 저장했다가 이를 char형으로 캐스팅한것이지만 제가 따로 코딩을 해보아도 char 자료형에 한글이 잘 저장되더라구요) utf-8 에서는 한글을 3바이트로 저장하는데 자바에서 2바이트 크기인 char자료형에 잘 저장될 수 있는지 찾아보았는데, 자바에서는 변형된 utf-8을 쓴다고 하고 뭔가 굉장히 자세한 내용이 있었습니다.그냥 자바에서는 utf-8에서는 3바이트로 저장되는 한글을 특별한 방법으로 2바이트로 저장한다고 알고있으면 될까요?근데 또 한글로 저장해놓은 String을 바이트배열로 바꾸면 한글자당 세개의 바이트가 나와가지고 이해가 어렵습니다..
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
콘솔에서 쿼리가 보이지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강사님처럼 콘솔에 INFO와 쿼리가 뜨지 않습니다.다른 분들 질문을 보니 yml 파일을 확인하라던데 yml 파일에 오타는 없는거 같은데.... 어느 부분을 수정해야할지 모르겠습니다 ㅠㅠ
-
해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
완강 후 Kotlin 이런저런 질문 드려봅니다!
안녕하세요! 최태현 지식공유자님 코틀린 강의 만들어주셔서 감사합니다! 💚실제로 코프링 개발자로 1년정도 근무했던 경험이 있었는데.. 일했던 날짜와 한참 늦은 2024년 말이지만 추후에 강의를 완강하게 됐는데 매우 유익했습니다 몇가지 질문이 있어서 질문 남깁니다!!질문들TabWidth에 대해서IntelliJ에 보시면 tabWidth를 2로 설정하셨는데, 특별한 이유가 있으신가요?보통 저는 4로 설정하는 편이어서요!순수함수에 대해서제가 알기로는 내부의 scope에서 동작할때 외부의 요인이 내부의 값을 바꾸지 못하거나 내부의 요인으로 외부의 값이 바뀌지 못하계 경계가 있어서 side effect가 없는 함수를 뜻하는 걸로 알고있는데요 Java는 그렇기에 Stream api를 사용할때 final이 아닌 외부의 값을 참조하지 못하기때문에 좀 더 안전하게 작성할 수 있는데, 코틀린은 Closure, Currying 등을 허용하기 때문에 개발자의 실수를 더 많이 일으킬 가능성을 열어둔 것은 아닌지 궁금합니다OOP와 FP에 대해서자바같은 경우는 함수형 인터페이스또는 인터페이스 구현체를 익명클래스나 익명함수 등으로 넘겨서 FP를 모방하는걸로 알고있는데요, 대신 최소한의 getter/setter를 추가하고 행위를 나타내는 메서드명을 외부로 노출하고(public..), 그 메서드는 내부호출(private)로 캡슐화를 할 수 있는데, 코틀린처럼 invoke가 될 수 있는 함수를 인자로 넘기면 아래와 특정한 행위를 나타내는 이름이 아닌 행위 자체를 넘기게 돼서 객체의 역할과 책임을 나타내는 메서드가 없게 되서 rich domain model이 아닌 anemic domain model이 되는게 아닌지 궁금합니다// OOP fun doHobby(person: Person?) { println("${person?.hobby}생활을 즐기고 있습니다") } fun beAging(person: Person?) { println("내년에 ${person?.age?.plus(1)}만큼 늙어갈 예정입니다") } fun mainOOP() { val person = Person("보키", 20) doHobby(person) beAging(person) } // FP fun doSomething(person: Person?, run: () -> Unit) { } fun mainFP() { Person("보키", 20).run { doSomething(this) { println("${hobby}생활을 즐기고 있습니다") } } Person("보키", 20).run { doSomething(this) { println("내년에 ${age+1}만큼 늙어갈 예정입니다") } } Person("보키", 20).run { doSomething(this) { println("런닝중입니다 건들지마시오") } } } data class에 대해서대부분의 기능들이 강의에 녹아있기는 하지만 data class의 강력한 기능 중 하나인 copy 메서드는 백엔드의 프로덕션 개발과 테스트 코드에서 어디 부분에 사용될 수 있을까요?이건 많이 강의 주제를 넘어간 질문이긴 하지만.... Kotlin+Springboot+JPA 를 사용할때 data class/class 중 어떤 클래스로 Entity를 만드시는지 궁금합니다.MySQL or MongoDB or PostgreSQL에서 어떤 클래스와 궁합이 좋은지. data class를 사용한다면 copy를 어느 부분에 사용하면 좋을지도 알고싶습니다!강의내용과는 많이 무관하기에(코틀린이 아닌 서버, 타 라이브러리, 인프라(DB)까지 논의확장을 하였음) 답하기 어렵다면 안해주셔도 괜찮습니다Scope Func에 대해서저는 Kafka, Configuration 등에서 기본객체를 가져와서 apply를 이용해서 초기값 -> 덮어씌우는 방식을 주로 사용했고 with구문을 이용해서 log를 편하게 했었는데 scope func의 또 다른 좋은 선례도 알고싶습니다! Ex1) private fun <K : Any, V : Any> initConsumerProps( keyDeSerClass: Class<out Deserializer<K>>, valueDeSerClass: Class<out Deserializer<V>> ): Properties = Properties().apply { put(BOOTSTRAP_SERVERS_CONFIG, "localhost:9092") put(KEY_DESERIALIZER_CLASS_CONFIG, keyDeSerClass.name) put(VALUE_DESERIALIZER_CLASS_CONFIG, valueDeSerClass.name) put(GROUP_ID_CONFIG, "group-02") put(MAX_POLL_INTERVAL_MS_CONFIG, "60000") } Ex2) for (record in consumerRecords) { with(record) { logger.info { "key: ${key()}, partition: ${partition()}, offset: ${offset()}, value: ${value()}" } } }method reference에 대해서어떤 코드에서는 let(::XX), 또 다른 코드에서는 let { ... }방식이 사용될 때가 있는데, 어떤게 성능상 또는 가독성에서 좋은지도 궁금합니다!
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
HashMap
HashMap 강의 듣고있는데 HashMap<String, Integer> map에서 Integer가 아닌 int를 쓰면 왜 안되는지 궁금합니다.
-
미해결스프링 시큐리티 OAuth2
FormLogin과 Oauth2Client 둘 중 사용하는 시점
안녕하세요 FormLogin, Oauth2Client 설정 중에서요FormLogin을 설정하면 인가, 사용자 리소스까지 바로 가져올 수있고 Oauth2Client는 인가까지만 해주는데둘 중에 어떤 상황에 해당 설정들을 사용해야하는지 헷갈려서 질문드립니다.
-
해결됨자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
확장함수 스타일 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 9:54쯤에 질문이 있습니다val 또는 fun으로 확장함수를 만들 수 있는데..두가지 방식의 차이점이 있나요?또는 이펙티브 코틀린 등등에서 더 선호하는 방식이 있는지, 안티패턴이나 best practice가 있다면 알고 싶습니다.차이점이 있다면 확장함수에 val을 사용한 경우 custom getter방식으로 구현되고 호출부에 ()가 없는 반면, fun키워드를 사용한 경우에는 get()이 사용되지 않고 호출부에 ()를 해줘야 되는 것 같습니다 1번방식: 강의에서 나온대로 val_ 정의부:val List<Fruit>.samePriceFilter: List<Fruit> get() = this.filter(Fruit::isSamePrice)_ 호출부:val samePriceFruits2 = fruitsInList.flatMap { it.samePriceFilter }2번방식: fun으로 사용_ 정의부:fun List<Fruit>.samePriceFilter(): List<Fruit> { return this.filter(Fruit::isSamePrice) }_ 호출부:val samePriceFruits2 = fruitsInList.flatMap { it.samePriceFilter() }
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
연관관계 관련 질문 있습니다.
public void returnBook(String bookName) { UserLoanHistory targetHistory = this.userLoanHistories.stream() .filter(history -> history.getBookName().equals(bookName)) .findFirst() .orElseThrow(IllegalArgumentException::new); targetHistory.doReturn();리팩토링 강의에서 repository 사용없이 this.userLoanHistories.stream()로 바로 데이터를 불러오던데 mappedBy로 연관관계가 존재하면 가능한건가요?
-
미해결김영한의 실전 자바 - 기본편
객체 지향 프로그래밍
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의 자료 위치
[질문 내용]선생님께서 html코드를 복사하고 강의 중간중간 설명해주시는 강의 자료는 어디에서 찾을수있나요?
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
orphanRemoval=true으로만 적용시 DELETE SQL 동작 안함
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]https://www.inflearn.com/questions/137740/orphanremoval%EA%B3%BC-cascade%EC%9D%98-%EA%B4%80%EA%B3%84 위 질문을 바탕으로 정리하자면 부모 엔티티에 있는 자식 엔티티 컬렉션에서 자식 객체를 제거하면 고아객체가 되므로 원래 JPA 스펙상 JPA 스펙상 원칙적으로 CascadeType.PERSIST이 없어도orphanRemoval만으로 자식 삭제하는 DELETE SQL이 동작하지만 Hibernate 구현체 버그(?)로 인해 동작을 안하는 거다. 라고 정리하면 될까요? 자문자답 =============2024년 12월 기준으로 하이버네이트 버전을 최신으로 바꿔서 실행했는데orphanRemoval=true만 적용해도DELETE SQL가 정상 동작하는 것으로 보입니다. Hibernate: /* insert for hellojpa.Parent */insert into Parent (name, id) values (?, ?) Hibernate: /* insert for hellojpa.Child */insert into Child (name, parent_id, id) values (?, ?, ?) Hibernate: /* insert for hellojpa.Child */insert into Child (name, parent_id, id) values (?, ?, ?) Hibernate: select p1_0.id, p1_0.name from Parent p1_0 where p1_0.id=? Hibernate: select cl1_0.parent_id, cl1_0.id, cl1_0.name from Child cl1_0 where cl1_0.parent_id=? Hibernate: /* delete for hellojpa.Child */delete from Child where id=? ============= 수정된 pom.xml<!-- JPA 하이버네이트 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.6.3.Final</version> </dependency>수정하고 Maven reload 버튼을 눌러야합니다!
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
정적내부클래스 new 로 생성에 관한 질문(인터럽트-시작1강 중...)
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]인터럽트 시작1 부분 강사님 설명 예제중에서 갑자기 궁금해서 질문드립니다..제가 궁금한부분은 public class ThreadStopMainV1 { public static void main(String[] args){ MyTask task = new MyTask(); Thread thread = new Thread(task, "work"); thread.start(); } static class MyTask implements Runnable { ...................................... }}여기서 질문 왜 정적내부클래스 MyTask()에 new를 써서 만드나요?? 정적 내부 클래스는 외부 클래스의 정적 멤버처럼 동작하기 때문에, 외부 클래스의 이름을 통해 접근해야 하는거 아닌가요?. 따라서 newThreadStopMainV1.MyTask() 형태로 생성해야하는거 아닌가요?? 정적내부클래스도 바로 다이렉트로 new MyTask() 로 생성해도 되는건가요 ?? 너무궁금합니다..
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
[JPA 더티체킹] 조회한 엔티티에 대해 update할 때, 실제 update 값은 기존 엔티티 필드 값들과 모두 동일해도 update 쿼리가 실행되는 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 영한님! 강의 잘 듣고 있습니다. JPA 더티 체킹 관련해서 질문이 있습니다.,현재 매일 외부로부터 몇천~몇만 건의 데이터를 받아서 인터페이스 테이블에 해당 데이터의 키 값에 해당하는 데이터가 없으면 삽입, 이미 있으면, 키 값을 제외한 해당 데이터와 인터페이스 테이블에 있는 데이터의 컬럼들을 비교해서 update 치는 로직으로 구현했습니다. (해당 정보는 변경될 일이 거의 없기 때문에 매일 테이블을 delete insert 하는 방식보다는 효율적인 방식이라고 생각되어 채택하였습니다.) 로직은 간략하게 다음과 비슷합니다. (실제 컬럼 수는 훨씬 많습니다.)List<UserInfoRequest> users = objectMapper.readValue(decryptedData, objectMapper.getTypeFactory().constructCollectionType(List.class,UserInfoRequest.class)); List<UserInterfaceEntity> existingUsers = UserInterfaceRepository.findAll(); List<UserInterfaceEntity> userListToAdd = new ArrayList<>(); for (UserInfoRequest request : users) { UserInterfaceEntity existingUser = existingUsers.stream() .filter(user -> user.getEmail().equals(request.getEmail())) .findFirst() .orElse(null); /** 기존 인터페이스 테이블에 존재하지 않는 사용자 정보이면 */ if (existingUser == null) { UserInterfaceEntity newUser = UserInterfaceEntity.builder() .email(request.getEmail()) -- PK .name(request.getName()) .address(request.getAddress)) UserInterfaceRepository.save(newUser) } else { existingUser.updateUserInfo(request); } } // 엔티티 클래스 public void updateUserInfo(UserInfoRequest request){ this.name = request.getName(); this.address = request.getAddress(); '''실제로는 컬럼수가 더 많습니다''' }저는 이러한 상황에서 existingUser가 존재하면 request로 들어오는 데이터가 아예 변경이 되지 않았을 수도 있고, 데이터의 어떤 컬럼 값이 변경됐을 지 모르기 때문에 일일이 if문으로 비교하는 것보다는 모든 컬럼을 update 하는 방식을 취했고, 제가 기대했던 결과는 같은 값이 들어오면 DB에 update 쿼리가 나가지 않는 것을 기대했습니다.그런데, 실제로 existingUser가 존재하고, request의 모든 필드값과 exsitingUser 의 모든 필드 값이 다 같은 건에 대해서도 update 쿼리가 DB에 나가더라구요. JPA 더티체킹의 경우 최초 조회한 시점에 스냅샷을 떠두고, 커밋 시점에 변경된 엔티티에 대해서만 UPDATE 쿼리가 나가는 것으로 알고 있는데, 왜 필드 값이 실제로는 변경되지 않았음에도 UPDATE 쿼리가 나가는 것일까요? 이 부분에서 실제로 필드 값이 변경된 경우에만 update 쿼리를 실행하고 변경되지 않은 경우에는 update 쿼리를 막으려면 if문을 일일이 필드마다 비교해야하는 로직을 추가하는 것 말고는 다른 좋은 방법이 없을까해서 질문 남깁니다..
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
Java 입문 강의 유용도에 대한 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. JAVA로 COS Pro 2급을 따고 싶은데 이 입문강의를 들으면 가능할까요? C언어랑 python은 좀 다뤄봤습니다.