<융합 프로젝트> 구 프로젝트> 舊버전 : class diagram 그리기

코딩 고양이·2024년 10월 4일

융합프로젝트

목록 보기
2/3

이론은 하단에 정리

https://velog.io/@ansebin1022/class-diagram-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EC%9E%91%EC%84%B1%EB%B2%95

1. 객체, 관계 정의하기

객체 정리

  1. User
  2. Admin
  3. To-Do
  4. Post
  5. Chat
  6. MonthlyEvaluation

- 관계 간단히

- 관계 세부사항

1. 사용자 동작

  • 로그인
    • 사용자는 이메일과 비밀번호를 입력해 로그인
    • 로그인 성공 시, 사용자 세션 시작 / 사용자 대시보드로 이동
  • 로그아웃
    • 사용자는 현재 로그인된 상태에서 로그아웃을 선택
    • 시스템은 사용자 세션을 종료하고 로그인 화면으로 이동
  • 프로필 이미지 변경
    • 사용자는 프로필 이미지 변경 버튼을 클릭해 새 이미지 업로드
    • 시스템은 이미지 확인 후 사용자 프로필을 업데이트
  • to-do 작성
    • 사용자는 새 to-do 항목 작성 폼에 정보 입력
    • 작성된 항목은 DB에 저장
  • to-do 추가
    • 사용자는 기존 to-do 리스트에 새 항목 추가 가능
  • to-do 수정
    • 사용자는 기존의 to-do 항목을 선택하여 수정 가능
    • 수정된 항목 DB에 업데이트
  • 상태 변경 (완료, 미완료)
    • 사용자는 to-do 항목 상태를 완료 / 미완료로 변경
    • 변경된 상태는 DB에 업데이트
  • to-do 삭제
    • 사용자는 특정 to-do 항목을 선택해 삭제 가능
    • 삭제된 항목은 데이터베이스에서 제거
  • theme 선택
    • 사용자는 제공된 테마 중 하나를 선택해 샘플 to-do 리스트를 열람
  • 원하는 to-do 선택
    • 사용자는 선택한 테마에 해당하는 샘플 to-do 리스트에서 원하는 항목을 선택 > 자신의 리스트에 추가

2. 관리자 동작

  • 사용자 계정 정지 및 삭제
    • 관리자는 특정 사용자 계정 정지 / 삭제 가능
    • 정지된 계정은 로그인 불가 / 삭제된 계정은 DB에서 제거
  • 게시물 삭제
    • 관리자는 특정 게시물을 선택해 삭제 가능
    • 삭제된 게시물은 DB에서 제거
  • 채팅방 삭제
    • 관리자는 특정 채팅방 삭제 가능
    • 삭제된 채팅방은 더 이상 접근 불가
  • 테마 수정
    • 관리자는 기존 테마의 이름 / 설명 수정 가능
    • 수정된 테마는 DB에 업데이트 / 사용자가 열람할 수 있도록 반영
  • 테마 삭제
    • 관리자는 특정 테마 삭제 가능
    • 삭제된 테마는 관련된 샘플 to-do 리스트와 함께 제거 / 사용자가 선택 불가
  • 테마 추가
    • 관리자는 새로운 테마를 추가해 사용자에게 제공 가능
    • 추가된 테마는 DB에 저장 / 사용자가 선택 가능하도록 반영
  • sample to-do 작성
    • 관리자는 새로운 샘플 to-do 항목 작성 가능
    • 작성된 항목은 해당 테마에 추가
  • sample to-do 추가
    • 관리자는 기존의 샘플 to-do 리스트에 새로운 항목 추가 가능
  • sample to-do 수정
    • 관리자는 기존의 샘플 to-do 항목을 선택해 수정 가능
  • sample to-do 삭제
    • 관리자는 특정 샘플 to-do 항목 삭제 가능
    • 삭제된 항목은 해당 테마에서 제거
  • 게시물 작성
    • 관리자는 새로운 게시물을 작성 가능
    • 작성된 게시물은 DB에 저장
  • 게시물 수정
    • 관리자는 기존의 게시물을 선택해 수정 가능
  • 게시물 삭제
    • 관리자는 특정 게시물 삭제 가능
  • 게시판 편집
    • 관리자는 게시판의 내용 수정 / 업데이트 가능

3. 사용자 : 채팅방 동작

  • 채팅방 개설
    • 사용자는 새로운 채팅방 생성 / 참여할 수 있는 사용자 인원 선택
    • 생성된 채팅방은 사용자에게 표시
  • 채팅
    • 사용자는 채팅방에 메시지를 작성 / 전송
    • 전송된 메시지는 해당 채팅방에 있는 모든 사용자에게 표시
  • 채팅방 나가기
    • 사용자는 현재 참여 중인 채팅방에서 나가기 가능
    • 나간 채팅방은 사용자 목록에서 제거
  • 채팅방 삭제 (방장)
    • 방장은 채팅방을 삭제 가능
    • 삭제된 채팅방은 더 이상 접근 불가

