-
기술지원 관련 사이드 프로젝트 진행상황Side Project 2026. 1. 5. 10:18
Tech Support Scheduler 구조 요약 (Controller → Service → Dao → MyBatis XML)
0) 한 장 구조도 (요청 흐름)
[Browser]
↓ HTTP 요청
[Controller] (URL 매핑 / Model 세팅 / view 또는 redirect)
↓
[Service] (비즈니스 로직 / 검증 / 페이징 계산 / 트랜잭션 단위)
↓
[Dao @Mapper] (DB 호출 인터페이스)
↓
[MyBatis XML] (SQL 본체 / 동적쿼리 / LIMIT-OFFSET)
↓
[MariaDB]1) 폴더/파일 구조 (레이어별)
src/main/java/com/boot/techsupportscheduler
├─ config/WebMvcConfig.java
└─ support
├─ controller : HomeCon, LoginCon, JoinCon, NoticeCon, ProjectCon, SupportCon
├─ service : LoginSvc, JoinSvc, NoticeSvc, ProjectSvc, SupportSvc
├─ dao : LoginDao, UserDao, NoticeDao, ProjectDao, SupportDao
├─ interceptor: LoginInterceptor, RoleActionInterceptor
└─ vo : Notice, Project, Support, User, SessionUser, PageInfo, *PageResultsrc/main/resources/sqlmapper
├─ Login.xml
├─ User.xml
├─ notice.xml
├─ project.xml
└─ support.xml2) URL 라우팅 맵 (한눈에 보는 엔드포인트)
Auth
기능MethodURLController로그인 폼 GET /login LoginCon.loginForm() 로그인 처리 POST /login LoginCon.loginExe() 로그아웃 GET /logout LoginCon.logout() 회원가입 폼 GET /join JoinCon.joinForm() 회원가입 처리 POST /join JoinCon.joinExe() 권한 거절 페이지 GET /support/forbidden LoginCon.forbidden() Home/Notice (공지)
기능MethodURLController홈(공지로 리다이렉트) GET /support/home HomeCon.doHome() 공지 목록(페이징) GET /support/notice NoticeCon.list() 공지 검색(페이징) POST /support/notice_search NoticeCon.noticeSearch() 공지 상세(+조회수) GET /support/notice/detail NoticeCon.detail() 공지 등록 폼 GET /support/notice/new NoticeCon.getForm() 공지 등록 POST /support/notice/new NoticeCon.postForm() 공지 수정 폼 GET /support/notice/edit NoticeCon.getEdit() 공지 수정 POST /support/notice/edit NoticeCon.postEdit() 공지 삭제(소프트) POST /support/notice/delete NoticeCon.doDelete() Project (프로젝트)
기능MethodURLController목록(페이징) GET /support/project/list ProjectCon.list() 검색(페이징) POST /support/project/search ProjectCon.search() 상세 GET /support/project/detail ProjectCon.detail() 등록 폼 GET /support/project/new ProjectCon.getNew() 등록(코드 자동생성) POST /support/project/new ProjectCon.postNew() 수정 폼 GET /support/project/edit ProjectCon.getEdit() 수정 POST /support/project/edit ProjectCon.postUpdate() 삭제(현재 하드삭제) POST /support/project/delete ProjectCon.doDelete() Support (기술지원 티켓)
기능MethodURLController목록 GET /support/support/list SupportCon.list() 상세 GET /support/support/detail SupportCon.detail() 등록 폼 GET /support/support/new SupportCon.getForm() 등록 POST /support/support/new SupportCon.postForm() 수정 폼 GET /support/support/edit SupportCon.editForm() 수정 POST /support/support/update SupportCon.doUpdate() 삭제(소프트) POST /support/support/delete SupportCon.doDelete() 3) 보안/권한 규칙 (Interceptor 한눈 요약)
LoginInterceptor (로그인 없이 허용되는 GET)
PUBLIC GET 허용:
- /support/home
- /support/notice
- /support/notice/detail/**
- /support/project/list
- /support/project/detail/**
- /support/support/list
- /support/support/detail/**
- /support/forbidden
그 외 요청은 세션 LOGIN_USER 없으면 /login?redirect=... 로 튕김RoleActionInterceptor (POST 권한 분리)
GET: 전부 허용
POST:
- ROLE_ADMIN : 전부 허용
- ROLE_SALES : /support/project... 만 허용
- ROLE_SUPPORT : /support/support... 만 허용
그 외: 403 + alert + 이전페이지(or /support/home)4) 모듈별 “기능 흐름” 요약 (Controller→Service→Dao→XML)
A. 회원가입(Join)
POST /join
→ JoinCon.joinExe()
→ JoinSvc.join()
- 입력검증 / role 화이트리스트
- UserDao.findByLoginId() 로 중복체크
- BCrypt.hashpw()로 password_hash 생성
- UserDao.insertUser()
→ User.xml (INSERT)
→ redirect:/loginB. 로그인(Login)
POST /login
→ LoginCon.loginExe()
→ LoginSvc.login(loginId, rawPw)
- LoginDao.findByLoginId()
- BCrypt.checkpw()
- 성공 시 SessionUser 생성
→ 세션 LOGIN_USER 저장
→ redirect:/support/project/listC. 공지(Notice) - 목록/검색/상세/CRUD
C-1) 목록(페이징)
GET /support/notice?page&size
→ NoticeCon.list()
→ NoticeSvc.doSearchPaged(field=all, q=null, topOnly="", sort=new, page, size)
- NoticeDao.countSearch(p)
- PageInfo(page,size,totalCount) → offset 계산
- NoticeDao.searchPaged(p + limit/offset)
→ notice.xml : countSearch / searchPaged
→ home/home.html 렌더링C-2) 상세(+조회수 증가 + prev/next)
GET /support/notice/detail?noticeId
→ NoticeCon.detail()
→ NoticeSvc.doDetail()
- NoticeDao.increaseViews(noticeId)
- NoticeDao.doDetail(noticeId)
→ notice.xml : increaseViews / doDetail
+ doPrev / doNext로 이전글/다음글 조회C-3) 등록/수정/삭제
POST /support/notice/new
→ NoticeSvc.doInsert()
→ notice.xml : doInsert
POST /support/notice/edit
→ NoticeSvc.doUpdate()
→ notice.xml : doUpdate
POST /support/notice/delete
→ NoticeSvc.doDelete()
→ notice.xml : doDelete (deleted_yn='Y' 소프트 삭제)D. 프로젝트(Project) - 검색/정렬/상태필터 + 페이징 + 코드 자동생성
D-1) 목록/검색(페이징)
GET /support/project/list
POST /support/project/search
→ ProjectSvc.doSearchPaged(field,q,status,sort,page,size)
- ProjectDao.countSearch()
- PageInfo로 offset 계산
- ProjectDao.searchPaged(limit/offset)
→ project.xml : countSearch / searchPaged (동적 where + 정렬 choose)D-2) 등록(프로젝트 코드 생성)
POST /support/project/new
→ ProjectCon.postNew()
- projectCode = "TS-YYYYMM-XXXXXXXX(UUID8)"
→ ProjectSvc.doInsert()
→ project.xml : doInsert (useGeneratedKeys로 projectId 주입)D-3) 삭제 주의
POST /support/project/delete
→ project.xml : doDelete 가 현재 DELETE FROM project (하드 삭제)
※ 다른 테이블들은 deleted_yn 기반 소프트 삭제라, 여기만 튀는 상태.E. 기술지원(Support) - 티켓 CRUD + 프로젝트 연동
E-1) 등록 폼(프로젝트/영업담당자 옵션 구성)
GET /support/support/new
→ SupportCon.getForm()
- ProjectSvc.doList()로 프로젝트 목록
- salesManager distinct 뽑아서 드롭다운 구성
→ support/form.htmlE-2) 등록/수정/삭제
POST /support/support/new
→ 기본값 방어: deletedYn='N', status='OPEN'
→ SupportSvc.doInsert()
→ support.xml : doInsert
POST /support/support/update
→ SupportSvc.doUpdate()
→ support.xml : doUpdate
POST /support/support/delete
→ SupportSvc.doDelete()
→ support.xml : doDelete (소프트 삭제)'Side Project' 카테고리의 다른 글
Spring Boot: 세션 기반 로그인/회원가입 + 인터셉터 권한 제어(RBAC) 구현 (0) 2026.01.03 기능 추가(메모) (0) 2025.12.30 기술지원 사이드 프로젝트 진행 (~2025-12-30) (0) 2025.12.30 기술지원 웹페이지 진행 상황(~2025-12-23) (2) 2025.12.23 기술지원 앱 사이드 프로젝트 (2025-12-19) (0) 2025.12.19