✅ 환경 설정
- WAS: Tomcat 10.1.28
- build: maven
- RDBMS: MySQL 8.4.0
- RDBMS Connector: MySQL-Connector: 9.0.0
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.0.0</version>
</dependency>
https://mvnrepository.com/artifact/com.mysql/mysql-connector-j
✅ 핵심 기능
1️⃣ 회원가입
회원가입 요청: /members/signup
- 클라이언트가 아이디 비밀번호를 입력해서 Tomcat에 Post 요청을 보낸다.
- Tomcat은 서비스 단에 저장 요청을 보낸다.
- 서비스 단은 리포지토리 단을 통해 MySQL에 저장시도를 한다.
- 저장 결과를 Tomcat에 보낸다.
- Tomcat은 결과를 처리해서 JSP에 결과를 보낸다.
- JSP는 결과에 따라 안내 메시지와 함께 적절한 페이지로 리다이렉트 해준다.
- 성공시: “회원가입에 성공했습니다. 환영합니다.” 메시지와 함께 메인화면으로 리다이렉트
- 실패시(아이디 중복 등): “아이디가 중복됩니다.” 메시지와 함께 회원가입화면으로 리다이렉트
2️⃣ 로그인
로그인 시도: /members/login
- 클라이언트가 아이디 비밀번호를 입력해서 Tomcat에 Post 요청을 보낸다.
- Tomcat은 서비스 단에 로그인 요청을 보낸다.
- 서비스 단은 리포지토리 단을 통해 MySQL에 해당 아이디로 된 회원이 있는지를 확인한다.
- 없거나, 있더라도 비밀번호가 일치하지 않는 경우엔 실패 그외엔 성공으로 결과를 보낸다.
- 로그인 성공시 Tomcat은 해당 사용자의 정보를 세션에 저장한다.
- Tomcat은 결과를 처리해서 JSP에 결과를 보낸다.
- JSP는 결과에 따라 안내 메시지와 함께 적절한 페이지로 리다이렉트 해준다.
- 성공시: “OO님 환영합니다. 환영합니다.” 메시지와 함께 메인화면으로 리다이렉트
- 실패시(아이디/비밀번호 불일치): 특정 메시지와 함께 로그인화면으로 다시 리다이렉트
- 아이디 불일치시: “아이디가 존재하지 않습니다”
- 비밀번호 불일치시: “비밀번호가 틀립니다.”
아이디 기억하기 기능
- 로그인 시에 ‘아이디 기억하기’를 체크하면 응답이 전달될 때 클라이언트에 쿠키가 추가된다.
- 이후 클라이언트가 로그인화면을 다시 GET 요청한다.
- Tomcat은 이전에 저장됐던 쿠키가 있는지를 확인하고 결과를 전달한다.
- 쿠키가 있는 회원의 경우, 로그인화면에 이전에 로그인했던 아이디가 표시되고 쿠키가 없는 회원의 경우, 표시되지 않는다.
3️⃣ 메인화면
/main
- 클라이언트가 메인화면을 GET 요청한다.
- Tomcat은 세션 스토어에서 해당 클라이언트의 정보가 저장되어 있는지 확인 후 결과 전달
- 세션 저장여부에 따라 다른 화면을 제공한다.
4️⃣ 글 조회
글 조회는 로그인 여부에 상관없이 누구나 할 수 있다.
모든 글 조회: /main/boards
- 클라이언트가 글 목록을 GET 요청한다.
- Tomcat은 서비스 단에 모든 글을 달라고 요청한다.
- 서비스 단에선 리포지토리를 통해 데이터베이스에서 모든 글을 받아온다.
- 결과를 Tomcat에 전달한다.
- Tomcat은 해당 결과를 JSP에 전달한다.
- JSP는 모든 글 정보를 화면에 뿌려준다.
특정 글 조회:/boards/{글 아이디}
- 클라이언트가 특정 글을 GET 요청한다.
- Tomcat은 서비스 단에 글의 Id를 넘겨주며 해당 글을 달라고 요청한다.
- 서비스 단에선 리포지토리를 통해 데이터베이스에서 해당 글을 받아온다.
- 결과를 Tomcat에 전달한다.
- Tomcat은 해당 결과를 JSP에 전달한다.
- JSP는 해당 글 정보를 화면에 뿌려준다.
5️⃣ 글 작성
글 작성은 로그인한 회원에 한해서만 가능하다.
/boards/write
- 클라이언트가 제목, 내용과 함께 POST 요청
- 세션을 조회해 해당 클라이언트가 로그인된 회원이 아니면 해당 요청을 무시한다.
- Tomcat은 서비스 단에 해당 정보를 넘겨주며 글 작성 요청
- 서비스 단은 리포지토리를 통해 데이터베이스에 해당 글 저장
- 결과를 Tomcat에 전달한다.
- Tomcat은 해당 결과를 처리해 JSP에 전달한다.
- JSP는 클라이언트를 글 목록 화면으로 리다이렉트 해준다.
6️⃣ 글 수정
글 수정은 해당 글을 작성한 회원에 한해서만 가능하다.
/boards/edit/{글 아이디}
- 클라이언트가 수정된 제목, 내용과 함께 POST 요청
- 세션을 조회해 해당 클라이언트가 글을 작성한 회원이 아니면 해당 요청을 무시한다.
- Tomcat은 서비스 단에 해당 정보를 넘겨주며 글 수정 요청
- 서비스 단은 리포지토리를 통해 데이터베이스에 해당 글 수정
- 결과를 Tomcat에 전달한다.
- Tomcat은 해당 결과를 처리해 JSP에 전달한다.
- JSP는 클라이언트를 해당 글 화면으로 리다이렉트 해준다.
7️⃣ 글 삭제
글 삭제는 해당 글을 작성한 회원에 한해서만 가능하다.
/boards/delete/{글 아이디}
- 클라이언트가 삭제하기 위해 POST 요청
- 세션을 조회해 해당 클라이언트가 글을 작성한 회원이 아니면 해당 요청을 무시한다.
- Tomcat은 서비스 단에 해당 글의 id를 넘겨주며 삭제 요청
- 서비스 단은 리포지토리를 통해 데이터베이스에 해당 글 삭제
- 결과를 Tomcat에 전달한다.
- Tomcat은 해당 결과를 처리해 JSP에 전달한다.
- JSP는 클라이언트를 글 목록 화면으로 리다이렉트 해준다.
✅ 느낀점
그전까지는 스프링 프레임워크가 제공하는 Spring Web 라이브러리를 통해 손쉽게 구현했었는데 이렇게 프레임워크의 도움없이 하나부터 열까지 짜보니 간단한 기능을 구현하는데에도 많은 양에 코드가 들어갔다.
하지만 배울 점이 많은 좋은 실습이었다고 생각한다. 결국 나중엔 Spring Web으로 개발을 할텐데 Spring Web도 결국엔 이 Servlet 기반으로 짜여진 것이다. 그렇기 때문에 이 실습은 그 Spring Web에 대한 이해를 더욱 탄탄하게 만들어줄 것이라고 생각한다.
'데브코스 > 실습 & 프로젝트' 카테고리의 다른 글
게시판 만들기 - 기능추가: Pagination(페이지네이션) (0) | 2024.08.27 |
---|---|
게시판 만들기 - 데이터 계층 리팩토링(MyBatis 도입) (0) | 2024.08.26 |
게시판 만들기 - 웹 계층 리팩토링(Spring MVC 도입) (0) | 2024.08.22 |
게시판 만들기 - 웹 계층 리팩토링(FrontController 도입) (0) | 2024.08.21 |
게시판 만들기 - 개요 (0) | 2024.08.20 |