[개발]

[JAVA] JDBC 프로젝트

개발새발주발 2024. 1. 26. 23:40
728x90

지난 학기, 데이터 베이스 기초 과목을 수강하였다. 해당 과목에서 JDBC프로젝트를 진행하였다. 

 

프론트엔드인 나는 JAVA도 처음이고 SQL도 처음인데다 대부분 4명이 팀인데 팀원도 한명 적고,, 3명 중 한명은 타과 학생이고, 같은 소학학생은 잠수를 타버려서 거의 혼자 하다시피했다. ㅜ.ㅜ

 

우여곡절이 많았지만 덕분에 혼자 밤새서 개발하면서 많이 배웠던 것 같다. 


[ 1. 문제 제기 ]

  • 직원 정보를 검색, 추가, 삭제 할 수 있는 자바 프로그램 또는 웹 애플리케이션
  • JAVA SWING을 사용하여 GUI 구현
  • 이름, 생일, 주소, 성별, 연봉, 부서를 검색할 수 있어야한다.
  • 직원 정보에서는 원하는 정보만 선택해서 검색할 수 있어야한다.
  • 이름을 검색할 때에는 Fname, Minit, Lname을 연결할 수 있는 함수가 필요하다.
  • Super_ssn(상사 ssn) 값이 NULL인 경우 Right Join명령어를 사용할 수 없으므로 다른 방법을 사용해야한다. (left outer join)
  • 값이 NULL 인 경우, UI에서는 빈 칸으로 사용자에게 보여주어야한다.
  • Dno를 숫자 대신 부서 이름으로 사용자가 확인할 수 있어야한다.
  • 사용자가 쉽고 간편하게 이용할 수 있어야한다.

 

💡 우선 첫번째로 문제제기이다. 프론트든, 백이든 어떤 개발을 하든 문제제기는 필수 요소이다. 

내가 이 프로젝트를 통해 하고자 하는 바가 무엇인지 이렇게 명확하게 기술하면 딴 길로 새지 않고 준비된 길을 갈 수 있다. 

 

 

 

[ 2. 알고리즘 및 분석 ]

- 실행 방법

개발 환경 : SDK Oracle OpenJDK version 1.8.0

 

1.Mysql 서버를 실행시킨다.

mysql.server start

 

2.  /src/JDBCproject/companyDB.java 에서 아래 변수들을 프로그램을 테스트할 환경의 mysql 서버 user name, password, database name으로 변경해준다.

 

3. 이후 Employee Class의 main 함수를 실행시킨다.

 

4. GUI 창에서 검색 버튼을 눌렀을 때, 자바 콘솔에 “DB연결 SUCCESS !” 메시지가 뜨면 성공적으로 실행된 것이다.(연결 시, 해당 문구가 뜰 수 있도록 코딩해두었다.) 

 

 

- 알고리즘 및 분석

1. GUI구성

한 페이지 내에서 검색, 삭제, 삽입을 할 수 있도록 하였다.

완성된 GUI!

GUI를 구상할 때는 이전 레퍼런스를 많이 참조하기도 했고 종이에 그려서 대략적인 구상도를 만든 뒤, 개발을 진행하였다. 

조금 더 간단한 UI를 생각해보아서 한 페이지 내 검색, 삽입, 삭제를 할 수 있도록 하였다. 

 

 

2. 검색 범위

전체 : 이름, 부서, 성별, 연봉, 생일, 상사와 관계없이 모든 범위로 설정 

이름 : textField에서 입력받은 문자열을 포함하는 이름을 검색함

ssn(주민번호) : ssn에 textField에서 입력받은 숫자를 포함하는 직원을 검색함

주소 : 주소에 textField에서 입력받은 문자열을 포함하는 직원을 검색함

성별 : 남성(M), 여성(F)을 선택할 수 있도록 함 

연봉 : 입력한 숫자보다 연봉이 이상(≥), 이하(≤), 동일(=), 미만(<), 초과(>)하는 직원을 검색할 수 있도록 함 

생일 : 생일이 textField에서 입력받은 문자(숫자)를 포함하는 직원을 검색함 

거주지 : 주소가 TextField에서 입력받은 문자를 포함하는 직원을 검색함

 

검색 범위에 따라 서로 다른 선택지가 나올 수 있도록 설정하였다.

 

💡 기존 레퍼런스들을 봤을 때, 대부분 >, <만 포함되어있어서 아쉬운 부분이 있었다. '보통 "이상","이하" 개념으로 많이 검색할 것 같은데? '라는 생각을 해서 이상,이하 개념을 추가해보았다. 

 

성별, 부서, 연봉은 선택할 수 있는 선택지 토글이 나오고 나머지는 문자열을 받을 수 있는 textField를 활용하도록 하였다.

 

 

3. 세부 검색 설정

Name, Ssn, Bdate, Address, Sex,Salary, Supervisor, Department를 기본 값으로 체크된 상태로 설정하고 필요한 정보에 따라 모든 값을 체크 해제할 수 있도록 구현하였다. 만약, 모든 Attribute를 선택하지 않는 경우, 경고 알림창이 뜨도록 설정하였다.

3. 세부 검색 설정

