분류 전체보기 174

[JPA] 8. 데이터베이스 스키마 자동생성

테이블 매핑, 기본키 매핑, 일반 필드와 컬럼의 매핑까지 완료되었다. 이런 매핑의 설정을 통해 데이터베이스의 스키마를 자동생성을 할 수 있다. 데이터베이스 스키마 자동생성 기능은 JPA이전에 Hibernate에서부터 되었다. 이를 사용하기 위해 내 기준으로는, application.yml(Gradle)나 properties.xml(Maven)에 자동생성을 추가시켜주었다. Maven jpa: hibernate: ddl-auto: update #create update none Gradle 'DDL(데이터 정의어)를 자동으로 사용할 것인가' 라는 뜻으로 직역된다. 사실 말의 의미는 이게 다 라는 생각이 들었다. 실제로 시사하는 바가 무엇이냐 하면, 지금까지 공부한 것을 기준으로는 그게 전부인 것 같다. 하지..

[JPA] 7. 필드와 컬럼 매핑

테이블 자체를 매핑했다면, 테이블 내에 있는 컬럼을 필드와 매핑해주어야 한다. 이를 위해 사용하는 몇가지 어노테이션부터 정렬해보자면, @Column 일반적인 데이터베이스의 컬림 명시 @Temporal 자바의 Time, Date, TimeStamp을 매핑한다. (요즘은 LocalDate, LocalDateTime을 사용하기에 잘 쓰지 않는다. . ) @Enumrated enum타입을 쓸 때, 그 값을 어떻게 저장할지 정해준다. @Lob 사이즈가 매우 큰 문자열 저장에 쓰인다. @Transient 해당 자바 변수를 매핑하고 싶지 않을 때 쓴다. 이렇게가 존재한다. 표에 다 적긴 힘들어서 하나씩 부연설명을 적어야 할 것 같다. @Column : 기본적인 컬럼 매핑에 사용한다. 즉, 이게 적혀있다면 데이터베이스..

[JPA] 6. 기본키 매핑

엔티티를 만들어서 @Entity, @Table만 매핑을 한다면 에러가 발생한다. 이유는 테이블엔 무조건 기본키가 존재해야 하기 때문이다. 이 기본키는 쉽게 @Id라는 어노테이션으로 등록시킬 수 있다. @Id만 존재한다면 기본키를 직접 입력시켜주어야 한다. 하지만, 다른 입력되는 값들, 연산되는 값들과 다르게 기본키는 다른 값을 통해서 사용하거나, 다른 값을 가져와 사용하면 안된다. (주민등록번호나 전화번호같은 경우에도 사람마다 다르겠지만, 사용하는 걸 권장하는 곳은 없다. ) 그렇기 때문에 기본키 자체의 생성방식을 설정시켜준다. 이를 @GeneratedValue(strategy = GenerationType.????)처럼 작성해 생성방식을 명시해준다. ???? = IDENTITY 데이터베이스에게 기본키 ..

[JPA] 5. 테이블 자체의 어노테이션에 대하여

@를 붙여 매핑시키는 것을 어노테이션이라고 한다. 이를 이용해 테이블엔 어떤 것을 매핑시킬까? @Entity, @Table을 주로 사용한다. 각 어노테이션이 무슨 용도로 쓰이는지 알아야 한다. @Entity : JPA가 관리하는 객체, 즉 엔티티임을 명시해주는 용도이다. 클래스 내에 기본 생성자가 필수적으로 있어야 한다. final, enum, interface, inner에는 사용할 수 없다. 저장할 필드에 final을 사용하지 않는다. (그냥 private을 쓰는게 일반적인 것 같다. ) @Table : 객체가 이미 데이터베이스에 존재하는 테이블과 매핑을 할 경우, 그 테이블을 지정해주는 역할을 한다. @Table이후 괄호를 이용해 (Name = "~~", Catalog = ~~~)의 방법으로 추가로..

[JPA] 4. 객체를 데이터베이스와 매핑시키기 - 엔티티 매핑

