본문 바로가기

프로그래밍/소개팅 웹 애플리케이션

소개팅 웹 애플리케이션(1)_설계도

인프런 김영한 강사의 강의를 학습하면서 평소에 만들어보고 싶었던 소개팅 웹 애플리케이션을 만들어가면서 따라가 보았습니다.

확실히 내가 직접 설계를 할때 생각과 고민을 하면서 강의를 따라가보니 강사님이 왜 어떤 포인트에서 강조했는지 깨닫는 부분들이 많았고 이해가 더 잘되었습니다. 실무에 강하신 분이라 실수나 개념 오해가 많은 부분을 잘 짚어주셔서 고민하는 시간을 줄일수 있었습니다.

 

이 애플리케이션은 Spring MVC 패턴으로 설계하였고 Spring boot 환경에서 JPA를 사용하여 코딩했습니다.

데이터베이스 접근 기술은 Spring data JPA와 QueryDSL을 사용하였고 데이터베이스는 h2 입니다.

오늘부터 이 애플리케이션에 대한 리뷰를 시작해보겠습니다.

애플리케이션의 이름은 '그대 만 보기' 입니다. 그대를 향한 건강한 만보기란 뜻으로 약간의 언어유희를 사용했습니다.

 

 

엔티티와 테이블 설계

 

 

먼저 사용자인 회원 객체에 대한 설계도 입니다.

기본적인 타입은 위와 같고 컬렉션이 필요한 경우는 JPA에서 일대다 관계를 사용하여 연관관계 매핑을 해주었습니다.

직접 컬렉션을 사용한 부분은 id_list 인데 간단한 부분이기 때문에 사용해 보았습니다.(컬렉션을 쓰더라도 내부적으로는 일대다 테이블이 만들어 집니다.)

이 변수는 나중에 매칭할때마다 매칭된 상대 아이디를 저장해서 중복해서 매칭되지 않도록 하기 용도입니다,

회원 한명당 여러개의 사진을 올릴수 있으므로 ImageEntity 리스트를 갖게되고 또 여러개의 쪽지를 받을수 있으므로 Message 리스트를 갖게 됩니다. 따라서 일다대로 매핑해 주었습니다.

추가로 Coord라는 값타입 객체를 따로 만들어주었습니다. 이것은 회원가입할때 회원의 위도와 경도를 저장할 용도입니다.

 

다음은 애플리케이션의 게시판에 대한 설계도 입니다.

 

 

 

기본적인 게시판에 대한 속성들은 위와 같고 한 게시글에 대해 여러개의 댓글이 달릴수 있으므로 게시글과 댓글을 일대다 연관관계로 매핑해주었습니다. 이렇게 전체적인 엔티티와 테이블을 설계해 보았습니다.

 

도메인 모델 계층 설계

 

멤버(회원) 객체는 기본적인 컨트롤러 -> 서비스 -> 리포지토리 계층으로 구성됩니다

멤버 객체에 대한 리포지토리는 스프링 데이터 JPA를 사용하기 위해 JpaRepository를 상속하고 또 QueryDSL을 사용하기위해 커스텀 또한 상속하고 MemberRepositoryImpl로 구현을 해줍니다.(관례적인 노테이션을 따라야만 스프링에서 적용이 됩니다.)

 

 

보드(게시글) 객체 또한 같은 흐름이고 QueryDSL은 사용하지 않기 때문에 리포지토리는 스프링 데이터 JPA를 사용하기 위한JpaRepository만 상속합니다.

나머지 객체들도 컨트롤러만 없을뿐 다 위와 비슷하게 설계하였습니다.

 

 

 

이렇게 전반적으로 애플리케이션의 구조를 설계하고 정리해보았습니다. 다음부터는 웹페이지를 다뤄보도록 하겠습니다.