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.기관명.프로젝트명 입력
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를 추가/삭제/교체할 수 있음
'Spring' 카테고리의 다른 글
[STS_세팅 가이드] 스프링 자바 버전 업데이트 (ArrayList는 자바 1.7버전 이상부터 사용 가능) (0) | 2022.08.06 |
---|---|
04_단위테스트 (0) | 2022.08.05 |
서블렛 버전 업데이트 가이드 (미완, 어쩌고쿠키 뭔지 알아서 수정하기) (0) | 2022.08.05 |
스프링 빈 테스트 (미완성) (0) | 2022.08.05 |
08_Controller (미완성... 분량폭발) (0) | 2022.08.05 |