4. 사용자 : 채팅메시지

  • 작성
    • 사용자는 채팅방에서 메시지 작성 가능
    • 작성된 메시지는 채팅방의 대화 목록에 추가

5. 사용자: 월말보고서

  • 열람
    • 사용자는 월말보고서를 열람 가능
    • 자신의 진행 상황과 실천률 등을 확인

6. 게시물 : attach

  • 이미지 업로드
    • 사용자는 게시물 작성 시 이미지 첨부 가능
    • 첨부된 이미지는 DB에 저장 / 게시물에 연결

+) 클래스 다이어그램 X 부분 처리

  1. 프로필 이미지 테이블은 부속성으로 남겨두기 => user attribute로 남겨두기

  2. 채팅방 인원수 count join table => user - chatroom 1:n 연결
    인원수 count는 따로 코딩 처리

  3. UserSampleSelect 같은 조인 테이블을 굳이 표현 X => User, Theme, SampleToDo 클래스 간의 관계만 처리

  4. UserSampleSelect 는 따로 코딩을 통해 db에 적절히 저장하는 부분만 잘 처리해주면 됨

2. 메서드 접근자, type 설정

3-1. 관계 연결 최종

  1. User -> ToDo
  • 연관 관계: User는 여러 개의 ToDo를 생성/수정/삭제 가능
    => 1:n 관계
  • 관계 타입: 합성 (Composition)
  • ToDo는 User에 속함
  • User가 삭제되면 ToDo 객체도 함께 삭제
  • 사용자가 ToDo를 관리하는 역할
  • ToDo 객체는 사용자에 의해 생성, 사용자 삭제 = 함께 삭제
  1. Admin -> User
  • 연관 관계: Admin은 User를 관리
  • 관계 타입: 연관 (Association)
  • Admin은 User를 관리할 권한 보유
  • 관리자는 사용자를 정지시키거나 삭제하는 등의 관리 작업을 수행
  1. User -> Theme
  • 연관 관계: User는 하나 이상의 Theme 선택 가능
  • 관계 타입: 집합 (Aggregation)
  • User는 여러 개의 Theme와 연결 가능
  • 하지만 사용자가 테마를 삭제 > 테마 자체는 다른 사용자와 공유됨
  • 테마는 여러 사용자가 공유할 수 있으므로 독립적인 엔티티로 존재, 하지만 사용자의 선택에 따라 연결
  1. Admin -> Theme
  • 연관 관계: Admin은 테마를 추가, 삭제, 수정 가능
  • 관계 타입: 연관 (Association)
  • Admin은 Theme을 추가, 수정, 삭제할 수 있는 권한 보유
  • 관리자는 테마를 관리하는 역할
  1. User -> SampleToDo
  • 연관 관계: User는 SampleToDo를 선택
  • 관계 타입: 집합 (Aggregation).
  • User는 하나 이상의 SampleToDo를 선택할 수 있지만, SampleToDo는 독립적인 객체로 존재 가능
  • 사용자가 샘플 ToDo를 선택해서 추가 가능, 하지만 샘플 ToDo 자체는 여러 사용자와 공유
  1. Admin -> SampleToDo
  • 연관 관계: Admin은 SampleToDo를 생성, 수정, 삭제
  • 관계 타입: 의존 (Dependency)
  • Admin은 SampleToDo와 관련된 작업을 수행할 때마다 의존
  • 관리자가 샘플 ToDo를 관리하는 과정에서 샘플 ToDo 객체와 상호작용
  1. User -> Post
  • 연관 관계: User는 여러 개의 게시물을 작성
  • 관계 타입: 집합 (Aggregation)
  • 사용자가 작성한 게시물은 사용자와 연결, 하지만 사용자가 삭제되더라도 게시물은 남음
  • 게시물은 사용자가 작성한 후에도 독립적으로 존재할 수 있는 객체
  1. Admin -> Post
  • 연관 관계: Admin은 Post를 관리
  • 관계 타입: 의존 (Dependency)
  • Admin은 게시물 관련 작업을 수행할 때마다 Post 클래스에 의존
  • 관리자는 게시물 관련 기능을 수행하며 Post 클래스에 의존
  1. User -> ChatRoom
  • 연관 관계: User는 여러 개의 ChatRoom에 참여 / 개설
  • 관계 타입: 집합 (Aggregation)
  • User와 ChatRoom은 독립적으로 존재, 하지만 사용자의 채팅방 생성 및 참여 또한 가능
  • 사용자가 채팅방 개설 / 참여해도 채팅방 자체는 독립적으로 존재
  1. ChatRoom -> ChatMessage
  • 연관 관계: ChatRoom에는 여러 개의 ChatMessage가 존재
  • 관계 타입: 합성 (Composition)
  • ChatMessage는 ChatRoom에 종속, 채팅방 삭제 > 메시지 삭제
  • 채팅방이 삭제 > 메시지도 삭제, 메시지는 채팅방에 종속적인 객체
  1. User -> ChatMessage
  • 연관 관계: User는 여러 개의 ChatMessage를 보냄
  • 관계 타입: 집합 (Aggregation)
  • 사용자가 삭제되더라도 메시지는 남음
  • 메시지는 사용자가 작성한 후에도 독립적으로 존재할 수 있는 객체
  1. User -> MonthlyEvaluation
  • 연관 관계: User는 하나의 월말 평가를 받음
  • 관계 타입: 합성 (Composition)
  • User가 삭제되면 MonthlyEvaluation도 함께 삭제됨.
  • 월말 평가도 독립적으로 존재할 수 있는 객체
  1. Theme -> SampleToDo
  • 연관 관계: Theme은 여러 개의 SampleToDo를 포함
  • 관계 타입: 합성 (Composition)
  • SampleToDo는 특정 Theme에 종속, 테마가 삭제 > 샘플 ToDo도 함께 삭제
  • 샘플 ToDo는 특정 테마에 의존해 존재하는 객체
  • 테마가 삭제 = 함께 삭제

