자바 서블릿을 공부하면서 한 번은 별도의 프레임워크 없이 웹 앱을 짜볼 필요성을 느꼈다. 당연하겠지만 프레임워크의 도움 없이 앱을 짜는 것은 매우 비효율적인 일일지도 모른다. 그러나 반대로 왜 그 프레임워크, 또는 라이브러리를 사용할 필요가 있는 지를 알 수 있는 기회이기도 하다. 물론 아예 외부 라이브러리를 사용하지 않는 것은 아니지만 최대한 그 사용을 자제할 것이다. 이번 프로젝트의 목적은 간단한 메일 앱을 구현하여 봄으로써 프론트엔드(Front-End)부터 백엔드(Back-End)까지 웹과 관련된 전반적인 지식을 학습하고, 구현을 통해 체득하는 것을 목표로 한다.
메일 앱은 다음과 같은 기능들을 포함하여야 한다.
- 사용자 계정에 대한 기능 - 계정 생성, 로그인 및 세션 발급, 계정 탈퇴
- 메일과 관련된 주요 기능 - 단순 텍스트 메일 송수신, 텍스트를 제외한 파일을 포함한 메일의 송수신, 작성 중인 메일 저장, 수신한 메일 휴지통으로 이동 및 삭제
서버는 톰 캣(tomcat), 데이터베이스는 Mysql을 사용하였으며, 빌드는 Gradle을 사용였고, Intellij를 사용하여 개발하기로 한다. 개발의 진행된 사항에 대해서는 이 글에서 일기처럼 기록할려고 한다.
3/13
지금까지 진행된 사항에 대해서 언급하자면 전체적인 앱의 구조는 이미 완료가 된 상태이고, 현재 코딩을 하고 있는 상황이다. DTO 클래스는 구현이 완료된 상태이고, 클래스들에 대한 데이터베이스 CRUD와 관련된 부분을 현재 코딩하고 있다. 솔직히 이 프로젝트를 시작한지 상당한 기간이 흘렀다. 반성해보니 단순 게으름 때문에 프로젝트 진척이 나아가질 못하고 있었다. 메일 앱의 가장 어려운 부분이 사실상 DB의 입출력인 만큼 이 부분을 넘어가면 개발 속도가 더 빠르게 될 것이라 기대된다.
3/21
DAO(Mail, Account, AccountSession), CrudRepository, AccountRepository, MailBoxRepository에 대한 구현 및 디버깅, 테스트가 완료되었다. JSON과 관련된 클래스들을 사용하는 것이 미숙하였고, 이상한 실수를 반복하는 바람에 일정이 많이 지연된 것 같다. 마지막으로 메서드 파라미터가 무엇인지 잘 확인하는 것은 중요하다!! (이것 때문에 많이 삽질했다.) 이제 남은 것은 서비스 단의 구현, 화면 단의 구현이다.
~ 4/2
SDK를 IntelliJ에서 Eclipse로 바꾸었다. 바꾼 이유는 기존에 사용 중이던 IntelliJ 체험판 기간이 만료되어서 부득이하게 바꿀 수 밖에 없었다. 물론 해당 SDK를 유로로 구매하는 방법도 있었겠지만 지금 당장 필요한 기능들은 Eclipse에서 제공하고 있어서 구매 필요를 느끼지 못하였기 때문이다. 다음과 같은 작업들이 완료되었다.
- 기본적인 프론트단 디자인 및 구현
- 서버가 가지고 있는 html 파일을 바탕으로 사용자 편의에 맞추어 동적으로 html 파일을 생성해주는 기능 구현
- 메일 리스트를 긁어와서 html 형식에 맞게 내용을 형성해주는 기능 구현
- 사용자가 요청한 데이터의 수만큼 테스트용 Account 혹은 Mail을 생성하고 DB에 업로드해주는 기능 구현
그 외 클라이언트 단에서 서버가 가지고 있는 정적 자원을 참조하지 못하는 문제를 해결하였다. 문제는 tomcat이 평소에 url을 이용하여 클래스들을 불러올 때 사용하는 path하고 정적 자원을 참조할 때 사용하는 path하고 다르기 때문에 발생하였다. 이 문제를 해결하기 위해서는 예외적으로 특정 타입의 파일을 참조할 때, 가장 Root path를 참조하도록 web.xml에 다음과 같이 설정해주여야 한다.
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.jpeg</url-pattern>
<url-pattern>*.gif</url-pattern>
...
</servlet-mapping>
이 부분은 나중에 tomcat 서버를 사용하기만 한다면 공통되는 부분이니 충분히 유용하다!!
~4월 12일
home을 기준으로 전체 메일함, 받은 메일함, 보낸 메일함, 임시 저장소, 휴지통으로 갈 수 있도록 하였으며, 각각에 필요한 서비스 서블릿 클래스를 구현하였다. 각각의 클래스는 DB로부터 메일에 대한 정보를 받고 그 메일 목록을 보여준다. 또한 리스트 중의 메일을 자세히 보고 싶다면 그 메일을 볼 수 있도록 해주는 서블릿 클래스 역시 구현하였다.
메일을 작성하는 기능을 추가하였다. 다만 아직은 텍스트 파일을 제외한 파일을 서버로 송신, 수신하는 기능은 구현 중에 있다. 대부분의 필요한 서비스들을 모두 구현하였다. 이제 남은 부분을 적어보겠다.
- 서버, 클라이언트 단에서 파일의 입출력
- CSS, JS를 이용하여 보여지는 부분 꾸미기
못해도 이번 주 내로 프로젝트를 끝내는 것을 목표로 한다.
~ 4월 14일
보낸 메일과 받은 메일의 형식을 다르게 보여주도록 수정하였다. 그리고 실망스럽지만 프로젝트를 여기서 마칠려고 한다. 그 이유는 첫 번째는 설계를 잘못하여 파일 입출력 기능과 휴지통 기능을 이식하려고 하면 상당히 많은 부분을 고쳐야하기 때문이다. 고칠려면 할 수는 있지만, 솔직히 다른 프로젝트로 넘어가고 싶은 마음이 크다. 두 번째로 html, css, javascript에 대한 지식이 너무 부족하였다. 물론 간단한 form 자체는 짤 수 있었지만 막상 꾸밀려고 하니 어떻게 꾸밀지 감이 잡히질 않더라...
실패한 첫 프로젝트다. 반성할 점을 적고 마무리할려고 한다.
- 기간 업수하는 습관을 들일 것, 프로젝트 가장 큰 실패원인은 지리하게 시간을 끈 것이었다.
- 기능 관련하여 좀 더 고민하고 앱 구조, DB 구조를 생각할 것
- 프론트엔드 지식을 좀 더 확실하게 알고 할 것, 최소한 다음부터는 템플릿을 마련할 것
- 웹에 대한 학습이 필요, 너무 주먹구구식으로 프로젝트를 진행한 경향이 있음
- 자바에 대한 학습도 필요하다는 것을 느낌, 생각보다 자바에 대해서 모르는 것들이 많았음...좀더 쉽게, 나은 방식으로 코드를 짤 수 있었을 것이라는 생각이 듦
남이 만든 프로젝트를 참고할 필요가 있을 것 같다. 그 외에도 아직은 많은 학습 필요하다는 것을 느꼈다.
'뭐라도 만들어보자!!( 프로젝트 )' 카테고리의 다른 글
STM32 개발 환경 ( VSCode + Ubuntu(WSL) ) (0) | 2023.12.14 |
---|---|
Sorting Simulator (0) | 2023.05.18 |
Visual stuido code, C/C++ 세팅(윈도우 버전) (0) | 2023.01.08 |
3. C++를 이용한 Postfix 계산기 만들기 (0) | 2022.08.16 |