Skip to content

cheoljin408/final-project-cosmos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🍳 더 자세한 내용은 ↑ pdf 파일 참조.



🌌 COSMOS(코딩 스터디모임s)

  • 성남에서 교육을 받으며 성장과 발전에 대한 목마름으로 시작한 아이디어.

  • 개발 공부를 하고싶은데 내가 원하는 스터디를 찾기 힘들다면?

  • COSMOS에서 내가 공부하고 싶은 분야별로 나만의 스터디 를 만드는 것은 물론,
    LMS 학습관리시스템 으로 스터디를 효율적으로 관리해보자!


📅 개발기간

---

  1. 2021-12-07 ~ 2021-12-30 (약 1개월, Official) : 교육기관 마감기한
  2. 2022-01-03 ~ : 팀원들과 추가기능 구현

👩‍👧‍👧 Teammate

---

  • 김철진 / cheoljin408 : 팀장 및 메인개발자, 코드 형상관리
  • 김병준 / Joonkb : 메인개발자, 개발 리더
  • 김서연 / westkitekim : 메인개발자, 산출물 관리
  • 김중혁 / KimJoongHyeok : 메인개발자, 의사소통 리더
  • 이 용 / nogy21 : 메인개발자, 스터디 리더

✏️ 회의록

---


📚 개발환경 및 적용기술

---

Tech Stack ⤵️

              

           

                 

Collabaration tools⤵️

                 


📐개발 프로세스 및 설계

---

  • TDD와 Agile 방식을 선택하여 필요시마다 설계, 구현, 테스트를 반복하였다.
💷설계 image(접기/펼치기)

💶Usecase Diagram

UseCase Diagram

image

💶ERD

ERD - Logical

image


ERD - Physical

image

💶Class Diagram

Class Diagram

image

💶레이아웃 및 UI 설계

📊 주요기능

---

1차 개발

  • 비회원 : 비회원은 메인페이지에서 현재 모집중인 스터디만 확인할 수 있다.
  • 회원 : 별도의 회원가입 절차없이 소셜로그인(네이버/구글) 기능을 통해 회원으로 서비스이용이 가능하다.
    • 스터디리더 : 스터디를 만든 회원, 스터디를 관리하는 회원
    • 스터디원 : 스터디에 가입되어 있는 회원

1. 메인페이지

  • 메인페이지에서 등록되어 있는 스터디 정보를 최신순으로 6개 보여준다. 스터디 정보에는 스터디 유형, 사용 언어, 스터디 등록일자, 스터디 리더에 대한 정보가 조회된다.
  • 회원상태에서 더보기를 클릭하면 스터디 리스트 페이지로 이동한다.

2. 스터디 리스트 페이지

  • 스터디 리스트 페이지 상단부에 스터디 유형, 사용 언어별로 검색할 수 있는 기능이 있다.
  • 스터디 리스트 페이지는 페이징 처리가 된다.
  • 스터디 카드뷰를 클릭하면 해당 스터디의 상세 페이지로 이동한다.

3. 스터디 모집 게시판

  • 스터디리더 : 스터디리더는 스터디를 개설(등록)하고 수정, 삭제 등 스터디의 전반적인 관리를 할 수 있다.

    • 스터디 관리
      • 스터디 등록 : 스터디 만들기에서 스터디 이름, 유형, 사용 언어와 소개를 적고 스터디를 새로 만들 수 있다.
      • 스터디 수정 / 삭제 : 스터디리더가 자신이 만든 스터디의 상세페이지로 이동하면 스터디에 대한 정보를 수정하거나 삭제할 수 있다.
      • 스터디 상세 페이지 : 스터디 카드뷰를 클릭하면 해당 스터디에 관한 자세한 정보를 확인 할 수 있다. (스터디 상세 소개 등)
      • 댓글 작성 / 수정 / 삭제 : 스터디 상세 페이지에서 댓글을 작성하거나 수정, 삭제할 수 있다. 댓글의 수정 및 삭제는 작성한 본인만 가능하다.
    • 참여신청 관리
      • 참여신청 알림 : 내가 개설한 스터디에 어떤 회원이 신청했는지 확인할 수 있다.
      • 참여신청 수락 / 거절 : 내가 개설한 스터디에 신청한 회원들을 수락하거나 거절할 수 있다. 알림페이지에서 해당 카드뷰 알람을 클릭 후 모달창에서 수락 / 거부를 할 수 이/ㅅ다.
  • 스터디원

    • 스터디 참여 신청 : 스터디 상세 페이지에서 스터디 신청이 가능하다.
    • 참여신청 알림 : 내가 신청한 스터디에 대한 수락 / 거절 결과를 확인할 수 있다. 만약 스터디리더이면서 다른 스터디의 스터디원이라면 우측 상단의 버튼으로 알림페이지 이동이 가능하다

2차 개발

스터디 그룹 관리(LMS)

  • 공지사항 작성 : 스터디리더는 공지사항 작성 / 수정 / 삭제가 가능하며 공지사항 등록시 다중 파일 업로드와 다중 이미지 파일 업로드가 가능하다. 공지글을 등록시 텍스트 편집기로 작성할 수 있다.
  • 과제 관리 : 스터디리더는 과제 공지글을 작성 / 수정 / 삭제가 가능하며 과제 공지를 할 때 파일과 이미지 다중 업로드가 가능하다.
  • 과제 제출 : 스터디원은 과제 공지 게시판에서 댓글로 파일 및 이미지 업로드로 과제 제출이 가능하다.
  • 스터디 모집상태 변경 : 스터디리더는 LMS 페이지 헤더에서 스터디 모집상태를 변경할 수 있다.
  • 스터디 수정/삭제 : 스터디리더는 LMS 페이지 사이드바에 위치한 스터디설정에서 스터디수정/삭제가 가능하다. 하지만 스터디 모집상태는 그 전에 종료상태일 때만 수정/삭제가 가능하다.

