일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 로드밸런서
- 스키마 자동 생성
- 데이터베이스
- ArrayList 소스코드
- thread safety
- index
- 멀티스레드 싱글톤
- 자바 동시성
- postgres
- PostgreSQL
- 트랜잭션
- 도커
- Container
- transaction
- docker
- JPA란
- ArrayList 가변
- JPA 장점
- Database
- java
- acid
- 싱글톤 동시성
- load balancer
- create-drop
- 컨테이너
- ArrayList 길이 확장
- JPA
- heap
- github
- 권장 PK 전략
- Today
- Total
목록전체 글 (24)
JS
"객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다." - 조영호(객체지향의 사실과 오해) Member(회원)과 팀(Team) 이 있고, 한 팀에 여러명의 멤버가 속하게 된다고 가정해봅시다. 데이터베이스 테이블의 경우 멤버 테이블에 팀ID를 가지고 있게 될텐데, 같은 형태로 객체 연관관계를 구성하면 데이터를 조회하고 추가하는데 계속 ID를 이용해 참조대상을 찾아야하는 불편함이 생깁니다. 이번 포스팅에서는 그 불편함을 연관관계 매핑을 통해 해결하면서 객체지향적으로 연관관계를 설정하는 방법에 대해 알아보겠습니다. 1. 단방향 매핑 각 멤버는 하나의 팀에 소속될 수 있기 때문에 팀과 멤버의 관계는 1:N 으로 표현할 수 있습니다. 그러므로 멤버 객체에서 소속된 팀 객체를 참조하게끔 연관관계..
이번 포스팅에서는 JPA가 엔티티 객체와 테이블을 어떻게 매핑하는지 알아보겠습니다. 객체와 테이블 매핑 (@Entity, @Table) @Entity @Entity 라는 애노테이션이 붙은 클래스는 JPA가 관리하는 엔티티를 뜻합니다. JPA를 사용해서 테이블과 매핑할 클래스는 필수로 붙여줘야 합니다. 엔티티를 선언할 때는 몇 가지 주의사항이 있는데요. 기본 생성자가 필수입니다. (기본 생성자란, 파라미터가 없는 public 또는 protected 생성자를 뜻합니다.) final 클래스, enum, interface, inner 클래스는 사용이 불가합니다. DB에 저장할 필드에 final 키워드를 사용할 수 없습니다. @Table 엔티티와 매핑할 테이블을 지정한다는 애노테이션이며, name 이라는 속성을 ..
JPA에는 데이터베이스 스키마를 자동으로 생성해주는 기능이 존재합니다. 이 기능은 DDL을 애플리케이션 실행 시점에 자동 생성해줍니다. 당연히 개발환경 에서만 사용이 권장되는 기능이고, 운영환경 에서는 사용하지 않거나 필요에 따라 적절하게 다듬은 뒤 사용해야 합니다. DB 스키마 자동 생성 기능은 데이터베이스 방언을 활용해서 사용하는 데이터베이스에 맞는 적절한 DDL을 생성해줍니다. hibernate.hbm2ddl.auto 속성 create: DROP + CREATE create-drop: create와 같으나 종료 시점에 DROP update: 변경분만 반영 (운영 DB 사용 X, 지우는 건 안되고 업데이트만 가능) validate: 엔티티와 테이블이 정상 매핑되었는 확인 none: 사용하지 않음 해당..
JPA의 Persistence Context(영속성 컨텍스트)란 엔티티를 영구 저장하는 환경입니다. JPA는 엔티티 관리를 위해 여러가지 기능을 제공하는데 그 기반이 되는 것이 바로 영속성 컨텍스트 입니다. (가장 중요) JPA는 엔티티를 데이터베이스가 아닌 엔티티 매니저를 통해 접근 가능한 특정 환경에 저장한 뒤 사용합니다. 이를 이해하기 위해서는 엔티티의 생명주기에 대해 알아야 합니다. 엔티티의 생명주기 엔티티의 생명주기에는 비영속, 영속, 준영속, 삭제 이렇게 4가지가 있습니다. 비영속 (new/transient) 비영속 상태란, 엔티티 객체를 생성은 했지만 영속성 컨텍스트와는 관계가 전혀 없는 완전히 새로운 상태를 뜻합니다. 영속 (managed) 생성한 엔티티 객체를 생성한 뒤 엔티티 매니저를 ..
JPA란 Java Persistence API의 줄임말로 Java 표준 ORM 입니다. ORM (Object-relational mapping) 이란, 객체는 객체대로 객체지향스럽게 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계해서 함께 사용할 수 있도록 중간에서 매핑해주는 도구입니다. JPA는 Java 애플리케이션과 JDBC 사이에서 동작하며, 개발자가 직접 JDBC API를 사용하지 않아도 JPA가 데이터베이스로의 SQL문을 호출하고 결과를 객체로 매핑해줍니다. JPA는 구현체가 아닌 인터페이스의 모음으로 JPA 2.1 표준 명세를 구현한 3가지 구현체가 (Hibernate, EclipseLink, DataNucleus) 존재하며 그중 대표적으로 Hibernate를 대부분 사용합니다. ..
일반적으로 단일 스레드 환경에서 Singleton Pattern을 사용할 때는 큰 문제가 없습니다. 하지만 멀티스레드 환경에서는 다중 스레드를 이용한다는 부분에서 생길 수 있는 문제점들이 있으며, 이를 해결할 수 있는 방법에는 여러 가지가 있습니다. 지금부터 싱글톤 패턴이 무엇인지와 멀티스레드 환경에서 싱글톤 패턴 사용 시 thread safety를 보장할 수 있는 여러가지 기법들에 대해 소개합니다. Singleton Pattern 이란? GoF Design Patterns 중 하나로 같은 생성자가 여러번 호출되더라도 최초 생성자 호출 시 생성되는 하나의 동일한 인스턴스가 반복적으로 반환되는 패턴입니다. 사용할 클래스의 인스턴스가 최초 한번 메모리에 할당된 뒤 매번 똑같은 역할을 하는 인스턴스를 여러개 ..
Java의 동시성 시리즈의 첫 번째 주제로 Thread 생성 및 시작 방법과 sleep, interrupt, join에 대해 알아보겠습니다. Thread 생성 방법과 사용 Java에서 thread를 생성하는 방법은 여러 가지가 있습니다. Thread 클래스를 상속한 서브클래스를 생성해서 run() 메소드를 오버라이드 하는 방법 Anonymous Thread 클래스를 생성해서 run() 메소드를 오버라이드 하는 방법 (딱 한 번만 실행하고 싶은 경우 좋다.) Runnable 인터페이스를 구현하는 방법 1. Thread 클래스를 상속한 서브클래스를 생성해서 run() 메소드를 오버라이드 하는 방법 // Main.java public class Main { public static void main(Strin..
Java로 개발하면서 배열을 사용해야 하는 경우 Collection 프레임워크의 ArrayList 클래스를 사용할 일이 굉장히 많습니다. 배열은 고정 길이 데이터 구조라서 최초에 할당해놓은 길이를 넘어가면 직접 더 큰 크기의 새로운 배열을 만들어줘야 하는 불편함이 있는 반면, ArrayList는 새로운 데이터를 추가할 때 내부적으로 길이를 가변적으로 관리해주기 때문에 더 편리하게 사용할 수 있기 때문이죠. 그렇다면 실제로 내부에서 어떤식으로 ArrayList의 길이를 가변적으로 관리할까요? 이런 ArrayList 클래스도 개발자들이 작성한 코드이고, JDK 버전이 업되면서 기존 구현 코드의 문제점을 보완하거나 더 효율이 좋게끔 업데이트합니다. 그래서 JDK 6,7,8 버전 간 ArrayList 구현 방식..