분류 전체보기 161

[자바 개념] 정규표현식, Pattern

1. 개념 문자열이 정해져 있는 형식(정규 표현식)으로 구성되어 있는지 검증해야 하는 경우에 사용하는 것 2. 정규표현식 문법 Regular Expression Description ^ 문자열의 시작 $ 문자열의 끝 . 임의의 문자 1개를 의미 * 문자가 0번 이상 반복 + 문자가 1번 이상 반복 ? 문자가 0번 혹은 1번 Regular Expression Description [ ] 문자의 집합 범위를 의미 [0-9] 숫자 0부터 9 [a-z] 알파벳 a부터 z [a-zA-Z] 알파벳 a부터 z + 알파벳 A부터 Z [a-zA-Z0-9] 알파벳 a부터 z + 알파벳 A부터 Z + 숫자 0부터 9 [^a-z] 알파벳 a부터 z가 아닌 것 (앞에 ^ 가 붙어있을 경우 not을 의미) Regular Expr..

자바 2023.02.10

[JPA] 기본 키 매핑

1. 기본 키 직접 할당 전략 1) 개념 기본 키를 애플리케이션에서 직접 할당하는 것 2) 방법 @Id로 매핑 3) 특징 em.persist() 하기 전에 애플리케이션에서 기본 키를 직접 할당, 만약 식별자 값 없으면 예외 발생 2. IDENTITY 전략 1) 개념 기본 키를 자동 생성하는데, 생성을 데이터베이스에게 위임 2) 방법 @ID와 @GeneratedValue의 GenerationType.IDENTITY 사용 3) 특징 데이터베이스에 값을 저장하고 나서야 기본 키 값을 구할 수 있을 때 사용 JPA는 기본 키 값을 얻어오기 위해 데이터베이스를 추가로 조회 JDBC3에 추가된 Statement.getGeneratedKeys()를 사용하면 데이터를 저장하면서 동시에 생성된 기본 키 값도 얻어 올 수..

Spring/jpa 2023.02.10

[JPA] 영속성 관리

1.영속성 컨텍스트 1) 개념 엔티티를 영구 저장하는 환경 2) 특징 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다 엔티티를 식별자 값으로 구분해서 식별자 값이 반드시 있어야 한다 여기서 식별자란 @Id로 테이블의 기본 키와 매핑한 값을 의미한다 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다 => 플러시 3) 장점 1차 캐시 개념 영속성 컨텍스트는 내부에 캐시를 가지고 있는데 이것을 1차 캐시라고 한다. 영속 상태의 엔티티는 모두 이곳에 저장되는데, 저장될 때 @Id와 엔티티 인스턴스가 함께 저장된다. 작동 em.persist(member)를 하면 1차 캐시에 회원 엔티티가 저장되고, 데이터베이스에는 저장..

Spring/jpa 2023.02.09

[JPA] 엔티티 매니저 팩토리, 엔티티 매니저, 트랜잭션

1. 엔티티 매니저 팩토리 1) 개념 엔티티 매니저를 만드는 공장 2) 특징 JPA를 시작하려면 persistence.xml의 설정 정보를 사용해서 엔티티 매니저 팩토리를 생성해야 함 이때 Persistence 클래스를 사용함. 이 클래스는 persistence.xml에서 이름이 ""인 영속성 유닛을 찾아서 엔티티 매니저 팩토리를 생성해서 JPA를 사용할 수 있게 준비함 엔티티 매니저 팩토리 생성 비용이 큼. persistence.xml에서 설정정보를 읽어서 jpa동작시키기 위한 객체를 만들고, jpa 구현체에 따라서는 데이터베이스 커넥션 풀도 생성하기 때문. 따라서, 엔티티 매니저 팩토리는 애프리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 함. 여러 스레드가 동시에 접근해도 안전하므로 서로 ..

Spring/jpa 2023.02.09

[JPA] persistence.xml

1. 개념 jpa는 persistence.xml을 사용해서 필요한 설정 정보를 관리한다. 2. 위치 resources - META-INF - persistence.xml 3. 내용 4. 데이터베이스 방언 JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 특정 데이터베이스만의 고유한 기능이나 SQL 표준을 지키지 않는 것을 JPA에서는 방언이라고 하는데, 하이버네이트를 포함한 대부분의 JPA 구현체들은 이런 문제를 해결하려고 다양한 데이터베이스 방언을 제공하기 때문이다. 따라서, 데이터베이스가 변경되어도 애플리케이션 코드를 변경할 필요가 없이 데이터베이스 방언만 교체하면 된다. 5. hibernate.hbm2ddl.auto 1) 개념 테이블 자동생성 기능 2) 속성 create 기존 테이블을 삭제하고..

Spring/jpa 2023.02.09

[JPA] 엔티티 설계 어노테이션

