<14:30 5교시>
우리나라에선 아직 jsp를 많이 쓰니까 jsp 설정하는 법을 보자.
pom.xml에 아래 코드 넣기
<!-- spring boot 3.0 이상에서 jsp 페이지 사용과 taglib 를 사용하기 위해 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency>
타임리프 의존성이 있으면 jsp가 제대로 작동하지 못한다.
application.properties에서 jsp 사용할 준비
프로젝트 우클릭 > Mave > update Project 클릭하기 -> pom.xml에서 바꾼 환경을 업데이트 해주는 것
아까전까지만해도 /templates/home.html이었던 경로가
jsp를 사용하는 환경으로 바뀌면서 /WEB-INF/views/home.jsp 경로로 바뀜
나머지는 심심할 때 해보라 하심//
Step06으로 넘어감 : Service를 배움
Controller에 여러 비즈니스 로직 처리를 하다보니 Controller 가 뚱뚱해지는 현상이 발생하는 걸 Service에서 처리하게 해줄 거임.
Step05에서 Member 예제를 로직, 예외 처리를 Service에서 담당하게 만들거임.
Service는 Controller의 로직 처리 Utility 정도로만 이해하면 됨.
이전 환경에서 쓰던거 다 추가해서 프로젝트 만들고 패키지 만들어 두기.
dao 복붙하는데 에러 날 수 있는 건 경로가 이전 패키지 경로로 되어 있어서
5에 있던 애들 중 Member 관련 전부 복붙해오기~! 기능 잘 되려면 05였던 애들 06으로 다 잘 바꿔줘야 함.
c-path를 spring06으로 안바꿔서 안되는걸 못찾고 있었당!! ㅠㅠ
지금은 테이블 한개만 다루어서 Controller에서 연습했었지만,
실제 현장에서는 Controller에서 처리할 게 아니라 Service에서 처리해줄 필요가 있다.
Service를 구현할 클래스 만들기
service는 데이터베이스 관련 일들을 할 것이기ㅣ 때문에 dao를 주입받아야 한다.
<15:30 6교시>
Controller<=>Service <=> Dao <=>mapper
Controller가 Template page를 응답하는데 있어서
Controller는 Service에 의존
Service는 Dao에 의존
Dao는 SqlSession(Mapper)에 의존
이구조는 유지보수를 편리하게 해줌
우리는 예외 상황에 대응해줘야한다. Exception에 대한.(이름이 너무 길 때)
예외 처리하기 단계.
아래의 에러는 스프링프레임워크가 에러를 처리한 것
새로운 클래스 만들기 : ExceptionController
@ControllerAdvice 어노테이션이 붙어서 얘도 bean이고 Controller인데,
발생한 RuntimeException 에러를 처리하게 만들 것이다. 그래서 스프링프레임워크가 처리해주는 error 페이지가 아니라
우리가 만든 error/runtime이 만들어지게 할 것!
error.html 작성하면 아래와 같이 에러 페이지가 나타나고,
더 세부적으로 예외처리하려면 객체를 여러개 만들어놓고 세부적으로 처리하면 됨.
RuntimeException은 넓은 범위의 에러임.
이렇게 생긴 Interface dao를
interface dao로 가서 아래처럼 바꾼다.
daoimpl도 수정한다
serviceimpl도 수정한다.
service 객체 안에서 기본 형식
<16:30 7교시>
dao에서 SQLException 이 발생하는 경우 - dao.update의 오류
rowCount가 0이어서 Runtime Excpetiondl 발생하는 경우 rowCount==0의 오류
이 이후로는 ControllerException으로 이동
dao에 붙은 @Repository 안에서 SQL exception이 발생하면 DataAccessException을 알아서 발생시킨다.
여러개 테이블에서 수정사항이 발생했는데 어떤 작업이 실패하면 모두가 되돌려져서 rollback 해야하는 경우가 있다.
SQL의 transaction을 관리해주는 Exception이 DataAccessException으로 알아서 관리해주는거.
rollback이 발생하는 경우알아서 DataAccessException을 발생 시켜서 transaction을 관리해준다는 거.
dao에서 발생한 오류를 ControllerAdvice에서 잡아주는 것.(아래가 ControllerAdvice 어노테이션 붙인 예외처리컨트롤러)
error/data-access.html 만들기
MemberServiceImpl에서 save, update, delete에 썼던 애들의 try~catch 다 지우기 ->data-access.html로 처리됨
↓
상위 클래스의 Exception 발생을 관리해서 세부적으로 처리하기가 용이해진다.
@ControllerAdvice
@ExceptionHandler
Spring은 골뱅이이다.
@Controller컨트롤러에서 하는 일
1. 요청 파라미터 추출
2. Service 객체를 이용해서 로직 처리
3. 응답(view page에서 응답 또는 리다이렉트 응답, json,파일데이터 등등의 응답)
@Service서비스에서 하는 일
1. 로직을 처리할 때 dao가 필요하고 dao 관련해서 DB 로직 처리 작업을 해줌
2. 필요하다면 자체적으로 Exception을 발생시키기도 함.
@ControllerAdvice컨트롤러어드바이스에서 하는 일
1. 예외를 처리해줌
과제 : Todo 관련 기능을 이식해오기
마지막으로 Dto 경로에 별칭 부여하기 @Alias 설정
진도이어서 나감
간단하게 할거니까 DB 기능은 뺀다
webapp/upload에 저장되어 있던 파일이 임시 폴더에 저장되는데, 우리가 그 위치를 지정해줘서 파일을 거기로 옮겨 놔야 한다.
그 작업은 내일 할 것이다.
오늘은 Spring 에는 MultipartFile이 있구나를 알고 가면 된다.
<17:30 8교시>
오늘 오후에 진도나간 부분 코드는 너무 많아서 따로 프로젝트별로 따로 아카이빙 카테고리에 아카이빙 해야겠다.
오늘은 상담 있으니까 1이랑 2 아카이빙하고 상담하고 가자.
'자바풀스택 과정 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 2/20 오후 기록 059-2 (0) | 2025.02.20 |
---|---|
자바 풀 스택 2/20 오전 기록 059-1 (0) | 2025.02.20 |
자바 풀 스택 2/19 오전 기록 058-1 (0) | 2025.02.19 |
자바 풀 스택 2/18 오후 기록 057-2 (0) | 2025.02.18 |
자바 풀 스택 2/18 오전 기록 057-1 (0) | 2025.02.18 |