일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 정적 자원
- 그래이들
- 멀티 태스킹
- 람다식
- 그래들
- 자바 이항 연산자
- 자바 연산자
- 조건문
- 자바 프로젝트
- Github
- 자바 람다식
- 자바
- 람다
- 웹 프로그래밍
- 애플페이
- 빌드 도구
- 연산식
- Gradle
- 깃허브
- 연산자
- 웹
- 삼항 연산자
- Java
- 타입변환
- 변수
- 스프링부트
- 국비 프로젝트
- if문
- 동적 자원
- 단항 연산자
- Today
- Total
인디언식 기우제
첫 팀 프로젝트 후기(자바 프로젝트) 본문
집에서 독학으로 공부하다가 학원에 다니기 시작한게 10월, 어느덧 3개월이 넘어 1월이 될 무렵 첫 팀 프로젝트가 시작되었다. 독학을 할 무렵부터 뭔가 제대로 프로젝트를 해보고 싶은 마음은 있었다. 아무래도 보통 개발은 당연히 팀 단위로 이루어지고 협업을 하니까 다른사람들과 프로젝트를 해보면서 그 느낌을 느껴보고 싶었다. 하지만 걱정도 많았다.
내가 부족해서 팀에 누가 되지 않을까, 다른 분들은 너무 잘하는데 내가 못하면 어떡하나...하는 걱정이 있었다. 그렇게 설렘 반 걱정 반의 마음을 가지고 팀이 결성되었다. 첫 회의에서 어색하게 첫 인사를 하고 자기소개를 하였다.
주제 선정
무얼 만들지 부터 정해야 했다. 여러 의견이 오가다가 사내 출퇴근 및 업무 관리를 하는 그룹웨어 사이트를 만들기로 하였다. 그룹웨어로 정한 이유는, 주로 그룹웨어에 들어가는 기능들을 구현하기가 현재 배운 수준과 맞다고 생각을 하여서이다. 물론 사실 지금까지 배운 것은 기본적인 게시판 만들어서 CRUD하기 뿐이었다. 그래서 몇몇 기능들은 좀 어려울 수도 있었지만 나는 오히려 어려운게 걸리면 더 공부할 수 있을 것 같아 상관없었다.
다 좋은데 나는 한가지 걱정이 있었다.. 나는 회사를 다녀본 적이 없다....!!!!.... 회사들에서 사용하는 그룹웨어가 어떤 기능이 있는지, 휴가제도같은건 어떻게 되어있는지 잘 몰라서 좀 걱정이긴했다. 그래도 팀 내에 회사생활을 하신분도 있고 옆자리의 형도 여쭤보면 친절히 대답해주셔서 다행히 잘 해쳐나갔다.
내가 맡은 기능
그렇게 내가 맡은 부분은 근태관리 기능이였다. 어찌어찌 회사를 다녀본 분들에게 물어서 근태관리에는 무엇무엇이 포함되는지 알았고, 우선은 핵심 기능인 출퇴근기록, 내 근태현황 조회, 근태이상 시 수정요청 정도를 구현 해보기로 했다.
개발환경
당장 배운 것에 맞춰서 자바, JSP,Servlet 기반의 사이트를 개발 하기로 하였다. OS는 윈도우에서, 이클립스를 이용해서 개발했다. DB는 당장 사용할 수 있는것은 오라클DB와 MySQL 정도였는데, 검색해보니 오라클 DB를 현업에서 더 많이 사용한다고 하여서 일단은 오라클DB를 사용했다. 반응형 처리와 디자인은 부트스랩을 주로 사용하였고, VCS는 깃과 깃허브를 사용하였다.
ERD 설계 및 구상
내 DB설계이다. 우선 primary key인 근태번호는 식별을 위한 번호일 뿐이어서 시퀀스로 자동으로 번호를 부여하였다.
실질적으로 열을 구분하는 것은 근무 일이다. 한달치 Null데이터를 만들고 update를 할 수도 있지만 그냥 출근한 날만 Insert하는 방식으로 하였다.
우선 구상해본 것은
1. 사이트에서 현재 시간의 날짜에 근무 기록이 있는지를 확인하여 출근 여부를 표시
2. 출근 버튼을 누르면 근무 일에는 현재 날짜 / 출근 시간에는 현재 날짜와 시 분 / 퇴근시간에는 Null값 / 근무상태는 출근 / 지각여부에는 만약 9시보다 늦게 출근이 찍혔으면 지각, 아니면 null / 근태상태는 근태 이상으로 / 사원번호는 현재 로그인 한 세션에서 사원번호를 가져와서 Insert.
3. 퇴근버튼을 누르면 해당 날짜의 열에서 Null로 되어있던 퇴근 시간이 버튼을 누른 시간으로 / 근무 상태는 퇴근 / 근태상태는 정상처리로 Update
이런식으로 되도록 구상했다.
사용한 기술
- mvc패턴으로 개발하였다.
- 서블릿 매핑으로 .do 요청을 받아서 컨트롤러를 실행시켰다.
- 패키지 구조는 컨트롤러를 모아놓은 command, DB에 접근하는 DAO클래스가 있는 DAO 패키지, 데이터를 담아 보내는 객체들인 Model 패키지, DB커넥션을 생성하고 DAO를 실행시켜주는 Service 패키지로 하였다.
- JSTL 라이브러리를 사용하여 데이터를 반복 출력하거나 조건문을 사용하여 출력하였다.
- 인클루드를 사용하여 공통으로 사용되는 top과 bottom은 중복으로 작성되지 않게 하였다.
- 근태관리 메인 페이지에서는 GET 방식으로 컨트롤러를 호출하여 현재 년, 월의 근태기록을 출력하였다.
- 근태관리 메인 주소를 요청하면, 컨트롤러에서 현재 접속자의 세션에서 사원 번호를 받아오고, 사원번호와 현재 날짜를 매개변수로 서비스를 통해 DAO를 실행시켜서 오늘날짜의 로우가 있는지를 확인한다. 받아온 객체가 null이라면 출근 버튼을 강조한다.
- 누적 근태현황에서 좌 우 화살표로 이전 달, 다음 달 근태기록을 볼 수 있다.
- javascript에서 Date객체를 만들고, setTimeout(getTime, 1000); 으로 1000밀리초(1초)마다 시간이 갱신되어서 현재 시간을 확인할 수 있게 하였다.
- 출/퇴근 버튼을 누르면 workIn.do 로 출/퇴근 컨트롤러를 호출한다.
- 출/퇴근 컨트롤러에서는 요청이 오면 우선 로그인한 사원번호를 이용해 당일 출/퇴근 기록이 있는지를 조회한다. 출/퇴근이 되어있는 상태라면 에러페이지로 이동시키고 alert로 경고한다 그 후 다시 근태관리 메인페이지로 이동시킨다.
- 출근 시간이 기록되면 퇴근 버튼이 강조되고, 퇴근까지 했다면 모든 버튼이 강조되지 않는다.
- 단순 출퇴근 기능만 하니 시간이 남아서 출퇴근 수정 기능도 만들었다.
- 근태 수정페이지에서는 퇴근을 찍지 않은 근태이상 상태의 근태기록을 관리자에게 수정요청 할 수 있다. 근태이상 상태인 근태기록 옆에는 수정버튼이 생기며, 클릭시 수정 폼으로 넘어간다.
- 수정 요청 폼 페이지는 해당 기록을 표시해주며 시간을 수정할 수 있다. 그리고 사유를 입력하여 제출하면 관리자에게 요청이 제출된다.
- 관리자가 요청 목록 페이지에 들어가면 모든 사원의 수정 요청을 볼 수 있다. 상세 조회를 누르면 요청 세부 사항을 볼 수 있다. 상태가 '요청중'인 요청은 승인, 반려 버튼이 생기며 관리자는 선택할 수 있다.
- 반려가 되면 다시 요청을 해야한다.
- 관리자는 직원 누적 근태현황 페이지에서 특정 직원의 근태 현황을 조회할 수 있다.
잘한 점
첫 프로젝트라서 잘한점을 정하기가 어렵다. 그래도 굳이 뽑자면
- include를 사용하여 모든 페이지에 공통부분인 top 과 bottom부분을 중복 작성하지 않고 수정하기 편하게 하였다.
- 에러 페이징을 해서 편하게 에러문구를 띄울 수 있었다.
- 깃 을 사용하였다. 처음에는 깃을 사용 안하고 팀원들이 각자 작업하였는데, 작업하다 든 생각이 '이거 나중에 어떻게 합치지...?' 였다. 이 기능을 깃 이 해준다는걸 어렴풋이는 알고 있었다. 하지만 알아보려고 하면 어려운 명령어와 영어로 된 github페이지가 나를 어지럽게 하였다... 그래도 꾹 참고 공부를 해보니 그닥 어렵지 않았다. 동작 원리와 구조만 알면 쉬웠다. 다만 master에다가 직접 push하는 방식을 썼던지라... 불안했다.
어려웠던 점
내가 맡은 근태관리는 DB에서 주로 시간 데이터를 다뤘다. 그러다보니 데이터 타입을 Date로 해야하는지 Timestamp로 해야하는지 헷갈렸다. 그리고 이걸 입력, 조회, 수정 할 때 그냥 컬럼 명으로 하면 조회가 안되어서 어려웠다.
검색과 시행착오 끝에 결론은
- 단순 날짜만 표기하는 컬럼은 Date 타입을 사용, 시/분/초 까지 표기하는 컬럼은 timestamp 사용.
- Date 타입은 그냥 컬럼명 = 날짜 로 쿼리를 짜면 정상적으로 되지 않는다. 무조건 TO_CHAR(컬럼명, 'YY/MM/DD') 같이 문자형으로 형변환을 해서 쿼리를 짜야 정상실행이 된다.
라고 생각해서 이걸 지키면서 진행하니 문제는 없었다. 다만 지금에 돌이켜보니 Date타입도 시/분/초 까지 표기할 수 있다.
굳이 timestamp를 사용할 필요가 있었을까...하는 생각이 든다.
아쉬운점
- 페이지가 계속 클릭할 때마다 새로고침이 되고, 값들이 초기화 되는일이 많았다. 나는 왜인지 모르겠는데 자꾸 새로고침 되는게 참 싫다. 눈에 거슬렸다. - ajax를 사용하면 해결할 수 있을 것 같다.
- 컨트롤러 파일이 요청 주소 마다 늘어나니 너무 많았다. 줄일 방법이 있었으면 좋았을 것 같다. - spring 을 사용하면 해결할 수 있다.
'개발공부' 카테고리의 다른 글
스프링 팀 프로젝트 후기 (0) | 2023.04.25 |
---|---|
컴퓨터와 소통하기 (1) | 2022.09.23 |