간단 설명

평문 -> SHA-512 -> a~f 0~9랜덤으로 128자

SHA-512는 필연적으로 평문에 훼손이 간다. 즉 128자로 전환은 되는데 전환된 128자가 원래 평문으로 돌아갈 순 없다. 즉 복호화 못하게끔 조치를 취한 것이다. 이를 일방향 암호화라고 한다.

 

 

 

예시

 

자바에서 SHA-512를 구현하는 방법이다. utils 디렉터리 안에 CryptoUtil 클래스를 다음과 같이 만들어, 뭔가를 복호화 시키고 싶은 경우 해당 클래스의 hashSha512 메서드를 호출하면 된다.

 

 

 

 

 

솔트값을 복호화 시키고 싶다. 만약 해당 솔트값을 이메일 + 코드 + 랜덤소수 + 랜덤소수로 이뤘으면 한다, 이를 모두 복호화 하고 싶으면 이런식으로 복호화를 진행하면 된다.

설명

일대일(1:1) 관계에서는 주 테이블이나 대상이 되는 테이블 양쪽 모두 외래 키를 가질 수 있다. 때문에 일대일 관계를 적용할 때는 주 테이블과 대상이 되는 테이블, 어느 쪽에 외래키를 둘지 선택해야 한다.

 

 

 

단방향

 

엔터티가 두개인데, 여기서 LibraryCard에서 보면 LibraryMemeber를 변수로 가지는 owner가 일대일 관계임을 선언하는 조인 컬럼이다. @OneToOne 어노테이션을 설정한다.

 

 

 

 

값을 집어넣었다. fk 부분에 PK로 설정한 값이 넣어져 있는 것을 확인할 수 있다.

 

 

 

 

양방향

 

양방향 관계일 경우 다음과 같이 설정하면 된다.

'JPA' 카테고리의 다른 글

[JPA] JPA의 페이징 - Pageable  (0) 2024.11.26
[JPA] countQuery  (0) 2024.11.10
[JPA] 값 타입 (Value Object)  (0) 2024.02.26
[JPA] SQL 쿼리를 활용  (0) 2024.02.19
[JPA] 식별자 생성  (0) 2024.02.19

엔티티 타입 vs 값 타입

 

엔티티 타입

1. @Entity로 정의하는 객체

2. 식별자를 통해 지속적으로 추적이 가능해 값을 변경해도 식별자를 통해 같은 객체인지 인식 가능

3. 생성, 소멸, 영속 등의 생명 주기가 존재

4. 다른 객체에서 참조가 가능

 

 

값 타입

1. int, Integer, String 등 단순히 값으로 사용하는 자바 기본 타입이나 객체

2. 식별자가 없고 값만 존재하기 때문에 추적이 변경시 불가능

3. 생명주기를 엔티티에 의존. 의존하는 엔티티가 제거되면 함께 삭제

4. 공유하지 않는 것이 안전

 

 

 

 

예시

 

 

@Embedded : 값 타입을 사용하는 곳에 작성한다.

@Embeddable : 값 타입을 사용하는 곳에 작성한다.

 

둘 중 하나만 명시해도 되지만, 둘 다 적는 것이 좋다.

 

 

 

 

 

 

 

값이 정상적으로 저장되었다.

 

 

 

 

 

만약 테이블이 2개이고, 한 쪽이 다른 한 쪽을 참조 할 경우

 

 

 

 

 

 

@AttributeOverrides 와 @AttributeOverride 를 이용하여 속성과 (테이블과 컬럼)의 매핑 정보를 정의한다.

 

 

 

 

 

 

값이 정상적으로 등록되었다.

'JPA' 카테고리의 다른 글

[JPA] countQuery  (0) 2024.11.10
[JPA] @OneToOne, 일대일 관계  (0) 2024.02.26
[JPA] SQL 쿼리를 활용  (0) 2024.02.19
[JPA] 식별자 생성  (0) 2024.02.19
[JPA] 테이블에 데이터 넣기 테스트  (0) 2024.02.04

 

엔티티를 다음과 같이 설정한 후,

 

 

 

Enum으로 MemberRole (사용자 role)을 다음과 같이 설정한다. (Enum 은 해당 컬럼의 값이 저 값으로 제한을 하는 역할을 한다.)

 

 

 

 

@Query 어노테이션을 이용하여 조회, 수정 쿼리를 집어넣고, 해당 메서드를 실행하면 해당 쿼리를 실행하는 방식으로 진행하였다.

 

 

 

 

서비스 부분

 

 

 

서비스에서 만들어놓은 addMember() 메소드를 이용하여 값을 집어 넣고

 

 

 

 

생일 컬럼에 값을 집어넣기 위한 Date형 메서드를 만든다.

 

 

 

 

기타 다른 SQL 쿼리를 실행시킬 메서드 역시 다음과 같이 만들고 실행시키면 된다.

 

 

 

 

 

 

값을 집어넣은 경우

'JPA' 카테고리의 다른 글

[JPA] @OneToOne, 일대일 관계  (0) 2024.02.26
[JPA] 값 타입 (Value Object)  (0) 2024.02.26
[JPA] 식별자 생성  (0) 2024.02.19
[JPA] 테이블에 데이터 넣기 테스트  (0) 2024.02.04
[JPA] ORM (Object Relational Mapping)  (0) 2024.02.03

자동증가 컬럼을 지정하기 위해 @GeneratedValue 어노테이션을 쓴다.

 

 

이미 테스트를 하고, 값을 집어넣지 않았었는데, 그 다음 @Commit 어노테이션으로 값을 집어넣으면 1001이 아닌 1002로 값이 넣어진다. 값 넣기 실패를 해도 1이 자동으로 올라가기 때문이다.

'JPA' 카테고리의 다른 글

