태그 : 프로젝트
2008/11/16 DB 사용에 대한 고민. [2]
2008/10/05 로그인 인터페이스. [1]
2008/10/04 로그인 시스템. [1]
2008/10/02 구체적인 프로젝트 구성. -1- [2]
# by | 2008/11/25 00:37 | 정리할 자료들 | 트랙백 | 덧글(2)
현재 프로젝트 진행 정도는 DB와 네트워크 부분 수정 문제로 프로젝트가 잠시 중단 된 시점이다.
DB를 사용 하는 방법에는 2가지를 고려 중이다.
1. 클라이언트 쪽에서 DB 서버에 직접 접근을 한다.
2. 네트워크를 통해서 서버에 쿼리메시지를 보내고 서버는 받은 쿼리메시지를 이용해서 DB에 접근하는 방법이다.
그러나 DB에 접근 할 수 있는 계정을 호스트 마다 정할 수 있다는 점에서 약간 주춤 했던 것이 한가지 있다.
계정명@호스트명 이런식으로 정한다면 모든 호스트에 대한 설정이 문제가 됐었다.
이점에 대해서 검색을 해본 결과..
계정명@%
이렇게 하면 그 어떤 호스트에서도 접근이 가능하다. 그럼 1번의 방법을 이용한다면 클라이언트가 DB에 직접 접근이 가능하다.
이렇게 한다면 java.net 패키지 없이 서버 DB에 접근이 가능하다.
그러나 1번을 이용하지는 않으려고 생각중이다. 여러 클라이언트에서 DB에 접근을 시도 한다고 가정 했을 때 문제가 될 소지가 있다고 보기 때문이다.
2번의 방법을 이용한다면 서버쪽에 DB 쿼리 메시지를 처리해줄 프로그래밍만 해주면
클라이언트 <-네트워크이용-> 서버 <-DB이용-> MySQL
위와 같은 구조로 한다면 프로젝트의 질적인 부분에서도 더 좋다고 생각된다.
끝으로 현재 까지 진행 상황은
로그인, 계정 생성, 계정 삭제, 암호변경, 계정찾기 까지 모두 완료 된 상태이다.
# by | 2008/11/16 20:08 | 정리할 자료들 | 트랙백 | 덧글(2)



