JPA(ORM) 장점 1) RDB에 종류와 관계없이 사용 가능하다. 추후 DB 변경이나 코드 재활용에 용이하다. 2) 비지니스 로직에 집중할 수 있다. 3) 테이블 생성, 변경 등 엔티티 관리가 간편하다. 4) 쿼리에 집중할 필요 없어 빠른 개발이 가능하다. 단점 1) 어렵다. 단방향, 양방향, 임베디드 관계 등 이해해야할 내용이 많으며, MyBatis(SQL Mapper) 장점 1) JPA에 비해 쉽다. SQL 쿼리를 그대로 사용하기에 복잡한 Join, 튜닝 등을 좀더 수월하게 작성 가능하다. 2) SQL의 세부적인 내용 변경 시 좀 더 간편하다. 3) 동적 쿼리 사용 시 JPA보다 간편하게 구현 가능하다. 단점 1) 데이터 베이스 설정 변경 시 수정할 부분이 너무 많다. (Oracle의 페이징 쿼리를 MySQL에서 사용 불가능!) 2) Mapper작성부터 인터페이스 설계까지 JPA보다 많은 설계와 파일, 로직이 필요하다. 3) 특정 DB에 종속적이다. Querydsl 장점 1) 쿼리를 자바 코드로 작성 2) 문법 오류를 컴파일 시점에 잡을 수 있음. 3) 쉬운 SQL 스타일 문법(복잡한 쿼리 작성 용이) 질문 : Querydsl 초반부만 듣고 있는 수강생입니다. 1) 서비스가 MVC + MYBatis에서 JPA + querydsl 바꾸는 점에 있어 생기는 기본적인 문제들이 있을까요? 2) QueryDSL 이 MyBatis 를 대신해 커버 가능할까요 ?
안녕하세요. 싱글톤에서 Early, Lazy 초기화의 차이를 공부하기 위해 클래스 로드에 개념을 처음으로 딥하게 공부해보고 있습니다. 클래스 로드와 사용에 따른 초기화간 heap 메모리 할당이 되는지도 공부하기 위해 위와 같이 트래킹해봤습니다. 저는 트래킹 결과를 보고 아래와 같이 해석했습니다. 1. 사용하지 않으면 early, lazy 모두 초기화되지 않는다. 2. early 는 getInstance() 메소드로 진입할 때 초기화 된다. lazy 는 getInstance() 메소드가 끝날 때 Holder 를 통해 초기화 된다. 하지만 강의에는 early 초기화시 사용하지 않아도 생성된다고 말씀해주셨습니다. 그렇다면 캡쳐 1에서 인스턴스가 보여야된다고 생각했는데 보이지 않아 혼동이 와서 질문 드립니다. 혹시 제가 개념이 헷갈리거나 트래킹을 잘못하고 있는 것일까요..? ㅠㅠ public class App { public static void main ( final String [] args) { singleton () ; } private static void singleton () { final EarlyInitializationSingleton early = EarlyInitializationSingleton . getInstance () ; // 캡쳐 1 final LazyInitializationSingleton lazy = LazyInitializationSingleton . getInstance () ; // 캡쳐 3 System . out . println ( "end" ) ; // 캡쳐 5 } } public class EarlyInitializationSingleton { private static final EarlyInitializationSingleton INSTANCE = new EarlyInitializationSingleton () ; private EarlyInitializationSingleton () { } public static EarlyInitializationSingleton getInstance () { return INSTANCE ; // 캡쳐 2 } } public class LazyInitializationSingleton { private LazyInitializationSingleton () { } private static class LazyInitializationSingletonHolder { private static final LazyInitializationSingleton INSTANCE = new LazyInitializationSingleton () ; } public static LazyInitializationSingleton getInstance () { return LazyInitializationSingletonHolder . INSTANCE ; // 캡쳐 4 } }
파이썬으로 API 호출하는 과정에서 SSL 핸드쉐이크 오류가 발생하여 관련 기관에 물어보니 아래와 같은 답변을 받았습니다. SSL 핸드쉐이크 오류가 발생한 이유는 클라이언트 인증서, CA인증서, 클라이언트 개인 키 등의 정보를 옵션으로 사용하여야 하는데 이러한 옵션들이 없어 상호 인증에 실패 하였다고 합니다. 쿼리문 으로 curl -k --tlsv1.2 --cacert ./ca-chain.crt --cert ./client.crt --key ./client.key -H 위와 같은 설정이 있어야 한다고 합니다. 맨 처음에 tlsv1.2 부분은 알아보니 파이썬에서 import ssl context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 구문을 추가하면 된다고 배웠습니다. 그다음 cacert ./ca-chain.crt --cert ./client.crt --key ./client.key 이 부분은 어떻게 파이썬으로 코드로 구현해야 할지 몰라서 질문을 올리게 되었습니다. 긴글읽어주셔서 감사합니다. 항상배움의 자세를 갖추어 열심히하고자합니다. 도움주시면 정말 너무감사하겠습니다.
안녕하세요. 기선님. 좋은 강의 감사합니다. 이번 수업을 들으면서 궁금한 점이 생겨 질문 남깁니다. 1:34초쯤 Settings enum 클래스에 number 필드 및 게터 세터를 생성하셨는데, 이러한 상황에서도 동기화 블록없이 커스터마이징된 enum 객체가 쓰레드-세이프한건가요? 답변 부탁드립니다. 감사합니다.
안녕하세요. 싱글톤 하나만 들었는데도 안일하게 사용하고 있던 지식들이 채워지는 너무너무 좋은 강의입니다. 강의를 들으면서 공부하는 데 질문이 있어 남깁니다. --- 1. 저는 공부하는 자료에 대해서 가능하면 블로깅을 남기고 있습니다. 남에게 설명할 수 있는 수준이 되어야만 진정으로 이해하는 것이라고 생각하기 때문입니다. 혹시 강의 내용을 블로깅하는데 있어 제약사항이 있을까요? ex) - 강의 장표 캡쳐 불가 - 강의 장표의 질문 노출 불가 2. 동영상 뿐만이 아니라 강의 장표에 많은 질문들로 한번 더 생각할 기회를 주시는 것 같아 너무너무 감사합니다. 물론 제가 먼저 찾고 공부하는 것이 우선이지만, 제가 답을 냈을 때 비교를 할 수 있는 답이 있으면 더 좋을 것 같은데 혹시 공개되어 있을까요? 다시 한번 좋은 강의 너무너무 감사합니다!!!!
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? ( 예 /아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] 아래 처럼 에러가 뜹니다. Could not find gradle.plugin.com.ewerk.gradle.plugins:querydslplugin:1.0.10 로딩이 안되네요. buildscript { dependencies { classpath( "gradle.plugin.com.ewerk.gradle.plugins:querydslplugin:1.0.10" ) } } plugins { id 'org.springframework.boot' version '2.6.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } apply plugin : "com.ewerk.gradle.plugins.querydsl"
학습하시는 분들이 혹여나 오류가 있을까봐 게시판에 남겨놓습니다. spring boot 2.6버전 이상 쓰시는 분들은 테스트 코드가 오류가 날수 있습니다. Caused by: java.lang.IllegalStateException: Set the spring.mongodb.embedded.version property or define your own MongodConfig bean to use embedded MongoDB at org.springframework.util.Assert.state(Assert.java:76) at org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration.determineVersion(EmbeddedMongoAutoConfiguration.java:148) at org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration.embeddedMongoConfiguration(EmbeddedMongoAutoConfiguration.java:128) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ... 159 more 해결책을 찾아보니 다음과 같이 해결해줄수 있었습니다. @DataMongoTest @TestPropertySource ( properties = "spring.mongodb.embedded.version=3.5.5" ) @ActiveProfiles ( "test" ) spring boot 2.6이상버전 부터는 spring.mongodb.embedded.version은 자동 구성된 임베디드 MongoDB를 사용하도록 설정해야하는것 같습니다. 참고: https://stackoverflow.com/questions/70047380/excluding-embededmongoautoconfiguration-failed-in-spring-boot-2-6-0 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes#embedded-mongo 혹시 에러때문에 실패하시는분들이 있으시면 참고하시면 좋을것 같습니다. 그리고 교안도 수정해주신다면 감사하겠습니다. 항상 좋은강의 만들어주셔서 감사합니다.
선생님 언제나 좋은강의 감사드립니다! 선생님께서는 실무에서 왠만하면 셋터를 전부 제거 하신다고 알려주셨는데요. Book 클래스에서 Setter를 제거하려고 시도하다가 나온 의문점이 있어 질문드립니다. 밑의 코드와 같이 작성하였는데요. 이 경우 author와 isbn필드로 인해 어쩔수없이 private setter를 두개 둘수밖에없었습니다. 이와같이 private setter를 두는것이 옳을지, 필드를 static으로 바꾸는게 좋을지에 대한 질문인데요 Book 객체의 경우 필드가 두개밖에 없어서 static으로 바꿔줘도 상관없을거라고 생각은하는데 실무에서는 무수히 많은 필드가 있는 객체가 있을경우 static 필드 vs private 셋터중 어떤게 옳은 방법인지 궁금해서 질문드립니다. @Entity @DiscriminatorValue ( "B" ) @Getter @NoArgsConstructor ( access = AccessLevel . PROTECTED ) public class Book extends Item { @Setter ( value = AccessLevel . PRIVATE ) private String author ; @Setter ( value = AccessLevel . PRIVATE ) // static으로 만드는것을 고려? private String isbn ; public static Book createNewBook ( String author , String isbn , String name , int price , int quantity ) { Book book = new Book () ; book . setAuthor ( author ) ; book . setIsbn ( isbn ) ; book . setName ( name ) ; book . setPrice ( price ) ; book . setStockQuantity ( quantity ) ; return book ; } }
지금 예제에서는 Book만 수정을 하니 만약에 Book만 가지고 있는 멤버인 ISBN과 작가를 수정하려면 이렇게 케스팅 해주는 방법밖에 없을까요? updateItem 메소드 하나로 item을 상속 받는 구현체들인 Book, Album, Movie를 업데이트 하는 방법이 있는지 궁금하고 혹은 있더라도 그것 보다는 각각을 따로 Dto를 만들어서 updateBook 이런식으로 하는게 더 좋나요? 저는 일단 다운캐스팅으로 Dto 따로 안만들고 했습니다.
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb0 in position 6: invalid start byte 비주얼 스튜디오로 코드 실행 시, 위와 같은 오류가 뜹니다. 유니코드에 대한 에러라고 뜨는데 , 해결방법이 궁금합니다. 제가 작성한 코드는 다음과 같습니다. # K 번째 약수 풀이 import sys sys.stdin = open("input.txt", "rt") # 1. 내 풀이 n, k = map(int, input().split()) var = list() for i in range(1, n + 1): if n % i == 0: var.append(i) if len(var) >= k: print(var[k - 1]) else: print(-1) ''' # 2. 강의 풀이 n , k = map(int, input().split()) cnt = 0 for i in range(1, n + 1): if n % i == 0: cnt += 1 # 약수의 개수 저장 if cnt == k: # k 번째 약수일 때, i 출력 print(i) break # 약수 출력 후, 반복문 탈출 # for ~ else 구문 : 반복문이 탈출되지 않고 정상적으로 모두 돌고 종료된 경우, else 구문 실행 else: # for 문이 정상 종료, 즉 약수의 개수가 K개 미만일 경우 실행 print(-1) '''
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
크롤링 웹기본 - 크롤링을 위한 지식: 웹구조와 HTML 이해하기3 3분 40초 코드는 이렇게 썻는데 이미지는 엑박만 뜹니다 ㅠ 그리고 다른 강의 수업자료(아래) 주피터노트북으로 열때도 이미지가 엑박으로 보이던 부분이있었습니다. 연관이 있을거 같은데 이미지를 이미지로 못받는거같은데 해결방법이 있을까요?
안녕하세요. 귀중한 조언 감사드립니다. 파이썬 이제 막 기초를 끝낸 파이썬 초보입니다. 책과 강의로 파이썬 기초서적을 3회독 점도 하였고, 별도로, pandas, numpy, matplotlib, 셀레니움 라이브러리를 공부했습니다. (질문) 저는 전문 프로그래머나 개발자는 아니고, 별도의 사업과 투자를 하는 사람입니다. 제 사업이나 주식, 부동산 자료분석에 활용하고자 파이썬이라는 도구를 활용하려는 것입니다. ● 주로, 방대한 인터넷 세계에서 제가 원하는 자료만을 크롤링해 올수 있는 방법으로 활용 ● 그 크롤링한 자료들을 a. 제가 지정한 폴더에 한번에 다운로드 받거나 (예컨대, 이미지 파일들을 폴더에 대량으로 다운받거나) b. 제가 원하는 크롤링한 내용들(글자 내용 등)을 엑셀에다가 일목요연하게 정리되게 출력해주는 식으로 활용도 해 나가고.. (예컨대, 네이버 연관검색어를 쫙 모아서 엑셀에다가 정리해준다던지) ● 그렇게 크롤링되어 엑셀로 재정리된 그 자료를 데이터 분석도 하고, 그래프도 만들고, 통계도 만들고 아울러 ● 업무 자동화도 만들어나가는 식으로 파이썬을 활용해나갈 것을 염두에 두고 있습니다. =================================== 결국, 크롤링, 엑셀연동, 데이터분석, 업무자동화용으로 파이썬을 활용하고자 합니다. ■ 파이썬 기초에 + 판다스, 셀레니움, 넘파이, matplotlib를 공부한 상태인데 크롤링, 엑셀연동, 데이터분석, 업무자동화용으로 파이썬을 활용하려면 여기에, 어떤어떤 라이브러리(모듈)을 추가로 공부해나가야 하는지, 여기에 자주 사용하는 라이브러리(모듈)은 무엇무엇이 있는지 질문드립니다. 귀중한 답변 정말 감사드립니다. 오늘도 좋은 하루 되세요 ^^
안녕하세요 영한님 감사합니다 ^_^ 08:13 보시면 em.flush를 해주시는데 필수인건가요 ?? flush을 쓰지 않아도 자동으로 나가는걸로 알고있습니다. clear만 해도 될까요?? 실험결과 clear만 써주면 되긴합니다만 flush를 별도로 또 호출해줘야 더 안전한 코드인가요??
@EntityGraph ( attributePaths = { "team" }) List < Member > findEgByUsername ( String username ) ; 일 때와, @EntityGraph ( attributePaths = { "team" }) List < Member > findEgByUsername ( @Param ( "username" ) String username ) ; 일 때 결과 값이 똑같이 나오는걸 확인했는데, @Param은 직접 JPQL에 "~~ = :username"을 지정하지 않는 이상, 쿼리 메소드 이름 기능으로 사용할 때, 생략해도 되고 생략 안해도 되는 게 맞나 확인차 질문드립니다.
스프링 같은 컨테이너 환경에서 클라이언트 요청별로 영속성 컨택스트가 생기는지가 궁금합니다. (엔티티 매니저가 아닙니다.) 8p 강의자료에 보면 엔티티 매니저와 영속성 컨택스트의 관계는 N:1개라고 설명을 해주셨는데요. 이부분은 스프링을 설명해야하니 일단 넘어가주셨어요. 11p 강의 자료부터는 1:1 관계로 설명을 해주셔서 그런지 영속성 컨택스트 = Entity Manager로 설명을 해주시더라구요. 여기서 의문의 생긴점이 하나 생겼는데요, 1차캐시의 위치를 보면 EntityManager 안에 위치하던데 그러면 스프링을 기준으로 생각할때, 영속성 컨택스트 앞에서 여러개의 엔티티 매니저를 만들며 1차캐시를 N개 만드는것인지 (엔티티 매니저 개수만큼), 아니면 영속성 컨택스트( 엔티티 매니저가 아닌, 강의자료 8p 에 있는 우측 엔드포인트)도 여러개 생기는건지가 궁금합니다. 논리적인 개념인 영속성 컨택스트를 뭐를 기준으로 보냐는 관점 차이일까요?