생성자 대신 정적 팩터리 메서드를 고려하라 정적 팩터리 메서드가 가지는 장점 이름을 가질 수 있다. 생성자를 통해서 객체를 생성하다보면 그 객체가 어떤 정보를 포함하여 생성하는지 정확히 모를 때가 많다. 또한, 생성자를 볼때 주석이나 설명 문서를 읽어야하는 수고로움을 덜어줄 수 있다. public class Student{ private String name; public Student(){} public Student(String name){ this.name = name; } public static Student nameOf(String name){ return new Student(name); } } 다음과 같은 소스 코드에서 그냥 생성자를 통해서와 nameOf라는 정적 팩터리 메서드를 통해서 생..
영속성 전이 한 개의 엔티티를 persist 할 때에 영속성 전이 설정이 되어 있는 엔티티도 자동으로 persist 해주는 것이다. 간단하게 Parent와 Child 객체를 예로 들면 Parent.java @Entity public class Parent { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String name; @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) private List childList = new ArrayList(); public void addChild(Child child){ childList..
앞서 Lazy Loading에 대해서 잠깐 언급하고 넘어간 적이 있다. 한번에 엔티티에 해당하는 모든 데이터를 가져오는 것이 아닌 필요할때(호출시) 가져온다는 로딩 방식이었다. 여기서 프록시라는 개념이 있다. 보통 IT쪽에서 프록시는 네트워크에서 많이 들어본 단어일 것이다. JPA에서 프록시도 크게 다르지 않은 개념인 것 같다. 즉, 필요한 것으로 넘어가기 위한 중간 단계 역할의 객체를 놓는 것이다. Lazy Loading을 보면 바로 객체를 가져오는 것이 아닌 프록시 객체를 가져온 뒤, 그 프록시 객체를 통해서 실제 엔티티에 접근하게 된다. 프록시와 실제 엔티티는 상속을 받은 구조이기 때문에 겉모양이 동일하다. 이러한 특징으로 사용자는 프록시와 실제 엔티티를 사용하는데에 다른점이 없이 사용 가능하다. ..
엔티티를 설계하다보면 공통적으로 들어가는 멤버 변수들이 많이 있다. 예를 들어 운영시 필요한 생성시간, 생성한 유저, 변경시간, 변경한 유저 등... 이것을 일일히 적어도 되지만 반복을 피할수록 좋기 때문에, 이것을 @MappedSuperclass를 통해서 해결할 수 있다. 다음처럼 공통되는 변수를 묶은 클래스를 만들어 준다. (해당 변수들에 필요한 제약조건들은 동일하게 붙혀주면 된다.) @MappedSuperclass public abstract class BaseEntity { @Column(name = "INSERT_MEMBER") private String createdBy; private LocalDateTime createDate; private String lastModifiedBy; pri..
1:N 연관관계 맵핑 연관관계 맵핑이란 JPA가 관계형 DB와 연결되면서 관계형 DB의 정규화 과정을 표현하는 것이다. 예를 들어 team의 입장에서는 member가 여러명이라는 것에서 team과 member는 1:N 관계가 되는 것이다. @Entity public class Member{ /* ~~ */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; /* ~~*/ } @Entity public class Team{ /* ~~ */ @OneToMany(mappedBy = "team") private List members = new ArrayList(); } team 1개에 member가 여러명이라 O..
여러 개의 서버에 각각 curl을 날려서 동작을 확인하는 일이 가끔? 종종? 생긴다. 하나하나 request를 날린다고 생각하는데 만약 확인해야하는 서버가 몇백개라면 머리가 아프다. 이를 shell을 통해서 한번에 할 수 있다. 사실 그냥 shell 프로그래밍 중에 for을 활용한것 뿐이다. url_list=("https://192.28.0.5/api/call", "https://192.28.0.6/api/call") generate_post_data() { cat
- Total
- Today
- Yesterday
- centos
- 리액트
- KAFKA
- apache kafka
- feign client
- Container
- OS
- apache
- spring
- zookeeper
- React
- Front
- K8S
- caching
- broker
- Data Engineering
- rhel
- Producer
- frontend
- JPA
- NextJS
- 프론트엔드
- Java
- API
- consumer
- backend
- Firebase
- Linux
- cs
- spring boot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |