[Java] 커뮤니티 어플리케이션

당당·2023년 4월 25일
0

Java

목록 보기
20/20
post-thumbnail

https://github.com/dangdangs0/community

📆개발 시기

2023.04.25.-2023.07.31


📝개발 목적

대학교 2학년 때 Java 프로젝트로 동물병원 어플리케이션을 만든 적이 있었다. 하지만 그때는 Database를 배우지 않은 상태여서 DB작업은 선배 두분이서 해주었다. 그때 담당한 역할은 UI개발 및 로그인, 병원 조회 등의 기능이었다.

이제는 혼자서 Java 프로젝트를 만들고 싶었다.
UI 및 기능 개발, 데이터베이스, 데이터베이스와 Java의 연동까지!



커뮤니티 어플리케이션을 개발하려고 한다.

  • 회원가입, 로그인, 회원탈퇴 기능
  • 메인 화면에서 검색을 통해 게시글을 조회
  • 새로고침 버튼을 통해 게시글을 새로고침 할 수 있는 기능
  • 비회원은 게시글을 읽을 수 있지만, 댓글을 달 수 없음
  • 회원가입 시 관심분야를 선택할 수 있어, 로그인한 사용자는 관심분야에 관한 게시글 위주로 볼 수 있는 기능
  • 로그인한 사용자를 대상으로, 게시글을 쓴 작성자를 신고/차단 할 수 있는 기능
  • 작성자의 다른 게시글을 볼 수 있는 기능
  • 로그인한 사용자는 댓글을 달 수 있음
  • 로그인한 사용자만 글쓰기가 가능함
  • 자기 자신이 쓴 게시글을 확인할 수 있고, 삭제할 수 있음
  • 설정에서 사진 변경, 삭제, 닉네임 변경, 한 줄 소개 변경을 할 수 있음
  • 설정에서 비밀번호를 변경할 수 있으며, 차단목록 관리를 할 수 있음

🔍개발 환경

Windows 10
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz 3.40 GHz
16GB
Java
jdk 17
Oracle 19c 

📕프로젝트 기능

  • 회원가입, 로그인, 회원탈퇴 기능
  • 메인 화면에서 검색을 통해 게시글을 조회
  • 새로고침 버튼을 통해 게시글을 새로고침 할 수 있는 기능
  • 비회원은 게시글을 읽을 수 있지만, 댓글을 달 수 없음
  • 회원가입 시 관심분야를 선택할 수 있어, 로그인한 사용자는 관심분야에 관한 게시글 위주로 볼 수 있는 기능
  • 로그인한 사용자를 대상으로, 게시글을 쓴 작성자를 신고/차단 할 수 있는 기능
  • 작성자의 다른 게시글을 볼 수 있는 기능
  • 로그인한 사용자는 댓글을 달 수 있음
  • 로그인한 사용자만 글쓰기가 가능함
  • 자기 자신이 쓴 게시글을 확인할 수 있고, 삭제할 수 있음
  • 설정에서 사진 변경, 삭제, 닉네임 변경, 한 줄 소개 변경을 할 수 있음
  • 설정에서 비밀번호를 변경할 수 있으며, 차단목록 관리를 할 수 있음

🙄UI 구상

https://ovenapp.io/view/OpkJuNJvakRxMxmOVHYWnY3oL3yCmSny/

메인 화면 UI

처음 어플리케이션을 실행하면, 메인 화면이 나타난다.
게시글을 검색할 수 있고 볼 수 있다. 하지만, 로그인을 하지 않으면 댓글을 달거나 차단, 신고를 할 수 없다.
프로필 사진 옆의 닉네임은 로그인시만 본인 닉네임이 나타난다.
프로필 사진 클릭 시, 로그인을 위한 팝업이 뜨며 그를 통해 로그인/회원가입을 할 수 있다.

로그인 팝업 UI

만약 ID, PW 모두 DB에 존재하고, 일치한다면 로그인이 성공한다.

로그인 횟수에 따른 로그인 차단 기능은 자바에 OAuth를 넣을 수 있다면 넣어볼 것이다! 이메일로 로그인할 수 있게 하고, 이메일 인증도 받고, 만약 로그인이 차단된다면 이메일이 가서 그 인증번호를 입력해야 한다는 식으로!

Create Account창을 누르면, 회원가입 창으로 넘어간다.

회원가입 팝업 UI

저 사항이 다 만족되고, 중복이 없으면 회원가입이 된다!
(밑에 회원가입 버튼을 안그렸지만, 넣을 것이다!)

각 게시글 UI

댓글 옆의 :버튼은 댓글을 신고하는 기능이다.
좋아요 기능을 통해 좋아요를 눌러둔 게시글은 내 좋아요 목록에서 확인할 수 있다.

사용자 설정 UI

본인 프로필 클릭 시/다른 사람 프로필 클릭 시


내 게시글 관리 창에서는 내가 올렸던 게시글을 확인할 수 있고, 이전에 작성한 게시글을 삭제할 수 있다.

게시글 보기 UI

삭제하기는 자신의 게시글 보기 UI에서만 뜬다.


🔍요구사항 명세서

  1. 회원은 아이디, 비밀번호, 닉네임, 관심 분야, 프로필 사진, 한 줄 소개를 가진다.
  2. 게시글은 게시글번호, 제목, 내용, 작성자, 사진, 분야를 가진다.
  3. 댓글은 게시글번호, 댓글번호, 작성자아이디, 댓글 내용을 가진다.
  4. 하나의 게시글은 여러개의 댓글을 가질 수 있다.
  5. 회원은 여러 개의 게시글을 작성할 수 있다.
  6. 게시글은 한 명의 회원에 의해서 작성된다.
  7. 댓글은 하나의 게시글에만 포함될 수 있다.
  8. 한 명의 회원은 하나의 게시글에 여러 개의 댓글을 작성할 수 있다.
  9. 하나의 댓글은 한 명의 회원에 의해서 작성된다.
  10. 한 명의 회원은 하나의 관심분야를 가질 수 있고, 가지지 않을 수 있다.
  11. 하나의 게시글은 하나의 분야를 가질 수 있고, 가지지 않을 수 있다.
  12. 분야는 분야번호, 분야명을 가진다.
  13. 신고는 신고자명, 신고아이디를 가진다.
  14. 차단은 사용자명, 차단아이디를 가진다.
  15. 한 명의 사용자는 여러 사용자를 신고할 수 있고, 하지않을 수도 있다.
  16. 한 명의 사용자는 여러 사용자를 신고할 수 있고, 하지않을 수도 있다.

📊E-R 다이어그램

개체속성 추출을 하면 다음과 같다.

개체속성
회원아이디, 비밀번호, 닉네임, 관심분야, 프로필사진, 한줄소개
게시글게시글번호, 제목, 내용, 작성자, 사진, 분야
댓글게시글번호,댓글번호,작성자아이디,댓글내용
분야분야번호, 분야명
차단사용자명, 차단아이디
신고신고자명, 신고아이디




관계 추출을 하면 다음과 같다.

관계참여 개체관계 유형속성
속함게시글(필수),댓글(선택)1:M-
작성회원(필수),게시글(선택)1:M-
작성회원(필수),댓글(선택)1:M-
포함회원(필수),분야(선택)1:1-
포함게시글(필수),분야(선택)1:1-



ERD

(차단, 신고 테이블은 제외)


🎫릴레이션 스키마

진한 글씨 : 기본키
기울임 글씨 : 외래키
  • 회원 릴레이션 ( 아이디, 비밀번호, 닉네임, 관심분야, 프로필사진, 한줄소개 )
  • 게시글 릴레이션( 게시글번호, 제목, 작성자, 내용, 사진, 분야)
  • 댓글 릴레이션( 댓글번호,게시글번호,작성자, 댓글내용)
  • 분야 릴레이션 (분야번호, 분야명)
  • 차단 릴레이션(사용자명,차단아이디)
  • 신고 릴레이션(사용자명,신고아이디)

🔑테이블 생성 및 데이터 삽입

유저 생성

ALTER SESSION SET "_ORACLE_SCRIPT"=true;
create user community identified by 비밀번호;

grant dba to community;

community 계정을 생성한 후, dba권한 부여


테이블 생성

create table 분야(
    분야번호 number primary key,
    분야명 varchar2(20)
);
create table 회원(
    아이디 varchar2(20) PRIMARY KEY,
    비밀번호 varchar2(50) not null,
    닉네임 varchar2(50) not null,
    관심분야 number,
    프로필사진 blob,
    한줄소개 varchar2(100),
    foreign key(관심분야) references 분야(분야번호)
);
create table 게시글(
    게시글번호 number PRIMARY KEY,
    제목 varchar2(50) not null,
    작성자 varchar2(20) not null,
    내용 clob not null,
    사진 blob,
    분야 number,
    foreign key(분야) references 분야(분야번호),
    foreign key(작성자) references 회원(아이디)
);
create table 댓글(
    게시글번호 number,
    댓글번호 number,
    작성자 varchar2(20) not null,
    내용 varchar(1000) not null,
    primary key(댓글번호, 게시글번호),
    foreign key(게시글번호) references 게시글(게시글번호),
    foreign key(작성자) references 회원(아이디)
);
create table 차단(
    사용자명 varchar2(20),
    차단아이디 varchar2(20),
    foreign key(사용자명) references 회원(아이디),
    foreign key(차단아이디) references 회원(아이디),
    primary key(사용자명, 차단아이디)
);
create table 신고(
    신고자명 varchar2(20),
    신고아이디 varchar2(20),
    foreign key(신고자명) references 회원(아이디),
    foreign key(신고아이디) references 회원(아이디),
    primary key(신고자명, 신고아이디)
);
create sequence seq_theme; --분야번호 시퀀스 생성
create sequence seq_post; --게시글 시퀀스
create sequence seq_reply; --댓글 시퀀스



