반응형
스프링부트·리액트가 익숙한 개발자가
레거시 스프링 프레임워크 + JSP + MyBatis + jQuery + Oracle 프로젝트를 처음 받으면
대부분 같은 지점에서 멘탈이 흔들린다.
이 글은 레거시 환경에 빠르게 적응하는 방법과
실무에서 반드시 구현하는 핵심 기능들을 한 번에 정리한 글이다.
1️⃣ 레거시 스프링 환경, 왜 어려운가?
대부분 이런 스택이다
- Spring Framework (Boot 아님)
- MyBatis
- Tomcat
- Oracle
- JSP + JSTL
- JavaScript + jQuery + Ajax
- 데이터 타입: JSON
어려운 이유 정리
- 설정 파일이 많음 (xml 지옥)
- 화면(JSP)과 로직이 강하게 엮여 있음
- 프론트/백엔드 경계가 애매함
- 최신 문법이 거의 없음
👉 실력 문제가 아니라 시대 차이 문제다.
2️⃣ 레거시 환경 적응의 핵심 사고방식
❌ 하지 말아야 할 생각
- "왜 이걸 이렇게 짜지?"
- "부트가 훨씬 좋은데"
✅ 가져야 할 생각
"이 구조에서 내가 최소한으로 이해해야 할 건 뭐지?"
3️⃣ 레거시 스프링 프로젝트 구조 한 번에 보기
전형적인 구조
controller/
service/
mapper/
vo or dto/
WEB-INF/
└─ views/
└─ *.jsp
resources/
└─ mybatis/
└─ *.xml
데이터 흐름
JSP
↓ (Ajax / Form)
Controller
↓
Service
↓
MyBatis Mapper Interface
↓
Mapper XML
↓
Oracle DB
이 흐름을 그림처럼 외우는 게 1단계다.
4️⃣ JSP + jQuery + Ajax + JSON 적응법
JSP의 역할
- 화면 렌더링
- JSTL로 서버 데이터 출력
<c:forEach var="user" items="userList">
${user.name}
</c:forEach>
jQuery + Ajax 역할
- 화면 이벤트 처리
- 비동기 서버 통신
$.ajax({
url: '/users/list.do',
type: 'GET',
dataType: 'json',
success: function(res) {
console.log(res);
}
});
👉 JSP = 초기 화면
👉 Ajax = 동작
5️⃣ 기능 구현 ① 리스트 + 페이징 처리
1) Controller
@GetMapping("/users/list.do")
@ResponseBody
public Map<String, Object> userList(int page) {
return userService.getUserList(page);
}
2) Service
- offset 계산
- total count 조회
3) MyBatis (Oracle)
SELECT * FROM (
SELECT ROWNUM rn, u.* FROM users u
) WHERE rn BETWEEN #{start} AND #{end}
4) 화면
- Ajax로 리스트 갱신
- 페이지 버튼 클릭 시 재요청
👉 레거시 페이징은 구조 이해가 핵심이다.
6️⃣ 기능 구현 ② 회원가입
흐름
JSP 입력폼
→ Ajax POST
→ Controller
→ Service (검증)
→ MyBatis
→ Oracle
Ajax
$.post('/users/join.do', $('#joinForm').serialize());
Controller
@PostMapping("/users/join.do")
@ResponseBody
public String join(UserVO user) {
userService.join(user);
return "OK";
}
7️⃣ 기능 구현 ③ 로그인
핵심 포인트
- Session 사용
- Ajax 로그인 후 결과 분기
session.setAttribute("loginUser", user);
if(res === 'OK') location.href = '/main.do';
👉 레거시에서는 JWT 거의 안 씀
8️⃣ 기능 구현 ④ 기본 CRUD 패턴
공통 공식
화면
→ Controller
→ Service
→ Mapper
→ Mapper.xml
예: 삭제
@PostMapping("/users/delete.do")
@ResponseBody
public int delete(int userId) {
return userService.delete(userId);
}
👉 CRUD는 복붙이 아니라 패턴 암기 대상이다.
9️⃣ 레거시 환경에서 살아남는 팁
- xml은 "이해"보다 "복사"가 빠르다
- 처음엔 구조 따라 치기
- 로그부터 찍어라
- Oracle SQL 먼저 단독 실행
🔟 마무리
레거시 환경은 낡았지만,
실무 감각을 키우기엔 최고의 교재다.
이 스택을 버틸 수 있으면
최신 기술은 오히려 더 쉬워진다.
다음 글 예고
- 레거시 페이징 완전 분해
- MyBatis XML 빠르게 읽는 법
- JSP에서 Ajax 디버깅 방법
반응형
'실전툴팁' 카테고리의 다른 글
| Java & JS(jQuery + Ajax) 실무를 지배하는 패턴 문법 정리 (0) | 2025.12.15 |
|---|---|
| 자바(Java)와 JS(jQuery + Ajax)에서 Map과 for문을 자유자재로 쓰는 법 (0) | 2025.12.15 |