이미지 출처: 인프런 강의(스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술)
Spring을 사용한 일반적인 웹 애플리케이션은 역할별로 계층을 나누어 구조화되어 있습니다.
이렇게 계층을 나누면 유지보수성이 좋아지고, 확장성이 뛰어나며, 코드의 가독성이 향상됩니다.
"사용자 요청을 받아서 처리하는 역할"
@Controller
또는 @RestController
어노테이션을 사용Service
계층을 호출해서 필요한 로직을 수행한 후, 결과를 반환"비즈니스 로직 구현하는 핵심 계층"
@Service
어노테이션을 사용Controller
와 Repository
사이에서 중간 역할을 수행"데이터베이스 접근, 도메인 객체를 DB에 저장하고 관리하는 계층"
@Repository
어노테이션을 사용 (Spring Data JPA를 사용하면 생략 가능)"비즈니스 도메인 객체"
@Entity
어노테이션을 사용하여 JPA가 관리하도록 설정 가능위 계층을 기반으로 간단한 회원관리 예제를 만들어 보겠습니다.
개발을 하기 전 전체적인 프로젝트 구조는 아래와 같습니다 :)
├── 📂 backend
│ ├── 📂 src
│ │ ├── 📂 main
│ │ │ ├── 📂 java/com/hello/hello_spring
│ │ │ │ ├── 📂 controller # API 컨트롤러
│ │ │ │ │ ├── 📜 MemberController.java
│ │ │ │ │ ├── 📜 HomeController.java
│ │ │ │ ├── 📂 service # 비즈니스 로직
│ │ │ │ │ ├── 📜 MemberService.java
│ │ │ │ ├── 📂 domain # 비즈니스 도메인 객체
│ │ │ │ │ ├── 📜 Member.java
│ │ │ │ ├── 📂 repository # 데이터 액세스 계층
│ │ │ │ │ ├── 📜 MemberRepository.java # 인터페이스
│ │ │ │ │ ├── 📜 MemoryMemberRepository.java # 구현체
│ │ │ │ ├── 📜 HelloSpringApplication.java # Spring Boot 실행 파일
│ │ ├── 📂 test # 테스트 코드
│ ├── 📜 build.gradle
│ │
│ ├── ...