수업/정리

220421 Spring-1 셋팅, 환경

jumphare 2022. 4. 21. 22:53

* Spring framework
: 엔터프라이즈 어플리케이션 개발의 복잡성을 줄여주기 위한 목적으로 개발
: EJB 사용으로 수행되었던 모든 기능을 일반 POJO(Plain Old Java Object)를 사용해 가능하게 함

* 특징
1. 경량 컨테이너 (크기, 부하의 측면에서) : 자바 객체를 직접 관리
2. 제어 역행 (IoC: Inversion of Control) : 애플리케이션의 느슨한 결합 도모
3. 의존성 주입 (DI : Dependency Injection) : 각 계층이나 서비스 간 의존성이 존재할 경우, 프레임워크가 서로 연결해줌
4. 관점지향 프로그래밍 (AOP: Aspect-Oriented Programming) : 트랜잭션이나 로깅, 보안과 같은 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리해 관리할 수 있음
(자바 : 객체지향 프로그래밍 OOP(Object Oriented Programming) )
5. 모델-뷰-컨트롤러 패턴 (MVC) : 웹 프로그래밍 시 거의 표준적인 방식인 [Spring MVC] 패턴을 사용



* 환경 구축 (여기가 까다롭다고 함... 조심하기!)
STS (Spring Tool Suite)
(sts는 3.9.x 중에서도 낮은 버전을 다운받는게 좋겠다고 말씀하심 이클립스에 있는 3.9.14 설치하긴 했는데 2번으로 설치할거라면 3.9.11처럼 더 낮은걸 받으면 될 것 같다)

 


1. 이클립스에 STS프로그램을 plugin으로 추가
Help - MarketPlace - sts 검색 - Spring tool 3.9.x로 추가할 것 (Spring, Springboot 둘 다 만들 수 있는 프로젝트가 추가됨)

※ STS 설치하고 이클립스 실행 안 되는 오류가 있었음
이클립스가 JDK 경로를 잡지 못해서 생기는 오류!

https://gahui-developer123.tistory.com/59 이걸로 해결★★★
정말 사람 하나 살리셨습니다 감사합니다...

C:\eclipse에서 eclipse.ini (구성 설정이라고 되어있는거)에 위 블로그대로 추가하면 열림!!!!!
혹시 모르니 내 자바 위치도 다시 잡아둬야지
C:\Program Files\Java\jdk1.8.0_131\bin


2. STS프로그램 다운
https://github.com/spring-projects/toolsuite-distribution/wiki/Spring-Tool-Suite-3
3.9.11 다운받아 압축 풀고 들어가면 바로 응용프로그램이 있다 그 STS를 클릭한다 -> 이클립스 말고 STS프로그램이 실행됨

압축 풀고 응용프로그램 실행했는데 
Plug-in org.springsource.ide.eclipse.commons.gettingstarted was unable to load class org.springsource.ide.eclipse.commons.gettingstarted.dashboard.WelcomeDashboard.
이런 오류가 뜬다면, 폴더명을 간결하게 바꾼 뒤 거기에 압축파일을 다시 풀고 프로그램을 실행해보자!

*초기 셋팅
Pivotal 서버 삭제

project Explorer에 있는 server 디렉토리 - Pivotal tc~ - delete
preferences - server - runtime Environments - remove 

다이나믹 프로젝트 만들어보기 - 톰캣 등록은 https://libera-jj.tistory.com/53 참고하기
servers에서 새 서버 연결 만들고 톰캣 선택
마우스 오른쪽 -> add and remove에서 프로젝트 넣고 뺄 수 있음


preferences에서 encoding 검색 후
workspace, css, html, jsp, xml 다 utf-8로 바꾼 후 apply
webcontent에 index.jsp 파일 생성 후 실행해서 잘 작동된다면 끝!


**1번 이클립스, 2번 STS 공통

* Springtest project 생성
file - new - project - others.. - Spring폴더 - Spring Legacy Project
프로젝트명 springtest 로 아래 Templates - Spring MVC Project
뭐 16608 bytes 필요하다고 하면 yes 누르고
패키지 경로 com.myhome.springtest 잡아주고 finish

