** πŸ“Œλ―Έλ‹ˆ 포트폴리였 ν”„λ‘œμ νŠΈ **

μ§€κΈˆκΉŒμ§€ 배운 λͺ¨λ“  κΈ°μˆ μ„ ν™œμš©ν•˜μ—¬

μ‹€μ „ μˆ˜μ€€μ˜ μ›Ή μ„œλΉ„μŠ€λ₯Ό 1개 μ™„μ„±ν•΄λ³΄λŠ” 단계

βœ… μ™„μ„± ν›„ 기술 λ©΄μ ‘μ—μ„œ β€œμ œκ°€ 직접 λ§Œλ“  ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€β€ μ„€λͺ… κ°€λŠ₯


🧩 λͺ©μ°¨

  1. ν”„λ‘œμ νŠΈ λͺ©ν‘œ 및 κ΅¬ν˜„ λ²”μœ„
  2. ν”„λ‘œμ νŠΈ 전체 ꡬ쑰
  3. νŽ˜μ΄μ§€ 흐름도
  4. 기술 ꡬ성 μš”μ†Œ
  5. μ˜ˆμ‹œ κΈ°λŠ₯ 섀계 (νšŒμ›κ°€μž… + κ²Œμ‹œνŒ + λŒ“κΈ€)
  6. λ³΄μ•ˆ & μœ νš¨μ„± 섀계
  7. λ©΄μ ‘ λ°œν‘œμš© μ„€λͺ… 포맷
  8. 마무리 μš”μ•½ + Notion μž‘μ„± 팁

βœ… 1. ν”„λ‘œμ νŠΈ λͺ©ν‘œ 및 κ΅¬ν˜„ λ²”μœ„

ν•­λͺ© μ„€λͺ…
λͺ©ν‘œ JSP 기반의 νšŒμ›μ œ κ²Œμ‹œνŒ λ˜λŠ” 리뷰 μ‹œμŠ€ν…œμ„ 1개 μ™„μ„±
ꡬ성 νšŒμ›κ°€μž…/둜그인 + κ²Œμ‹œκΈ€ CRUD + λŒ“κΈ€ κΈ°λŠ₯ + 파일 μ—…λ‘œλ“œ + κ΄€λ¦¬μž νŽ˜μ΄μ§€
νŠΉμ§• Servlet + DAO + DTO + MariaDB μ™„μ „ 연동
κ²°κ³Ό ν¬νŠΈν΄λ¦¬μ˜€μ— 넣을 수 μžˆλŠ” μ‹€μ „ ν”„λ‘œμ νŠΈ

βœ… 2. ν”„λ‘œμ νŠΈ 전체 ꡬ쑰

πŸ“ νŒ¨ν‚€μ§€ 및 파일 ꡬ쑰

πŸ“ controller/
 β”œβ”€ LoginServlet.java
 β”œβ”€ RegisterServlet.java
 β”œβ”€ BoardListServlet.java
 β”œβ”€ BoardWriteServlet.java
 β”œβ”€ CommentInsertServlet.java
 └─ LogoutServlet.java

πŸ“ dao/
 β”œβ”€ UserDAO.java
 └─ BoardDAO.java

πŸ“ dto/
 β”œβ”€ UserDTO.java
 └─ BoardDTO.java

πŸ“ util/
 └─ DB.java

πŸ“ view/
 β”œβ”€ login.jsp
 β”œβ”€ register.jsp
 β”œβ”€ board_list.jsp
 β”œβ”€ board_write.jsp
 └─ comment_area.jsp

βœ… 3. νŽ˜μ΄μ§€ 흐름도

[νšŒμ›κ°€μž… β†’ 둜그인 β†’ κ²Œμ‹œκΈ€ λͺ©λ‘ β†’ κ²Œμ‹œκΈ€ μž‘μ„± β†’ λŒ“κΈ€ 등둝 β†’ λ‘œκ·Έμ•„μ›ƒ]

1. register.jsp β†’ RegisterServlet β†’ DB
2. login.jsp β†’ LoginServlet β†’ μ„Έμ…˜ μ €μž₯
3. list.jsp β†’ BoardListServlet β†’ DB λͺ©λ‘ 쑰회
4. write.jsp β†’ BoardWriteServlet β†’ κ²Œμ‹œκΈ€ 등둝
5. comment.jsp β†’ Ajax β†’ CommentInsertServlet β†’ DB μ €μž₯
6. logout.jsp β†’ μ„Έμ…˜ μ΄ˆκΈ°ν™”

