본문 바로가기

Spring

01_스프링 프레임워크

 

01_스프링 프레임워크.txt

 

프레임워크 

프로젝트 개발에 효율적인 구조를 미리 만들어 놓은 것 

 

개발자는 이미 완성된 효율적인 구조에 빈 칸을 채우는 형식으로 개발을 진행하게 된다.

 

장점

- 일정 수준 이상의 품질 보장

- 개발기간 단축

 

스프링프레임워크

 

1. PODO (Plain Old Java Object) 

https://siyoon210.tistory.com/120

 

POJO - (Plain Old Java Object)란 뭘까?

POJO 자바나 스프링 프레임워크를 조금이라도 공부 해본 개발자 (혹은 학생)이라면 POJO 라는 단어를 한번쯤 듣게됩니다. POJO의 정의는 사실 그렇게 어렵지 않습니다. 아래 내용은 위키 백과에 나

siyoon210.tistory.com

스프링 개발자들은 JSP문법을 혐오한다. 

(순수 자바로만 해도 되는 걸 굳이 JSP(like 사투리)를 배워서 해야 하느냐!) 

JSP의 새로운 여러 문법들은 모두 순수 JAVA로 대체할 수 있기 때문에 순수 자바 활용을 선호한다.

 

백엔드 관련 개발에는 JAVA만 사용하도록 노력하고, 

프론트엔드 관련 개발에는 JSP/JSTL 등 별도의 프론트엔드 APi를 활용한다. 

 

최대한 자바만 사용하여 익숙하지 않은 문법 사용을 최소화 한다. 

 

2. 의존성 주입

- 프로젝트 규모가 커질수록 생성자를 사용하는 것이 문제가 된다.

 그래서 놀랍게도 생성자는 제거 대상이다.

 if도 마찬가지로 코드에 if가 있으면 안 좋은 코드라고 함

왜냐하면 if문은 기능이 늘어날 떄마다 else if가 무한히 늘어나기 때문. 분명히 이보다 더 좋은 방법이 있음

 

그래서 스프링프레임워크 개발자들은 디자인 패턴 상 유지보수에 지장을 주는 기본문법들을 제거하고자 노력함

생성자의 경우,

스프링 프로젝트 내의 모든 생성자 사용을 제거하기 위해서 인스턴스가 필요한 곳에 등록된 클래스의 인스턴스를

자동으로 주입하는 방식을 사용한다.

(의존성 주입이란 말은, 즉 생성자를 생성하는 이유가 의존성 때문인데 그 의존성을 대신 주입해준다는 것)

 

 

 

 

 

스프링 MVC 프로젝트의 기본 구조

스프링 MVC 프로젝트 생성

File - New - Spring Legacy Project - Spring MVC Project - com.기관명.프로젝트명 입력 

 

JSP에서 직접 수동으로 생성했어야 하는 구조

 

 

src/main/java

메인 자바 코드를 작성하는 곳

HomeController가 기본으로 생성 돼 있음 

(HomeController 안의 메서드로 GET/POST ..등의 요청을 받아서 처리한 후 띄우고 싶은 view를 리턴) 

 

사용 예시

컨트롤러, 데이터 모델(DAO, DTO), 일반 클래스 .. 등 .java파일들을 이 곳에 생성

 

 

 

src/main/resource

메인 자바코드를 실행하기 위한 자원들을 저장

 

 

안에 log4j.xml이 기본적으로 생성 돼 있음

 

 

사용 예시 

log4j2로 버전 변경 하고 나서의 모습

 

 

 

src/test/java

자바 테스트 코드를 작성하는 곳

테스트는 JUnit 이용 (JUnit쓰려면 maven repo가서 코드 복사해서 pom.xml에 붙여넣기 해주기) 

 

테스트는 src/main/java에 작성된 .java파일을 대상으로 진행된다. 

테스트케이스를 만들려면 해당 .java파일의 src/main/java 내부 경로와 같게 생성해야 하기 때문에 

