JPA 연관관계 매핑 - 단방향 연관관계
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 단방향 연관관계 예제 시나리오 회원과 팀이 존재한다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 객체를 테이블화한 모델링 객체 클래스 생성(Member) @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Column(name = "TEAM_ID") private Long teamId; ...getter/setter 생략 } 객체 클래스 생성(Te..
JPA 엔티티 매핑 - 요구사항 분석과 기본 매핑 (실전 예제)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 요구사항 분석과 기본 매핑 요구사항 분석 회원은 상품을 주문할 수 있다. 주문 시 여러 종류의 상품을 선택할 수 있다. 도메인 모델 분석 회원 - 주문 : 회원은 여러 번 주문할 수 있다 - 일대다 주문 - 상품 : 주문할 때 여러 상품을 선택할 수 있고, 같은 상품도 여러 번 주문될 수 있다. 주문 상품이라는 모델을 만들어서 다대다 관계를 일대다, 다대일 관계로 만든다. 테이블 설계 엔티티 설계 엔티티 클래스 생성(실습) Member @Entity public class Member { @Id @GeneratedValue @Column(name="MEMBER_ID") private ..
JPA 엔티티 매핑 - 기본 키 매핑
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 기본 키 매핑 기본키의 경우엔 직접 할당과 자동생성 방법이 있다. 직접 할당은 여태 써온 @Id 애노테이션을 사용하면 된다. 직접 할당 @Id // Member.class @Id private Long id; // 실행 클래스 ...생략 Member member = new Member(); member.setId(1000L); // 기본키 직접 할당 member.setUsername("B"); ...생략 이렇게 개발자가 직접 PK 값을 할당해주는 경우 @Id만 사용하면 된다. 자동 생성(@GeneratedValue) 자동 생성의 경우 IDENTITY, SEQUENCE, TABLE, AU..
JPA 엔티티 매핑 - 필드와 컬럼 매핑
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 필드와 컬럼 매핑 @Column 컬럼을 매핑할 때 사용한다. name 속성 필드의 이름과 DB 테이블 컬럼의 이름이 다를 시 사용된다. 필드와 매핑할 테이블의 컬럼 이름을 적어주면 된다. 만약 필드의 이름과 매핑 할 DB 컬럼의 이름이 같으면 생략하면 된다. @Column(name = "name") private String username; insertable, updatable 속성 해당 필드에 변경이 생겼을 때 이 컬럼의 변경된 내용을 INSERT 혹은 UPDATE 할거냐는 속성이다. 즉 등록, 변경 가능 여부를 설정하며 기본값은 TRUE이다. @Column(name = "name..
JPA 엔티티 매핑 - 객체와 테이블 매핑, 데이터베이스 스키마 자동 생성
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 객체와 테이블 매핑 대표적인 엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 주의! 기본 생성자가 필수(접근제한자는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 불가 저장할 필드에 final 사용 불가 JPA는 엔티티 객체를 생성할 ..
JPA 영속성 관리 - 내부 동작 방식 준영속 상태
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 준영속 상태 영속 상태가 되는 방법 em.persist() - 저장 find() - 조회 준영속 준영속 상태란 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)된 것을 준영속 상태라 한다. 준영속 상태가 되면 영속성 컨텍스트가 제공하는 기능(변경 감지 등..)을 사용하지 못한다. 준영속 상태로 만드는 방법 em.detach(entity) : 특정 엔티티만 준영속 상태로 전환 // 영속 Member member = em.find(Member.class, 150L); member.setName("AAAAA"); // 준영속 em.detach(memb..
JPA 영속성 관리 - 내부 동작 방식 플러시
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 플러시(flush) 플러시란 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것을 말한다. Transaction commit이 일어날 때 flush가 동작하면서 쓰기 지연 SQL 저장소에 담아놨던 SQL들이 DB에 전달된다. 그러면서 영속성 컨텍스트의 변경 사항들이 DB에 동기화된다. 플러시 동작 과정 변경 감지(Dirty Checking) 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송(등록, 수정, 삭제 쿼리) ! flush == commit()이 아니다. flush -> commit()이 맞는 표현이다. 영속성 컨텍스..
JPA 영속성 관리 - 영속성 컨텍스트
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. JPA 영속성 관리 - 영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 이 전 포스팅에서도 얘기했었는데 다시 짧게 말해보자면.. EntityManagerFactory EntityManager를 생성 EntityManager 내부적으로 DB 커넥션 풀을 사용해서 DB를 사용하게 된다. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어로, '엔티티를 영구 저장하는 환경'이라는 뜻이다. 이전 포스팅에서 DB에 데이터를 저장하기 위해 em.persist(객체) 코드를 사용했었는데 사실 DB에 바로 저장하는게 아니라 엔티티 매니저를 통해 엔티티를 영속성 컨텍스트라는 곳에 저장한다. 전에..
JPA 시작하기 - Hello JPA 시작하기 (프로젝트 생성 및 개발)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. Hello JPA 프로젝트 생성 Language : JAVA 8 이상(8 권장) DB : H2 Database - http://www.h2database.com/ 최고의 실습용 DB 가벼움 (1.5M) 웹용 쿼리툴 제공 MySQL, Oracle DB 시뮬레이션 기능 시퀀스, AUTO INCREMENT 기능 지원 Build Tool : Maven 자바 라이브러리, 빌드 관리 라이브러리 자동 다운로드 및 의존성 관리 최근에는 그레이들(Gradle)을 많이 사용하지만 강의에서는 아직도 Maven을 많이 사용하기 때문에 Maven으로 진행 IntelliJ에서 프로젝트 생성 pom.xml dep..
JPA 소개
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. JPA 소개 JPA란? Java Persistence API의 줄임말이다. 자바 진영의 ORM 기술 표준이다. Object-relational mapping(객체 관계 매핑) 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다. ORM 프레임워크가 중간에서 매핑 대중적인 언어에서는 대부분 ORM 기술이 존재한다. JPA는 애플리케이션과 JDBC 사이에서 동작한다. 동작 과정 JAVA 애플리케이션에서 JPA API 호출 JPA는 JDBC API 호출 JDBC는 SQL 생성 또는 실행 DB에서 결과를 반환 받음 JPA 동작 - 저장 이 동작 과정에서 제일 중요한 부분..
[React.js] React에서 리스트 사용하기 1 - 리스트 렌더링 (조회)
·
공부/React.js
React 게시글은 대부분 인프런의 '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지' 강의를 기반으로 내용을 정리했습니다. React에서 리스트 사용하기 1 - 리스트 렌더링 (조회) 바로 전에 만든 다이어리는 저장 버튼은 있지만 실제로 DB에 저장하거나 하진 않았다. 이번에는 배열을 이용하여 React에서 LIST를 렌더링하고 개별적인 컴포넌트로 만들어보자. (일반적으로 리액트를 사용하면 배열로 피드, 게시글, 리스트를 표시하는데 자주 사용한다.) 저장된 리스트를 보여줄 DiaryList.js를 생성한다. const DiaryList = () => { return ( 일기 리스트 ) }; export default DiaryList; App.js import './App.css'..
VSCode Prettier 자동 포맷팅 설정 방법, 설치 후 자동 정렬이 되지 않을 때
·
공부/React.js
리액트 강의를 듣던 도중.. 강사님은 코드를 대충 이상하게 쓰고 저장을 누르면 코드들이 이쁘게 자동 정렬이 되는데 아니 나는 왜 안될까?! 강사님이 prettier를 설치하면 된다그랬는데 나도 분명히 설치했건만 나는 저장을 아무리해도 자동 정렬이 되지 않았다. 그래서 설정 부분이 이상한가 싶어서 검색해봤다. Prettier 설치 확인 설치가 된 걸 확인할 수 있다. Editor format on save 설정 확인 VSCode 하단의 설정 아이콘을 누른 뒤 설정을 클릭 editor format on save 입력 후 하단 설정에서 체크 표시가 되어있는지 확인!! 나는 체크 표시가 되어있었다. Editor Default Formatter 설정 확인 Editor Default Fomatter 검색 후 Pre..
[React.js] React에서 DOM 조작하기
·
공부/React.js
React 게시글은 대부분 인프런의 '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지' 강의를 기반으로 내용을 정리했습니다. React에서 DOM 조작하기 DOM을 조작해서 일기 저장 버튼을 클릭했을 때, 작성자와 일기가 정상적으로 입력되었는지 확인하고 아니라면 focus를 주는 기능을 만들어보자. 일단 작성자 input과 일기 본문 textarea에 한 글자도 입력되지 않거나 5글자 미만으로 입력된 경우 저장 버튼을 눌러도 저장이 되지 않는 코드를 작성하자. const handleSubmit =(e) => { if(state.author.length < 1) { alert("작성자는 최소 1글자 이상 입력해주세요."); return ; } isFinite(state.content...
[React.js] React에서 사용자 입력 처리하기
·
공부/React.js
React 게시글은 대부분 인프런의 '한입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지' 강의를 기반으로 내용을 정리했습니다. React에서 사용자 입력 처리하기 새로운 프로젝트를 만들자. npx create-reace-app simplediary 불필요한 파일은 삭제한다. 삭제한 파일과 관련된 코드들을 지운다. App.js import './App.css'; function App() { return ( 일기장 ); } export default App; index.js import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; const..
[Nexacro] 넥사크로 N + SpringBoot 연동하기 2 - 프로젝트 설정 및 연동
·
공부/넥사크로
Uiadapter 넥사크로의 Uiadapter를 사용하려고 gradle을 통해 라이브러리를 다운하려 했지만 아직 자사의 Nexus 서버가 불안정해서 Gradle을 통한 자동 다운은 못한다고 한다.. - 20220509 기준 그래서 플레이넥사크로에서 다운해야 한다. 해당 게시글 제일 하단에 라이브러리 파일들이 있다. 다운하고 압축 푼 다음에 프로젝트 최상위 경로에 'libs' 폴더를 만들고 압축 푼 라이브러리 파일들을 옮겨주자. 그리고 맨 위에 있는 nexacro-xapi-java-1.0.0.jar 파일은 기술지원센터에서 따로 받아야된다. 저거 없으니까 설정할 때 에러남; 참고로 파일을 다운하기 위해 로그인이 필요하다. 대메뉴 Product > Nexacro N > Download > Server [API..