엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려 있고 변경포인트가 많아서 유지 보수가 어렵다. 모든 연관관계는 지연로딩으로 설정 즉시로딩은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할때 N+1 문제가 자주 발생한다. 실무에서는 모든 연관관계는 지연로딩(LAZY)으로 설정해야한다, 연관된 엔티티를 함께 DB에 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다, @XTOOne(OneToOne, ManyToOne)관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야한다, 컬렉션을 필드에서 초기화 하자 컬렉션은 필드에서 바로 초기화 하는 것이 안전하다. null 문제에서 안전하다. 하이버네이트는 엔티티를 영속화 할 때, 컬랙션을 ..
1. Ultimate 유료 버전사용중이여서 셋팅을 한다 2.의존성 추가 ★ 오류 ★ Gradle 버전과 java 버전이 맞지않아 빌드가 안되는 오류발생하였다. Ctrl + alt + s 설정을 연후 gradle에가서 Gradle JVM 버전을 자바 버전에 맞게 다운로드및 변경하였다. 빌드실행은 gradle에서 intellij IDEA로 변경 3. h2 database 연결 4. application.yml 설정 spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop; //H2 1.4.200 버전부터 MVCC 옵션이 제거되었습니다. username: sa password: driver-class-name: org.h2.Driver jpa: hibernate..
JPA란? Java Persistence API는 자바 진영의 ORM 기술 표준이다. JPA의 특징 •쿼리를 일일히 작성할 필요가 없어 코드 작업량이 줄어든다. •가독성이 뛰어나다. •수정이 간편해 유지보수, 리팩토링에 용이하다. JPA의 한계점 •매핑 설계를 잘못했을 때 성능 저하가 발생할 수 있다. •동적 쿼리를 사용하면 가독성이 떨어져 유지보수 시 어려움이 있다. 중요한 부분 1. 양방향 연관관계 다대일(@ManyToOne) 일대다(@OneToMany)만 실무에서 사용 2. 즉시로딩과 지연로딩 실무에서는 지연로딩만 사용 – 즉시로딩 적용하면 SQL이 발생 •@ManyToOne, @OneToOne은 기본이 즉시로딩 → Lazy로 설정 •@OneToMany, @ManyToMany는 기본이 지연 로딩 N..
1. 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 완강및 노션 JPA정리 5월목표 1. 실전! 스프링 부트와 JPA 활용1 웹 애플리케이션 개발 완강 + 실전! 스프링 부트와 JPA 활용2 까지 5월에 완강및 노션에 정리 2.10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online. 게시판 서비스 고도화 클로코딩(5월 19일까지) 하루에 4개 -?가능한지를 알수가없음 + 추가적으로 10가지 프로젝트 part6까지 5월까지 전체적으로 하고 6월에 개인프로젝트 제작 예상 6월예정 개인 프로젝트 설계 정리 및 블로그에 개발과정을 포스팅할 예정 (api 명세서, db 설계과정 uml 등정리) + 강의로 들은 내용들을 직접 개인프로젝트에 적용해보면서 할예정(부족한부분은 강..
정보처리기사 실기 4/23일한동안 정보처리기사 실기 합격을 위해 강의를 잠시 멈추고(이래놓고 합격못하면 ㅠㅠ), 알고리즘 문제양을 줄여서 할예정이다. 기본 키 매핑 방법 직접 할당 @id만사용 자동생성(@GeneratedValue) IDENTITY : 데이터베이스의 위임, MYSQL SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, ORACLE @SequenceGenerator 필요 TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용 @TableGenerator 필요 AUTO: 방언에 따라 자동지정, 기본값 IDENTITY 전략 - 특징• 기본 키 생성을 데이터베이스에 위임 • 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용 (예: MySQL의 AUTO_ INCRE..
JPA에서 가장 중요한 2가지 객체와 관계형 데이터 매핑하기 영속성 컨텍스트 엔티티를 영구 저장하는환경 영속성 컨텍스트(persistence context) - 가장중요 엔티티의 생명주기 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 ```java Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); //영속 em.persist(member); ``` 영속(managed): 영속 컨텍스트에 저장된 상태 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된상태 ```java //회원 엔티티를 영속성 컨텍스트에 분리, 준영속 상태 em.detach(member); // 객체를..
1. 개미 군단 class Solution { public int solution(int hp) { int answer = 0; int[] atk = {5,3,1}; for(int i =0; i< atk.length; i++){ answer +=hp/atk[i]; hp%= atk[i]; } return answer; } } 문제를 보고 값이 정해져 있어 그리드 알고리즘을 적용하였다. 1. 개미들의 공격력인 atk 배열을 생성하다. 2. 배열을 반복하여 입력받는 체력 나눈 몫값인 개미들의 수를 answer 더한다. 3. 배열을 반복하면서 hp를 나머지를 구한다. 2. 모스부호(1) import java.util.HashMap; public class Solution { public String soluti..
오늘 어려웠던 문제 class Solution { public String solution(String my_string, String letter) { StringBuilder sb = new StringBuilder(my_string); int index; while((index = sb.indexOf(letter)) !=-1){ sb.delete(index, index + letter.length()); } return sb.toString(); } } StringBuilder의 "indexOf" 메소드를 이용하여 "letter"가 존재하는 위치를 찾고 "delete 메소드를 이용하여 해당 위치의 "letter"의 길이 만큼 제거 이과정을 "indexOf" 메소드가 -1을 반환할때 까지 반복하여 "..