본문 바로가기

게으른개발자/공부

JPA 를 사용하여 JSON 문자열을 객체에 매핑하기 Json 문자열 형태를 저장하는 Column 을 가진 Table 을 JPA를 통해 Entity 를 구현할때 단순히 String 형태의 자료형을 사용할 수 있다. 그러나 로직에서 JsonObject를 통해 파싱해야하는 번거로움이 있다. DB에서 해당 데이터를 읽어올때 부터 특정 객체에 매핑을 해서 가져온다면 로직 구현이 용이해 진다. Member 테이블에 information 이라는 Json형태의 문자열을 저장하는 Column 이 있다고 가정한다. 해당 테이블에는 아래와 같이 information Column에 Json 문자열이 들어가게 사용되고 있다고 가정한다. - 예제 문자열: { "name":"Goslim", "age":31, "city":"Seoul" } information Column에 저장되는.. 더보기
JPA 외래키로 복합키 만들기 JPA 복합 키를 사용하려면 별도의 식별자 클래스를 만들어야 한다. @EmbeddedId 를 적용한 식별자 클래스는 다음 조건을 만족해야 한다. @EmbeddedId 어노테이션을 붙여줘야 한다. Serializable 인터페이스를 구현해야 한다. 기본 생성자가 있어야 한다. 식별자 클래스는 public 이어야 한다. //예제 @Embeddable public class RobotId implements Serializable { private Long armId; private Long bodyId; private Long headId; private Long legId; } 그리고 해당 복합키를 외래키로 구성을 하기를 원한다면 아래와 같이 @MapsId 어노테이션(https://goslim56.tist.. 더보기
@Query Annotation 사용시 null 매개변수 무시하는 방법 JPA로 구성된 레퍼지토리에서 @Query Annotation 을 사용하여 쿼리를 작성할 경우 매개변수로 null 이 넘어 오면 아래와 같이 null 조건이 검색된다. @Repository public interface MemberRepository extends JpaRepository { @Query("SELECT m FROM Member m WHERE m.name = :name") List findByName(String name); // name 으로 null 이 넘어온경우 -> SELECT * FROM Member WHERE name = null } 만약 null 로 매개변수가 올경우 무시하고 싶다면 아래와 같이 구성하면된다. @Repository public interface MemberRep.. 더보기
JPA 외래키를 기본키로 사용하기 JPA 를 사용할때 , 아래의 예제 처럼 외래키를 기본키로 설정하는 방법 -> @MapsId 활용 (매핑한 연관관계를 기본 키에도 매핑하겠다는 뜻) 예제. Member 테이블과 Member 의 id를 외래키이자 기본키로 갖는 Vip 테이블 JPA Entity 구성 //Member 엔티티 @Entity @Getter @Builder @NoArgsConstructor @AllArgsConstructor public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; } //Vip 엔티티 @Entity @Getter @Bu.. 더보기
트랜잭션 정의: 안전하게 수행되는것을 보장하는 성질 성질 Atomicity(원자성): All OR Nothing (모두 반영, 전혀 반영 x) Consistency(일관성): 트랜잭션 각각의 독립성 보장 Isonlation(독립성): 트랜잭션 각각의 독립성 보장 Durability(지속성): 트랜잭션 성공시 결과가 영구히 반영 트랜잭션 격리수준: 트랜잭션성질(ACID)도 지키면서 성능 보장을 위해 동시에 DB에 접근할때 그 접근을 어떻게 제어할지에 대한 설정 이름설명이미지비고 read-uncommitted 커밋 전의 트랜잭션의 데이터 변경 내용을 다른 트랜잭션이 읽는 것을 허용 Drity Read 현상 발생 가능성 있음 read-committed 커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능 N.. 더보기
Fluentd로 Kafka 전송하기 설정파일 및 SSL 적용 docs.fluentd.org/output/kafka kafka docs.fluentd.org 해당글은 위의 문서를 기반을 작성하였습니다. 설정파일 예제 @type kafka2 # list of seed brokers brokers :,: use_event_time true # buffer settings @type file path /var/log/td-agent/buffer/td flush_interval 3s # data type settings @type json # topic settings topic_key topic default_topic messages # producer settings required_acks -1 compression_codec gzip 각종 설정 설명 @type (.. 더보기
Spring Boot 의존관계 주입방법 의존관계 주입은 4가지가 있습니다. - 필드 주입 - 생성자 주입 더보기
git fetch와 pull의 차이 사용 목적 - pull: 원격저장소에 있는 소스를 현재 로컬 소스에 병합하기 위해 - fetch: 단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않은 경우 동작 과정 - fetch: 원격 저장소의 최신 이력을 이름 없는 브랜치로 로컬에 가져옴 & 해당 브랜치는 'FETCH_HEAD'의 이름으로 체크아웃 가능 - pull은 원격저장소의 내용을 가져와 자동으로 현재 소스에 병합작업을 진행. 공통점 원격저장소의 최신이력을 가져온다. 차이점 현재 로컬소스에 병합을 하냐 마냐의 차이. 결론 pull은 fetch의 더 큰 동작 (pull이 내부적으론 fetch와 merge를 같이 동작하기 때문) ex git pull => git fetch & git merge FETCH_HEAD 참고: .. 더보기