3-2. 관계 연결 1차 시도

User -> ToDo

  • 연관 관계: User는 여러 개의 ToDo를 생성/수정/삭제 가능
    => 1:n 관계
  • 관계 타입: 집합 (Aggregation)
  • ToDo는 User에 속함
  • User가 삭제되더라도 ToDo 객체는 독립적으로 존재
  • 사용자가 ToDo를 관리하는 역할
  • ToDo 객체는 사용자에 의해 생성, 하지만 독립적으로 존재

Admin -> User

  • 연관 관계: Admin은 User를 관리
  • 관계 타입: 의존 (Dependency)
  • Admin은 특정 동작을 수행할 때마다 User 클래스에 의존
    (사용자를 정지시키는 작업을 위해 User 객체를 참조)
    관리자는 사용자를 정지시키거나 삭제하는 등의 관리 작업을 수행

User -> Theme

  • 연관 관계: User는 하나 이상의 Theme 선택 가능
  • 관계 타입: 집합 (Aggregation)
  • User는 여러 개의 Theme와 연결 가능
  • 하지만 사용자가 테마를 삭제 > 테마 자체는 다른 사용자와 공유됨
  • 테마는 여러 사용자가 공유할 수 있으므로 독립적인 엔티티로 존재, 하지만 사용자의 선택에 따라 연결

Admin -> Theme

  • 연관 관계: Admin은 테마를 추가, 삭제, 수정 가능
  • 관계 타입: 의존 (Dependency)
  • Admin이 테마 관련 작업을 수행할 때마다 Theme 클래스에 의존
  • 관리자는 테마를 관리하는 역할 => 기능 수행 시 Theme에 의존

User -> SampleToDo

  • 연관 관계: User는 SampleToDo를 선택
  • 관계 타입: 집합 (Aggregation).
  • User는 하나 이상의 SampleToDo를 선택할 수 있지만, SampleToDo는 독립적인 객체로 존재 가능
  • 사용자가 샘플 ToDo를 선택해서 추가 가능, 하지만 샘플 ToDo 자체는 여러 사용자와 공유

Admin -> SampleToDo

  • 연관 관계: Admin은 SampleToDo를 생성, 수정, 삭제
  • 관계 타입: 의존 (Dependency)
  • Admin은 SampleToDo와 관련된 작업을 수행할 때마다 의존
  • 관리자가 샘플 ToDo를 관리하는 과정에서 샘플 ToDo 객체와 상호작용

User -> Post

  • 연관 관계: User는 여러 개의 게시물을 작성
  • 관계 타입: 집합 (Aggregation)
  • 사용자가 작성한 게시물은 사용자와 연결, 하지만 사용자가 삭제되더라도 게시물은 남음
  • 게시물은 사용자가 작성한 후에도 독립적으로 존재할 수 있는 객체

Admin -> Post

  • 연관 관계: Admin은 Post를 관리
  • 관계 타입: 의존 (Dependency)
  • Admin은 게시물 관련 작업을 수행할 때마다 Post 클래스에 의존
  • 관리자는 게시물 관련 기능을 수행하며 Post 클래스에 의존

