부트캠프 미니 프로젝트 kktalk
나만의 메신저 만들기
깃허브 주소 : https://github.com/chocolaggibbiddori/bootcamp-project-kktalk
개발 전 토의
부트캠프 시작이래 처음으로 미니 프로젝트의 시간이 다가왔다. 주제는 자유이고 혼자하든지 팀을 짜서 하든지 모든게 자유! 다만 조건이 5가지가 있었다.
- 컬렉션을 사용할 것
- 쓰레드를 사용할 것
- 결과는 html 파일로 출력할 것
- 상속, 추상 클래스, 인터페이스 중 적어도 하나를 사용할 것
- 데이터베이스를 사용할 것
나는 활발한 형님과 둘이 한 팀이 되어 프로젝트를 진행하기로 했다. 첫 날 모여서 무엇을 만들어야 할지, 어떻게 만드는게 좋을지, 조건들을 어떤 식으로 사용할지는 논의했다.
아이디어 구상
- 동물 레이싱 참가자를 입력 받고 레이싱의 결과를 예측하는 프로그램
- 맛집 리스트를 등록하고 조회하는 프로그램
- 프로그램이 시작되면 콘솔로 아이디와 비밀번호를 입력 받아 로그인 인증을 한 후, 로그인에 성공하면 친구 리스트 html 파일을 생성하는 프로그램 (결정!)
큰 틀 짜기
- Controller : 프로그램의 전반적인 처리를 담당하는 클래스. 이 클래스를 통하여 로그인 정보를 인증하고 결과 파일을 출력한다.
- DBConnection : DB와의 통신을 담당하는 인터페이스. Controller는 DBConnection 인터페이스에만 의존하도록 설계했다.
- DBConnectionUtil : DBConnection을 사용할 때 편의성을 제공하기 위한 유틸리티 클래스
- FriendProfile : 친구 목록에 나타날 친구 프로필 정보
- MyProfile : 나의 프로필 정보
- Profile : 나와 친구의 프로필의 중복을 제거하기 위한 추상 클래스
- UserInfo : 유저의 로그인 정보를 담는 클래스
- FriendScreen : 친구 목록의 결과 화면을 html로 만들어주는 클래스
- Tags : HTML 파일에 사용될 태그를 만들어주는 클래스
DB 테이블 구상
DB를 구상함에 있어서 약간의 의견 차이가 생겼었다. 아래는 함께 토의했던 내용이다.
- 공통 의견
- id와 password의 정보를 담고 있는 로그인 인증 테이블 login
- 유저의 프로필 정보를 담고 있는 테이블 profile
- 개별 의견
- 유저 별 친구 목록을 담고 있는 테이블 friend
- 박정우 : 각 유저 별로 친구 테이블을 만들어서 친구 목록을 저장
- 강동희 : 중복이 되더라도 하나의 테이블에 유저 별 아이디와 친구의 아이디를 저장
- 유저 별 친구 목록을 담고 있는 테이블 friend
friend 테이블을 어떻게 설계 하는지에 대해 여러 의견이 있었는데, 결론적으로 서로 본인이 주장한 구조대로 각각 개발을 한 후에 적용해보면서 비교 & 결정하기로 하였다.
개발 과정
DB 설계하기
DB 테이블은 다음과 같이 선언하였다.
- friend : 유저 별 친구 목록이 담긴 테이블
- login : 가입되어 있는 아이디와 비밀번호가 담긴 테이블
- profile : 각 유저 별 프로필 정보가 담긴 테이블
DBConnection 구현하기
DBConnection 인터페이스는 아래와 같이 2개의 메서드로 정의되어 있다.
- 로그인 정보를 매개변수로 받아 기존에 가입된 계정인지 인증하는 authenticateUser(UserInfo userInfo) 메서드 (반환 타입 : boolean)
- 로그인 정보를 매개변수로 받아 친구 목록을 반환하는 getFriends(UserInfo userInfo) 메서드 (반환 타입 : List)
HTML 파일 생성하기
- IndexScreen, FriendScreen : 유저의 로그인 정보와 친구 리스트를 이용하여 동적으로 html 파일을 생성하는 클래스
- Tags : html 파일을 편리하게 생성하기 위해 정의된 클래스
결과
느낀 점
- 다형성을 활용하는 것이 얼마나 중요한 것인지 느낀 프로젝트였다.
- 초기 토의 과정이 얼마나 중요한 과정인지 깨닫는 시간이었다.
개선할 점
- 다음에는 git과 GitHub을 이용하여 버전 관리 및 협업하는 과정을 경험하고 싶다.
- 오류 상황을 잘 숙지해두어 같은 실수를 반복하지 말아야겠다.
- 자바 예외
- NullPointerException : Connection 변수에 null 값이 할당된 상태에서 사용하다가 발생한 예외
- SQLException : ResultSet을 next() 메서드 호출 없이 사용하다가 발생한 예외
- MySQL 에러
- ERROR 1064 (42000) : 테이블 생성 시 한 컬럼에 타입을 지정해주지 않아 발생한 에러
- 자바 예외