프로젝트가 생성되면
pom.xml을 열고 <properties>의 <java-version>을 1.8로 변경해준다
그리고 프로젝트 - properties - project Facets - Java를 1.8으로 수정!

※ 한글이 깨질 경우 인코딩시켜주기
webapp / WEB INF / views / home.jsp 
가장 첫줄에 아래 코드 추가
<%@ page language="java" contentType ="text/html; charset=UTF-8" pageEncoding ="UTF-8"%>


HomeController.java : 어노테이션 설정 파일. (@webservlet ("*.do")였나 이거 있던 컨트롤러)
@Controller
1. servlet-context.xml의 context:component-scan 태그에 지정된 패키지 내부의 클래스를 검색
2. Controller Class에 사용
3. 따로 Servlet Class를 상속받지 않아도 된다.

@RequestMapping()
1. 브라우저에서 요청하는 url를 컨트롤러와 맵핑해줌
2. 클래스를 맵핑하고, 그 안의 메소드를 각각 맵핑할 수 있음
3. 메소드에서 요청방식을 지정할 수 있음 (get방식, post 방식)

값을 리턴시킬 게 있으면 Model 객체를 매개변수로 추가할 것

web.xml : 프로그램 실행 시 가장 먼저 실행되는 파일 -> 암것도 모르는 상태에선 손대지 말 것
<servlet-mapping>
   <servlet-name>appServlet</servlet-name>  --> 서블렛 경로랑 동일
   <url-pattern>/</url-pattern>  --> ★컨트롤러로 들어오게 되는 확장자 설정 가능 (/는 모든 요청, *.do는 확장자가 .do인 요청)
</servlet-mapping>
---> 스프링 환경설정 파일을 내부에 정의해두고 실행 시 함께 실행될 수 있게 함

servlet-context.xml : 스프링 환경설정 파일 -> 서블렛 기본 설정
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <beans:property name="prefix" value="/WEB-INF/views/" />    ---> View 페이지 위치
   <beans:property name="suffix" value=".jsp" />   ---> 확장자
</beans:bean>
---> 원래 /WEB-INF/views/home.jsp 인 경로를, return "home" 으로 줄여 표현할 수 있음 (ViewResolver)
---> /WEB-INF/views/ 이 경로를 최상위 디렉토리로 지정해두고 이 아래에 디렉토리를 만들어 뷰 페이지를 만들 것.
+) 이 때는 return으로 경로를 지정해줄 때, prefix로 지정된 디렉토리를 제외한 "나머지 디렉토리/파일명" 형식으로 적어줘야 그 위치로 넘어갈 수 있음!

* root-context.xml    : 스프링 환경설정 파일 -> DB 연동

* pom.xml : maven 라이브러리 환경 설정 파일
체크한 파일이 전부 제대로 있다면 run as- run on server 로 구동시켜보고 잘 작동되면 성공!


* Spring MVC 흐름
Client가 url을 이용해 요청 -> web.xml 가장 먼저 실행 -> <servlet>에 서블렛 경로 지정되어있음 -> Dispatcher Servlet로 넘어감
Dispatcher Servlet = HomeController : 받은 요청을 Controller Class로 보내줌 (어노테이션 기반에서 Handler Mapping 사용 X)
Controller에서 필요한 처리 후(dao같은) viewResolver로 축약된 파일명으로 파일로 넘어가게 함


* 동작 확인
1. webapp 아래에 index.jsp 파일 생성 후 location.href="first"; 을 넣어두자
HomeController.java에서 @RequestMapping 값을 "/first"로 설정하자
index 실행 시 home.jsp가 실행되는지 확인!

2. home.jsp에 <a href="second">이동</a> 을 추가하자
HomeController.java에 아래 서블렛 추가
@RequestMapping("/second")
public String second(Model model) {
   model.addAttribute("test", "값 전달 성공");
   return "result";
}
views폴더의 result.jsp에 ${test}를 작성해둔 후 index 실행해 result.jsp까지 흐름이 넘어갔는지 확인!