User -> ChatRoom

  • 연관 관계: User는 여러 개의 ChatRoom에 참여 / 개설
  • 관계 타입: 집합 (Aggregation)
  • User와 ChatRoom은 독립적으로 존재, 하지만 사용자의 채팅방 생성 및 참여 또한 가능
  • 사용자가 채팅방 개설 / 참여해도 채팅방 자체는 독립적으로 존재

ChatRoom -> ChatMessage

  • 연관 관계: ChatRoom에는 여러 개의 ChatMessage가 존재
  • 관계 타입: 합성 (Composition)
  • ChatMessage는 ChatRoom에 종속, 채팅방 삭제 > 메시지 삭제
  • 채팅방이 삭제 > 메시지도 삭제, 메시지는 채팅방에 종속적인 객체

User -> ChatMessage

  • 연관 관계: User는 여러 개의 ChatMessage를 보냄
  • 관계 타입: 집합 (Aggregation)
  • 사용자가 삭제되더라도 메시지는 남음
  • 메시지는 사용자가 작성한 후에도 독립적으로 존재할 수 있는 객체

User -> MonthlyEvaluation

  • 연관 관계: User는 하나의 월말 평가를 받음
  • 관계 타입: 집합 (Aggregation)
  • 간 평가는 사용자의 활동에 따라 생성, 하지만 사용자와 분리되어 존재
  • 월말 평가도 독립적으로 존재할 수 있는 객체

Theme -> SampleToDo

  • 연관 관계: Theme은 여러 개의 SampleToDo를 포함
  • 관계 타입: 합성 (Composition)
  • SampleToDo는 특정 Theme에 종속, 테마가 삭제 > 샘플 ToDo도 함께 삭제
  • 샘플 ToDo는 특정 테마에 의존해 존재하는 객체
  • 테마가 삭제 = 함께 삭제

GPT에서의 변경사항

위 사항을 입력한 후 수정사항이 있나 질문함

  1. ToDo와 User 관계
    - 현재 상태: Aggregation으로 설정되어 있음.

    - 왜 수정해야 할까?
    Aggregation은 두 객체 간의 관계가 느슨한 경우를 나타내. 즉, 부모 객체(여기서는 User)가 삭제되면 자식 객체(ToDo)는 여전히 존재할 수 있어. 하지만 ToDo가 User와 깊은 연결이 없다고 생각하면, 단순한 연관 관계가 더 적합해. 이 경우, ToDo는 User의 관리하에 있지만, 그 자체로도 독립적으로 존재할 수 있는 객체라고 봐야 해.

    - 수정할 화살표
    일반적인 연관 관계 화살표로 변경해. 이는 두 클래스 간의 관계가 있지만, 서로에 대해 큰 의존성이 없음을 나타내.

  2. Theme -> SampleToDo 관계
    - 현재 상태: 합성(Composition)으로 설정되어 있음.

    - 왜 수정해야 할까?
    합성 관계는 자식 객체(SampleToDo)가 부모 객체(Theme)에 종속적이라는 뜻이야. 만약 Theme가 삭제되면 그에 속한 SampleToDo도 같이 삭제돼. 하지만, SampleToDo는 다른 사용자와 공유될 수 있기 때문에, Theme가 없어도 여전히 존재할 수 있어야 해. 그러므로 Aggregation으로 바꾸는 게 적합해.

    - 수정할 화살표
    Aggregation 화살표로 변경하거나, 일반적인 연관 관계 화살표로 변경해. 이로 인해 SampleToDo는 특정 Theme에 속할 수 있지만, 독립적인 객체로서 다른 Theme에 재사용될 수 있음을 나타낼 수 있어.

  3. ChatRoom과 ChatMessage 관계
    - 현재 상태: 합성(Composition)으로 설정되어 있음.

    - 왜 수정해야 할까?
    합성 관계는 ChatMessage가 ChatRoom에 종속적이라는 의미야. 즉, ChatRoom이 삭제되면 ChatMessage도 삭제되는 구조이지. 하지만, ChatMessage는 사용자 간의 대화 내역을 나타내므로 독립적인 객체로 남길 수 있어야 해. ChatRoom이 없어도 대화 기록은 유지될 수 있으니, 이 관계는 Aggregation으로 변경해야 해.

    - 수정할 화살표
    Aggregation 화살표로 변경하거나, 일반적인 연관 관계 화살표로 변경해. 이렇게 하면 ChatMessage는 특정 ChatRoom에 소속되지만, 독립적으로 존재할 수 있다는 점을 강조할 수 있어.

참고 사이트

https://gmlwjd9405.github.io/2018/07/04/class-diagram.html
https://ainayoon.tistory.com/9

profile
Hello, World!

0개의 댓글