본문 바로가기

구디 아카데미 수료 과정/Servlet + JSP

구디아카데미 후기/ 국비지원IT개발자 취업 / 전민균 강사님/클라우드 활용 자바개발자 양성과정/•61일차/01.19

전자정부 프레임웍

 

Spring Framework 5.3.20 -> 5.3.27

SpringBoot 2.7.12

 

 Eclipse 2022-12

 

JDK 11

 

톰캣9           

 

 

선생님이 주신거 톰캣 잡기

위도우-> 프리퍼런스-> 서버 -> 런타임 인바이러먼트 ->edit -> JRE만 jdk17로 수정

 


Spring 개괄

 

컨트롤러에 매핑을 하는거 자체가 1개의 서블렛 클래스 역할을 하는거임

 

그래서   / 루트컨텍스트로 오는애는 /로 가는거고

             /init.do로 호출하면  밑으로 감 

 


Spring  Boot  개괄

= 톰캣도 내장톰캣 사용 (서버 필요 x)

 

전자정부 프레임워크는  Spring Boot 2.7.12 이지만 애초에 그걸 만들 수 없음...

 

 

 

1. 부트는 dependency를 이런식으로 추가하면 됨 

 

2. Boot는 애초에 dependency를 버전을 정해서 가지고 있음   그래서 내맘대로 튜닝이 불가능

 

3. 프로퍼티스로  주소 앞에 붙을 내용과 뒤에 붙을 내용을 정해줌

 


Spring framework의 실행 RoadMap

 

환경

 

web.xml -> servlet -> DispatcherServlet  클래스 로드 ->

init-param / context-param으로 설정 파일인 spring bean configuration을 읽음 ->

 init-param으로 되어있는 servlet-context.xml의 base-package를 읽고 ->

view resolver를 읽음

 

 

요청이 들어오면->

base package의 하위 중 @Controller 클래스를 찾음

-> @Controller 클래스 내부에 있는 @RequestMapping의 value와 같은 값을 찾아서 실행

-> 반환된 return값을 Resolver가 재작성해서 /WEB-INF/views/값.jsp   WAS요청

-> HTML 반환

 


Spring Framework 3대 이론

                               


 

Bean을 만드는 2가지 방법 (xml, annotation)

 

1.xml

 

 

 

  가. xml에 메서드가 있는  클래스를 호출하고  id를  명명해줌

 

  나.  main가서  CalssPathXmlApplicationContext로  bean의 경로와 

                          getBean으로  id를 명명해줌  

 

 

 다. 생성자를 주입하지 않으면     기본값 (케냐AA, 1000)이 출력

      생성자를 주입하면  주입한 값이 나오지만  index 작성하지 않으면 선언한 순서

      index 작성하면 index 대로 나옴  (마지막에 3000의가격? 아라비카로 나온거 확인)

 

 

 

 

Bean이   new로 클래스 만들던걸 대체한다고 생각하면될거같은데?

 

 

2. annotation

 

◆ Spring Bean Annotation이란???
   - 자바 1.5버전부터 지원한다
 
◆ Spring Framework를 이용하여 구현할 때 Annotation 구문을 사용하기 위해서는 설정이 필수임
   첫번째 : CommonAnnotationBeanProcess 클래스를 통해서 Spring Bean Configuration에 <Bean>으로 작성하여 사용  (사용X방법)
    두번째 : <context:annotation-driven>을 통해 작업 
   **세번째(자주씀) : <cotext:component-scan base-package=" "> annotation도 사용할 수 있고 stereoType도 사용할 수 있다.


◆  4개의 stereotype Annotation

1) @Component : 스테레오 타입의 최상위 객체
2) @Controller : Spring MVC 개발에서 자동으로 Front Controller객체로 인식
3) @Service : 비지니스 로직을 처리함 Transaction 처리 가능함
4) @Repository : DAO