처음부터 저렇게 com.hzllzl.hzspringmvc패키지가 공통적으로 생성 돼 있다.

(스프링에서 같은 이름의 패키지는 결국 같은 패키지로 인식되기 떄문에

src/main/java의 com.hzllzl.hzspring에 생성된 클래스를

src/test/java의 com.hzllzl.hzspring에서 쓰려고 할 때 import할 필요도 없음!) 

 

 

사용 예시. 

이렇게 패키지 경로가 같아야 해당 경로에 있는 .java파일들에 대한 테스트를 진행할 수 있다.

 

 

 

src/test/resources

자바 테스트 코드를 실행하기 위한 자원들을 저장하는 곳 

 

src/main/resources에 log4j.xml이 있었던 것처럼 이 폴더에도 log4.xml 존재

 

사용예시.

SpringMVC의 src/main/resources의 log4j.xml 은 log4j2.xml로 이름을 바꿔주고 안에 내용도 수정해줬는데 얘는 그대로 뒀네 내가.. 근데도 테스트가 제대로 동작하는 걸 보아 pom.xml의 log4j <dependency>만 바꿔줘도 별 문제 없이 돌아가는 건가봄..?

 

 

 

 

webapp/resources

웹에서 사용할 자원들(css, js, image 등) 을 저장하는 곳

 

 

여기는 아직까지 손 안 댐

 

 

webapp/WEB-INF/views

컨트롤러에서 포워드 할 뷰 페이지들을 모아두는 곳

 

home.jsp파일이 기본적으로 생성 돼 있다.

 

 

사용예시.

 

만약 HomeColtroller에서 blog.jsp를 포워드 하고 싶으면 

HomeController 내에  메서드 하나 파서 return "/blog.jsp"; 해주면 됨

(redirect는 리턴값 앞에 "redirect:/"  붙여서 뒤에는 해당 .jsp파일로 보내주는 홈컨트롤러 메서드가 속한 홈컨트롤러의 매핑값 + 해당 메서드의 매핑값을 붙여주면 된다. ex. return "redirect:/hello/coffee/add"; ) 

 

홈컨트롤러 매핑, 포워드, 리다이렉트 과정 

 

 

 

webapp/WEB-INF/web.xml

웹서버 설정파일

 

 

JSP였다면 여기에 서블릿 등록했을 텐데 Spring에는 이미 기본적으로 DispatcherServlet이 있고, 우리가 다뤄야 할 건 Controller기 때문에 스프링에서는 web.xml에 서블릿을 등록할 일은 없는듯 ?

 

 

 

Maven Dependencies 

Maven 이 자동으로 관리해주는 라이브러리들 

기본적으로는 이렇게 돼 있음 

JUnit없고, log4j는 구버전이고, jsp도 구버전, spring도 구버전

 

수업에서 쓰는 SpringMVC 프로젝트로 들어가보면

업데이트/설치 로 (Maven repo 에서 신버전 코드 복사해서 pom.xml파일 내에 붙여넣기/교체 + Maven - Update Project, 때에 따라서는 껐다 켜기)  후 JUnit 생기고 , log4j, jsp, spring 최신버전으로 바뀐 모습 

이렇게 Maven 에서 관리해주는 Maven Dependencies 들은 우리가 직접 jar파일 설치하고 뭐 이런 복잡한 거 안 하고 

pom.xml 내의 dependency 코드로 간단히 해결할 수 있음 (Maven이 알아서 관리해줌) 

 

 

pom.xml

Maven 설정 파일 

★ pom.xml의 내용이 바뀌면 프로젝트 우클릭 - Maven - Update Project... 해줘야 변경된 내용이 반영됨

 

 

 

플젝의 맨 아래 있음

 

Maven Dependency를 추가/삭제/교체할 수 있음

 

 

스프링 디펜
록포제 디펜
JUnit 디펜