Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

어? 이게 되네

2022.05.26. 목요일 이공계 전문기술 연수사업 (Spring, Spring MVC) 본문

TIL

2022.05.26. 목요일 이공계 전문기술 연수사업 (Spring, Spring MVC)

토끼귀에진주귀걸이 2022. 5. 30. 20:50

오늘 배운 것

스프링


프레임워크란?
ㄴ프로그램을 만들기 위한(어플리케이션 개발을 위한) 기본 뼈대, 구조라고 함.
어플리케이션을 개발하려고 하니까 이러이러한 클래스나 인터페이스들을 미리 만들어 놓고 패턴화 하니까 좋더라 ~~ 해서 기본적으로 만들어놓은 틀(클래스나 인터페이스들의 모음집)
수정이 빈번한 개발과정에서 몇가지 인터페이스들이나 클래스들을 패턴화하여 만들어 놓은 것 !
공공프로젝트인 경우 전자정부표준프레임워크 안은 스프링과 마이바티스 기반으로 되어있음

스프링의 특징
ㄴDI,AOP

DI
어플리케이션을 만들면서 제일 신경써야하는 부분? => 사용자 요구사항의 변동
요구사항을 기반으로 소프트웨어를 만들면 수많은 클래스들로 구성되어 있고
그 클래스들은 has a관계이거나 is a관계에 있음. 하지만 중간에 요구사항에 변동이 생긴다면!
강한 의존 단계에 있는 클래스와 객체 등등을 요구사항 변동에도 어떻게하면 유연하게 대처할 수 있을까? => 그것이 스프링의 특징인 DI (diffendency injection) 의존성 주입
사용자가 수정을 요구할 것 같은 객체의 생성을 소스코드에 쓰지 않고 스프링의 환경설정이 이 객체를 제공해줌(스프링이 제공해주는 문장으로 대체할 것임)-환경설정만 바꿔주면 됨!
강한 의존 단계를 느슨하게 ~!
클래스와 클래스간의 의존을 스프링(스프링컨테이너가 제공해줌)

스프링을 구성하는 모듈

객체제공자로서의 스프링을 스프링컨테이너라고 표현함(스프링 컨테이너가 제공하는 객체라는 표현이 있음)

스프링컨테이너
BeanFactory
ㄴApplicationContext
ㄴㄴWebApplicationContext

스프링컨테이너사용해서 자바프로젝트
jars가져다놓기
xml파일 생성해서 bean노드 만들어서 id class 속성 설정
//환경설정파일이 xml로 만들어져있습니다.
메인에 ApplicationContext = new ClassPathXmlApplicationContext("객체의XML의 위치(패키지/xml파일이름)");

xml 기반의 객체 생성

사용자가 생성자를 하나라도 만들기 시작하면 기본생성자를 제공하지 않음
xml은 자바문법을 대신한 문서

클래스의 속성(멤버변수) 값들은 생성자에 의해서 정해질 수도 있고 세터에 의해서 정해질 수도 있음!

세터에 의해서는 bean에 property, 생성자에 의해서는 constructor-arg 라는 속성 사용해서 멤버변수 값 설정
기본자료형일때는 value로 참조자료형일때는 ref라는 속성으로 값을 설정!

의존관계자동설정 (ref 대신 bean 태그에 autowire)
byName - 이름이 똑같은 것이 있으면 자동으로 의존관계 설정하라는 뜻, 그거에 대해서 property 설정 안해도 됨! (메인에서 이름 설정하면 그대로 따라옴) 대신 해당클래스에서 멤버변수/생성자매개변수 이름과 똑같아야함 !
byType - 이름이 달라도 자료형이 같으면 자동으로 의존관계 설정됨! 대신 그 타입의 객체는 유니크해야 함!
Constructor - 생성자에 의한 의존관계 자동 설정. 생성자에 매개변수가 있다면 따로 constructor-arg 설정해줘야 함 내부적으로는 byType이기 때문에 그 객체가 유일해야 함
autodetect

bean 객체 범위
생성한 객체의 유효 범위 scope라는 속성 
singleton => 한 개 만들어서 다같이 사용한다는 의미(기본)
prototype => bean(객체)을 요청할 때마다 객체를 다르게 생성해줌

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
어노테이션 기반 객체 생성 (요즘 더 선호함)

어노테이션
환경설정을 대신해주는 문법

xml annotation
<bean /> =>@Bean

@Configuration (환경설정을 해준다는 의미의 어노테이션)
public class _____ {
@Bean
public Dept dept(){ //메소드 이름이 xml의 bean의 id 역할임
return new Dept();
}
}

ApplicationContext context= new AnnotationConfigApplicationContext();

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
스프링 MVC

스프링 MVC의 구성요소
dispatcherservlet 
클라이언트의 요청을 전달받아 컨트롤러에게 클라이언트의 요청을 전달하고 컨트롤러가 리턴한 결과 값을 뷰에 전달하여 알맞은 응답을 생성하도록 함 (한마디로 문지기역할)
HandlerMapping
클라이언트의 요청 url을 어떤 컨트롤러가 처리할 지를 결정함
컨트롤러
클라이언트의 요청을 처리한 뒤 그 결과를 dispatcherservlet에게 알려주는 역할을 함 
ModelAndView
컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음
ViewResolver
컨트롤러의 처리 결과를 생성할 뷰를 결정함

컨트롤러의 처리 결과 화면 생성

클라이언트->dispatcherservlet이 요청 url과 매핑되는 컨트롤러검색->핸들러맵핑->디스패처서블릿이컨트롤러에게 처리요청->컨트롤러가 디스패처서블릿에게 모델앤뷰 반환->디스패커서블릿이
뷰리솔버에게 컨트롤러의 실행결과를 보여줄 뷰 검색하고 ->뷰리솔버가 그 뷰 결정해서 보여줌

스프링mvc에서도 객체제공해주는 환경설정파일이 필요한데 그게 (DispatcherServlet이름)-servlet.xml 파일이어야 함!(무조건 .. 그러면 어노테이션 기반으론 못하나?)
그게 무조건 WEB-INF 아래에 있어야 함!

컨트롤러 구현 및 설정 추가
playing old java object (pojo)
여기서 컨트롤러는 서블릿을 상속받지는 않고(jsp에선 그랬지만) 그냥 자바 클래스 만들듯이 하면 됨 그러한 형태를 pojo라고 함
그대신 어노테이션 (@Controller)를 사용해서 컨트롤러라는 것을 설정함
사용자가 브라우저에 어떤 것을 입력하면 동작하는지 설정하는 어노테이션도 추가해줘야 함(@RequestMapping("/~~~.do"))이런 식
사용자 요청으로 동작하는 메소드는 ModelAndView를 반환함 (모델과 뷰를 하나의 세트로 만들어 놓은 자료형-상태유지와 forward를 합쳐놨다고 생각하라고..? 무슨 소린지 모르겠음...)
addObject 메소드는 상태유지하는 역할이라고 생각해주면 됨

IRVR 치면 바로 나옴 (이거땜에개짜증났음)

마이바티스
자바 객체와 데이터베이스 테이블을 서로 매핑해주는 도구 (orm)

 

오늘 헷갈린 것

  • 스프링mvc사용해서 jsp에 화면 뿌려주는 일련의 과정들.. 아직 와닿진 않는다...

오늘 한 생각

자바를 허투로 배운게 아니다.. 안 중요할 것 같았던 어노테이션이 여기 쓰이다니..