해결된 질문
작성
·
3K
6
안녕하세요. 6개월차 신입 개발자입니다.
실무에서 php(코드 이그나이터)로 개발을 하다가 스프링부트를 알게되어서 따로 공부하고 연습하고 있는 상황입니다.
매번 서비스를 개발할때에 요구사항을 먼저 받고 데이터베이스 설계를 마친뒤에 코드를 개발하곤 했었습니다.
6개월간 그렇게 개발을 하다보니까 데이터베이스 관점으로 생각하고 개발을 하고있게 되었습니다.
영한님이 준비해주신 요구사항들과 엔티티설계 데이터베이스 관계 설계를 보고 클래스를 만들고
코드를 짜는데 무리는 없지만. 정작 요구하는 사람들은 백지에서 원하는 기능만 설명하고 구현해달라!
이런식으로 나오니까 제 머리가 백지가 되어서 결국 PHP짜던식으로 디비설계 -> 비즈니스로직짜기 -> 비즈니스 로직에 필요한 디비컬럼이 없으면 넣고 -> 비즈니스 로직 짜기 -> 무한반복 -> 리팩토링
이런식으로 갑니다. 너무 비 효율적이라고 생각하게 됩니다.
이번에 jpa기본부터 spring data jpa 4강의를 수강하고 실무환경에서 바로 쓸수있도록 하나의 서비스를 개발해보자!
라는 마음으로 개발을 하고있었습니다만..
요구사항을 만들고 그에대한 엔티티 설계에서 부터 막히게 되었습니다.
1. 클래스 엔티티 = 데이터 베이스 엔티티 라고 생각하는게 맞을까요?
2. 데이터베이스를 짜고 그에 맞는 클래스 엔티티를 짜는게 맞을까요?
3. 서비스를 만드실려고 요구사항을 받은 시점에서 데이터 베이스 관점에서 설계를 하고 그 위에 엔티티클래스들을 맞게 설계하고 그뒤에 클래스들을 잘게잘게 쪼개는 형식으로 개발을 해야할까요?
4. 아니면 데이터 베이스 정규화를 먼저하고 그뒤에 엔티티클래스를 만들고 개발하는게 맞을까요?
5. 디비설계 -> 비즈니스로직 -> 없는 컬럼 넣기 -> 비즈니스로직 이런 패턴이 잘못되었을까요? 처음부터 요구한 설계에 맞게 완벽한 설계후 개발을 해야할까요?
6. 데이터베이스 , 엔티티클래스 설계에 참고할만한 서적이나 강의영상이 있으시면 추천 부탁드립니다 .
좋은 강의 감사합니다!
답변 1
16
반갑습니다. 와니님
역시 토이프로젝트를 해보는 것 만큼 좋은 것은 없지요^^!
ORM은 사실 둘다를 잘해야 합니다. Object인 객체지향 분석 설계도 잘 알아야 하고, Relational 그러니까 관계형 데이터베이스도 잘 알아야 합니다.
저는 다음 순서가 좋다 생각합니다.
1. 엔티티 클래스 설계
엔티티 클래스를 설계합니다. 필요하면 엔티티를 UML로 그립니다.
2. DB 테이블 설계
엔티티 클래스 설계 단계에서 사실 필요한 DB 테이블의 그림 어느정도 그려집니다. 여기서는 ERD를 그리고 DB 특성에 맞는 PK, FK, INDEX, 제약조건 같은 부분에 초점을 맞춥니다.
3. 엔티티 클래스와 DB 테이블 설계를 성능과 제약에 맞추어 양방향으로 조율
엔티티 클래스 객체를 중심으로 설계해도, 현실적으로 DB에 데이터를 넣어야 하므로, 구조적 한계가 있을 수 있습니다. 성능 때문에 역정규화가 필요할 때도 있습니다. 이런 부분을 고려해서 엔티티 클래스를 DB에 맞추는 과정을 반복합니다.
그런데 요구사항을 만들고 그에대한 엔티티 설계에서 부터 막히게 되었습니다.
-> 이 부분을 듣고 느끼는게, 요구사항이 명확하지 않은 듯 합니다. 요구사항은 필요한 필드들은 다 나올 정도가 되어야 합니다. 요구사항만으로 엔티티 클래스 설계와, DB 테이블 설계가 자연스럽게 나올 정도로 요구사항을 다듬으셔야 합니다.
6. 데이터베이스 , 엔티티클래스 설계에 참고할만한 서적이나 강의영상이 있으시면 추천 부탁드립니다 .
-> 데이터베이스는 서점에 가셔서 가장 쉬운 책을 한권 보시고, 그 다음에 좀 어려운 책을 보시길 권합니다. 제가 보던 시절의 책들은 대부분 절판되었더라구요 ㅠㅠ. 객체지향 설계에 대한 부분은 단기간에 실력이 늘기 쉽지 않습니다. 조영호님의 책을 추천하고, 추가로 도메인 주도 설계(DDD)관련된 책들도 추천합니다.
감사합니다^^