----> 클래스 위에 선언하면 자동으로 Bean으로 생성되고 Spring Container가 관리 함
       이걸 자동으로 해주는 애가 <context:component-scan>
  
  org.springframework.stereotype / org.springframework.beans.factory.annotation / javax.annotation
  
  
  ● @Component
   패키지 : org.springframework.stereotype
   버전  : 2.5
   설명  : <bean>을 등록 해줌 -> Spring Container가 사용할 수 있도록 bean객체로 만들어 준다
     일반클래스에 @Component로 작성하면 자동으로 클래스가 bean으로 등록
     bean 이름(id)은 해당 클래스 명의 Camel  Case 방법으로 자동으로 선언됨 
     Single ton이며 필요시 @Scope를 통해서 사용범위를 선언할 수 있음(근데 쓸일은없겠제?)
     
       ● @Controller       
       ● @Service       
       ● @Repository       
            
  
  ● @Autowired 
   패키지 : org.springframework.beans.annotation
   버전 : 2.5
   설명 : DI(의존관계)
        생성된 빈과 빈을 연결할 때 ref 속성을 통해서 연결한다.
         생성되어있는 bean을 클래스에 주입하여 사용할 때 설정
        사용방법 - 생성자 / 멤버필드 / setter메소드, 일반메소드
        
        "타입" 을 이용한 프로퍼티를 등록  - 검색순서 타입 -> 이름 순 (byType) 
        
        해당 타입의 bean이 자동으로 주입되도록 해주는 역할
        문제: 해당 객체가 없을 때 or 해당 탑의 객체가 2개 이상 선언된 경우   오류가 발생함
        
              해당객체가 없을 때 발생하는 오류는 -> 필수객체가 아닌 경우에는 @Autowired(required=false)로 선언해서 객체가 null인 상태도 허용시켜서 해결 가능 (기본은 true)    

              
         @Resource는 byName으로 되기 떄문에 이름부터 찾음  -> 이 방식으로 @Autowired를 사용한다면
         예시 ) @Autowired
          @Qualifier("name")// UserDto 타입의 bean중 이름(id)가 name인 bean을 찾아서 주입해 준다 
          private UserDto dto;   
         
          ●  @Qualifier
   패키지 : org.springframework.beans.annotation
    버전 : 2.5
   설명 : @Autowired가 타입기반이기 때문에 두 개 이상의 타입이 있을 경우 특정 bean을 사용할 수 있도록 선언
 

  ● @Resource  (Autowired의 Qualifier)
    패키지 : javax.annotation
    버전 : 2.5
    설명 : 어플리케이션에서 필요로 하는 자원을 자동으로 연결하기 위해서 사용
       의존하는 bean의 객체를 전달할 때 사용
       byName으로 bean연결을 name으로 하게 됨
       @Resource(name="name")
       

 

 

 

 

 

 

 

 

 

 

 

 


Bean과 Bean을 연결하는 방법

 

 메소드명이 property name임 여기서는 setter일거니까 setter의 이름을 카멜방식으로 적어주는 거임

 

 ref를 사용해서  의존적주입 (다른객체의 Bean을 넣기)

 

 

JobAddress 안에  EmployeeAddress가 선언되어있을때

 EmployeeAddress형태의 Bean을 선언하고  그 Bean의 id  myAddr03을   

JobAddress Bean에  ref로 호출함


Bean을 호출할 때 (context)

 

환경을 따로 잡아줘야함

 

     

                                       

 


4.3 이후 생성자 주입

 

 

장점:

1.순환 참조방지 (계속 새값 들어오는거 방지)

2. 테스트 코드 작성 용이

3. 이상코드 제거

4. 객체 변이 방지 (final)

 

 

4.3 이후 생성자 주입 처리 방법

-> 멤버필드를 final로 선언하고 -lombok 생성자 주입을 통해서 한번만 받음

 

 

->autowired같은거 안써도 자동으로 값이 들어가서 작동함


서버 이름 (컨텍스트가 다를때) 해결방법

 

 

 

 

1. 이름 다른거 삭제하고 - > server clean  (배포 전 상태로 만들기)

 

2. pom.xml의    artifactId를 누르고  ctrl + alt + g

 

3. pom.xml 최상단의  artifcId를 프로젝트 명(배포가 될 이름) 으로 바꾸기 ( 여기선 Spring01_Sample)

 

4.  pom.xml 하단의 build 아래에 finalName을 추가하고 여기도 프로젝트명으로

 

 

5.  settings -> propertn name -  context-root도 패키지 명으로 변경

 

 

6. -> 메이븐 업데이트    -> 다시 런온서버로 실행


 

 

 

 

 

구디아카데미 후기/ 국비지원IT개발자 취업 / 전민균 강사님