▶[서론]
○● 0220 새로웠던 것
1.
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
</root>
이게 무슨 일이냐면 전체 설정-
워닝 레벨만 보겠다-디폴트값
나머지가 예외속성
2. private TestMapper mapper;의존성 주입
dto에 getter, setter만들어야 되는데 그걸 롬북이 자동으로 해줌
▶[본론]
○● 0220 내용 정리
● 스프링
○○○●●● 스프링이란
2/4. 비지니스 계층의 crud 구현
1. 패키지 추가
작업 폴더 src/main/java 에
com.peisia.service << 이 패키지 추가하기
2. 인터페이스 추가
작업 폴더 src/main/java 의
com.peisia.service << 여기에 TestService 인터페이스 추가하기
3. 클래스 추가
작업 폴더 src/main/java 의
com.peisia.service << 여기에 TestServiceImpl 클래스 추가하기
* 주의 * 패키지만들때 cohttp://m.peisia.mapper.service 식으로 만들지 말기.
@RunWith 또는 @Log4j나 log 에 빨간줄 에러 날 때: << @Runwith 는 유닛테스트쪽 얘기임. 참고.
1. @RunWith 에 마우스 올리고 fix에서 add Unit 4 library.... 를 해주기
2. pom.xml에서 log4 dependency 태그 중 scope runtime 태그를 삭제하기.
<groupId>log4j</groupId> 로 검색 ( 88행쯤 있음 ) 후 해당 라이브러리 디펜던시의 태그 맨 아래쪽에
<scope>runtime</scope> 를 찾아서 지우거나 주석치라는 것임.
</exclusions>
이렇게 주석 쳐두라는거 >>> <!-- <scope>runtime</scope> -->
</dependency>
그러고나서 pj 클린과 maven update 도 할 것 << 메이븐 업데이트 4번해서 된 케이스 있었음
4. 설정 추가 tip 파일명으로 해당 파일 여는법: ctrl + shift + r 하고 파일명 복붙
-1.. root-context.xml 의 네임스페이스 탭 이동 - context 체크
<< 중간에 작게 탭이 있음.
-2.. root-context.xml 소스에 코드 추가
<< 이 설정으로 @Service 어노테이션이 있는 패키지를 스캔(조사) 하게 됨.
root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- 내가 추가한거 -->
<!-- 커넥션 풀 - 아파치 - Commons DBCP 2.8.0 -->
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource"
destroy-method="close">
<!-- log4jdbc.log4j2 때문에 기존 코드 주석친거 -->
<!--
<property name="driverClassName"
value="com.mysql.cj.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/my_board" />
-->
<!-- 시작 끝 -->
<!-- log4jdbc.log4j2 때문에 수정 삽입한거 -->
<!-- 시작 -->
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="url" value="jdbc:log4jdbc:mysql://localhost:3306/my_cat"></property>
<!-- 이거 오라클임 마이에스큐엘로 수정해야함 -->
<!-- 끝 -->
<property name="username" value="root" /><!-- db 계정에 맞게 수정 -->
<property name="password" value="root" /><!-- db 계정에 맞게 수정 -->
</bean>
<!-- 내가 추가한거 -->
<!-- SQLSessionFactiory -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 내가 추가한거 -->
<!-- mybatis - mapper 설정 -->
<mybatis-spring:scan
base-package="com.peisia.mapper" /><!-- 패키지명에 맞게 수정 -->
<!-- 내가 추가한거 -->
<!-- <context:component-scan base-package="org.zerock.sample"> </context:component-scan> -->
<!-- 내가 추가한거 -->
<context:component-scan base-package="com.peisia.service">
</context:component-scan>
</beans>
root-f.xml에 위의 코드 추가하기
3/4. 프레젠테이션(웹) 계층의 crud 구현
1. 패키지 추가
작업 폴더 src/main/java 에
com.peisia.controller << 이 패키지 추가하기
2. 클래스 추가
작업 폴더 src/main/java 의
com.peisia.controller << 여기에 TestController 클래스 추가하기
3. pj 실행
기본 컨트롤러의 헬로월드 페이지 확인하고
4. 브라우저 주소창에 직접 주소 입력 후 콘솔 확인하기
<< 참고로 톰캣의 pj 시작 루트 폴더 설정은 안 건드린 상태임( 기본값 /spring 으로 잡혀있는 상태)
Mi 가 아니라 spring? 이슈가 있음..
처음에 pj 만들때 패키지 입력을
패키지: cohttp://m.peisia.spring.mi
로 했는데 이게 점으로 구분된 앞에 3개까지만 패키지로 인식함
http://localhost:8080/spring/test/getOnePlusTwo 주소창에 입력 후 콘솔 확인
브라우저 페이지 404 에러는 무시하고
로그 확인 >>>>>>>>> (여기 컨트롤러임) 1 더하기 2는 = 3
그런데.. 위 로그가 나와야 되는데 안나올 것임..
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/spring/test/getOnePlusTwo] in DispatcherServlet with name 'appServlet'
라고만 뜰 것임..
아래 2가지 이유 때문임. 내용 확인 후 수정 처리하기
끝. 정보 수정 후 재확인
1. 추가한 TestController 컨트롤러 클래스가 스프링에 설정되지 않았기 때문임.
해결:
pj / src / main / webapp / WEB-INF / spring / appServlet / 이 폴더의
servlet-context.xml 파일을 열고 아래 참고하여
<!-- 이 아래 설정은 pj 생성 시 자동으로 설정된 것임. -->
<!-- 이것 때문에 해당 패키지의 홈 컨트롤러가 작동하고 헬로월드가 표시 되는 것임. -->
<!-- 참고로 pj 생성 시에 기본 패키지를 com.peisia.spring.mi 라고 지정했지만 -->
<!-- com.peisia.spring 까지만 인식해버리고 세번째 폴더 spring 을 톰캣 서버로 지정하는 등 -->
<context:component-scan base-package="com.peisia.spring" /> << 이건 pj 생성 시 자동으로 추가 된거.
그래서 스프링에서 해당 패키지 내 컨트롤러를
관리하게 됨.
<!-- 내가 따로 정한 컨트롤러용 패키지를 위해 아래 설정 추가했음 -->
<context:component-scan base-package="com.peisia.controller" />
<< 이 태그를 추가해야 함.
그래도 콘솔 값이 확인 안될 껀데 2번의 이유임. 아래 내용 확인.
2. url 요청에 의해 컨트롤러가 정상 수행 되었지만 로그만 출력이 안된 상황임.
TestController 여기에 sysout 로그 찍어보면 나옴.
TestController 의 소속 패키지에 대한 로그 설정이 안되서 안나온 것임.
해결:
pj / src / main / 리소스 / 이 폴더의
log4j.xml 파일을 열고 아래 참고하여
<!-- Application Loggers -->
<logger name="com.peisia.spring">
<level value="info" />
error </logger>
warning
info <!-- TestController 컨트롤러 때문에 추가함 -->
debug <logger name="com.peisia.controller"> << 이 태그를 추가해야 함.
<level value="info" /> << 이 태그를 추가해야 함.
</logger> << 이 태그를 추가해야 함.
...
<!-- Root Logger -->
<root>
<priority value="warn" /> << 이 로그 설정 때문에 위의 태그들 처럼
<appender-ref ref="console" /> 별도로 로그 레벨 필터링을 안하면
</root> warn 워닝 레벨 로그 이상만 나옴. (에러, 워닝만 나옴)
그래서 로그가 안나왔던 것임.
4/4. 최종 화면 처리 ( 브라우저에 출력 )
1. 파일 수정
TestController 파일 수정하기
TestController
package com.peisia.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.peisia.service.TestService;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@Log4j
@RequestMapping("/test/*")
//@AllArgsConstructor
@Controller
public class TestController {
@Setter(onMethod_ = @Autowired)
private TestService service;
@GetMapping("/getOnePlusTwo")
public void getOnePlusTwo(Model model) {
// public void getOnePlusTwo() {
log.info("getOnePlusTwo ==========================================");
String one = service.getOne();
String two = service.getTwo();
Integer sum = Integer.parseInt(one) + Integer.parseInt(two);
log.info("(여기 컨트롤러임) 1 더하기 2는 = " + sum);
model.addAttribute("sum",sum);
}
}
TestController
2. 폴더 추가 * 참고 * p.139 Model 이라는 데이터 전달자
src/main/webapp/WEB-INF/views/ 이 폴더 밑에 test 폴더 추가하기
3. jsp 파일 추가
/test 폴더 밑에 getOnePlusTwo.jsp 파일 추가하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>1 더하기 2 는 ${sum } </p>
</body>
</html>
끝. 서버 실행 후 브라우저 결과 확인
브라우저에(현 포트, 매핑 설정에 맞춰서)
pj 실행 후 브라우저에 url 입력 후 브라우저 출력 확인 http://localhost:8080/spring/test/getOnePlusTwo
1 + 2 = 3 나오는지 확인.
1+2 개발은 완료임. 아래 문제들은 위 pj 에 추가해서 풀기. 디비 crud 를 각 과정 걸쳐 연습해보는 문제임. 이후 방명록 대비.
▶[결론]
* 스프링 기초 강의 수강
*작업파일
● 0220
1) 스프링 기초
'개발 회고' 카테고리의 다른 글
[솔데스크] 풀스택 과정 12주-4 총53회차 ‘회고’ | 스프링(0222) (0) | 2024.02.23 |
---|---|
[솔데스크] 풀스택 과정 12주-3 총52회차 ‘회고’ | 스프링(0221) (1) | 2024.02.22 |
[솔데스크] 풀스택 과정 12주-1 총50회차 ‘회고’ - 실행파일 | 스프링(0219) (0) | 2024.02.21 |
[솔데스크] 풀스택 과정 12주-1 총50회차 ‘회고’ | 스프링(0219) (0) | 2024.02.20 |
[솔데스크] 풀스택 과정 11주-5 총49회차 ‘회고’ | JSP(0216) (1) | 2024.02.16 |