1. 책을 접하게 된 계기 최근에 '행복이란 어디에서 오는 것인가.' 계속 고민하고 있었는데 우연히 '마흔에 읽는 쇼펜하우어'라는 책을 접하게 되었다. 이 책에서 어느정도 해답을 얻을 수 있지 않을 까 싶어 바로 구매했다. 그 동안, 행복이란 안정감에서 온다고 생각했다. 안정감은 어디에서 오는 것 인가. 매슬로우의 욕구 5단계가 다 채워져야 안정감을 얻을 수 있는 것인가. 인간은 이 5단계 욕구를 채우기 위해 살아가는 것인가. 하나라도 구멍이 나면 인간은 계속해서 욕구를 좇아 부단히 노력하며 살아야 하는 가. 어느 순간 그런 생각이 들었다. 안정감에는 조건이 따라붙는다. 인생에서 욕구 충족을 위한 조건은 변하기 마련이다. 풍족하진 않아도 식욕을 채우기 걱정없는 삶이었는데, 경제적인 문제 또는 건강상의 문..
1. 객체를 테이블에 맞춰 데이터 중심으로 모델링 했을 때 이 방식으로 모델링을 하면 객체지향과 거리가 멀어진다. 왜 객체의 참조와 외래키를 매핑해야되는지 예시를 보며 이해해보자. Member와 Team은 N:1 관계라고 하자. ✅Memberpackage hellojpa;import jakarta.persistence.*;import lombok.Getter;import lombok.Setter;@Entity@Getter@Setterpublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String usernam..
🤔DB 연결 오류 문제이전 강의까지는 계속 jdbc:h2:tcp://localhost/~/test로 접속했었다.접속 오류가 없었어서 무난히 강의를 듣던 중, 강사님을 따라 해봐도 jpashop 데이터 베이스 접속이 안되는 문제 발생!강사님은 이렇게 persistence.xml 파일에 url 마지막 주소값을 jpashop으로만 바꾸고 H2 콘솔에서 url을 그대로 치니까 접속이 잘됐다. 그런데 나는 아래와 같이 접속 에러가 나는 게 아닌가ㅠㅠㅠ 일단 에러를 보니 Database에 jpashop을 찾을 수 없다고 뜬다. 💡원인을 파악해보니 h2 1.4.198 이후 버전은 데이터베이스를 자동 생성해주지 않기 때문에 직접 데이터베이스를 생성해줘야한다고 한다. 다른 블로그 글을 참고해서Generic H2 (..
1. 직접 할당@Id만 사용한다. ✅예시@Idprivate String id; 2. 자동 생성@GeneratedValue 애노테이션과 strategy 속성으로 GenerationType을 세팅해야한다.타입 종류설명IDENTITY기본키를 자동으로 증가시킨다. SEQUENCEDB 시퀀스를 사용하여 기본키를 생성한다. @SequenceGenerator를 사용하여 시퀀스를 정의해야한다.ex) Oracle, PostgreSQL, DB2, H2, MariaDB, SQL Server 사용가능TABLE별도의 키 생성용 테이블을 사용하여 기본키 값을 생성한다. @TableGenerator를 사용하여 테이블을 정의해야한다.모든 DB에 적용이 가능하다.AUTO방언(DB 문법)에 따라 자동 지정, 기본값이다.✔️ IDENTI..
1. 필드와 컬럼 매핑 예제1) Member 클래스package hellojpa;import jakarta.persistence.*;import lombok.Getter;import lombok.Setter;import java.util.Date;@Entity@Table(name="member")@Getter@Setterpublic class Member { @Id private Long id; @Column(name = "name") //객체명은 username인데, DB 컬럼명은 name일때 private String username; private Integer age; @Enumerated(EnumType.STRING) //사용자를 회원과 관리자로 구분한다. ENU..
데이터 스키마 자동 생성의 속성persistence.xml 설정 파일에 가보면 데이터 스키마 자동 생성 옵션이 있다. (현재 프로젝트 maven 기준) * 속성 종류옵션설명운영서버개발 초기 단계테스트 서버create기존 테이블 삭제(DROP) 후 다시 생성(CREATE)XO create-dropCREATE 후 종료시점에 테이블 DROPX update변경된 내용만 반영XOO (비권장)validate엔티티와 테이블이 정상 매핑 되어있는지만 확인O Onone사용하지 않음(옵션 자체를 주석처리 해도 됨)O 운영 장비에는 create, create-drop은 데이터가 다 날아가니까 절대 사용하면 안된다.운영서버에 update를 하면 안되는 이유는 대량의 데이터를 가진 시스템에 자동으로 ALTER 명령어를 날..
@Entity- JPA가 관리하는 엔티티 클래스 - JPA를 사용해서 테이블과 매핑할 클래스는 무조건 @Entity를 써야한다. ⭐기본 생성자가 필수다.(파라미터가 없는 생성자)JPA는 기본 생성자를 통해 객체를 생성한 후, 각 필드에 값을 세팅한다. ⭐final, enum, interface, inner 클래스를 사용할 수 없다.-> JPA는 엔티티 객체를 독립적으로 관리하고 인스턴스화가 가능해야한다. ▪️ JPA는 엔티티 객체를 상속받아서 프록시 객체를 생성한다.final 클래스는 상속을 받을 수 없으므로 사용할 수 없다 ▪️ enum는 고정 상수 집합으로 개별 인스턴스를 가지지 않기 때문에 사용할 수 없다. ▪️ interface는 인스턴스화를 할 수 없기 때문에 사용 불가▪️ inner 클래..
⭐영속성 컨텍스트: 엔티티를 영구 저장하는 환경 지난 포스팅에서 회원을 등록할 때EntityManger.persist(entity) 를 이용해서 멤버를 DB에 저장했었다. 그런데 이 개념은 정확히 말하자면,엔티티를 DB에 저장한다는 것이 아니라 '엔티티 매니저를 통해 영속성 컨텍스트에서 관리되는 상태로 넘어간다'라는 개념으로 봐야한다. 영속성 컨텍스트는 논리적 개념이다. 1. 영속성 컨텍스트 상태1) 비영속객체를 생성만 한 상태Member member = new Member();member.setId("member1");member.setUsername("회원1"); 2) 영속객체를 저장한 상태Member member = new Member();member.setId("member1");member.s..