본문 바로가기

Spring Boot

blog만들기

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