데이터 삽입

--분야 테이블
insert into 분야 values(seq_theme.nextval,'쇼핑');
insert into 분야 values(seq_theme.nextval,'음악');
insert into 분야 values(seq_theme.nextval,'영화');
insert into 분야 values(seq_theme.nextval,'게임');
insert into 분야 values(seq_theme.nextval,'스포츠');
insert into 분야 values(seq_theme.nextval,'학습');
insert into 분야 values(seq_theme.nextval,'패션');
insert into 분야 values(seq_theme.nextval,'뷰티');
insert into 분야 values(seq_theme.nextval,'뉴스');
insert into 분야 values(seq_theme.nextval,'가정');
insert into 분야 values(seq_theme.nextval,'경제');
insert into 분야 values(seq_theme.nextval,'정치');
insert into 분야 values(seq_theme.nextval,'컴퓨터');
insert into 분야 values(seq_theme.nextval,'종교');
insert into 분야 values(seq_theme.nextval,'여행');
insert into 분야 values(seq_theme.nextval,'만화');
insert into 분야 values(seq_theme.nextval,'역사');
insert into 분야 values(seq_theme.nextval,'외국어');
insert into 분야 values(seq_theme.nextval,'요리');
insert into 분야 values(seq_theme.nextval,'과학');
--회원 테이블
insert into 회원
values('dangdang','1111','당당',4,null,'안녕하세요. 당당입니다.');
--게시글 테이블
insert into 게시글
values(seq_post.nextval,'게시글 제목입니다.','dangdang','안녕하세요! 일단 아무글이나 적어보는 겁니다.... 데이터를 입력해야 하니까',null,14);

📑데이터베이스 인스턴스

1.분야 테이블

2.회원 테이블

3.게시글 테이블

4.댓글 테이블


📱Java Swing UI

MainUI

우측상단의 로그인해주세요 클릭 시 LoginPopupUI 화면 호출.

로그인한 사용자는 자신의 관심분야에 해당하는 게시글만 나옴

로그인된 사용자는 글쓰기, 내 게시글 관리, 설정 및 로그아웃을 할 수 있다.

LoginPopupUI

Create Account 클릭 시 SignUpPopupUI 호출

SignUpPopupUI

아이디 및 닉네임은 중복 불가

PostUI

MainUI에서 게시글 클릭 시 나타나는 PostUI

아래쪽으로 스크롤 시 댓글을 달 수 있는 창이 보인다.

로그인을 하지 않은 사용자는 댓글을 달 수 없다.

작성자의 이름 클릭 시 게시글을 볼 수 있다.

로그인한 사용자는 댓글을 작성할 수 있다.

UserProfileUI

내가 아닌 다른 사용자의 프로필은 위와 같이 작성된 게시글 목록 및 닉네임, 한줄 소개로 표시된다.

자신의 내 게시글 관리에서는 게시글 삭제가 가능하도록 나온다.

WriteUI

게시글을 작성할 수 있는 UI이다.
제목 및 본문 내용, 관심분야를 지정해서 등록하면 게시글이 작성된다.

SettingUI-profilePanel

사용자의 사진을 변경, 삭제 및 닉네임 변경, 한줄 소개 변경을 할 수 있다.
저장을 눌러야 등록이된다.

SettingUI-changePWPanel

사용자의 비밀번호를 변경하는 화면이다.

Setting-blockPanel

현재 사용자가 차단한 사용자를 보여주는 곳이다.

Setting-byeUserPanel

회원탈퇴를 하는 화면이며, 체크를 해야 회원탈퇴할 수 있다.


📒결과


💦고찰

추후에 좋아요 기능 및 욕설 필터링 기능 등을 추가하면 좋을 것 같다.
또한 게시글을 작성할 때 사진을 추가할 수 있는 기능을 만들면 더욱더 유용한 어플리케이션이 완성될 것 같다.

혼자 모든것을 개발해본 것은 처음이었는데, 여럿이서 할 때 몰랐던 어려운 부분을 혼자 하면서 어떻게 해야하는지 생각하면서 깨닫게 된 것 같다.

데이터베이스랑 연동될 때 가장 기분이 좋았다!


🧸담당 역할

  • DB 구축
  • DB 데이터 입력
  • Java Swing UI 개발
  • DB와 JAVA 연동
  • 모든 기능 개발

🍬참고 자료

[1]. 타이틀 바 삭제 및 윈도우 창 이동
[2]. 제약조건
[3]. 파일 선택
[4]. setDefault
[5]. 마우스위치
[6]. JPanel에서 JFrame 얻기
[7]. JList Scrollbar
[8]. checkBox

profile
MySQL DBA 신입 지원

0개의 댓글