🛠️ 트러블슈팅

---

표 펼치기/접기
일자 이슈 내용 해결 방안
21.12.10 오라클(ORACLE)에서 테이블명의 길이 제한 에러코드 ORA-00972 identifier is too long Cause: An identifier with more than 30 characters was specified.Action: Specify at most 30 characters. 테이블명은 오라클에서 30자로 제한을 하고 있으며 30자를 초과시 오류를 생성할수 있음. Oracle 8 버전대에서는 상관없지만 9버전 이상으로 가면서... Alias가 20바이트(영문20자 한글10자)가 초과하면 상기와 같은 오류가 난다.
21.12.11 Oracle PL/SQL if 조건문 c varchar2(200):= '자바'; 를 begin에서 c := '자바'; 로 작성했음에도 에러 컨트롤러에서 처리하는 것으로 해결
21.12.11 Git 문제상황 : 파일의 크기가 1MB이상일 경우 에러발생 에러코드 : the remote end hung up unexpectedly 소스트리에서 자동적으로 push하여 해결완료
21.12.12 Lombok을 사용하여 Getter , Setter를 정의하였고 → 이를 View에서 출력을 하려고 객체의 인스턴스 변수명을 입력하였으나 빨간표시로 제대로된 출력을 할 수 없었음 타임리프로 해당 객체의 인스턴스 변수를 출력하기 위해서는 해당 객체의 Getter 메서 드를 사용하게 된다. 하지만 Lombok을 사용하여 의도치 않은 이름의 Getter 메서드가 정의되었고 해당 메서드를 통해서 출력을 할 수 없었음. (eName → EName)
21.12.13 Study 관련 Service Interface를 스터디 참가신청, 스터디 게시판 댓글과 같이 관련된 기능을 총체적으로 묶어 Service Interface를 구현할 지, 분화하여 구현할 지에 대한 고민을 하였음 기능별로 최대한 분화하여 Service Interface(및 Controller)를 설계한다. 원칙적으로 정해진 것은 아니기 때문에 업무와 서비스의 성격에 따라 결정한다. 하지만 인터페이스가 커지고 메서드 수가 많아진다면 응집도 즉, SOLID원칙 중 단일 책임 원칙(SRP) 을 고려하여 판단해야 한다.
21.12.14 resource 폴더 아래 프로젝트명 . mapper 이름으로 디렉토리를 만들어서 mapper.xml파일을 만들면 파일경로를 찾지못함 resource 폴더 아래 프로젝트명 . mapper 이름으로 디렉토리를 만들어서 mapper.xml파일을 만들면 파일경로를 찾지못함
21.12.14 MyBatis 인스턴스 변수명, 테이블 컬럼명 불일치로 인한 자동참조 에러 파라미터 타입을 선언하여 참조
21.12.15 부트스트랩 카드 정렬 이슈 css 태그에 모든 div의 정렬(div {}
21.12.15 ORA-00911: invalid character, MyBatis 쿼리 작성 중 잘못된 문자 존재. DB에서 작성한 내용을 그대로 사용하여 세미콜론 제거 누락 세미콜론 제거를 통해 해결
21.12.16 MyBatis select 쿼리에서 객체안에 여러 객체가 있을 경우 , 클래스 depth가 두 번 이상 있는 경우에 데이터와 객체 자동 매핑이 불가 resultMap 내부에서 을 사용하여 클래스 depth를 표현. 객체간의 resultmap collection을 사용해서 객체간의 관계를 해결
21.12.16 MyBatis LowerCase 이슈, MyBatis에서 result map을 찾지 못함. LowerCase 이슈. application.properties에 mybatis.type-aliases-package=org.kosta.finalproject.model.domain, mybatis.configuration.map-underscore-to-camel-case=true 설정 추가
21.12.16 thymeleaf 이슈. 컨트롤러에서 전달한 객체를 타임리프로 사용은 가능했지만, 다시 컨트롤러로 전송하는 과정에서 studyDTO의 인스턴스 변수인 categoryTypeDTO, categoryLangDTO 의 인스턴스 변수( categoryTypeNo , categoryType, categoryLangNo, categoryLangType) 파싱 실패 비동기 전송으로 방식을 바꿈
21.12.17 스터디 상세보기에서 본문 내용을 String으로 출력 실패 CLOB 타입으로 DB에 본문 데이터를 저장하였고, 이를 가져와 사용하는 과정에서 String으로 변환되지 않았음. ERROR: oracle.sql.CLOB@77198f88 데이터를 조회하는 과정에서 DBMS_LOB.SUBSTR(column, DBMS_LOB.GETLENGTH(column)) 사용
21.12.18 자바스크립트 안에서 타임리프 사용할때 유의사항 <script th:inline="javascript"> 2 $(function(){ 3 $("#applyStudyBtn").click(function(){ 4 var applyJsonData = { 5 studyNo: /[[${study.get("STUDY_NO")}]]/ 'studyNo', 6 email : /[[${member.email}]]/ 'email', 7 applyContent : $("#applyContent").val() 8 };
21.12.18 html 버튼 링크 이슈. 타임리프에서 버튼에 링크를 제공할 때 기존 html의 onclick=location.href로 이동 불가 <button type="button" th:onclick="

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published