JPA 6

카카오뱅크 해외송금 서비스 구현해 보기

간편송금업체에 개발자로 일하다보니, 타 업체들의 서비스는 어떻게 돼 있는지 분석할때가 있다. 카카오뱅크 해외송금 서비스가 어떻게 돼 있는지 궁금하여 UI를 틈틈히 분석 하여 DB설계 및 rest api를 구현해 보았다. 자세한 코드는 여기 github 코드 참고 일단, 카뱅 SWIFT 해외송금 화면은 아래와 같이 생겼고, swift 송금 중에 미국(USD)송금만을 분석해보았다. 참고로, 카뱅의 송금서비스가 서버단에서 어떻게 구현돼 있는지는 나는 전혀 알지 못한다. 단지 UI만을 분석하여 서버API를 설계해본 것이다. 기본적으로 해외송금은 고객으로부터 KRW기준으로 돈을 수령하여 환전 후 국제송금망(SWIFT)를 통해 해외로 송금을 보내는 것이다.(swift를 사용하지 않을때도 있긴하다) 국제송금망을 통해..

@JsonIgnore, @JsonBackReference, @JsonManagedReference의 차이 및 FetchType.LAZY와의 관계

@JsonIgnore@JsonIgnore는 사실 OneToMany ManyToOne 등 객체간 참조관계를 원천적으로 차단하는데 사용되기 위해 설계된 것은 아니다. 이 어노테이션은 말그대로 return 해주는 json에서 지정된 컬럼을 제외하겠다는 어노테이션이다. 그래서, password와 같은 민감한 정보가 return값으로 나가지 않도록 사용되기도 하고, json에서 제외되다 보니, 순환참조를 끊는데 사용되기도 하는 것이다. @JsonManagedReference과 @JsonBackReference두 어노테이션은 두순환참조를 끊기 위해 설계되었다. @JsonManagedReference은 조회된 데이터를 정상적으로 serialize(직렬화)시킨다. 즉, 참조되는 데이터를 가져온다는 것이다. @Jsonb..

jpa - N+1문제 원인과 fetch를 통한 해결

N+1 문제란 일단 2테이블에 대한 join에서 발생하는 문제이다. left join 1번으로 끝낼수 있는 쿼리조회가 N번이나 더 추가적으로 더 발생하는 상황을 말한다. 상황 글쓴이테이블(author)과 게시글테이블(post)이 존재한다. jpa의 findAll()을 통해 모든 글쓴이에 대한 모든 게시글 정보를 JSON형태로 조회하고자 한다. 문제발생 아래와 같이 글쓴이테이블(author)이 존재한다. 글쓴이는 여러개의 글을 쓸수가 있고, 글쓴이에 대한 글 목록들을 조회하기 위해서는 post(글목록)테이블과 1 : N의 관계인 oneToMany를 설정해줘야 한다. 즉, author테이블과 post테이블을 join 해야 한다는 말이다. @Data @Entity @Table(name="author") pub..

Spring Scheduler - 게시판 예약 글쓰기

게시판에 글을 쓸때 예약 글쓰기 기능을 사용해본 적이 있을 것이다. 여기서는 Spring의 기능 중 Schedule(cron)을 사용하여, mysql database를 update해 나감으로서 게시판의 예약 글쓰기 기능을 간단하게 구현해보고자 한다. -관련 git source : https://github.com/kimseonguk197/spring_scheduler -사용 stack : spring boot, JPA, mysql, thymeleaf UI 글작성 기본적인 UI는 아래와 같이 글작성을 할 수 있는 게시판이다. 글작성란으로 들어오면 위와 같이 posting할 글 내용을 작성하면 되는데, 예약설정 여부를 check하고, 예약시간을 분단위로 입력해주면 된다. 현재시간은 15:33분이고, 15:5..

MYSQL SHOW INDEX

index 정보를 확인하기 위해 "show index from 테이블명;"을 하는 경우가 있다. 조회되는 주요 값들 중 어려울 수 있을만한 값들에 대해 정리하고자 한다. (너무 쉬운 내용은 뺐습니다.) 공식문서를 기반으로 내용을 추가하여 정리하였습니다. 출처)https://dev.mysql.com/doc/refman/8.0/en/show-index.html Non_unique : 0인경우 unique, 1인 경우 non-unique Key_name : pk값의 인덱스명은 언제나 PRIMARY. 명령문을 통해 만들때는 지정한 index명. orm을 통해 생성할땐 프로그램에서 만들어준 인덱스명(난수값). Seq_in_index : 멀티컬럼인덱스일경우 순서, 1부터 시작합니다. 단일컬럼 인덱스일경우 1 Col..

JPA auto-ddl update는 컬럼 속성을 수정하지 않는다.

현재 author 테이블은 위와 같은 데이터 타입과 lenth를 가지고 있다. password length가 너무 길어 100으로 줄이고자 하는데, 아래와 같이 length를 100으로 바꿔 서버를 재기동하였는데도 db alter가 제대로 작동하지 않는다. auto-ddl은 update로 설정돼 있는 상황. 이유는 ddl-auto에 update 설정을해도 jpa에서 컬럼 속성은 변경이 되지 않기 때문이다. @Setter @Getter @Entity public class Author { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 50) private ..