[JPA] 값 타입 (Value Object)  (0) 2024.02.26
[JPA] SQL 쿼리를 활용  (0) 2024.02.19
[JPA] 테이블에 데이터 넣기 테스트  (0) 2024.02.04
[JPA] ORM (Object Relational Mapping)  (0) 2024.02.03
[JPA] 시작  (0) 2024.02.03

 

JDBC 방식을 사용하기로 하였다. 먼저 Util에서 자바와 데이터베이스간의 연동을 시킨다.

 

 

 

 

DAO는 DB에 데이터를 저장하는 작업을 수행하는 객체다. insert 메서드에 Memo 엔티티를 파라미터로 넣어 해당 쿼리문안에 엔티티로 불러온 값들을 대조하여 쿼리를 실행시킨다.

 

 

 

 

 

서비스를 통해 Dao 로 쿼리문을 실행할 메서드를 만든다.

 

 

 

 

 

 

그리고 컨트롤러에 가서 서비스 객체를 불러온 후, 서비스 객체 안의 add() 메서드를 실행시킨다. 안에 메모 엔티티를 파라미터로 넣는 것 역시 필수

 

 

 

 

 

작성하면 DB에 추가되는 것을 볼 수 있다.

 

자바에서 JSONObject를 사용하기 위해 MVN에서 JSON in Java를 찾은 후 최신버전을 pom.xml의 dependences에 추가한다.

 

 

 

 

 

JSONOBJECT에 result 값을 추가한 후 POSTMAN으로 파라미터를 넣어 확인 결과, 다음과 같이 오브젝트 값을 받았다.

 

 

 

 

 

미디어타입을 이용한다면 해당 값이 오브젝트 값인지 확인시켜준다.

 

 

 

 

 

formData를 이용하여 xhr 요청으로 formData로 값을 넣고 전송하면 해당 주소에 파라미터로 전달된다.(반드시 name이랑 같은 이름으로 전송한다.) 그리고 응답한 결과는 역시 오브젝트 형식으로 { 'result' : 값 }.. 이를 바탕으로 값 결과를 나타낼 수 있다.

 

 

 

 

테스트 쪽에 메인 부분처럼 exam.entity 패키지를 만들고, 그 안에 BookRepositoryTest 자바 파일을 만든다.

패키지 밖에 RoastTest 자바 파일 역시 만든다.

 

 

 

 

테스트를 위한 RoastTest 클래스, @SpringBootTest 라는 어노테이션을 작성한다.

 

 

 

 

위의 RoastTest 클래스를 상속 받는 BookRepositoryTest. 이미 만든 BookRepository 클래스를 불러와서, 해당 메서드의 부모 메서드에서 상속받은 save() 메서드로 테스트를 해 본다.(데이터 추가 메서드). 다음과 같이 작성 후,  @Test 어노테이션을 설정한다. @Transactional 은 데이터를 집어 넣지 않고, 테스트 성공 여부만 알려주는 역할이다. @Commit은 그게 싫다면 데이터를 추가해주는 역할. 우클릭 후 Run As에 Junit test를 누르면 된다.

 

 

 

 

그 결과 테이블에 데이터가 추가되었다.

 

 

 

 

값을 불러오기 위해서는 findAll() 이라는 메소드를 쓴다. 모든 데이터를 List로 묶어 for문으로 출력한다.

 

 

 

 

그럼 다음과 같이 출력된다. ToString을 사용하지 않아 해당 데이터의 주소값이 뜬다.

 

 

 

 

그럴 경우 이미 만들어놓은 Book 엔티티 클래스에 ToString 어노테이션을 추가하고 다시 실행하면 데이터들이 불러와진다.

'JPA' 카테고리의 다른 글

[JPA] 값 타입 (Value Object)  (0) 2024.02.26
[JPA] SQL 쿼리를 활용  (0) 2024.02.19
[JPA] 식별자 생성  (0) 2024.02.19
[JPA] ORM (Object Relational Mapping)  (0) 2024.02.03
[JPA] 시작  (0) 2024.02.03

ORM (Object Relational Mapping)

객체구조와 테이블구조를 매핑시키는 기법

 

 

 

 

 

말 그대로 클래스와 테이블을 매핑하는 것, 해당 클래스가 해당 테이블임을 확인시켜주는 어노테이션들과 컬럼 어노테이션들을 다음과 같이 매핑하면 된다. 만약 속성명이 테이블의 컬럼명과 같을 경우 굳이 @Column 어노테이션을 설정하지 않아도 된다.

 

 

 

 

 

 

데이터를 삽입, 삭제, 조작 등을 할 수 있는 레포시토리 인터페이스, DAO 같은 역할을 한다.

'JPA' 카테고리의 다른 글

[JPA] 값 타입 (Value Object)  (0) 2024.02.26
[JPA] SQL 쿼리를 활용  (0) 2024.02.19
[JPA] 식별자 생성  (0) 2024.02.19
[JPA] 테이블에 데이터 넣기 테스트  (0) 2024.02.04
[JPA] 시작  (0) 2024.02.03

그 동안 MyBatis를 위주로 공부했고, 프로젝트도 MyBatis 기반으로 만들었다. JPA를 새로 배우기 시작했고, 아래는 Spring Boot 기본적인 셋팅을 완료하였다.

 

 

JPA(Java Persistence API) 란?

Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음

자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스

인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함

 

'JPA' 카테고리의 다른 글

[JPA] 값 타입 (Value Object)  (0) 2024.02.26
[JPA] SQL 쿼리를 활용  (0) 2024.02.19
[JPA] 식별자 생성  (0) 2024.02.19
[JPA] 테이블에 데이터 넣기 테스트  (0) 2024.02.04
[JPA] ORM (Object Relational Mapping)  (0) 2024.02.03

+ Recent posts