JPA는 매핑 어노테이션을 분석해서 어떤 객체가 어떤 테이블과 관계가 있는지 알아낸다 1. @Entity 1) 개념 데이터베이스에 있는 테이블과 매칭되는 클래스임을 알려주는 어노테이션 2) 속성 name jpa에서 사용할 엔티티 이름 지정 보통 기본값인 클래스 이름을 사용. 기본값: 클래스 이름 그대로 3) 특징 기본 생성자 필수 final 클래스, enum, interface, inner 클래스에는 사용할 수 없음 저장할 필드(컬럼명과 매칭되는 클래스 속성들)에 final 사용하면 안 됨 2. @Table 1) 개념 엔티티와 매핑할 데이터베이스에 있는 테이블을 지정 2) 속성 name 매핑할 테이블 이름 기본값: 엔티티 이름(클래스 명)을 사용 uniqueConstraints DDL생성 시에 유니크 제..

Spring/jpa 2023.02.08

[JPA] 초기 세팅

자바 ORM 표준 JPA 프로그래밍이라는 책으로 공부를 하고 있는데 이 책에서는 h2 db에 maven을 사용하지만 나는 my sql과 gradle을 사용하려고 한다. 일단, 추후에 다른 프로젝트를 진행할 때 my sql로 진행할 확률이 높을 것 같아서 이 기회에 이걸로 익숙해지는 것이 좋을 것 같다는 생각이 들었고, 예전에 프로젝트 할 때도 my sql로 했어서 익숙하다. 또한, gradle을 사용하는 이유도 역시 익숙함이 크고.. 약간 구글링을 해보니 gradle이 더 최신이라고 해서 나쁘지 않다고 생각했다. 1. 인텔리제이에서 스프링 이니셜라이즈를 이용해 기본 세팅을 한다 1) 자바, gradle, jar 선택 2) 의존성에서는 spring data jpa, lombok, mysql driver, ..

Spring/jpa 2023.02.08

[ICT 인턴십] 회고록 3 - 첫 번째 프로젝트

인턴십을 하게 된 기업에서는 웹 프론트엔드로는 vue, 백엔드로는 스프링, 앱 프론트엔드로는 flutter를 사용하고 있었다. 나는 spring을 배우고 싶었지만 프로젝트 배정이 내 마음대로 되지는 않았다. 그래서, 처음 맡게 된 프로젝트는 기존에 존재하던 웹프로젝트를 flutter로 바꾸는 프로젝트였다. 1. 프로젝트 시작하기 전 나의 마음가짐 처음에는 배우고 싶었던 내용이 아니어서 조금 아쉽긴 했다. 하지만, 상황을 바꿀 수는 없었기에 마음가짐을 다르게 먹고자 하였다. 먼저, 앱 프론트엔드를 내가 이때 아니면 언제 접해볼까?라는 생각을 가졌다. 이런 경험을 통해 앱을 만들 수 있는 능력을 기를 수 있을 것이라는... 또한, 프론트엔드를 이해할 수 있는 좋은 기회가 될 것이라는 생각을 가졌다. 백엔드 ..

기록 2023.02.07

[JPA] 왜 JPA를 사용해야 하나?

1. 자바와 데이터베이스를 연결시키는 방법들 자바로 애플리케이션을 개발하고 관계형 데이터베이스를 데이터 저장소로 사용할 경우에 자바에서 사용되는 객체를 어떻게 잘 처리해서 관계형 데이터베이스에 집어넣어야 한다. 이 과정을 가능하게 하는 방법에는 다음과 같은 것들이 있다. 1) JDBC(Java Database Connectivity) 개념 자바에서(아래의 응용프로그램) 데이터베이스(아래의 DBMS)에 접속할 수 있도록 하는 자바 API(아래의 JDBC Interface) 특징 자바 애플리케이션에서 DBMS의 종류에 상관없이, 하나의 JDBC API를 이용해 DB 작업을 처리 각각의 DBMS는 이를 구현한 JDBC 드라이버를 제공한다 단점 간단한 SQL을 실행하는 데도 중복된 코드를 반복적으로 사용 Con..

Spring/jpa 2023.02.07

[자바 개념] StringBuffer, StringBuilder

1. StringBuffer와 StringBuilder 1) 개념 문자열을 다루는 클래스의 한 종류 2) 특징 문자열을 저장하는 가변 버퍼를 가지고 있기 때문에 저장된 문자열의 수정이 가능하다 문자열의 크기가 늘어나면 내부 버퍼 크기를 자동으로 조절한다. 한번 값이 할당되더라도 기존 데이터에 새로운 데이터를 더하는 방식을 취해서 속도가 빠르다 AbstractStringBuilder 라는 추상 클래스를 상속받는다. 값이 변경되더라도 같은 주소 공간을 참조하게 된다. 3) StringBuffer와 StringBuilder의 차이점 StringBuffer 동기화를 지원하여 멀티 스레드 환경에서도 안전하게 동작한다 StringBuilder 동기화를 지원하지 않는다 동기화를 지원하지 않기 대문에 StringBuf..

자바 2023.02.06