⏳ Time Log/1. One Day (Daily · TIL)

Day 35 (12/5) – Apache Maven 표준 디렉터리 구조

this.Serena 2026. 2. 20. 12:17

🏗️ 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 프로젝트 실습 대기