웹 화면과 DB 데이터 동기화 방법

2016-05-02 23:46

오늘 하루종일 고민하다가 문의 드릴 곳이 여기밖에 없는 개발자라 글 남깁니다. ㅜㅜ

제가 생각하는 것보다 효율적인 방법을 찾고자 합니다.

우선 정보를 입력하는 화면 중에 전화번호, 팩스, 혹은 주소 입력 항목 처럼 데이터 베이스로는 하나의 컬럼인데 화면에는 아래와 같이 나누어져 있는 경우가 있습니다.

백엔드에서는 모델을 jpa로 연동한 entity를 쓰고 있고 그 데이터를 ajax로 받아와서 화면에 뿌리고 있습니다.

첨부한 화면처럼 전화번호 필드가 나누어져있지 않았다면 쉬웠겠죠 바로 바인딩 하면 될테니.. 헌데 필드가 나눠지는 바람에 생각할게 너무 많습니다.

지금 제가 구현한 것은 실제 전화번호 정보를 가지고있는 hidden 박스를 하나 만들어서 데이터를 저장해놓고 전화번호 데이터를 split하여 tel1, tel2, tel3라는 필드에 넣어줍니다.

저렇게 하면 화면에 보기엔 알맞게 잘 들어간 것이겠지만..

이제 저 데이터를 update해야 할 경우에, 다시 tel1, tel2, tel3로 되어있는 필드를 합쳐서 실제 전화번호 정보를 가지고있는 hidden에 저장한뒤, jquery.serializeArray()로 form안에 있는 항목들을 저장하여 백엔드로 보냅니다. 그러면 jpa 모델 객체가 받아서 update하는 방식 인데요..

다른것보다 중간에 데이터를 split하고 가공하여 tel1, tel2, tel3라는 필드에 넣어주는 과정이 좀.. 하드코딩같은 느낌도 들고 저런 방법이 맞는 것인지 고민이 되기도 합니다.

글을 적다보니 저렇게 하는게 맞을수도있겠구나 싶긴한데요..

나름 생각해본게 jpa 객체에 DB에는 없는 tel1, tel2, tel3 이런 필드를 만들어서 가공하는 방식으로 해볼려고 했는데 DB에 없는 컬럼이라고하면서 에러가 나기도 했고,

jpa 객체를 상속받아서 tel1, tel2, tel3 추가한 클래스도 만들어봤는데 상속한 객체와 jpa객체가 달라서 persist가 안되더라구요..

오늘 하루종일 고민을 하다가 제대로 코딩도 못했습니다.

두서없이 작성한 글인데 한마디의 조언도 감사히 받겠습니다.

3개의 의견 from SLiPP

2016-05-03 08:59

클라이언트 데이터를 서버에서 받아 조작해야할 필요가 있다면 중간에 DTO를 두는 건 어떨까요? DTO에서 데이터를 받아 split하는 작업을 해서 JPA Entity를 생성해 반환하도록 구현하면 좀 더 깔끔하지 않을까요? 사용자가 입력하는 데이터가 많고, 데이터를 조작해야 하는 경우가 많은 경우 중간에 DTO를 두는 것도 좋은 선택이라 생각합니다.

지금 slipp에서 사용하는 DTO는 https://github.com/javajigi/slipp/blob/original-java/src/main/java/net/slipp/domain/qna/QuestionDto.java 로 구현했어요. 이 DTO를 사용하는 부분은 https://github.com/javajigi/slipp/blob/original-java/src/main/java/net/slipp/service/qna/QnaService.java 의 createQuestion 메소드에서 사용하고 있습니다.

도움이 되었기를 바랍니다.

2016-05-03 09:50

@자바지기

감사합니다 많은 도움 되었습니다.

회사에 웹쪽 개발자가 저밖에 없어서 기술적인 문제는 둘째치고 애매한 상황에서 어떻게 풀어나가야하는지 항상 고민인데 조언해주셔서 감사합니다.!!

의견 추가하기

연관태그

← 목록으로