Name, Ssn, Bdate, Address, Sex,Salary, Supervisor, Department를 기본 값으로 체크된 상태로 설정하고 필요한 정보에 따라 모든 값을 체크 해제할 수 있도록 구현하였다. 만약, 모든 Attribute를 선택하지 않는 경우, 경고 알림창이 뜨도록 설정하였다.

Name, Ssn, Bdate, Address, Sex,Salary, Supervisor, Department를 기본 값으로 체크된 상태로 설정하고 필요한 정보에 따라 모든 값을 체크 해제할 수 있도록 구현하였다. 만약, 모든 Attribute를 선택하지 않는 경우, 경고 알림창이 뜨도록 설정하였다.

 

 

→ MYSQL의 SELECT 문에서 SELECT절을 담당하여 각 Attribute버튼이 체크되어 있으면 해당 Attribute를 쿼리에 추가하도록 하였다. Name의 경우, concat()함수를 사용하여 Fname + ‘ ‘ + Minit + ‘ ‘ + Lname으로 합쳐 Name으로 표현하였다.

 

→ EMPLOYEE 와 EMPLOYEE 테이블을 LEFT JOIN하였다.

 

 

4. 삽입

→ InsertName, InsertSsn, InsertBdate …. InsertDepartment 각각 gui에 입력되어있는 값들을 가져와서 insert_name, insert_ssn, insert_Bdate …. insertDepartment 라는 이름의 string에 저장한다. Name은 입력 시 공백을 기준으로 Fname, Minit, Lname이 나뉘므로 .split(" ")을 활용하여 분리하고 name이란 이름의 string배열에 저장함.

→ 쿼리문은 InsertQueryMsg에 문자열 형식으로 저장하였고 각 attribute가 들어갈 자리를 '?로' 미리 만들어준다.

→ 그 후 try&catch문을 이용하여 ?가 있던 자리에 맞는 attribute를 할당하여 쿼리문을 완성하고 쿼리를 실행하여 삽입기능을 수행한다.

 

5. 삭제

→ 체크박스를 이용하여 여러개 삭제하는 상황을 가정하여 Delete_Ssn문자열 벡터를 사용하여 체크된 직원의 SSN을 저장하여 SSN을 확인하여 유효성 검사를 한다.

→ Delete From 쿼리를 사용하여 Delete_Ssn 벡터에 저장된 각 SSN에 대해 데이터베이스에서 해당 SSN을 사용하여 레코드를 삭제하는 SQL쿼리를 실행한다.

 

 

 

[ 3. 실행 결과 ]

1. 검색 

 

 

 검색은 수많은 경우의 수가 존재해서 몇가지만 간추려보았다. 

1-1. 전체 검색

 

1-2. J가 들어가는 이름 검색

1-3. 여성 검색(모든 Attribute)

1-4. Bdate, Address 제외한 남성 검색

1-5. Headquarters부서 검색

1-6. 연봉이 30000이상인 직원 검색

1-7. John의 부하직원 검색 

2. 삽입

2-1. 삽입

SQL에 추가되었다! 

 

삽입 후 검색 시, 추가되었음을 확인할 수 있다.

 

 

3. 삭제

3-1. 단일 삭제 (t D 5 삭제)

mysql server 에서도 삭제되었음을 확인할 수 있다.

 

3-2. 복수 삭제

체크박스를 이용하여 여러개를 삭제할 수 있다.


 

회고 및 보안사항 

 

 아예 조별 프로젝트를 떠맡아보긴 처음이라 처음에는 당황도 많이 하고 화가 나기도 했지만 가장 우선 되어야할 것은 무엇보다 프로젝트의 완성이기에 일단 '완성을 못하든 내가 할 수 있는 것부터 하자'라고 생각하고 시작했다.

 

 Java언어를 써 본 적도 없는 상황이라 GUI부터 시작해서 객체 등등 여러가지를 찾아보고 찾아보면서 진행했다. 물론 쉬운 과정은 아니었고 세상에 나만 동떨어져있다는 느낌을 받기도 했지만 뭐 결국 했다 ~! 

 

 그리고 타과 팀원이 삽입기능 코드를 주셨을때도 너무 감격스러웠다. 사실 다른 과라 기대를 하나도 안하고 있었는데 '나 혼자만 하고 있는게 아니구나' 싶어서 다행인 기분이 들었다. 

 

 그동한 프로젝트를 진행하면서 주도적인 입장이 아니었다. 하지만 이번 기회를 통해 팀플에 대한 자신감도 얻고 나 혼자서도 해낼 수 있다는 확신을 얻었다 !! 힘들었지만 그만큼 배운듯 

 

보안사항은 우리가 과제를 늦게 시작했다는 것에 있다.

쉬운 과제인 줄 알고 서로 연락도 늦게하고 어영부영 지나갔다는 게 큰 잘못이었다. 

코딩 과제는 과제하는 중 어떤 시련(?)이 발생할 지 모르니.. 항상 최대한 빨리 시작하는 것이 답이다 ! 

 

 

 

GitHub - 0lrlokr/DB_Project: Database project

Database project. Contribute to 0lrlokr/DB_Project development by creating an account on GitHub.

github.com

 

'[개발]' 카테고리의 다른 글

[AWS] S3과 버킷  (0) 2024.05.19
[Andriod/Kotlin] KAU-STUDY 예약 앱 개발 - DB구조  (1) 2024.02.01