개인 공부/Spring Boot

공통 모듈 분리(모듈화) 정리 (+간단 예시, 핵심 요약)

호기심 많은 솔이 2026. 1. 16. 01:18

오늘 공통 모듈 분리에 대한 설명을 들었다.

 

내용을 요약하면, 어떤 프로젝트에서는 쓰이고, 또 어떤 프로젝트에서는 쓰이지 않는 것들이 아니라, 대부분의 프로젝트에서 쓰이는 것들, 예를 들면 db 설정, 해싱, jwt 관련 로직, 전역 예외처리, 공통 응답/에러 포맷, 검증(Validation), 로깅과 같은 것들은 따로 분리해서 뽑아 놓으면 새로운 프로젝트에서도 그대로 쓸 수 있고, 이를 잘 활용하면 개발 효율이 많이 올라간다는 것이었다.

 

위에 나오는 것들 외에도 알림톡 모듈을 개발한 후에 메일 전송 모듈을 만든다고 하면 공통되는 로직이 많을 것이다. 알림톡 모듈을 개발할 때, 그런 공통 로직들을 잘 뽑아서 정리해 놓으면 메일 전송 모듈을 개발할 때에는 개발 시간이 많이 단축될 것이다.

 

 

 

위의 내용들을 바탕으로 실습을 해보면서 감을 익혀보자는 생각으로 간단한 CRUD를 만들고, 공통된 부분을 분리해보기로 했다.

 

목표 : 2개의 테이블(학교, 학생)을 만들고, 학교, 학생 CRUD를 간단하게 구현한 후, 공통된 로직 추출해보기. 

- 학교 CRUD : 학교 생성, 학교 목록 조회, 학교 단건 조회, 학교 수정, 학교 삭제

- 학생 CRUD : 학생 생성, 학생 목록 조회, 학생 단건 조회, 학생 이름 수정, 학생 삭제

 

 

이 실습을 하면서 뽑아낸 공통된 로직들 중 학습하기 좋은 예시를 하나 가져와서 설명해보겠다.

 

<공통 부분 추출 전 StudentRepository>

 

 

<공통 부분 추출 전 SchoolRepository>

 

위 두 코드를 보면, 공통된 부분을 찾을 수 있다. 초록색으로 표시된 부분들이 두 레포지토리의 공통된 부분이고, 노란색으로 표시된 부분이 차이가 나는 부분이다. 사진에서 보이는 것처럼 파라미터의 개수만 다른 경우도 차이가 나는 부분임에 주의해야 한다.

 

초록색 부분(공통 부분) 요약

1. GeneratedKeyHolder()로 PK 생성

2. jdbcTemplate.update(...) 호출

3. con.prepareStatement(...)로 생성된 PK 반환 설정

4. keyHolder.getKey()로 방금 INSERT 된 id 꺼내서 Long으로 반환

 

노란색 부분(차이 부분) 요약

A. INSERT INTO ... (파라미터 다름)

B. ps.setString(...) ... (null 유무 다름)

 

 

<공통 부분 추출 후>

 

이렇게 공통된 부분을 추출한 후 이제 이를 하나의 메서드로 만들었다. -> JdbcHelpers.insertAndReturnId(...)

 

위 사진의 코드를 보면, 공통된 부분은 JdbcHelper라는 클래스에 insertAndReturnId(...)라는 메서드로 만든 후, StudentRepository에서 메서드 호출만으로 사용하고 있는 것을 볼 수 있다.

 

이런 식으로 공통 부분을 뽑아내서 코드를 작성하면 얻을 수 있는 장점은 많기 때문에, 직관적으로 가장 이해하기 쉬운 예시를 들자면,

 

기존 구조에서는 StudentRepo 내용이 1,2,3,4,A,B이고, SchoolRepo 내용이 1,2,3,4,a,b 였다면,

공통 부분을 뽑아낸 후의 StudentRepo 내용은 @,A,B가 됐고, SchoolRepo 내용은 @,a,b가 되었다.

 

이렇게 공통 부분을 뽑아냄으로써 중복을 제거하고, 코드의 가독성도 향상시킬 수 있었다. 또한, 이후 프로젝트에서 이 로직을 재사용하는 경우가 생긴다면 개발 시간도 단축할 수 있다는 효과가 있는 것이다.