🏗️ Apache Maven 표준 디렉터리 구조
Maven은 프로젝트의 일관성을 위해 정해진 폴더 구조를 따름
| 디렉터리 이름 | 용도 및 목적 |
| 프로젝트 홈 | pom.xml 파일 및 모든 하위 디렉터리 포함 |
| src/main/java | 프로젝트의 실제 자바 소스 코드 (.java) |
| src/main/resources | 설정 파일, 프로퍼티 파일 등 실행 시 필요한 리소스 |
| src/test/java | JUnit, TestNG 등 단위 테스트를 위한 자바 소스 코드 |
| src/test/resources | 테스트 실행 시에만 필요한 리소스 파일 |
🎨 Front-end: Bootstrap & JSP 연동
1. Bootstrap 및 레이아웃 설정
- CDN 도입: 별도 설치 없이 <link> 태그로 Bootstrap 5.3 활용
- 레이아웃 분리: header.jsp, footer.jsp를 분리하여 <%@ include %> 방식으로 공통 관리
2. JSTL 날짜 포맷팅 및 출력
- LocalDateTime 대응: Java 8 이후의 LocalDateTime 형식을 JSP에서 출력할 때 T 문자를 제거하거나 포맷 변경 필요
- 방법: DTO에 getCreatedDate() 같은 포맷팅 메서드를 추가하거나 JSTL <c:out> 내에서 replace 함수 활용
<td><c:out value="${member.regDate.toString().replace('T', ' ')}" /></td>
🖱️ JavaScript: 다중 액션 핸들링 (ActionForm)
수정, 삭제, 목록 이동을 하나의 폼(actionForm)에서 처리하기 위해 버튼별로 이벤트 리스너를 설정함
const formObj = document.querySelector("#actionForm")
// 수정 버튼 클릭 시
document.querySelector(".btnModify").addEventListener("click", () => {
formObj.action = '/board/modify'
formObj.method = 'post'
formObj.submit()
})
// 목록 버튼 클릭 시 (GET 방식)
document.querySelector(".btnList").addEventListener("click", () => {
formObj.action = '/board/list'
formObj.method = 'get'
formObj.submit()
})
// 삭제 버튼 클릭 시
document.querySelector(".btnRemove").addEventListener("click", () => {
formObj.action = '/board/remove'
formObj.method = 'post'
formObj.submit()
})
🧪 MyBatis & JUnit 테스트 고도화
1. MyBatis 자동 생성 키 (useGeneratedKeys)
데이터 삽입(Insert) 후 DB에서 생성된 자동 증가값(Auto Increment)을 바로 확인해야 할 때 사용함
<insert id="insert" useGeneratedKeys="true" keyProperty="mno">
INSERT INTO tbl_member (name, email) VALUES (#{name}, #{email})
</insert>
2. JUnit 단위 테스트
로직이 성공적으로 수행되었는지 검증하기 위해 assertNotNull 등을 활용
- 검증: assertNotNull(dto.getMno()) - 데이터가 정상적으로 저장되어 PK값이 생성되었는지 확인
- 절차: 매퍼 작성 → 단위 테스트(DB 연동 확인) → 서비스 구현 → 컨트롤러 연결 순으로 진행
✏️ 메모 및 향후 일정
- 진행 범위: 스프링6 레거시 PDF p.207 ~ (Part 2 게시판 기능 구현 중)
- 특이사항: Bootstrap Modal을 활용한 처리 결과(등록/수정 성공) 알림 기능 추가 예정
- 실습 과제: 제공받은 테이블 명세서를 기반으로 직접 CRUD 전 과정을 구현하는 sp3 프로젝트 실습 대기
'⏳ Time Log > 1. One Day (Daily · TIL)' 카테고리의 다른 글
| Day 37 (12/9) – React 핵심 기초 문법 (0) | 2026.02.20 |
|---|---|
| Day 36 (12/8) – 스프링 레거시 CRUD 실습: Todo 프로젝트 및 테스트 전략 (0) | 2026.02.20 |
| Day 34 (12/4) – Spring Legacy: 웹 애플리케이션 개발 (Part 2) (0) | 2026.02.20 |
| Day 33 (12/3) – Spring Web MVC 컨트롤러 활용 및 MyBatis 연동 실습 (0) | 2026.02.20 |
| Day 32 (12/2) – Spring Legacy 프로젝트 환경 구축 (Day 1) (0) | 2026.02.20 |