전체 글 94

Hello JPA - 애플리케이션 개발

JPA 구동 방식 Persistence 클래스가 META-INF/persistence.xml 설정정보를 조회한다. 이를 사용해 EntityManagerFactory 클래스를 만든다. JPA 동작을 위한 EntityManager를 생성하여 실행한다. JPA 구현체에 따라 DB 커넥션 풀도 설정한다. 트랜잭션 추가 X //회원 등록 EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello"); EntityManager entityManager1 = entityManagerFactory.createEntityManager(); Member member1 = new Member(); member1.setId(..

== 와 .equals() 차이

[백준 1991] 트리순회 [백준 1991] 트리순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 eggmomo.tistory.com 저번에 풀었던 [백준 1991] 트리순회 문제를 풀면서 궁금증이 생겼다. BufferedReader로 받아온 String을 char 자료형으로 변환하는 것이 귀찮아서 Node 클래스의 name 필드 자료형을 String으로 지정하여 풀었는데, static void addNode(Node node, String head, String left, String right) { ..

Hello JPA - 프로젝트 생성

데이터베이스 방언 각각의 DB가 제공하는 SQL문법과 함수에는 차이가 존재한다. MySQL과 Oracle의 가변문자가 다르고, 문자열 자르는 함수 등이 그렇다. 이 때 SQL 표준을 지키지 않는 특정 DB만의 고유한 기능을 DB방언이라고 한다. JPA는 이런 특정 DB에 종속되지 않는다. 따라서 별도 Dialect 설정을 해주면 JPA가 DBMS에 맞는 쿼리를 직접 작성하고 실행해준다. https://www.inflearn.com/course/ORM-JPA-Basic/dashboard 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를..

JPA 소개

ORM( Object Relational Mapping )이란 객체 관계 매핑 객체 ↔ RDB 간 패러다임의 불일치를 해결할 수 있다. 객체는 객체대로, RDB는 RDB대로 설계 한다. 그 과정을 프레임워크가 중간에서 매핑한다. JPA는 자바 진영의 ORM 표준이다. 저장 프로세스 Entity 객체 저장을 요청한다. JPA가 Entity 에 대해서 분석하고 INSERT SQL문까지 생성해준다. JDBC API를 사용해 INSERT 쿼리를 날려 DB에 저장 패러다임 불일치 해결 조회 프로세스 id를 통해 Entity 객체를 찾아달라고 요청한다 JPA가 SELECT SQL문을 생성해준다. JDBC API를 사용한다. ResultSet을 매핑해준다. Entity 객체를 반환한다. 패러다임 불일치 해결 JPA ..

SQL 중심적인 개발의 문제점

객체를 RDB에 저장하고 관리하는 요즘 이를 보관하고 관리하기 위해서는 SQL을 알아야 한다. 무한반복, 지루한 코드.. 자바 객체를 SQL로 바꾸고 SQL을 자바 객체로 바꾸고를 무한 반복 새로운 필드를 추가하는 등 변경사항이 생기면 또 쿼리문을 다 고쳐야 함 즉, SQL에 의존하는 개발을 할 수 밖에 없게 된다. 패러다임의 불일치 객체와 RDB의 테이블이 완전히 일치하지 않는다. 객체를 RDB에 저장하려면 객체데이터를 SQL로 바꾼다 SQL로 RDB에 전달한다 이 과정을 개발자가 한다. (SQL mapper) 객체와 RDB의 차이 4가지 상속 연관관계 데이터 타입 데이터 식별방법 상속 Item 클래스를 상속받는 Album 클래스가 있다고 가정하자. 객체에는 상속관계가 있다. DB 테이블에는 상속이라는..

강좌 소개

JPA(Java Persistence API) 발전 순서 순서 JDBC jdbcTemplete, MyBatis JPA jdbcTemplete, MyBatis 까지는 개발자가 직접 SQL문을 작성해야 했지만 JPA로 인해 그 과정조차 한 줄로 생략 가능하게 된다. JPA가 실무에서 어려운 이유 SQL도 안 짜도 되어서 편해 보이지만, 실제 실무의 경우 수십 개 이상의 복잡한 객체와 테이블 복잡하게 얼혀서 사용되기 때문에 어렵다. 앞으로 강의를 통해 배울 내용 객체와 테이블 제대로 설계, 매핑하는 방법 기본 키와 외래 키 매핑 결국 어떠한 복잡한 시스템도 JPA로 설계 가능하도록 목표 - JPA 내부 동작방식 이해 JPA 내부 동작 방식을 이해하지 못하고 사용하면 디버깅 오래ㅐ 걸리고 장애상황 대처 불가능 ..

User 삭제 시 FriendList에서 사라지지 않는 이슈

다음과 같이 두 User 가 있다고 할 때 User “페이버222”를 User “페이버111”의 Friend로 추가 (UserFriend) 하지만 User “페이버222”를 삭제해도 User “페이버111”의 friendList에서 사라지지 않는 이슈가 있었다. 다른 매핑된 도메인 사이에서는 Cascade가 잘 일어났지만 User와 Friend 도메인 사이에서는 그렇지 않았다. 이는 어플의 기획에 의한 Friend의 특수함 때문이다. Friend는 boolean 필드 isUser 에 의해서 사용자가 다른 사용자를 친구로 추가한 FriendUser인지 직접 생성한 friend인지 구분된다. User A가 User B를 친구로 추가해 자신의 friendList에 추가해도 User B의 DB에는 아무 변화가 ..

StringTokenizer

StringTokenizer는 공백, 탭, 새 줄 등의 구분자( \n, \t, \r, \f )를 기준으로 String을 나눌 때 사용하는 클래스이다. nextToken() nextToken()은 StringTokenizer 에서 다음 토큰을 불러오는 메서드이다. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stk = new StringTokenizer(br.readLine()); System.out.print(stk.nextToken()); System.out.print(stk.nextToken()); System.out.print(stk.nextToken()); input output A..

[백준 1991] 트리순회

https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파 www.acmicpc.net import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static Node rootNode = new Node('A', null, null); static class Node{ c..

[Solved]/BOJ 2023.03.25

좌표 정렬

Primitive Type (기본 자료형)은 부등호를 사용하면 간단하게 비교할 수 있었다. 하지만 어떤 기준에 따라 객체를 비교하게 된다면 부등호를 사용할 수는 없다. 아래 문제와 같이 좌표상의 점의 x, y좌표를 기준으로 정렬해야하는 경우가 그렇다. x좌표를 기준으로 오름차순 정렬하되 x좌표가 동일하다면 y좌표를 기준으로 오름차순 정렬하고자 한다. 이럴 때 사용하는 것이 Comparable Interface이다. 사용 방법은 다음과 같다. List 정렬 위한 Collections.sort(List)를 사용한다. 여러 필드를 가진 객체를 비교하기 위해 Comparable 를 implements 한다. 이후 compareTo를 Override 해 return 값으로 sort할 수 있도록 한다. import..