βœ… 4. 기술 ꡬ성 μš”μ†Œ

ꡬ뢄 기술 μŠ€νƒ
λ°±μ—”λ“œ Java Servlet, DAO, DTO, JDBC
DB MariaDB
ν”„λ‘ νŠΈ HTML, CSS, JavaScript (Ajax 포함)
ꡬ쑰 섀계 MVC2 νŒ¨ν„΄
λ³΄μ•ˆ PreparedStatement, μ„Έμ…˜ κ³ μ • λ°©μ§€, SHA-256 μ•”ν˜Έν™”
μœ νš¨μ„± 검사 JavaScript + μ„œλ²„ μœ νš¨μ„± 병행

βœ… 5. μ˜ˆμ‹œ κΈ°λŠ₯ 섀계


βœ… 1) νšŒμ›κ°€μž… + 둜그인

νŽ˜μ΄μ§€ 처리 방식
register.jsp β†’ RegisterServlet β†’ UserDAO.insert() Β 
λΉ„λ°€λ²ˆν˜ΈλŠ” SHA-256으둜 μ•”ν˜Έν™” ν›„ DB μ €μž₯ Β 
둜그인 μ‹œ LoginServlet β†’ μ„Έμ…˜μ— loginId μ €μž₯ Β 

βœ… 2) κ²Œμ‹œνŒ (CRUD)

κΈ°λŠ₯ μ„€λͺ…
λͺ©λ‘ 쑰회 /board/list β†’ BoardListServlet β†’ DB 쑰회 ν›„ list.jsp 좜λ ₯
κΈ€ μž‘μ„± /board/write β†’ BoardWriteServlet β†’ DB μ €μž₯ ν›„ λ¦¬λ””λ ‰μ…˜
κΈ€ μˆ˜μ •/μ‚­μ œ /board/edit, /board/delete β†’ URL νŒŒλΌλ―Έν„° + DAO 처리

βœ… 3) λŒ“κΈ€ (Ajax)

fetch("CommentInsertServlet", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: "content=λŒ“κΈ€μž…λ‹ˆλ‹€&boardId=3"
});

β†’ CommentInsertServlet β†’ DB μ €μž₯ β†’ commentList.jsp에 동적 좜λ ₯


βœ… 6. λ³΄μ•ˆ & μœ νš¨μ„± 섀계

λ³΄μ•ˆ ν•­λͺ© 적용 방법
SQL Injection λ°©μ§€ λͺ¨λ“  SQL에 PreparedStatement μ‚¬μš©
λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™” SHA-256 적용 (EncryptUtil.java)
μ„Έμ…˜ κ³ μ • λ°©μ§€ 둜그인 μ‹œ invalidate() ν›„ getSession(true)
μž…λ ₯ μœ νš¨μ„± 검사 JS + Servlet λ‹¨μ—μ„œ λͺ¨λ‘ 체크
κ΄€λ¦¬μž νŽ˜μ΄μ§€ μ ‘κ·Ό μ œν•œ if (!session.getAttribute("loginId").equals("admin"))

βœ… 7. λ©΄μ ‘ λ°œν‘œμš© μ„€λͺ… 포맷 🎀

🧠 β€œμ œκ°€ λ§Œλ“  κ²Œμ‹œνŒ ν¬νŠΈν΄λ¦¬μ˜€μ—μ„œλŠ”β€¦β€

- MVC2 νŒ¨ν„΄ ꡬ쑰둜 κ΅¬μ„±ν•˜μ˜€κ³ ,
- ControllerλŠ” Servlet, Model은 DAO/DTO, ViewλŠ” JSP둜 λ‚˜λˆ„μ—ˆμŠ΅λ‹ˆλ‹€.
- 둜그인 μ‹œ μ„Έμ…˜μ„ 톡해 μ‚¬μš©μž μƒνƒœλ₯Ό μœ μ§€ν•˜λ©°,
- κ²Œμ‹œνŒ κΈ°λŠ₯은 CRUD μ „λΆ€ κ΅¬ν˜„ν–ˆκ³ , λŒ“κΈ€μ€ Ajax둜 비동기 μ²˜λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.
- λ³΄μ•ˆ μΈ‘λ©΄μ—μ„œλŠ” PreparedStatement, λΉ„λ°€λ²ˆν˜Έ μ•”ν˜Έν™”, μ„Έμ…˜ κ³ μ • λ°©μ§€ 등을 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€.

βœ… 8. 마무리 μš”μ•½ πŸ§