풀스택 웹🌐 개발자 지망생 🧑🏽💻
➕ 인공지능 관심 🤖
Categories
-
┣
▶ COMPUTER_SCIENCE
📂: 7 -
┣
▶ WEB
📂: 3 -
┣
▶ ETC
📂: 3-
┃
┣
ETCS
📄: 10 -
┃
┣
SUBBRAIN 개발기
📄: 5 -
┃
┗
YOS 개발기
📄: 1
-
┃
┣
-
┗
▶ AI
📂: 9-
┣
AITOOLS
📄: 3 -
┣
CV
📄: 2 -
┣
DEEP_LEARNING
📄: 1 -
┣
DATA_VIS
📄: 2 -
┣
GRAPH
📄: 1 -
┣
LIGHTWEIGHT
📄: 1 -
┣
MATH
📄: 1 -
┣
NLP
📄: 3 -
┗
STRUCTURED_DATA
📄: 2
-
┣
Spring5 입문-스프링 웹 어플 구조
스프링 웹 어플 구조
🗣️
출처
_ 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문 _와 스프링 인 액션 의 내용을 바탕으로 정리한 내용입니다.
간단한 웹 어플리케이션 구성 요소
사용자 -> Dispatcher Servlet -> 컨트롤러 -> 서비스 -> DAO 순으로 접근함.
- 프론트 서블릿
- 사용자의 모든 요청을 받는 창구 역할
- MVC 패턴에서
DispatcherServlet
- MVC 패턴에서
- 사용자의 모든 요청을 받는 창구 역할
- 컨트롤러 + 뷰
- 컨트롤러는 브라우저의 요청을 처리하기 위해 알맞은 서비스에게 처치를 위임
- 뷰는 응답 결과를 사용자가 보기 쉽게 표현
- 서비스
- 기능의 핵심 로직을 구현, 실제 작업이 일어나는 곳
- DAO(Data Access Object)
- DB와 연동을 위해 데이터를 담아 이동하는 역할
- 가끔 간단한 로직에서는 서비스가 아닌 컨트롤러가 직접 사용하기도 함.
🧾️
DAO를 직접 사용하는 컨트롤러 메서드 예시
다만, 호불호 갈리는 방식일 수 있다.
//public Member getMember(Long id) {
// return memberDao.selectById(id);
//}
@RequestMapping("/member/detail/{id}")
public String detail(@PathVariable("id") Long id, Model model) {
// 사실상 DAO를 직접 호출하는 것과 동일
// Member member = memberService.getMember(id);
Member member = memberDao.selectByEmail(id);
if (member == null){
return "member/notFound";
}
model.addAttribute("member", member);
return "member/memberDetail";
}
서비스의 구현
서비스는 실제로 보통 여러 단계로 이루어지며, 이를 한꺼번에 적용 혹은 취소해야 되므로 @Transactional
을 이용해서 트랜잭션 범위 내에 실행되곤 한다.
🧾️
비밀번호 변경 트랜잭션 과정
- DB에서 회원 데이터 가져오기
- 존재하지 않을 시 익셉션
- 회원 데이터 비밀번호 변경
- 변경 내역 DB에 반영
서비스 클래스는 보통 하나의 데이터 정의나 기능 별로 나눈다.
- 예를 들어
MemberService
는 데이터로 나눈 서비스 - 예를 들어
MemberRegisterService
는 추가로 기능으로 나눈 서비스
서비스 클래스 내의 메서드의 파라미터는 하나의 커맨드 객체로 만들어 전달하면 컨트롤러 클래스에서 MVC의 바인딩, 검증, 연동 등의 기능을 쉽게 활용할 수 있다.
🧾️
커맨드 객체로 파라미터 변경
public void changePassword(String email, String oldPwd, String newPwd)
-> public void changePassword(ChPwdRequest req)
서비스의 결과 값은
- 정상일 경우, 리턴값
- 비정상일 경우, 익셉션 일으키기
여야 하며, 이를 컨트롤러 측에서 catch 구문으로 익셉션을 처리한다.
프로젝트 패키지 구성
패키지 구성은 기본적으로 프로젝트마다 다르지만, 대략적인 예시를 들어보자
- 컨트롤러, Validator 등이 존재하는 웹 요청 처리영역
- 웹 요청 처리 영역은
memeber
,changPwd
등 데이터나 기능 영역으로 추가로 나눈다.
- 웹 요청 처리 영역은
- 서비스, DAO, 모델 클래스 등이 존재하는 기능 제공 영역
- 추가로 DAO, 서비스, 모델 등으로 추가로 나눈다.
규모가 커지면 프로젝트 복잡도가 크게 늘어나며 이를 방지하기 위해 도메인 주도 설계를 알아보고 적용해보자.
_articles/web/backend/Spring/Spring5 입문-스프링 웹 어플 구조.md