# by | 2008/10/05 16:09 | 정리할 자료들 | 트랙백 | 덧글(1)
Data |
-String id -String passwd -String birth -int score_easy -int score_normal -int score_hard |
+void:setID(String id) +void:setPasswd(String passwd) +void:setBirth(String birth) +void:setEScore(int score_easy) +void:setNScore(int score_normal) +void:setHScore(int score_hard) +String:setID() +String:setPasswd() +String:setBirth() +int:setEScore() +int:setNScore() +int:setHScore() |
DB<interface> |
+void:dbInput(String query) |
UserDB |
+void:dbInput(String query) +Data:dbOutput(String query) |
## DB에 내용을 넣을 때와 DB에 내용을 검색하는 것에는 차이가 있다. 검색의 경우는 명령어 입력 후에 결과가 출력된다. 자바에서 검색 기능을 이용하려면 반환형이 필요하다.
반대로 내용을 추가, 수정, 삭제의 경우에는 반환형이 없다.
+void:dbInput(String query)
DB에 쿼리를 덜질 내용을 인수로 받아서 질의한다. 추가, 삭제, 수정의 경우 이 메소드를 이용할 것이다.
+Data:dbOutput(String query)
검색의 결과를 반환해야 한다.
Login |
-Data data -JButton btn_login -JButton btn_search -JButton btn_creat -JTextField tf_login -JTextField tf_passwd |
+Login(String title) +void:search() +void:creatID() +Data:successLogin() |
## 로그인을 성공하면 DB에서 데이터를 가져와 리턴 한다.
## 검색과 생성 버튼을 누르면 각각의 클래스로 연결 이벤트
## 로그인 다이얼로그에서 시스템 메뉴에 닫기를 누르면 프로그램 종료
## 스윙에 경우에는 닫기 버튼을 누르면 이벤트 설정을 하지 않아도 폼이 없어진다.
+Login(String title)
생성자를 통해서 인터페이스를 구성한다.(키워드 interface와는 관련없다.)
+void:search()
Search 다이얼로그를 불러온다.
+void:creatID()
Create 다이얼로그를 불러온다.
+Data:successLogin()
로그인을 성공하면 Data형 객체를 반환한다.
Search |
-JLabel id_label -JLabel passwd_label -JTextField id_tf -Choice yy -Choice mm -Choice dd -JButton btn_id -JButton btn_passwd -JButton btn_search |
+Search(String title) +String:searchID(String id) +String:searchPasswd(String id, String yy, String mm, String dd) +Data:getSearch(String query) +String:getID(Data data) +String:getPasswd(Data data) |
## 다이얼로그 하나에 ID 찾기와 패스워드 찾기가 구성된 형태 카드레이아웃으로 구성해야 할 것이다.
## 메소드에서 아이디 찾기와 비밀번호 찾기 명령어를 완성하고 메소드를 전달 후 결과물은 Data형 객체로 받는다.
+Search(String title)
생성자를 통해서 인터페이스를 구성한다.(키워드 interface와는 관련없다.)
+String:getID(Data data)
Data형 객체를 인수로 받아 id필드를 반환한다.
+String:getPasswd(Data data)
Data형 객체를 인수로 받아 passwd필드를 반환한다.
+String:searchID(String yy,String mm,String dd)
id를 검색하기 위해 DB에 쿼리를 던질 생년월일을 인수로 받아 쿼리를 완성하고 반환한다.
+String:searchPasswd(String id, String yy, String mm, String dd)
password를 검색하기 위해 DB에 쿼리를 던질 아이디와 생년월일을 인수로 받아 쿼리를 완성하고 반환한다.
+Data:getSearch(String query)
완성된 쿼리를 인수로 받아 DBconnect형 객체에 Data형 객체를 반환형으로 갖는 메소드에 쿼리를 인수로 전달 하고 Data형 객체를 반환한다.
이 부분에서도 일부 오류가 발견된다.(미리 짜둔거라 다시 보니 설계도가 엉망이네 -_-..)
DB에 질문을 던지고 그 결과를 가져다 주는 메소드는 이미 UserDB에 존재하고 이 클래스에서 해야 할 일인지 의문이다. 본격적으로 구현 할 때는 이런 점을 개선하도록 하자.
다음!!
계정생성 클래스
Create |
+JTextField id_tf +JTextField passwd_tf +JTextField passwd2_tf +Choice yy +Choice mm +Choice dd +JButton btn_create |
+Create(String title) +boolean:qualification(String str) +void:createQuery(String id, String passwd, String yy, String mm, String dd) |
## 사용자 계정을 생성한다.
+Create(String title)
생성자를 통해서 인터페이스를 구성한다.(키워드 interface와는 관련없다.)
+boolean:qualification(String str)
계정을 생성 할 때 id 최소 문자열, 비밀번호와 비밀번호확인 부분에 대한 제한조건이 성립하는 여부를 반환한다.
+String:createQuery(String id, String passwd, String yy, String mm, String dd)
DB에 들어가야 할 각 필드는
id/passwd/(yy+mm+dd)/score_easy/score_normal/score_hard
이다. 인수로 받지 않은 부분은 0으로 직접 설정한다.
완선된 라인을 이용해 UserDB형 객체를 통해 반환형이 없는 메소드를 실행한다.
여기에서는 계정을 생성하는 것이다. 같은 아이디가 존재하면 계정 생성을 막아야 한다는 것이 생각나서 설계 당시에는 boolean형으로 그 여부를 판단하도록 했으나..DB 자체에서 그 것을 걸러주는 기능이 있지 않나 하는 생각이 든다. 분명 있을것이다. 오라클을 배울 때 그 부분에 대해서 이야기 들은 기억이 있었던 것 같기 때문이다.
그리고 마지막으로 클래스 다이어그램을 그리려다 실패한 것이다.
클래스 다이어그램을 그리는데 실패한 이유는 아직은 조금 어렵다 -_-; 혼자서 보는 책이 있는데 클래스간 집약관계, 사용, 생성, 전달의 관계를 나타내는 설명은 그림과 더불어 간단히 소개가 돼 있으나 무슨 책이 정말 간단하게 나와 있다 -_-..
그리다가 보니 저번학기 처럼 흐름도 비슷하게 그려진 것 같아서 기분은 별로 좋지 못했다...-ㅛ-!!
아무튼 이런 형식으로 설계를 하면서 진행을 하는 것이 확실히 객체지향적인 사고를 하는데는 도움이 된다. 그리고 재대로 써먹지는 못하겠지만 지금 따로 공부하고 있는 디자인 패턴이 객체지향프로그래밍에 도움이 되고 있다.
# by | 2008/10/04 23:01 | 정리할 자료들 | 트랙백 | 덧글(1)
User 클래스
1. 사용자를 추가 할 수 있어야 한다.(ID와 PASSWORD)
-> 추가 된 사용자는 DB에 저장 된다.
2. 로그인을 할 수 있어야 한다.(ID와 PASSWORD)
-> DB로부터 정보를 가져와 일치하는지 확인한다.

Quiz 클래스
1. 퀴즈 데이터는 DB에서 가져온다.(난이도, 문제, 정답, 해설)
2. 선택된 난이도 별로 문제를 출제 한다.
3. 게임의 결과를 DB에 저장한다.(ID, 난이도, 점수)
RankBoard 클래스
1. DB에 저장된 랭크는 난이도 별로 10등 까지 표시해 준다.
2. 난이도 별 초기화, 전체 초기화가 가능해야 한다. 랭크보드 초기화..

Update 클래스
1. 사용자가 추가한 문제를 네트워크로 업데이트가 가능하다.
->P2P방식업데이트
Main 클래스
1. 프로그램을 실행 하면 메뉴표시줄은 비활성화 상태
-> 유일하게 로그인 메뉴만 활성화
2. 로그인을 하면 모든 메뉴가 활성화
3. 원하는 메뉴 선택 시 이벤트 리스너를 통해서 해당 기능들이 동작하는 방식.

# by | 2008/10/02 01:46 | 정리할 자료들 | 트랙백 | 덧글(2)
◀ 이전 페이지다음 페이지 ▶