2차 프로젝트 : 마구 무너져가는 첫 계획
프로젝트 링크 : https://github.com/LuiGee3471/BitCampProject2nd
오늘 하루는 거의 계획 바꾸기로 가득찬 하루였습니다. 만들다 보니까 이것도 필요한데, 저것도 필요한데 하면서 만든 클래스와 필드가 몇 개인지 모르겠습니다. 나름대로 많이 생각하고 만들었다고 생각했는데 이 정도로 바뀌어버리니 약간 좌절감이 느껴지기도 하고... 사실 정신 없어서 하는 동안은 그런 생각도 못했고 끝나고 좀 정리를 하다 보니 그런 느낌이 들었습니다.
오늘의 포인트를 정리하자면
1. SQL 함수를 활용하면 많이 편하다
꼭 데이터를 날것 그대로 가지고 와서 가공할 필요는 없더군요. SQL에서 지원해주는 함수를 사용하면 가져와서 무슨 타입으로 사용해야 하는지 고민할 필요도 없고 원하는 대로 가공하기 쉽습니다. 오늘 활용한 함수는 특히 시간과 날짜쪽 함수. MySQL의 timediff와 date_format입니다. Java에 가져와서 하려니 과거에 쓴 글이 현재보다 미래에 쓰여졌다는 말도 안되는 결과가 나와서 당황하다가 MySQL 내부에서 함수를 사용하니 그런 오류도 없고 복잡하게 생각할 필요도 없더군요.
timediff로 구한 두 시간 데이터의 시간 차이를 time-to-sec함수를 사용해서 초 단위로 변환했습니다. 이것을 60으로 나눠 분 단위로 시간을 변환하고 이를 활용해 1시간 이내는 'X 분 전'으로 표시, 그 이후는 날짜와 시간으로 표시할 수 있었습니다. 시간 변환도 date_format을 쓰니 사용하기 편리한 문자열로 바로 튀어나오니 너무 편안. DB를 잘 다루는 사람은 DB에서 이미 모든 걸 처리하고 웹에서는 그 자료를 넣어주기만 한다고 수업에서 들었는데 이런 의미였군요.
2. DTO는 테이블 구조에 얽매일 필요는 없다
역시 DB 이야기인데 처음에는 DTO를 테이블 칼럼 구성 그대로 만들다보니 조금만 테이블을 나눠놓아도 JOIN 문을 사용할 때마다 이 결과를 한 번 더 사용해서 다시 SQL을 실행해야 하는지 다른 방법은 없는지 고민했습니다. 결론은 어차피 활용할 데이터라면 DTO에 그런 데이터를 담아도 아무 상관없다는 결론. 굳이 정규화된 테이블을 가지고 아이디 값을 가지고 와서 또 다른 SELECT를 써서 다시 그 테이블로 가서 데이터를 가져올 필요가 없었습니다. 또 하나라면 아무리 작고 간단한 테이블이라도 웬만하면 DTO와 그 DAO를 만들어두는 것이 훨씬 편하다는 것. 특히 생성이나 삽입 작업 시 데이터값을 select 태그로 구현할 때 훨씬 편해지더군요.
3. 충돌 지옥 Github
소규모 과제, 프로젝트 때부터 느꼈지만 Github는 정말 혁신적이고 편리한 시스템이지만 잘못 쓰면 프로젝트를 대혼란으로 가져오는 시스템입니다. 신입사원들이 데이터 날려먹는 것쯤은 일상이라는 어디선가 읽은 글이 떠올랐습니다.
아무래도 가장 문제는 충돌 해결에서 발생합니다. 최선은 충돌이 안나게 영역을 나눠서 작업하는 것이겠지만 공통으로 쓰는 클래스도 많고 인원이 적다보니 여기 저기 다 개입하다보니 충돌이 나는 것은 필연적인 요소. 예전처럼 충돌을 무시해서 나중에 파일을 열어보니 HEAD와 원격 저장소의 구분선까지 선명하게 남아있는 참사는 없지만 작성한게 날아가버리거나 멋지게 push하고 다른 사람 컴퓨터에서도 잘 돌아가려고 보니 아까 해결한 문제가 저쪽에 아직도 존재하는 사고는 여전히 비일비재합니다. 가뜩이나 시간도 없는데 재작업은 너무 낭비니까 반드시 충돌할 때는 외부 합병 툴을 쓰기로 결정했습니다. Visual Studio Code를 SourceTree 외부 합병 툴로 연결하니 너무 편리하더군요. 알면 알수록 만능인 프로그램입니다.
과연 원래 목표인 금요일까지 완료할 수 있을지 모르겠네요. 그래도 열심히 참고하면서 만든 CSS는 볼때마다 기분 좋아질 정도로 벤치마킹하는 에브리타임과 비슷해서 좋고 생각은 했는데 잘될까 걱정했던 기능은 생각 이상으로 멋지게 돌아가는 기분 좋은 일도 있었습니다. 아쉬운 점이라면 DB에 연결되어있는 프로젝트다보니까 집에 와서 테스트해보기가 사실상 불가능하다는 점이네요. 글에 사진도 첨부하고 싶은데 캡처할 수도 없으니... 이건 혹시나 해야 하는 주말 작업에도 조금 걱정되는 점이네요. 주말 작업을 해야 할 것 같으면 DB 구조라도 구현할 수 있게 준비를 해놔야 할 것 같습니다.