https://github.com/Moonseonhyeon/SpringBoot-blog
Spring Web
Spring Devtool
Lombok
MySQL
MyBatis
--------------------
JSTL
Tomcat-Embed-Jasper - jsp파일을 컴파일, 경로도 잡아줌(/webapp 로 잡아줌)
---------------------
Table생성
-----------
1) yml 확장자 변경
- 포트와 컨텍스트 설정
- DB연결 정보 넣기
- JSP View 경로 설정(ViewResolver)
2) Config 폴더 생성
DataSourceConfig.java (참고 : yml설정을 참고)
DataAccessConfig.java (참고 : DataSource와 Mapper)
3) Mapper 경로에 user.xml 생성 및 파일 생팅
4) UserRepository 만들기
5) TestController 생성 - 테스트
com.cos.blog
왜 UserRepository 인터페이스로 만드나?
새로운 프로젝트 생성
pom.xml에 라이브러리 추가
JSTL
Tomcat-Embed-Jasper
application.yml 확장자 수정과 내용 입력
server:
port: 8080
servlet:
context-path: /
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
datasource:
url: jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul
username: spring
password: bitc5600
driver-class-name: com.mysql.cj.jdbc.Driver
Config 패키지 생성 (경로 주의)
클래스 2개 생성
DataAccessConfig
DataSourceConfig
경로만 조심하자.
server:
port: 8080
servlet:
context-path: /
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
datasource:
url: jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul
username: spring
password: bitc5600
driver-class-name: com.mysql.cj.jdbc.Driver
코드는 더보기
package com.cos.blog.config;
import javax.sql.DataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DataSourceConfig {
@ConfigurationProperties(prefix="spring.datasource")
public DataSource dataSource(){
return DataSourceBuilder.create().build();
}
}
DataSourceConfig yml에 적혀있는 설정을 참고하고 있음. (옛날 버전은 xml을 참고)
@Configuration꼭 붙여야 한다.
Mapper 경로에 userMapper.xml 생성 및 파일 세팅
<!DOCTYPE~> 없으면 안됨
폴더생성
이것도 경로 조심
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cos.blog.repository.UserRepository">
</mapper>
Repository 생성 및 interface로 만들기.
위의 UserRepository는 DataAccessConfig에서 MapperScan을 해놔서
@Repository를 안달아도 메모리(Spring context)에 띄워짐.
TestController 생성 - 테스트되면 셋팅 끝
테스트 컨트롤러 생성
경로는 src/main/webapp/WEB-INF/views 로 폴더를 한번에 만든다
apllication.yml에서
prefix: /WEB-INF/views/
suffix: .jsp
즉 tomcat에서는 src/main/webapp까지
prefix설정으로 인해서 /WEB-INF/views/
확장자를 안써도 되게 suffix: .jsp
만약 suffix나 prefix를 사용안하면 모든 경로와 확장자를 적어주면 되지만
비추천한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
index.jsp 만듬
로그레벨
INFO는 볼거없어
debug는 내가 적은거 문제
ERROR도 보고
WARN 중요!
DDD전략
패키지명을 계속 바꾸고 있음
예를들어 dao를 repository로
서버들은 엔진이 있어요
서버엔진들이 여러개 있어요. 톰켓, 엔진X, 제우스 등등.......
우리는 아파치톰켓밖에 안써 봄.
내가 서버개발자가 아니라서 상관없잖아..
개념
톰캣은 jsp는 url 요청(파일 요청 가능)을 할 수 있다.
톰캣(jsp) 아파치(허용되는거 ex)WebContent안에 index.jsp, a.png)
톰캣은 놀고 아파치만 일 할 수도 있음
webContent/webapp
WEB-INF를 꼭 만들어야 uri 요청을 불가능하게 만듬
->컨트롤러를 꼭 타고 오라는 이유
->WEB-INF 접근불가폴더라서 이 밑으로 jsp파일을 구성함.
->MVC !
requset할때 컨트롤러를 타야해서 톰캣을 무조건 타게 된다.
spring
webapp폴더에는 외부에서 바로 접근 안됨. 컨트롤러타서 안에 jsp파일 접근가능하게 하려고
그래서 외부에서 요청하면 아파치만 탈 수 없음. 무조건 톰켓을 타야합니다.
이렇게 하는 이유는 MVC지키게 하려고
톰캣이 실행될때
사용자가 요청하기 직전에 (아직 요청안했어)
톰켓 시작(데몬프로세서) 프로세서니까 메모리에 띄워져 있다. 데몬 - while
1.catarina.xml web서버(로그관련)
yml파일에 적으면 여기(web.xml)로 자동으로 적어짐.
모든 요청은 web.xml을 거쳐서 간다.
2. web.xml 배포 서술자 (필터: 최초관문) 웹서버를 구축할때 가이드해주는 역할
문서안에 내용은~
1) UTF-8 (들고온 데이터를 utf-8로 설정)
2)welcomeFileList -> index
3) DB Resource -> DB객체를 찾는것, yml파일에 등록해두면 자동으로 찾아줌
4) 서블릿 매핑
5) 커스텀 필터 예) 자바스크립트 공격 하는 ip막을 수 있음. 210.10.1으로 들어오는 ip 차단하고 싶다. 여기다가 등록!
서블릿 매핑
서블릿 파일 만들어서 url랑 파일 매핑하는 내용.
자바에서 서블릿은 주소(uri)를 받는것이다.
/로 들어오면 a.java 바꿈
/movie로 들어오면 movie.java 바꿈
/post로 들어오면 post.java 바꿈
ex)주소가 100개면 수많은 파일들을 매핑하고 있으면 복잡해짐
그래서 프론트 컨트롤러 패턴 /* 을 사용한다.
여기서 자바파일로 Routing해야한다.
/*요청(/이하의 모든 요청)이 들어오면 FrontController.java파일을 타라고 해놓고
분기를 이 FrontController파일에서 라우팅으로 한다.
/
/post
/post/*
이런 주소를 url파라메터
@GetMapping("/post")
호스트네임/url파라메터?쿼리스트링
hostname/blog/1?쿼리스트링
호스트네임은 ip주소(localhost:포트번호)
스프링은 파라메터를 분기할수 있는 로직이 짜져 있어야 함.
라우터가 실행될때 내 App이 실행된다.????
이때부터 내가 컨트롤 할 수있다, response만 해주면 됨???????
여기를 기준으로 아래 위 내용 비교해서 이해해서 정리해보자
FrontController.java + Router => Dispatcher Servlet(class) 이거는 스프링 내부에 이미 만들어 져있음. 신경안써도 모든 요청은 Dispatcher Servlet로 받아요.
애가 계속 요청들어오는 지를 지켜보고 있음.
get : /post 으로 요청하면 Dispatcher Servlet가
PostController를 찾아서 메모리에 띄움.
GetMapping("/post")
Dispatcher Servlet가 2개(@Controller, @RestController)만 스캔하는데
해당패키지 com.cos.blog ~이하에서 모든 것을 스캔한다.
@Controller는 조금 특별하게 사용자가 요청시에 메모리에 뜹니다.
Dispatcher Servlet 로 사용자로부터 요청이 들어오면 해당 패키지 모든 자바파일에 @Controller, @RestController만 컴포넌트 스캔을해요. 그 즉시 메모리띄우고 @GetMapping
Repository는 db는 쓰레드도 없고 해서 하나만 메모리에 띄워져있으면 되지만
DBCP기술 - 20명이 순차적으로 커넥션
@Controller는 동시에 100명이라도 요청하면 여러개 쓰레드 만들어서 그 때 그때 메모리에 띄워서 실행 시켜줌.
DB Resource
Repository는 한개의 쓰레드만 필요하지만 DB는 순차적이기 때문이다.
Controller는 사용자 만큼 쓰레드가 필요함
web.xml에서 모든것을 처리하기 힘들기 때문에 자바파일에서 하는것이다.
@로 역할이 다 나뉘어져있다.
스프링은
templates 폴더는 다이렉트로 접근이 불가능하다.
ex)mustache
'Spring Boot' 카테고리의 다른 글
송금 출금 앱 (0) | 2020.07.17 |
---|---|
sts3 (0) | 2020.07.17 |
DB연결하기, MyBatis 프레임워크 (0) | 2020.07.13 |
jsp템플릿 사용 (0) | 2020.07.13 |
템플릿엔진 mustache (0) | 2020.07.13 |