Smarteer Suppoters/Project

[국비지원무료교육] 미니프로젝트 후기 (Iot 과정, 스마트인재개발원)

제쿵 2022. 1. 20. 19:18
미니프로젝트 수행 3일간 ( 1/18 ~ 1/20 )의 진행 및 느낌점입니다!

 

 

우리조가 만든 시작화면이다.

 

 

 

이번주 화요일일부터 오늘까지 미니프로젝트를 수행했다. 1/18~ 1/20

주제는 영단어퀴즈, 야구게임, 다마고치가 있었다. 팀 상의 후 다마고치로 결정했다.

우리조 주제는 다마고치였습니다.. 둠칫둠칫

게더타운 (gathertown) : 오른쪽 위(보라색)이 우리 구역이다.

가끔 선생님이 팀퀴즈나 골든벨(Ex : 자바골든벨) 등 이벤트를 개최해주시는데

그럴 때는 게더타운을 이용한다.  선생님이 굉장히 잘 꾸며 놓으셨다. 

팀실습이나 팀회의가 필요할 때도 이곳에 모인다.

팀프로젝트 역시 조원들과 주로 이곳에 모여 진행했다.

 


프로젝트 시작 전날 (1/17)

전체적인 흐름과 테이블, 기능을 구상했던 날이었다.

 

 

1.흐름도

대략적인 흐름을 구상하는 단계였다.

우리가 흐름도를 너무 대충 만들었을지도!? 

-->  완성 후인 지금 떠올리기를, 흐름도에 분기에 추가되는 자잘한 기능이 많다.

 

 

2. 유스케이스 설계

유스케이스란 위 그림에서 시스템이 어떤 기능, 서비스를 제공하는지

명세한 것을 적어 놓은 타원형으로 표시된 것을 말한다.

 

 

위 그림은 유스케이스 명세이다.

여기서 빨간 박스는

유스케이스에 해당하는 관련 요구사항을 써주는 것이다.

위에서 관련 요구사항에 해당하는 부분이다.

작성 시 정확히 어떤 기능을 하는지 적어준다.

 

 

3. 테이블 목록 작성

작성할 테이블 목록

 

 

4. 테이블 구축

이렇게 2개의 테이블을 구축했다.

 

6. View

흐름에 따른 View작성을 간단히 하고 끝냈다.

 

 


 

첫째 날 (1/18)

 

첫날인 화요일은 git과 이클립스 연동하면서 시간을 다 보낸거같다.

git은 학교 다닐 때 사용법을 배웠는데 제대로 활용할 일이 없었던거 같다.

 

스마트인재개발원의 Git과 Github 이해하기 동영상을 보면서 했다.
        ▼ 여기!!
https://smhrd.github.io/HowToUse/

 

Git과 Github 이해하기

Git & Github 사용방법 및 가입방법

smhrd.github.io

 

그날은 코로나 때문에  안나가는 날(하프등원)이어서

팀원들과 잘 소통하지 못해서 진행이 더뎠다.

 

세팅하고 여러명이서 같이 작업하는데..

문제가 많았다.

 

오후 중반 쯔음 까지도 계속 충돌나고 pull이 안되고 하는 문제가 해결됐다.

선생님이 해결해주셨다..

--> 조원들끼리 쓰다가 오류가 나고 잘안되서 중간에 Repository 를 다시 팠었다.

     그래서 파일올리고 내려받을때 여러저장소에 올리고 내려받아지면서

     충돌이 나는 것 같다고 하셨다.

     레파지토리(Repository) 삭제하구 다시 새로 만들었다.

     그다음부터는 잘되었다! 고마운 쌤..

 

우리를 괴롭혔던 충돌!!

다른사람과 동시에 작업하다가 수정한 것을 commit 하면

보통은 git이 알아서 병합시켜주지만 정상적으로 병합이 되지않으면 충돌이 일어난다!!

충돌이나면 클래스 이미지위에 마름모가 뜬다. ㅁㄴ;ㅇ루;ㅣ바ㅡㄹ

왼쪽: 충돌이 나면 생기는 클래스 위의 마름모                           오른쪽 : pull할 때 충돌나면 뜨는 팝업

 

해결법은...!?

Google 형아한테 물어보세ㅇㅛ....

 

 


둘째, 셋째 날 ( 1/19 ~ 1/20 )

 

본격적인 코드 작성에 들어간 날이다.

흐름에 따른 분기는 크게 이렇게 나눌 수 있다.

간단히 작성하겠습니다.

 

1. 메인페이지

 

메인페이지 : 로그인 , 회원가입 , 종료 --> 이 기능들은 JDBC 수업 때 배운것들로 쉽게 구현 할 수 있었다.

2022.01.13 - [스마트인재개발원 [Iot 과정]] - JDBC 연결 [Java와 오라클DB연결 ]

 

JDBC 연결 [Java와 오라클DB연결 ]

JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 어제 마지막 2시간 동안 JDBC 수업 듣고 이어서 오늘 JDBC를 끝냈다. 오라클DB와 Java를 연결해서 제어하는 내용

jejejedong.tistory.com

 

1-1. 회원가입

 

1-2. 로그인

 

2. 다마고치 메뉴

다마고치 메뉴는 등록, 관리, 랭킹, 삭제로 구성된다 등록, 삭제는 수업 때 배운것처럼 간단히 할 수 있었고

문제가 되는 것은 관리랭킹였다.

 

먼저 우리가 정한 Rule을 다시 볼 필요가 있다.

