[ Spring Legacy Project ] ( Spring MVC )
- XML 설정 필요
- STS 3 사용 권장 ( Legacy / Boot 가능 )
[ Spirng Boot ]
- XML 설정 최소화
- application.properties 에서 설정
- Configuration ( Java Class ) 생성해서 설정
- AJAX => Jackson bind 기능 내장 / utf-8 설정 자동
- STS4 사용 권장 (Boot 전용)
- 개발환경 상, 큰 차이점은 XML 설정들을 applicaiton.properties 에 모으고, @어노테이션을 사용해 최소화 시켰다는 게 아닐까 합니다.
web.xml
- filter 한글 encoding => 자동
- SpringBean Config.xml 파일 classpath 설정 => @Configuration 어노테이션으로 대체
servlet-context.xml
- View Resolver => application properties 에서 설정
- multipart Resolver => 자동
- resources 맵핑 => static 하위로 고정
- Component Scan / annotaiion-driven 설정 (@Controller) => @ComponentScan 어노테이션으로 대체
SpringBean Configuration.xml
- Component Scan ( Component ) => @ComponentScan 어노테이션으로 대체
- dataSource Bean => application.properties 에서 설정
- mybatis Config / Mapper => application.properties 에서 설정
[[ Spring Boot 프로젝트 세팅 ]] ( STS4 )
1. Spring Starter Project 생성
( 자바버전 설정, WAR /JAR 설정 )
2. Tomcat 내장 서버 설정
- Spring Starter 로 만드는 프로젝트별로 내장톰캣 제공
( 기본 8080 port )
- port 번호 설정 ( application.properties )
server.port = 8081
3. Web Developer 설치 필요
- HTML/ CSS / JSP 파일 생성할 수 있도록 기본 세팅
help - eclipse marketplace - web developer 검색 - eclipse enterprise java and webdeveloper (jsp 포함) 설치
( other - 생성 )
4. JSP 파일 => VIEW 로 설정 ( application.properties )
(1) Spring MVC 구조로 만들기
- src/main/ 하위에
webapp / WEB-INF / views /
구조로 폴더 생성
(2) ( application.properties )
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
( == servelt-context.xml 의 View Resolver 세팅 )
5. static 폴더
HTML / JS / CSS / 등 정적 파일들과
jquery / images / 등
=> resources 파일들은 static 폴더 안에 넣어서 사용
6. Component scan 설정
( Application 실행 api )
@SpringBootApplication
: 스프링부트 시작 / Tomcat 시작 시켜달라
( @ComponentScan(basepackage="현재 패키지" ) )
- Default 값으로 설정되어 있음 (숨어있는 것)
=> 즉, 해당 패키지에서는 자동으로 Component Scan 방식 사용 가능
- 다른 패키지 추가시, 여기에서 @ComponentScan(basepackage=" ") 추가 해서 사용
*주의 : 다른 basepackage 를 추가 시 => 오버라이딩 되면서 원래 (숨어있던) default 기본 패키지에
설정되어있던 @ComponentScan 이 사라지므로,
기본생성자처럼
@ComponentScan
이렇게 다시 명시적으로 선언해줘야 원래 api 에도 적용
7. JSP / JSTL 라이브러리 설치 ( pom.xml )
<!-- for jsp -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- for jsp jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
[[ 추가 설정 ]]
[ DB 설정 ] ( application.properties )
# Datasource (DB 연결)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/backcoder
spring.datasource.username=backcoder
spring.datasource.password=1111
[ Mybatis 설정 ]
1. (application.propertis )
# mybatis 설정
mybatis.config-location=classpath:mybatis/mybatisConfig.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*-mapping.xml
( mybatis-Config.xml 연결 (Alias) / sql-mapper.xml 연결 )
2. ( pom.xml )
Mysql Driver
Mybatis Framework
Spring Data JDBC
라이브러리들이 필요
(1) pom.xml 에 직접 추가하거나
(2) Spring starter 로 프로젝트 생성할 때,
SQL - MySQL Driver / Mybatis Framework / Spring data JDBC
애초에 추가해서 만들거나,
(3) 프로젝트우클릭 - spring - addstarters
해당 라이브러리들 골라서 추가 - next -
structure compare - pom.xml 선택 ( 바뀔 파일 선택 )
=> pom.xml에 dependency 자동으로 추가
3. mybatis 폴더 설정
- src/main/resources 폴더 하위에만 생성하면 된다.
mybatis 용 폴더생성 - mybatisConfig.xml 생성
하위에 mapper 폴더 생성 - mapper.xml 생성
( 구조 짜서 사용 )
[ src=" " 파일루트 설정 ]
- 기본적으로는 static 밑에 두면 자동으로 인식함 ( Default )
<img src="http://localhost:8080/(static/)asdf.jpg" >
이렇게 바로 호출 가능
[ 로컬에있는 루트를 URL로 연결 ]
=> @Configuration 에 등록
@Configuration
public class MyWebConfig implements WebMvcConfigurer{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler( " /upload/** " ).addResourceLocations( "file:///c:/upload/" );
}
- Handler 로 URL 맵핑 잡고,location 으로 local 에서 위치 잡고
<img src="http://localhost:8080/upload/asdf.jpg" >
이렇게 호출 가능
[ 기타 설정들 ]
0. tern eclipse
0. Tomcat 자동 Restart (Pom.xml)
<!--for tomcat restart - starter에서 선택 가능-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
0. 업로드 파일 크기제한 ( application.properties )
#파일업로드 1개당 제한
spring.servlet.multipart.max-file-size=150MB
#총데이터 크기 제한
spring.servlet.multipart.max-request-size=180MB
===========준비완료===========
- 기본적인 사용법은 기존의 Spring MVC 와 크게 다르지 않다.
- tomcat 서버로 실행하지 않고, API 실행 클래스로 실행시킨다. (@SpringBootApplication => tomcat자동실행 )
- Boot 는 JPA (Hibernate) 를 이용해 DB 와 연결하는 방법도 많이 사용한다.
- Mybatis 도 여전히 많이 사용된다.
[ Mybatis ]
sqlsession
: SqlSession 을 생성해 DAO에서 session 으로 SQL.xml 파일을 연결
( DAO )
session.selectOne/update/insert/delete ( "key" , param );
=>
( SQL.xml )
<mapper namespace = "구분자">
<select id="key" resultType=" " >
mapper
: @MapperScan / @Mapper / <mapper namespcace = "DAO패키지/클래스">
이 3가지를 이용해 DAO 와 SQL.xml 파일을 연결
- DAO는 Interface 로 사용 => 이름이나, 파라미터만 전달하고,
사실상 SQL문 결과값을 바로 전달만 해줌
1. ( 실행 API )
@MapperScan(basePackages = "upload")
2. (DAO)
@Mapper
@Repository
public interface UploadDAO {
public void insertUpload(UploadForm form);
3. ( SQL.xml )
< mapper namespace="upload.UploadDAO">
<insert id="insertUpload" parameterType="uploadform" >
insert into upload values
(#{name}, #{description}, #{file1}, now())
</insert>
- @Mapper
: " 이 DAO는 SQLmapper랑 연결 되는 놈이에요"
하고 명시해준다.
- SQLmapper.xml 에서는
<mapper namespace=" " > 속성에
가지고올 DAO를 "패키지명.클래스명" 으로 명시함으로써
둘 사이에 큰 맵핑 연결고리가 완성된다.
( (@Mapper)DAO ======= (namespace="DAO")SQL.xml )
- 큰 연결고리는 완성되었고,
DAO 의 메소드 이름 ==== SQL문의 id 속성 이름
을 일치시켜줌으로써, 각 메소드 => 각 SQL문 을 연결한다. ( 작은 연결고리 )
- @MapperScan ( basePackages = "패키지명" )
실행API 에서는 @Mapper 어노테이션을 읽어올 package 를 지정해준다.
=> interface DAO 를 연결고리를 이용해 SQL 과 연결. SQL 결과를 바로 받아올 수 있다.
===================
JPA 를 이용한 간단한 DB 접근을 해봤었는데, 확실히 자동화가 많이 되어있어서 간편한 부분은 매우 편하게 사용할 수 있는 장점이 있는 것 같았다.
복잡한 SQL 문을 다룰 때는 JPA 문법으로 풀어내기엔 어려운 부분이 있어, Mybatis 를 가져다가 사용하기도 하는 식으로, 섞어서 쓰는 경우도 많이 있다고 한다.
SQL 문에 꽤나 익숙해 져 있는 현재로서는, Mybatis를 사용하는 방법도 편하지만
JPA 의 문법도 그 간결함을 맛보았기 때문에, 계속해서 익혀나가서, 둘 다 적절히 사용할 수 있게끔 역량을 키워야 겠다.
'Back to the Spring' 카테고리의 다른 글
이미지 파일 다중 업로드, 미리보기 구현 ( AJAX ) (0) | 2022.09.24 |
---|---|
IntlliJ 단축키 => Eclipse(STS) 단축키 (0) | 2022.09.24 |
[AJAX] Upload 하기 => FormData (0) | 2022.08.26 |
[AJAX] 동적태그에 AJAX 적용하기 (0) | 2022.08.26 |
[ AJAX ] REST API / JSON / ResponseBody (0) | 2022.08.25 |