Spring version 3, 4, 5 까지 있는데
지금 한국에서는 version 3 만 사용
자바 버전 변경
(아래 Problems 창의 Errors 제거됨!)
jul12에서 마우스 우클릭- new에 보면 두종류의 project가 있는데
- spring legacy project
- spring stater project (스프링부트, 위에꺼의 간략화버전)
우리는 spring legacy project 먼저 배울거
프로젝트 생성
이제 내 코드네임으로 패키지 만들기
kr.co.phyho.web 으로 해도됨 (도메인이랑 반대방향)
앞에서 뒤로 갈수록 큰 -> 작은
잠깐 파일들 위치 살펴보자면
( pdf 참고 )
~~ . java 로 끝나는 파일들은 전부 이 패키지 아래에 있어야함 (DTO, DAO 등등)
스프링도 내부파일에 있음
요렇게 필요한 내부/외부 파일들이 전부 들어있기 때문에
(실행환경이 세팅되어 있기 때문에)
편하게 사용만 하면됨!!!
[ web.xml ] 열어보면
아래쪽 코드들은 각종 설정들
listener, servlet 등등 어떤 파일들을 불러올지 요런내용들이 이 xml에 이미 만들어져 있음
대소문자나 오탈자 하나라도 있으면 전체 프로젝트가 작동을 안함!!!!!
[ servlet-context.xml ]
mapping = "/resourcese/**" 리소스에 요청이 들어오면 location = "/ resourcese/" ~~ 요기로 보내겠다
커피빈 커피콩
bean 하나를 클래스 하나라고 생각하면 됨
prefix => 앞에 붙는거
suffix => 맨 뒤에 붙는거
[ MVC패턴 ] ___ pdf 파일 7p 참고
M (Model) => dto랑 dao가 여기에 포함 (.java)
V (View) => 보여지는 화면 (.jsp)
C (Controller) => 사용자의 요청이 들어오면 얘가 잡아서 데이터랑 연결 등 흐름을 제어함. (모델과 뷰를 통제) (.java)
어떤 모델 혹은 어떤 뷰가 필요한지 받아서 작업 후 다시 사용자에게 전달
사용자는 이런 흐름을 모르니까 바로 화면을 보는줄 아는데
사실 컨트롤러 외에도 중간과정이 많음 (pdf 파일 7p 참고)
요런 많은 작업들(.xml)을 spring이 다 중간에 처리해줌
어디에 뭘 만드는지는 확인하고 배우자...
** 제일 중요한 코드 **
cpmponent 를 scan 해옴 (읽어옴)
base-package = " ~~ " 내가 만든 패키지(com.phyho.web)에서 읽어옴
컨트롤러가 들어있는 위치임
base-package 는 저 패키지의 하위에 속해있는 모든 것들을 읽어오는애
저 패키지 하위에 속해있지 않으면 읽어오지 못함.
내 패키지(com.phyho.web) 말고
다른 패키지(com.phyho) 안에 class 파일 생성해보자
일단 @로 controller 선언
*** 주의 IndexController => BoardController로 이름 바꿈 ****
@RequestMapping(value = "/main")
main이라는 요청이 들어오면 해당 jsp 파일을 불러옴.
메소드가 여러개 있는걸 클래스라고 불렀는데 서블릿은 이런 클래스 하나의 흐름을 제어했음
흐름 한덩어리를 메소드로 제어
main요청이 들어오면 아래 main() 메소드가 동작, 즉 (" " 이라는 jsp파일을 열어줌)
/WEB-INF/views/main.jsp
prefix suffix
요렇게 될 예정
view - others 에서 jsp 파일(이름은 main으로) 생성해보자
jul12 하나만 가동 11은 remove로 옆으로 이동시켜줌
main으로 이동해보면
패키지가 다르기 때문!!!!
INFO : com.phyho.web.HomeControlle - Welcome home! The client locale is ko.
WARN : org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/web/main] in DispatcherServlet with name 'appServlet'
다시 내 패키지로 클래스 파일을 옮겨보자
그럼 이제 두 파일 모두 메모리에 로딩될 수 있음
패키지명 변경하고 다시 파일 옮겨보면 당연히 실행안됨
다시 분리 (아래처럼)
변경한 패키지 명이랑 아래처럼 맞춰주면 (.web 삭제)
하위의 어떤 파일이 만들어질지는 모르지만 하위에 있는 모든것들 선택
다시 원래대로
폴더에서 파일위치 확인
얘는 내장 브라우저
window - web Browser 에서 원하는 브라우저 선택가능 (크롬, 엣지 등등)
런온 서버하면 내가 선택한 브라우저로 새창열림
[ web.xml ]
오류(404오류) 잡아주는 부분 (/로 받음)
JAR 파일
WAR 파일
=> 찾아보기
version 체계 1.0.0 => 1버전 . 테스트버전(홀수) or 안정화된 버전(짝수) . 몇변의 패치?
11.0.19 => 11버전, 안정화된 버전, 19번의 패치
version, java버전, spring버전 변경함
자료파일 추가는 요기 한덩어리 (pdf참고)
저장소 추가 설정 (pdf)
properties 와 dependencies 사이에 repositories 적어줌
다시 말하지만 요만큼이 하나
두번째 repository도 아래처럼 채워주기
전자정부프레임워크에 만들어져 있는 저장소를 불러와서 쓰기위해
=> 불러오기 위해서 일단 연결까지만 해준거
저장소가 maven임 (gradle 등등)
maven 에 기능이 없으면 maven2(대비책)에서 읽어오고
또 없으면 전자정부에서 읽어오라고 저장소 연결해준 과정임
왜 해야될까...
한번 연결없이 전자정부 페이징을 했을때 오류가 나는지 확인해보자
다시 연결 살려서 작동시켜보기
위에서 체크부분이 없으면 오류가 난다!
생성된 egovframwork에 파일들 불러와진거 확인가능
( 요만큼을 외울수는 없지만 일단 이해까지만 하기 )
<!-- spring jdbc -->
<!--파일업로드 -->
<!--mariadb-java-client --> => version 3.0.8로 수정해줌
<!--mybatis -->
<!--mybatis-spring -->
pdf에 있는 코드들 추가
하나하나 추가해주면 저 코드에 표시된 위치에 파일생성
실행해보면 오류없이 연결성공 확인!!!!
자바 버전 11로 바꿈
[ web.xml ]
프로젝트실행시 보여질 첫페이지설정
톰캣에서도 있는
요부분을 적어준거
에러페이지 처리코드를 아래쪽에 적어줌
=> 예를 들어 500에러가 뜨면 /error500 jsp페이지로 이동
근데 우리는 error 경고창을 살펴봐야 하니까 일단은 넣지말기
데이터베이스랑 연결하기
아래쪽에 추가
<!-- 주석 데이터베이스랑 연결하기 -->
<beans:import resource=""/>
다른곳에서 가져온xml을 이곳에 넣겠다
<beans:import resource="classpath:/spring/*-context.xml"/>
* 대신 db, file 등등 앞에 뭐가 오던 뒤에는 -context.xml로 끝나는 모든 파일들을 연결하겠다.
* classpath : class파일의 경로를 알려줌
그럼 이제 spring 폴더를 만들자
src/main/resources 에서 spring 폴더만들고
[ db-context.xml ] 생성
옛날에 했던 DBConnection을 xml로 해볼거
(pdf_6page)
<bean class=" " id=" " > 요 해당클래스에서 해당 id를 가져오겠다
id인 dataSource라는 이름으로 데이터상에 생성된다는 의미
* 대소문자 오타주의*
이전에는 dao에서 sql문 넣었었는데 그걸 분리해서 아래처럼 넣어줄거
그럼 id를 이용해서 계속 재활용 가능
sql 문장들을 모아놓은걸 mapper라고 부름
mapperLocations _ mapper들이 모여있는 장소(Locations)
configLocation _ config는 하나밖에 없어서 Location에 s없음
<property name="mapperLocations" value="classpath:/mybatis/mappers/*-mapper.xml"/>
앞의 위치에서 ~~~.mapper.xml로 끝나는 파일들을 가져오겠다?
위의 bean 객체를 아래 bean객체에 넣었으니
또 아래 bean객체를 넣을 객체를 만들자
src/main/resources 내부에
mybatis 폴더 생성
그 내부에 config, mappers 폴더 생성
요기에서 미리 써준 폴더를 이제야 만들어준거
config 폴더 아래에
[ mybatisConfig.xml ] 파일생성
mappers 폴더 아래에도
[ boartd-mapper.xml ] 파일생성
내꺼는 위 사진처럼 폴더가 아니라 패키지로 보여서 헷갈려
mybatis – MyBatis 3 | Configuration
위 사이트에서 요부분(기본설정) 가져옴
[ board-mapper.xml ] 파일에 붙여넣기
요부분도 가져와서
[ mybatisConfig.xml ] 에 붙여넣기
board-mapper.xml 파일에서
<mapper namespace="boardtest"> </mapper>
boardtest 얘가 실제이름, 자바는 얘를 찾아갈거
부를때는 클래스처럼 boardtest . ~~ 해서 부를예정
(클래스에서 했던 파일이름 . ~~ 가 아니라)
boardtest .(id명)
여기에서는 boardtest.boardList 요런식으로
[ mybatisConfig.xml ]
typeAliases => 별칭, 별명
런온서버 오류 안뜨는지 확인!
db-context에서 classpath 를 calsspath로 써서 500번 오류났었음 ㅠㅠ
[ indexController.java ]
위에서는 get방식으로만 받겠다 써줬는데
아래는 위와 다르게 애초에 @get~방식으로 가져오겠다고 축약형태로 써준거
가져올건 borad.jsp
[ board.jsp ] 파일생성
런온서버해서 오류 안뜨는지 확인
데이터 보내는 방법
model과 view를 하나로 붙여 => ModelAndView
mv.addObject("name", "홍길동");
board.jsp를 열 때 "name"이라는 이름으로 "홍길동"이라는 값을 가져갈거
board.jsp 에서 출력해보면
* Controller = 흐름제어
* DTO/VO
* DAO
* Service = 프로그램 로직
Controller 는 흐름만 가져가고 주요작업은 Service 에서
[ BoardService.java ] 클래스생성
이제 Indexcontroller랑 service를 연결해줄거
그런데 일단 이름바꾸고 (Indexcontroller -> BoardController )
BoardService 에
@Service 선언해주고
BoardController 랑 service 랑 연결해주자
연결방법1
연결방법2 => Autowired
연결방법1은 요청 들어올때마다 new 방식으로 객체를 만들어야 하니까
연결방법2처럼 @Autowired 을 사용해서 그냥 하나 만든 객체를 불러와서 계속 사용할거
* Controller = 흐름제어
= 컨트롤 기능을 하는 인스턴스
= 사용자의 요청이 들어오면 해당 URL에 맞는 페이지와 데이터를 보내줍니다.
* Service = 프로그램 로직
* DTO/VO = 데이터를 담아 보낼 컨테이너
* DAO = 데이터베이스와 연결되어서 작업합니다. => mybatis
* JSP = 보여주는 화면 (VIEW)
(진행 순서)
사용자 -> 컨트롤러 -> 서비스 -> DAO -> mybatis -> DB
사용자 <- JSP + DB <- 컨트롤러 <- 서비스 <- DAO <- mybatis <- DB
=> 컨트롤러가 서비스를 호출하고 데이터가 필요하면 DAO에 요청 DAO는 mybatis에게 쿼리문 실행결과 요청
다시 결과 가지고 DAO에 전달 -> 서비스에 전달 -> 컨트롤러에 전달
( 연결 )
1. @Autowired = 스프링에서 제공, 타입이 일치하는 녀석을 연결
2. @Inject = 자바에서 제공, 타입이 일치하는 녀석을 연결
3. @Resource = 자바에서 제공, 이름이 일치하는 녀석을 연결
2번 @Autowired 가 가장 편리
@Autowired
private BoardService boardService;
이 타입이 존재한다면 새로운 객체생성 없이 바로 연결
[ 스프링 기술 ]
POJO (Plain Old Java Object)
어렵고 복잡하지 않게 간단하게 코딩하기
1. DI ( Dependency Injection ) 의존 주입
프레임워크가 객체의 의존성 주입을 담당합니다. == IoC
2. IoC ( Inversion of Control ) 제어역전
프레임워크가 권한을 가져갑니다.
자바가 객체를 생성하고 서로 연결하고 사용하는데
이러한 기술을 IoC컨테이너가 관리 서비스 해줍니다.
IoC컨테이너는 객체의 생성/초기화/서비스/소멸 --> (라이프사이클)
라이프 사이클을 관리합니다.
3. AOP ( Aspect Oriented Programming ) 관점지향 프로그래밍
객체지향과 다른 개념. 각 객체마다 중복되는 작업들이 있다면
해당 중복 작업을 기준으로 동일 행동을 하게 만드는 것.
메서드가 실행되기전, 실행된 직후, 실행시점에 따라 따로 기능을 적용 시키는 것
1, 2, 3에서 가지고 있는 특정 작업이 중복된다면
따로 AOP(파랑)으로 빼줘서
각 번호의 특정작업을 시키려고 한다면 AOP에게 시킴
=> 관점지향 프로그래밍
2. IoC(Inversion of Control) 제어역전
=> 자바가 해야하는 역할을 spring 프레임워크가 다 가져가버림 (객체생성, 연결하는 역할)
권한을 가져갔으니 주입도 내가 하겠다
1. DI(Dependency Injection) 의존 주입
package com.phyho.web; 아래에
[ BoardDAO.java ] 클래스 생성
@Controller == Controller
@Service == Service
@Repository == DAO
DAO는 DAO가 아니라 Repository 로 선언한다! 반전!
여기에서 sqlSession 은 이전에 만들어줬던 아래 캡쳐의 객체를 가져온거!!!!
서비스와 DAO 연결
이렇게 DAO와 연결된 서비스는 아래의 컨트롤러와 연결되는거!
[ 깃헙에 올리기 ]
깃헙에서 jul12 이름으로 repository 생성해주고
오늘자 프로젝트 jul12 마우스 우클릭 - team - shareProject
repository 를 깃헙으로 지정
repository master 라고 뜨면 됨
다시 jul12 마우스 우클릭 - team - commit
1. Push HEAD 클릭
2. 오늘날짜꺼 선택
3. 깃헙에서 복사한 URL 입력
4. master 입력 -> user & password 불러와짐
깃헙에 업로드 완료!!!
'국비과정 > Spring' 카테고리의 다른 글
20230718 _[32일차]_01. Spring 게시판 글쓰기 기능 (0) | 2023.07.18 |
---|---|
20230717 _[31일차]_01. Spring 게시판 생성 + DB연결 (0) | 2023.07.18 |
20230714 _[30일차]_01. Spring 맛보기3 (0) | 2023.07.14 |
20230713 _[29일차]_01. Spring 맛보기2 (0) | 2023.07.13 |
20230711 _[27일차]_01. Spring 다운로드 (1) | 2023.07.12 |