빨간박스 부분이 관리에서 중요한 부분들이었다.

 

 

2 - 1. 다마고치 관리 메뉴에 진입하면 다마고치는 욕구를 어필 ( 욕구 생성 메소드 )

public int DamaNeeds() { // 욕구
		Random r = new Random();
		int a = r.nextInt(5); // 선택지의 개수
		if (a == 0) {
			System.out.println("==============================================================");
			System.out.print("    상태 : 어딘가에서 꼬르륵 소리가 난다...\n");}
		else if (a == 1) {
			System.out.println("==============================================================");
			System.out.print("    상태 : 꾸벅꾸벅 졸고 있다...\n");}
		else if (a == 2) {
			System.out.println("==============================================================");
			System.out.print("    상태 : 이곳저곳을 기웃거리고 있다. 심심한 걸까?\n");}
		else if (a == 3) {
			System.out.println("==============================================================");
			System.out.print("    상태 : 폴짝폴짝 뛰어다니고 있다. 힘이 넘쳐 보인다!\n");}
		else if (a == 4) {
			System.out.println("==============================================================");
			System.out.print("    상태 : 어딘가에서 악취가 느껴진다...\n");}

		return a;
	}

Random 클래스를 활용해 난수를 생성하고

난수에 따라 욕구를 프린트했다.

마지막으로 욕구 인덱스를 반환했다.

 

 

2 - 2. 욕구를 들어줘야 그다음부터 경험치가 올라간다. ( 욕구 체크 메소드)

욕구어필 메소드에서 반환한 인덱스와

키우기 메뉴에서 선택한 메뉴가 같은지 확인한다.

(다마고치VO에 욕구 유무를 확인하는 State 변수가 있다.)

if(needs + 1 == input && vo.getState() == 0) // State로 욕구 유무 확인

 

 

2 - 3 경험치 체크

public DamaDTO expCheck(DamaDTO vo) {
		if (vo.getExp() > 99) {
			vo.setExp(vo.getExp() % 100);
			vo.setLevel(vo.getLevel() + 1);
		}
		return vo;
	}

경험치가 100이상이라면 레벨을 +1한다.

 

 

2 - 4 에너지 체크

다마고치가 죽음에 이르는 조건 : 에너지가 -100 이하일 때..

public void energyCheck(DamaDTO vo) {
		if(vo.getEnergy()>100) {
			System.out.println("더 이상 에너지를 채울 수 없어요!");
			vo.setEnergy(100);
		}

		if (vo.getEnergy() < -99) {
			vo.setEnergy(999);
            System.out.println(vo.getNick()+"(은)는 더이상 움직이지 않는다...");
		}
		else if(vo.getEnergy()< -90) {
			System.out.println(vo.getNick()+"(은)는 눈에 띄게 힘이 없어 보인다!");
		}
		else if(vo.getEnergy()< -70) {
			System.out.println(vo.getNick()+"(은)는 왠지 기운이 없어 보인다!");
		}
		else if(vo.getEnergy()< -50) {
			System.out.println(vo.getNick()+"(이)의 움직임이 조금 느려진 것 같다!");
		}
	}

if (vo.getEnergy() < -99) {
vo.setEnergy(999);

죽음 상태 표기를 다마고치의 에너지가 999일 때로 정했다.

생존 다마고치 에너지의 범위인 -99 ~ 100을 침범하지 않는다.

 

대략적인 흐름은 이렇다.

0. 키우기 메뉴 진입 

욕구생성 메서드호출

while(true){
         1. 키우기 메뉴 출력
         2. 키우기 액션 선택
         3. 욕구 해소 체크 메서드 호출
         4. 경험치 & 에너지 체크
         5. 다마고치 상태 DB 업데이트
}

 

3. 다마고치 랭킹

String sql = "select * from dama where energy != 999 order by leb desc,exp desc";

죽은 다마고치는 출력하지 않기로 했다. energy가 999 인 다마고치들은 출력하지 않는다.

 


 

발표 당일

 

테스트하는 것에 있어서

조원분들께 메뉴를 이것저것 요리조리 다 만져달라고 요청했다.

출력이 이상하게 된다던가.. 로직적인 부분(분기)에서 문제가 있다던지..

조원분들, 어디를 어떻게 바꿔달라고 피드백 서로 잘해주셨다.

마지막 테스트하니까 여기저기서 자잘한 문제점이 보였다..

큰 결함은 없어서 쉽게 수정했던거 같다.

 

조금은 여유있게 마무리했다.

 

하프 등원이라 집에 있었는데 등원해주신 조원분이 발표 정말 잘해주셨다.

 

 

느낀점

 

두루두루 상의하면서 여유롭게 하고 싶었는데

시간이 정말 부족했던거 같다.

다음번엔 더 잘할 수 있겠지..

 

의견충돌은 없었다. 서로 맞춰가려고 노력했던거 같다.

 

예상 외로 눈에 보이는 부분이 중요하다. (출력)

똑같은 정보를 표기해도 눈에 보기 편한 방식이 있었다.

 

수행하면서 서로가 서로를 굉장히 많이 호출했다.

이 부분은 어떤 부분인지, 어떻게 설계하면 좋을지..

 

살면서 조장 경험이 그렇게 많지는 않다.

조금 부족했을지 몰라도 나에게는 큰 경험이었다.

 


 

https://www.smhrd.or.kr/

 

스마트인재개발원

4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관

www.smhrd.or.kr