개발동기
한국에서 이역2만리 떨어져 있는 이 곳에서, 개발 공부 중이다.
주변 사람들이 원하는 기능들을 구현한 웹사이트를 만들며 지금 공부 중인 내용을 적용했다.
개발환경
언어 : JAVA 11.0, HTML/CSS
프레임워크 : SpringBoot 2.7.7, JPA, Thymeleaf, Spring Security
DB : MySQL
IDE : IntelliJ IDEA CE
배포 : AWS LightSail
기타 : Git, Lombok, Gradle
ERD

기능 및 실행 화면
회원가입, 로그인
회원가입시 아이디, 닉네임, 비밀번호만 입력받고, 로그인할 때 ID와 비밀번호가 부합하면 로그인되게 하였다.
최초 회원가입시 게시판에는 접근할 수 없고, 홈 화면과 식단표만 확인할 수 있게끔 하였다.
위 사진과 같이 회원관리 화면을 만들어서 관리자가 새로 가입한 회원들에 대한 정보를 직접 확인하고 가입승인을 해주어야 정회원 등록이 되고 그 이후부터 사이트 이용이 가능하게끔 구현하였다. 권한 부여는 스프링시큐리티를 활용하였다.
게시판
게시글 및 답변 작성, 수정, 삭제

카테고리, 제목, 내용을 필수 입력 값으로 제한하고 게시글을 작성하면 DB에 저장되게끔 구현하였다.
추천, 조회수, 정렬, 검색, 페이징
추천 기능은 엔티티를 따로 생성하여 다대다(M:N) 관계에서 일대다(1:N), 다대일(N:1)로 바꾸어 구현하였다. 최초 하트 클릭시 해당 게시물의 좋아요 데이터 생성, 두번째 누르면 데이터 삭제 되고 그것이 보이도록 구현하였다.
조회수 기능은 질문 엔티티에 views라는 조회수 컬럼을 생성하고 누군가 글 상세정보를 보면 증가되도록 구현하였다. 쿠키를 활용하여 새로고침시 계속 증가되는 것을 막았다.
정렬 기능은 조회수순, 좋아요순, 최신순으로 나누었고 Repository에 JPQL을 작성해서 구현하였다.
검색 기능은 질문, 답변, 사용자 이름에 일부라도 포함되면 검색되게끔 구현하였고 동일하게 JPQL을 작성하여 구현하였다. 페이징 기능은 스프링의 Pageable 인터페이스를 활용하여 구현하였다.
식단표
식단표는 이미지 파일을 저장하고, 불러오는 형식으로 구현하였다. 스프링의 multipartfile 인터페이스를 활용하여 업로드 하였고 이미지는 로컬에 저장하였다. 관리자만 사진을 업로드할 수 있고 나머지 사용자들은 읽기만 할 수 있게 권한을 부여하였다.
느낀점
첫 웹사이트 제작 과정은 순탄치 않았다. 공식문서와 개인 블로그, 스택오버플로우 등을 헤집어가며 필요한 정보들을 내 프로젝트에 적용하는 과정에서 "왜 안되지, 이건 왜 되지"를 반복하며 직접 부딪혀보았다. 일일 단위로 기능 하나씩 구현하는 것을 목표로 했는데 안되니까 더 오기가 생기고 밤 늦게까지 코드와 싸웠다. 또, 새삼 우리가 아무렇지 않게 쓰고 있었던 서비스들이 얼마나 많은 사람들의 노력과 고민의 결과물인지 느꼈다.
배운점
- 이론적으로 배운 내용을 실제 적용하면서 이해하는 방법이 더 빠르게 학습하는 방법임을 깨달았다. 빠르게 이론을 학습하고 그에 대한 내용을 적용하며 '이게 그 내용'임을 알아채는 것이 필요했다.
- 스프링의 MVC 패턴에 익숙해졌다. 비슷한 패턴을 계속 작성해보니 흐름이 눈에 보였다.
- ERD를 직접 구성하면서 최초 DB 설계의 중요성을 깨달았다. 당연하겠지만 방법론가 Best Practice가 있었고 내 상황에 필요한 모습으로 적용하였다.
- 가능한 최초 ERD와 기능설계도를 명확히 작성해야함을 느꼈다. 프로젝트 후반에 계속 기능을 추가하면서 완성이 지연되었다.
아쉬운점
기능구현에만 집중하고 다른 나머지에는 신경을 안 썼다. 그렇기에 모든게 다 아쉽다.
실력에 비해 욕심만 앞선다.
테스트 코드를 많이 작성하고, 코드를 객체지향적으로 짜고, 언어 그 자체를 더 이해하고, 배포도 더 어렵게 해보고, 구글링보다는 내 머릿속에서 나오는 코드가 더 많았으면 좋겠다.
갈 길이 머니까 조급해하지말고 꾸준히 공부해나가야겠다.
첫 웹사이트를 ERD 설계부터 배포까지 한 번 해보았으니, 이제는 웹 사이트 제작에 필요한 내용들을 하나씩 자세히 공부해야지.