본문 바로가기

Spring&IntelliJ

(44)
스프링부트와 그에 따른 알맞은 버전 선택하기 라이브러리 버전을 선택할때 좋은 방법은 https://spring.io/projects/spring-boot/ 에 가서 내가 사용할 Spring Boot버전을 보고 그중에서 Reference Doc. 클릭. ⇒ Dependency Versions라는 것있음. 거기서 만약에 hibernate에 관한 버전을 찾는 중일아면 hibernate Ctrl+F 여기나와있는 것처럼 오른쪽에 스프링부트버전에 궁합이 맞는 버전정보 나옴
DIP, IOC에 대하여. 참고: https://vagabond95.me/posts/about-ioc-dip-di/ 위 페이지에 나와있는 것처럼 할리우드는 IOC를 설명하는 원리임. 그리고 다음의 교수의 말대로 할리우드는 DIP를 구현하는 두 가지 방법중 하나. 따라서 IOC(Inversion Of Control)은 DIP(Dependency Inversion Principle)의 일부임. 할리우드 원리는 DIP를 구현하는 두가지 방법중 상속을 이용한 원리임. 즉, 할리우드 원리는 DIP의 일부를 설명하는 원리임. (복습. DIP를 구현하는 방법은 두가지임. 1. 포함관계로 느슨한 관계를 가지면서 관계주입을 받는 방법. 2. 추상클래스를 상속하여 무엇을 할지는 구체적인 자식클래스가 결정하고 언제할지는 부모가 결정하는 방법. 다른 ..
* What went wrong:org/gradle/api/plugins/MavenPlugin 결국은 모두다 지우고 처음부터 다시 프로젝트를 생성하여 문제를 해결하였다. 음.. 초반에 손을 볼때 어떠한 방법을 시도하여 적용해 보면 오류의 내용이 변해서 개선이 되고 있나보다 생각했다. 물론 실제로 개선이 일어나고 있었는지도 모르겠다. 하지만 결국은 * What went wrong: org/gradle/api/plugins/MavenPlugin > org.gradle.api.plugins.MavenPlugin 이와 같은 애러가 나왔고 구글링 해도 프로젝트를 완전히 뒤엎으라는 말은 하지 않아도 기존의 것을 삭제하고 다시 설치하는 글이 몇건 나온게 전부였다. 그리고 인프런 질문 게시판에 이와 같은 문제에 직면하고 해결하려는 사람이 있었고 그 답글은 도움이 안되어 결국은 모두 다시 지우고 해결하였다. 그래..
JPA. 필드(field)에 적용되는 몇가지 중요 어노테이션(2)@Temporal @Lob, @Enumerated, @transient 출처: https://www.youtube.com/watch?v=WH5UbfCjoN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=13 1. @Temporal어노테이션 자바8 이전에는 날짜를 다루고자 할때에는 자바의 Util패키지의 Date라는 클래스타입 혹은 Calendar라는 클래스를 사용했음. 반면 DB의 날짜에 관한 타입은 3가지로 나뉨. DATE, TIME, TIMESTAMP(데이트와 타임을 섞은타입) 만약 LocalDate, LocalTime, LocalDateTime중 하나를 사용한다면 @Temporal을 사용하지 않아도 됩니다. 2. @Lob 어노테이션 Lazy loading이란 무엇인가? 예를들어 em.find()로 DB의 데이터를 가지고 와서 Use..
JPA. 필드(field)에 적용되는 몇가지 중요 어노테이션 출처: https://www.youtube.com/watch?v=C7Uu_hFnQN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=12 (11:00 부터) @Column어노테이션 말고 @Basic이라는 옵셔널(Optional)한 어노테이션이 있습니다.옵셔널하다는 것은 생략가능하다는 의미입니다. 만약 @Column어노테이션이 없다면 해당 필드(변수)는 @Basic어노테이션을 갖는다고 보시면 됩니다. 기본적으로 자바객체의 타입과 DB가 가지고 있는 Column의 타입은 아시다시피 다릅니다. 이 다른것을 매핑해줄수 있는 매커니즘을 JPA provider(Hibernate, JPA구현체를 말함)들은 가지고 있습니다. 매핑 메커니즘의 기본이 되는 것을 Basic이라고 하여 @..
JPA. Table를 이용한 기본키 생성전략 출처: https://www.youtube.com/watch?v=C7Uu_hFnQN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=12 기본키 생성 테이블을 만들면 거기서 pk가 될 id를 가지고 와서 우리가 만들고자하는 DB의 레코드 데이터는 객체정보+기본키 생성 테이블에서 가져온 pk로 구성되게 됨. 아래와 같이 코드를 구성하면 내가 예상했던 대로 그 아래와 같이 쿼리문이 나가는 것을 볼수 있다. 내가 어떠한 값을 persist(insert)해주지도 않았는데 insert가 일어나는 것을 알고 있다. 따라서 내가 pk를 1부터 사용하고 싶다면 위와 같이 initialValue를 0으로 해주고 시작하면 된다. 위와같이 기본키를 위한 테이블과 기본 테이블이 생성된 후에..
JPA. Sequence를 이용한 기본키 생성전략 출처: https://www.youtube.com/watch?v=w3s4yyzO4TU&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=11 특정DB에 적용되는 내용이므로 필요할때 보면됨 요약: Sqeuence를 이용한 기본키 생성전략 복습. 위 내용중 스키마 자동 생성? @Table 어노테이션 봤을때 보았던 내용이다. persistence.xml 혹은 application.yml파일에 스키마 자동생성 속성을 넣어주는 것을 의미함 또 한가지 주목할 점은 어노테이션이라는게 생각보다 그 관계되는 프로그램이 구체적이라는 것이다. Sequence라는 용어는 MySql에서는 쓰지 않는다. Oracle에서 쓰인다. 그래서 @SequenceGenerator는 Oracle, Postgr..
JPA 영속객체의 라이프사이클 출처: https://www.youtube.com/watch?v=vMdpdui4VkA&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=8 위와 같이 persist로 영속성 컨텍스트에 등록한 후에 바로 detach하여 영속성 컨텍스트에서 제거하여도 insert 쿼리는 DB를 향해 나감. 콘솔창에 출력되는 순서는 select, foundCustomer출력정보, insert순임. 아래 그림 참고 (이 순서를 깔끔하게 이해하기 위해서는 아래와 같이 생각하면 좋을 것 같다. persist하면 insert에 관한 쿼리가 1차 캐쉬뿐만이 아니라 쓰기지연 sql저장소에도 담긴다. 그러다 detach되면 1차 캐쉬에서는 삭제된다. 그후 em.find()로 select 쿼리를 바로 DB에..