나는 이제 30살이 된 평범한 개발자이다. 나의 꿈은 열심히 공부하고 일하고 많은 경험으로 좋은 개발자가 되고 내가 살았던 이야기를 책으로 내고 싶다. 물론 내 블로그 글들이 정리가 개판이고 다른 개발자들은 다 아는 내용이겠지만 더 발전할 것이고 회사 사람들과 아직 모르는 개발자들과 공유하고 싶고 최대한 이해하기 쉽도록 정리하도록 정리하고 있다. 그것들을 위해 블로그를 시작했다. 이제 블로그를 한지 3개월 정도밖에 안되었지만 사람들이 어떤 주제에 관심이 많은지 어떤 키워드로 검색을 자주 하는지를 알게 되었다. 어느덧 누적 접속자가 3000명이 넘어간다. 어떤 사람이 볼 땐 적은 수이겠지만 나에게는 처음 공유를 해보는 입장으로써 신기할 따름이다. 나는 2019년 여름부터 다니넌 회사를 2021년에 퇴사하였..
분류 전체보기
반응형

@MappedSuperclass를 사용하면 부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공한다. 비유를 하자만 추상 클래스와 비슷한데 @Entity는 실제 테이블과 매핑되지만 @MappedSuperclass는 실제 테이블과 매핑되지 않는다. 단순히 매핑 정보를 상속할 목적으로만 사용된다. 이 클래스를 직접 생성해서 사용할 일은 거의 없으므로 추상 클래스로 만드는 것을 권장한다. @MappedSuperclass public abstract class BaseEntity { @Id @GeneratedValue @Column(name = "ID") private long id; @Column(name = "NAME") private String name; } @E..

관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계(Super-Type Sub-Type Relationship)라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 조인 전략(각각의 테이블로 변환) 각각을 모두 테이블로 만들고 조회할때 조인을 사용한다. JPA에서는 조인 전략이라 한다. 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략이다. 구분 컬럼으로 타입을 구분한다. @Entity @Inheritance(strategy = InheritanceType.JOINED) // 조인 전략 사용 @Discrim..
엔티티의 연관관계를 설정할때 주의해야할 부분들이 있다. 다중성 다중성에는 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 가 있다. 다중성을 판단하기 어려울 때는 반대방향을 생각해 보면 된다. 참고로 일대다의 반대 방향은 항상 다대일이고, 일대일의 반대방향은 항상 일대일이다. 일대일 관계에서는 외래키를 어느 테이블에서도 가질 수 있다. 어느 테이블이든 외래키 하나만 있으면 양쪽으로 조회할 수 있다. 주 테이블에 외래키가 있으면 주 테이블이 외래키를 가지고 있으므로 주 테이블만 확인해도 대상 테이블과 연관관계가 있는지 알 수 있고, 대상 테이블에 외래키가 있을때는 일대일에서 일대다로 변경할 때 테이블 구조를 그대로 유지할 수 있다. 단방향,..
아래 자주 쓰이는 기본적인 객체 관계 매핑 어노테이션을 정리해보았다. @JoinColumn 외래 키를 매핑할 때 사용한다. 속성 기능 기본값(Default) name 매핑할 외래 키 이름 필드명 + _ + 참조하는 테이블의 기본 키 컬럼 referencedColumnName 외래 키가 참조하는 대상 테이블의 컬럼명 참조하는 테이블의 기본 키 컬럼명 foreignKye(DDL) 외래 키 졔약조건을 직접 지정할 수 있다. 이 속성은 테이블을 생성할 때만 사용한다. unique nulldable insertable updatable columnDefinition table @Column의 속성과 같다 class Member { @ManyToOne @JoinColumn(name = "team_id", refer..
Hibernate란? 하이버네이트는 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체로, JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다. 하이버네이트는 자바객체를 통해 데이터베이스가 Oracle, MySql, MSSQL 등 에 상관없이 다룰수 있도록 하는 추상화를 목표로 한다. Mybatis에 익숙한 사람들이라면, Mybatis 구조가 들어가는 자리에 Hiberante가 들어오는 구조라고 이해하면 된다. 이를 통해 개발자는 SQL를 직접 사용하지 않고 메서드 호출만으로 쿼리가 수행된다, 즉 SQL을 작성하는 시간을 줄여 생산성이 높아진다. 하지만 직접 SQL을 작성하는것보다는 성능상 좋지 않고 세밀하게 데이터를 조작하기 힘들다. 이를 보안하기 위해 JPQL과 NativeQuery..
JPA르 사용하는데 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 것이다. 따라서 매핑 어노테이션을 숙지하고 사용해야 한다. 아래 자주 쓰이는 기본적인 엔티티 매핑 어노테이션을 정리해보았다. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여햐 한다. @Entity가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. 속성 기능 기본값(Default) name 엔티티 이름을 지정한다. 이름이 같은 엔티티 클래스가 있다면 다른 이름을 지정해서 충돌되지 않게 해야한다. 미 설정 시 클래스 이름을 그대로 사용 기본 생성자는 필수 (public, protected) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. ..

엔티티 매니저(Entity Manager) JPA에서 엔티티 매니저(Entity Manager)는 엔티티를 저장하고, 수정하고, 삭제하고 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 또한 영속성 컨텍스트를 통해 데이터의 상태 변화를 감지하고 필요한 쿼리를 자동으로 수행한다. Spring Data JPA에서는 EntityManager를 자동으로 Bean이 등록되기때문에 직접 사용하지는 않는다. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성한다. 엔티티 매니저 팩토리는 이름 그대로 엔티티 매니저를 만드는 공장인데, 공장을 만드는 비용은 상당히 크다. 따라서 한 개만 만들어서 애플리케이션 전체에 공유하도록 설계되어 있다. ..

사이드 프로젝트를 진행하면서 Test Results에 결과만 나와서 어떤 Test를 했는지 확인이 불가했다. 요게 Run Test를 할때 Gradle을 기준으로 Test를 진행하기 때문에 목록이 보이지 않는것이다. 기준을 IntelliJ IDEA로 변경하게 되면 Test를 진행한 목록이 잘나온다. Run tests using을 InteilliJ IDEA로 변경해주고 다시 테스트를 해보면 목록이 잘 나온다.

이 전 블로그 글에서 Spring Boot 프로젝트를 생성하고 Prometheus와 연동까지 해봤다. 이제 Grafana를 연동해 시각화를 해보자. Grafana 설치 및 사용 Grafana 역시 도커로 설치하겠다. docker run -d -p 3000:3000 --name grafana grafana/grafana 설치 후 컨테이너가 실행됫으면 http://localhost:3000에 접속해보면 grafana 홈페이지에 접속될 것 이다. 초기 로그인은 admin/admin으로 접속해 비밀번호를 바꾸면 된다. 이제 Data source를 추가해 Prometheus와 연동해보자 전 블로그 글에서 접속했던 http request들이 확인되면 정상적으로 연동이 된 것이다. 전체 코드는 아래 GitHub에서 ..