객체-관계형 데이터베이스를 매핑시키는 프레임워크인 JPA를 쓰는 것이 좋은 이유들에 대해 알아보았다면, 이젠 정말로 어떻게 매핑을 시킬지 알아야 한다. 이론을 배워도 기술을 쓰기 위핸 기술을 배워야 한다! 객체-관계형 데이터베이스를 매핑시켜주는 방법은, 관계형 데이터베이스의 구조를 간단하게 봐야 할 필요가 있다. 객체(Entity)를 만들 때, 객체에 매핑을 해서, 객체 클래스를 하나의 테이블로 만들 수 있다. 객체 테이블 @Entity, @Table 필드와 컬럼 @Column, @Temporal, @Enumarted, @Lob, @Transient 기본키 @Id, @GeneratedValue 연관관계 매핑(외래키) @ManyToOne, @OneToMany, @ManyToMany, @JoinColumn ..

[JPA] 3. JPA의 중요성 - ORM, Persistence Context

ORM을 위해 JPA를 쓴다는 것 까지는 이해했다. 하지만, 그 외에도 영속성 컨텍스트라는 중요한 개념이 존재한다. 영속성 컨텍스트는 객체의 상태에 관한 것이다. 객체는 데이터베이스에 저장되었는가, 아닌가로 구분된다기 보단, 생명주기와 관련되어 있다. 영속성 컨텍스트 : 엔티티 자체를 영속화시킨다(DB에 저장된다는 것과는 조금 다른 개념이다) 객체가 영속화되었는가 아닌가를 기준으로 판단되며, 영속화된다는 것은 데이터베이스에 저장된다는 것과 동일한 개념은 아니다. 엔티티의 생명 주기를 통해 영속성에 관해 이야기를 한다. 비영속상태 영속성 컨텍스트와는 상관없는 새로운 상태의 객체 영속 상태 비영속상태의 객체를 영속화 시킨 상태 준영속 상태 영속성 컨텍스트에서 객체를 빼낸 상태 삭제 상태 객체 자체를 삭제시킨..

[JPA] 2. 그러면 JPA는 또 무엇일까?

JPA : Java Persistance API 직역하자면 자바 영속성 API이다. ORM은 객체와 관계형 데이터베이스의 매핑이라고 한다면, JPA는 자바에서 사용하는 ORM 프레임워크라고 생각하면 된다. 자바 애플리케이션(우리가 코딩해서 만든 프로그램)과 JDBC API 사이에 존재한다. JPA의 기능은 객체를 분석한다. Create, Read, Update, Delete등에 맞게 sql문을 만들어준다. JDBC API를 사용한다. ResultSet 매핑 객체 지향 프로그래밍과 관계형 데이터베이스의 패러다임 차이점을 극복시켜준다. 이를 통해 우리는 이러한 JPA를 통해 현대에 가장 자주 사용하는 관계형 데이터베이스를 이용해 객체지향 프로그래밍을 할 수 있다. 즉, SQL에 중점을 두고 개발하던 상황에서..

백준 2206번: 벽 부수고 이동하기

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net Source Code : https://github.com/JangAJang/Algorithm/blob/main/백준_그래프와%20순회/벽%20부수고%20이동하기/src/Main.java 처음에 간단한 BFS문제로 알고, 코드를 바로 구상할 수 있었다. 근데 틀렸다고 나왔다. 틀린 코드 : https://github.com/JangAJang/Algorithm/blob/ma..

개발공부/백준 2022.10.17

백준 1697번: 숨바꼭질

https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net Source Code: https://github.com/JangAJang/Study/blob/main/백준_그래프와%20순회/숨바꼭질/src/Main.java 이전에 풀었던 BFS와 똑같이 큐로 접근해야겠다는 생각이 들었다( 이전 bfs문제에서 배열을 쓰다가 시간 낭비가 상당했다) 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤..

개발공부/백준 2022.10.15

백준 2178번: 미로 탐색

https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net Source Code : https://github.com/JangAJang/Study/blob/main/백준_그래프와%20순회/미로%20탐색/src/Main.java 요약 : BFS를 쓸 때, 갈 일이 없는 노드를 가지 않음으로 시간소요를 줄일 수 있다. (반복문 -> Queue를 이용해 계산 필요 없는 노드 제거) BFS문제이다. 학교에서 배운 BFS의 이론에선 1. 같은 레벨의 노드들을 먼저 확인한다. 2. 이후에 리프 노..

개발공부/백준 2022.10.14