탁구치는 개발자
close
프로필 배경
프로필 로고

탁구치는 개발자

  • 분류 전체보기 (424)
    • WebRTC (7)
    • 프로그래밍 (139)
    • AI 활용 (3)
    • 서버 (49)
    • 개발툴 (102)
    • 개발이야기 (10)
    • 장애 경험 (1)
    • 유용한 도구 (4)
    • 끄적끄적 (17)
    • 독서 (90)
    • 회고 (1)
    • 재테크 (1)
  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
13. [JPA] 트랜잭션 격리 수준 (Transaction Isolation Level)

13. [JPA] 트랜잭션 격리 수준 (Transaction Isolation Level)

격리성은 동시에 실행되는 트랜잭션이 서로에게 영향을 미치지 않도록 격리한다.예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다는 것이다. 격리 수준에는 다음과 같이 4가지가 있다.아래로 갈수록 격리 수준이 높아짐1234READ UNCOMMITTED (커밋되지 않는 읽기)READ COMMITTED (커밋된 읽기)REPEATABLE READ (반복 가능한 읽기)SERIALIZABLE (직렬화 기능)cs [READ UNCOMMITTED - 커밋되지 않는 읽기]트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는 중에(커밋하지 않은 상태) 트랜잭션 B가 read하면 트랜잭션 A가 변경한 데이터를 읽어온다. 이것이 커밋되지 않는 읽기이다.커밋되지 않는 읽기는 dirty read라는 문제가 있다. 이는 트랜잭션..

  • format_list_bulleted 프로그래밍
  • · 2017. 9. 12.
  • textsms

12. [JPA] 복합키

대부분의 엔티티에는 @Id 애노테이션을 한 개 사용한다.하지만 테이블의 키가 복합키로 이뤄져 있다면 엔티티를 설계할 때에 이를 고려해야 한다.복합키 설정 방법은 두 가지가 있다. 12@Embeddable 이용하는 방법@IdClass 이용하는 방법cs 첫 번째 방법이 객체지향 방식에 가깝다고 한다.두 번째 방법은 DB 방식에 가깝다고 하는데 잘 와닿지는 않는다. @Embeddable 이용 방법다음과 같이 emp 테이블이 존재한다.emp 테이블의 키는 emp_name, emp_no 두 개의 복합키로 이뤄져 있다.123456create table emp ( emp_name varchar(255) not null, emp_no integer not null, name varchar(255), primary ke..

  • format_list_bulleted 프로그래밍
  • · 2017. 9. 8.
  • textsms
11. [JPA] Querydsl

11. [JPA] Querydsl

Querydsl은 오픈 소스 프로젝트이고 type-safe한 쿼리를 위한 Domain Specific Language이다. 왜 필요한가?SQL query는 문자이다.이는 type-check가 불가능하고 실행해 보기 전까지 작동여부 확인이 어렵다.만약 SQL이 class처럼 Type이 있고, Java코드로 작성할 수 있다면 좋지 않을까?SQL을 java로 type-safe하게 개발 할 수 있게 해주는 프레임워크가 Querydsl이다.QueryDSL은 JPQL(HQL)을 type-safe하게 작성하기 위해서 만들어졌고 다음처럼 동작한다.1Querydsl -> JPQL -> SQLcs [Querydsl 테스트 버전]JPA : 2.1hibernate : 5.0.12Querydsl : 4.1.4cs Queryds..

  • format_list_bulleted 프로그래밍
  • · 2017. 9. 1.
  • textsms

spring data elasticsearch 사용해 보기

실무에서 elasticsearch 와 연동해야 할 일이 생겼다.검색을 통해서 알아보니 Spring Data 프로젝트 하위에 Spring Data Elasticsearch 프로젝트가 존재했다.https://github.com/spring-projects/spring-data-elasticsearch그 외에 Elasticsearch와 연동 가능한 Java API가 있었지만 Spring Boot를 사용하고 있어 Spring Data를 선택하게 되었다.선택 이유는 Spring Boot + Spring Data Elasticsearch 통합이 쉽기 때문이다. 일단 ElasticSearch와 연동하기 위해선 설치 작업이 선행되어야 한다.개발 환경이 윈도우라서 난 윈도우 버전을 설치했다.다른 환경이라고 해서 딱히 설..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 31.
  • textsms
10. [JPA] JPQL

10. [JPA] JPQL

테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리이다.이게 뭔 말이냐 하면다음과 같이 테이블 명이 JPQL_PERSON 인 Person 엔티티 클래스가 있다.123456@Data@Table(name = "JPQL_PERSON")@Entityclass Person { ... }cs JPQL_PERSON 테이블의 데이터를 모두 추출하고자 할 때 SQL로 작성하게 되면 "select * from JPQL_PERSON" 처럼 될 것이다.그럼 JPQL을 이용하면 어떻게 작성되어야 할까?"select p from Person p" 처럼 하면 된다.이처럼 JPQL은 객체지향쿼리이기 때문에 엔티티 클래스를 기반으로 쿼리를 작성해야 한다. 한번쯤은 궁금해 할지도 모르겠다.왜? "select p from JPQL_PE..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 28.
  • textsms

9. [JPA] @Enumerated

자바 enum 타입을 엔티티 클래스의 속성으로 사용할 수 있다.@Enumerated 애노테이션에는 두 가지 EnumType이 존재한다.EnumType.ORDINAL : enum 순서 값을 DB에 저장EnumType.STRING : enum 이름을 DB에 저장cs 예를 들어 enum이 다음과 같이 생겼다고 하자.enum Gender { MALE, FEMALE;}cs ORDINAL로 지정하고 gender 속성에 Gender.MALE 값을 셋팅하면 DB에 저장되는 값은 1이다.그럼 Gender.FEMALE 값으로 셋팅하면 어떻게 될까?Gender에 선언되어 있는 순서가 값이 되기 때문에 2가 DB에 저장된다.@Enumerated(EnumType.ORDINAL)private Gender gender;cs STR..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 23.
  • textsms
8. [JPA] Attribute Converter

8. [JPA] Attribute Converter

Attribute Converter에 대해서 알아보자.말 그대로 속성 변환기이다.다음 그림과 같이 엔티티와 DB 사이에서 동작한다.흔히 개발을 진행하다 보면 DB에는 코드성의 데이터가 쌓이게 된다. 가령 gender 컬럼에 존재하는 데이터가 (1 이면 남자) (2 이면 여자)와 같은 식이거나 은행 컬럼에 존재하는 데이터가 (1 이면 신한은행) (2 이면 국민은행)과 같은 경우이다.허나 웹 애플리케이션에서는 DB에 존재하는 1이나 2와 같은 코드성의 데이터를 화면에 출력하는 일은 거의 없을 것이다.화면상에서는 코드에 부여한 의미 있는 문자열을 보여줘야 한다.이런 경우 처리할 수 있는 방법은 entity의 속성에 저장되어 있는 integer 값을 if 조건으로 분기처리하는 방법이 있다.그렇지만 이와 같은 방..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 23.
  • textsms

7. [JPA] fetch type - 로딩 기법

JPA에는 두 가지 로딩 기법이 존재한다.즉시로딩과 지연로딩이라고 한다.이 두 개의 로딩 전략은 엔티티를 조회할 때 적용된다. update, delete, insert에는 로딩 전략 대상이 아니다. 즉시로딩은 뭔가?엔티티 매니저를 통해 엔티티를 조회하면 연관관계에 매핑되어 있는 엔티티도 함께 조회 지연로딩은 뭔가?엔티티 매니저를 통해 엔티티를 조회하면 연관관계에 매핑되어 있는 엔티티를 실제 사용할 때 조회 즉시로딩, 지연로딩에 대한 설명을 글로만 보면 이해하기 쉽지 않다.예를 들어 설명해보자. Member 엔티티 클래스, Phone 엔티티 클래스가 있다고 하자.이 둘은 서로 객체 연관관계 설정이 되어 있다. 아래와 같이 Member 테이블에 Phone 엔티티가 즉시로딩 전략으로 설정되어 있다고 하자.이와..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 21.
  • textsms

6. [JPA] 영속성 전이 - Cascade

영속성 전이에 대해 이해하기 위해서는 영속성 컨텍스트의 선행 학습이 필요하다.영속성 컨텍스트가 뭔지 잘 모르겠다면 http://lng1982.tistory.com/273 페이지 읽기를 추천한다. (내가 쓴 글을 내가 추천하니 뭔가 이상하다.) 영속성 전이라는 용어가 다소 생소할 것이다.예를 들어 Member, MemberPhone 엔티티 객체가 존재한다고 하자.Member엔티티를 엔티티매니저를 통해 영속화하면 MemberPhone엔티티도 함께 영속 상태가 되는데 이를 두고 영속성 전이라고 한다. 이처럼 둘의 엔티티가 영속 상태가 되었다면 영속성 컨텍스트가 flush될 때 DB에 insert문이 전송된다. JDBC로 개발 했을 때에는 부모가 되는 Member 테이블에 insert를 먼저 하고 그 다음에 M..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 17.
  • textsms
5. [JPA] 엔티티 매니저

5. [JPA] 엔티티 매니저

What is the EntityManager?The EntityManager API is used to access a database in a particular unit of work. It is used to create and remove persistent entity instances, to find entities by their primary key identity, and to query over all entities. This interface is similar to the Session in Hibernate. 엔티티 매니저는 특정 작업을 위해 데이터베이스에 액세스 하는 역할을 가진 녀석이다.또한 엔티티를 데이터베이스에 등록, 수정, 삭제, 조회할 수 있다.엔티티와 관련된 모든 ..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 16.
  • textsms
4. [JPA] 엔티티 매니저 팩토리

4. [JPA] 엔티티 매니저 팩토리

What is the EntityManagerFactory?1. 엔티티 매니저 팩토리는 엔티티 매니저를 관리한다. > 이름 그대로 엔티티를 관리하는 관리자다. > 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. (쉽게 말해서 JDBC의 Connection 객체로 생각하면 된다.) 2. 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야 한다. > 애플리케이션에서 바라보는 DB가 한 개라면 엔티티 매니저 팩토리도 한 개이다. 3. 엔티티 매니저 팩토리는 여러 쓰레드가 동시에 접근해도 안전하므로 서로 다른 쓰레드 간에 공유해도 된다.테스트 코드를 통해서 엔티티 매니저 팩토리에 대해서 더 알아보자. 다음과 같이 @Per..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 10.
  • textsms
Google App Engine 환경에 Spring Boot 배포하기

Google App Engine 환경에 Spring Boot 배포하기

까페24에서 서버 호스팅을 받다가 구글 클라우드 플랫폼으로 이전하기 위해 학습한 내용을 정리한다.Google App Engine에 Spring Boot 애플리케이션을 배포해보자. 배포를 위해 사용한 환경은 다음과 같다.123IDE : IntelliJApplication : Spring Boot (Java 8)Platform : Google App Engine Flexible environment and Container Enginecs 1. 구글 클라우드 플랫폼에서 프로젝트 생성https://console.cloud.google.com 접속한 후 새로운 프로젝트 생성구글 클라우드 플랫폼에서 신규 프로젝트를 생성한다. > 페이지 상단의 "프로젝트 선택" 클릭 > 팝업 레이어에서 신규 프로젝트 생성 버튼 클..

  • format_list_bulleted 서버
  • · 2017. 8. 9.
  • textsms
3. [JPA] 영속성 컨텍스트란?

3. [JPA] 영속성 컨텍스트란?

내가 처음 영속성 컨텍스트라는 단어를 접했을 때 해당 용어가 의미하는 바를 정확히 이해하지 못하였다."영속성" + "컨텍스트" 두 단어의 조합으로 이루어진 용어인 것 같은데단어 하나하나를 따져보면 영속성은 오래도록 계속 유지되는 성질을 의미하고컨텍스트는 저장소로써 어떤 정보들을 저장하고 관리하는 용도로써 많이들 생각한다. 영속성 컨텍스트 = "오래도록 계속 유지되는 성질들을 저장하고 관리" 라고 정의할 수 있겠는데...이게 뭔 소린가?오래도록 계속 유지되는 성질이라니.. 여튼 용어가 전달하는 의미를 내 나름대로의 해석을 통해 이해해 보려고 했다.그래서 생각해 낸 것이 JPA에서 사용되는 엔티티라는 단어이다."엔티티를 저장하고 관리"사실 JPA를 처음 접하는 분들은 엔티티가 뭔지 궁금해 할 것이다.Enti..

  • format_list_bulleted 프로그래밍
  • · 2017. 8. 1.
  • textsms
2. [JPA] 테스트 환경

2. [JPA] 테스트 환경

테스트는 JPA 구현체인 하이버네이트를 주로 다룰 것이고 Spring Boot 기반에서 진행할 예정이다.Spring Boot에 대해서 논하기에는 이 또한 분량이 적지 않아 나중에 정리할 예정이다. SPRING INITIALIZR(https://start.spring.io) 에서 기본적인 프로젝트 구성을 다운 받아 다음과 같이 구성하였다. [JPA 테스트 버전]123JPA : 2.1hibernate : 5.0.12spring data jpa : 1.11.1cs pom.xml123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707..

  • format_list_bulleted 프로그래밍
  • · 2017. 7. 21.
  • textsms

1. [JPA] 사용 경험

이전 프로젝트에서 처음으로 JPA를 사용해 보았다.실무에 적용하기 전에는 JPA가 무엇인지 궁금하여 테스트 삼아 몇 번 공부한게 전부였다.허나 실무에서 직접 사용하려고 했을 때의 중압감은 사뭇 다르다는 것을 느꼈다.이유인 즉슨, 다음의 항목들에 대해서 이해를 하고 있어야 실무에 도입해도 큰 문제가 없다고 들었기 때문이다.JPQL 이란?즉시, 지연 로딩 전략영속성 컨텍스트에 대한 이해자동 변경 감지언제 영속성 컨텍스트가 flush 되는가?연관관계 매핑중에 mappedBy, inverse 이해OSIV 란?N+1 질의 문제 (query)쓰기 지연 솔직히 위의 항목 중 어느 한 가지도 제대로 이해하지 못한 상태였다.그렇게 JPA에 대한 상세 지식이 없는 상태에서 개발을 진행하게 되었고, 어찌됐든 개발이 완료되기..

  • format_list_bulleted 프로그래밍
  • · 2017. 7. 21.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • navigate_next
전체 방문자
오늘
어제
전체
전체 카테고리
  • 분류 전체보기 (424)
    • WebRTC (7)
    • 프로그래밍 (139)
    • AI 활용 (3)
    • 서버 (49)
    • 개발툴 (102)
    • 개발이야기 (10)
    • 장애 경험 (1)
    • 유용한 도구 (4)
    • 끄적끄적 (17)
    • 독서 (90)
    • 회고 (1)
    • 재테크 (1)
최근 글
최근 댓글

캘린더

«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
태그
  • #VirtualBox
  • #tomcat
  • #maven
  • #Wireshark
  • #vagrant
  • #shellscript
  • #Database
  • #Apache
  • #개발주의사항
  • #SQL
  • #JQuery
  • #java
  • #Spring
  • #제너릭
  • #fiddler
  • #JPA
  • #SourceTree
  • #HTTP
  • #git
  • #javascript
  • #JUnit
  • #ant
  • #Elasticsearch
  • #Jenkins
  • #Docker
  • #회고
  • #리눅스
  • #algorithm
  • #Kubernetes
  • #Eclipse
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바