Spring

1. 스프링 소개와 학습안내

트랜젝션 관리 등 dao 알아서 해줌.
java ee를 들어내고 스프링과 java se를 활용해서 만들게 되었ㄲ다.
스프링 => 분산형 기업형 응요프록르매 개발을 위한 API 결합력을 낮추는 DI, DB Transaction 처리, 로그처리 등등
java se => 일반적인 로컬 응용프로그램 개발을 위한 API 파일I/O 콘솔I/O 윈도우 I/O 네트워크 I/O Thread
MVC 트랜잭션 인증과 권한을 쉽게 만들게 해줬다.

2. 느슨한 결합력과 인터페이스

코드 수중얼 없애고 DI를 위한 설정
어떤 객체를 수정해야한다면?
UI -> Service -> Dao ->DB
S A1
B1
B1을 수정해야할때 1.B1 코드수정 2. B2라는 코드추가
B2만들때 S를 코드수정필요한가?
이걸 어떻게할까? 수정하려면 소스가 필요하다. 결합력이 높아서 고쳐야한다.
B라는 것을 만들면 된다. 내부적인 B1 B2로 나뉘더라도
UI -> Service -> Interface -> Dao ->DB
이것은 ui에서 하게된다. b1을 결합하는 것에서 b2로 바꾸는 것은 코드에서 들어내서 생성한 객체를 외부설정에서 생성될 수 있게 한다.
XML Annotaion을 사용해서 객체가 생성조립되게한다.
https://youtu.be/YZzpGtpW2h0 새로운 객체 바꾸기 영상참조
스프링은 결합을 할때 설정파일을 제공한다.

3. DI(Dependency Injection)

스프링의 가장기본적인 것은 객체를 생성해주고 조립해주는 것이다.
종속성 주입? 부품 조립이라고 보면 쉽다.
두가지가 있다.
class A
{
private B b;
public A(){
b=new B();
}}
A가 B를 생성해서 가진다. 이것을 일체형 Compostion has a 관계라고 한다. 이관계를 Dependency라고 한다.
class A
{
private B b;
public A(){
}
public void setB(B b){
this.b = b;
}}
직접생성하지않고 외부에서 생성해서 Association has a 조립형 관계이다.
DI가 왜중요하냐?
프로그램을 만들때 일체형보다는 조립형이 결합력이 낮아지고 부품을 쉽게 갈아끼울 수 있게 해준다. 업데이트를 하게 된다면 조립형이 좋다.
일체형은 A a = new A(); 얘만 만들어쓰고 그밑에 부품이 뭐가 있는지 모르고 바꿔낄수가 없다.
조립형은 A라는 객체를 만들때 부품을 따로 만들어서 이것을 꽃아줘야한다.
A a = new A(); B b = new B();-> Dependency a.setB(b);
이것을 주입 Injection이라고 한다.
장점은 부품을 쉽게 바꿀수잇고 단점은 부품을 바꿔야한다는 것이다.
조립은 Setter injction / Construction Injection(A a = new A(b))이 있다.
Setter로 조립하거나 생성자로 조립하는 것이다.
조립하는게 불편하면 조립하는 서비스를 받는 것이다. 이것을 조립해주는게 스프링이다.
우리는 조립된 결과물만 가져다 쓰는 것이다. DI는 부품을 조립해준다.

4. IoC(Inversion Of Control) 컨테이너

여러 부품들을 생성해서 스프링에 주문서로 제공을 해줘야한다.
XML/ Annotation으로 이 주문서를 작성한다.
DI 부품을 조립하는데 주문을 하고 이 내용들을 객체로 생성하고 담는데 이것을 컨테이너 라고 한다.
이 컨테이너는 부품 컨테이너 IoC 컨테이너라고 한다.
부품들을 조립해서 생성까지 해줘서 담아준다. 작은부품 - 큰부품 -더큰부품 의 순서대로 조립된다.
그런데 일체형이라고 생각하며 A->B>C->D로 만들어진다.
결합형은 반대로 생성이 된다. 이것이 Inversion of Contorl(역순)이라는 뜻임. 이 부품들이 결합도되니 IoC 컨테이너라고 한다.
->스프링을 진행하기 위해서는 메이븐을 알필요가 있다고 한다.
메이븐 강의 부터 듣고자 한다.

1. 메이븐이란?

프로젝트 만들때 가장많이 사용되는 것이다. 내부적으로는 복잡하ㅂ지만 사용자에게는 어렵지않다.
빌드툴 빌드할때 사용되는 도구이다.
프로젝트 빌드할때 다음의 작업 과정을 거친다.
프로젝트 설정 -> 라이브러리 설정 -> 코드작업 ->컴파일->테스트->패키지만들기->배포->레포팅
이 작업과정들중 반복되는 부분들을 효율적으로 개발할 수 있도록 도와주는 것이 메이븐이다. 과정을 경량화시킬 수 있다.
이클립스도 빌드툴인가? 이런것은 빌드툴이아닌 IDE개발환경을 총망라한 통합 툴
메이븐은 특정에 종속된게아니라 빌드를 도와주는 역할자로서의 도구이다. 메이븐은 편집기능이 없다.
추가로 하는게 깃 CVS (버전관리) JUNIT(테스트) MAVEN Grandle ant가 있다.
이 기능이 이클립스에 잇는데 왜 메이븐을 사용하는가?

2.메이븐설치하기

https://maven.apache.org/가서 다운
cmd에서 사용하니까 매우 불편함.
패스 설정을 해줘야한다. 자바 햇듯이 환결성정해주기
cmd창에 mvn -version하면 된다.

3. 메이븐으로 자바 프로젝트 생성하기

프로젝트 만들어지고 소스코드 만들때 단일하게 컴파일 라이브로 설정하게 해주는 역할 등을 한다.
메ㅐ이븐 폴더를 만들고 cmd로 메이븐을 사용해보자.
cmd 창에 mvn archetype:generate -DgroupId=com.newlecture -DartifactId=javaprj -DarchetypeArtifactId=maven-archetype-quickstart
아키타입을 생성해주세요 1.다른사람이 만든 maven-archetype-quickstart를 기본으로 만듬.
내가 만약에 자주만드는 형태가 있다면? 그거를 기준으로 만들어진다. 기본타입 기본형태
이클립스는 도구를 매번 맨땅에서 만들어야되는데 내가만든 프로젝트자체가 또하나의 프로젝트의 탬플릿이 되는 것이다.
2.이번에는 내가 JavaPrj라는 새로운 프로젝트를 생성한다. groupid는 패키지명과 비슷하게 이름이 겹칠경우를 대비하는 것이다.
3.그때 내 프로젝트를 식별학 ㅣㅜ이한 그룹명은 com.newlecutre로 한다.
뭔가 다운로드하면서 하는것이라 인터넷이 연결돠어야한다.


package com.newlecture;
Hello world!
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
지정한 경로에 이런 파일이 만들어진다.

4.컴파일과 실행하기

F:\study\Maven\javaprj을 보면 pom.xml이 항상있다.
항상 메인프로젝트를 실행하거나 컴파일할때는 pom.xml이 있는 디렉토리에서 메이븐관련된 명령어를 이용하게 된다.
System.out.println( "Hello Maven!" );으로 고치고 컴파일을 해보자.
xml파일에 이것을 넣고 mvn compile해보자.
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
F:\study\Maven\javaprj\target\classes\com\newlecture 안에 App.class파일이 들어가게된다.
이것을 패키지화해보자. mvn package
javaprj-1.0-SNAPSHOT.jar 파일이 생성이 되었다.


이것만드로는 편한지 알수없다. 이클립스에 합치면 편하게 된다.

5. Build LifeCycle과 Phase들

메이븐의 명령어를 알아보도록 하자. 이것과 관련된것이 메이븐의 Build LifeCycle이다.
mvn compile /test / package 등을 했다. 이것들을 단계(phase)라고 부른다. 수행단계가 몇단계인지 알 필요가 있다.


이단계들을 일일히 실행하는게아니다. 만약 compile을 하면 앞단계들은 알아서 실행되고 쭉 진행된다.
실행하기 원하는 단계까지만 실행해달라. 하면된다.
어떤 파일로 바꿀건지
<packaging>jar</packaging> 등등에 따라 다르다. POM.XML을 잘관리해야한다.
웹프로젝트로 바꾸자하면 웹으로 바꿀수 있다. 이것을 잘 구성해야한다.
그럼 POM이 먼가? Project Object Model으로 프로젝트를 만들면 구성하는 것을 모델로 가지고 있는 것이다. 여기에 프로젝트에 필요한것들을 설정하는 것이다.
가장많이 사용하는것은 jar자바프로젝트 war웹프로젝트이다.
메이븐이 좋은것은 각단계별로 끊어둿다 각 단계를 실행하는 프로그램이 따로 있다. 플러그인처럼 뺏다꼽았다 할 수 있다.
기본적으로 설정되는 단계가 있다. prcess-resources / compile / process-test-resources / test-compile / test /package
단계별로 정리한것이 플러그인인데 이 단계에 사용하는 플러그인을 추가하거나 교체하거나 뺄수도잇다.
이 단계별로 플러그인들이 내부적으로 구성하고 있는 구성품들이 있는데 이것들을 Goal이라고 한다.
mvn help:describe -Dcmd=compile 이 명령어를 하는데 사용된 플러그인들을 알려달라 할 수 있다.
이 플러그인들을 어디서 구하나? 메이븐이 제공하는 플러그인을 사용할 수잇다.
https://maven.apache.org/plugins/index.html 메이븐 플러그인
이런플러그인들로 단계를 나눌 수 있다. 메이븐의 단계들이 잇고 이것들이 플러그인들로 연결된다.
그런데 이것들을 사용하기로는 편집 등이 불가능하다. 그래서 IDE에서 연결해서 메이븐의 장점을 엮어사용하면 좋다.

6. 메이븐 프로젝트 이클립스 IDE에서 로드하기

Maven project file-import로 이전에 만든 javaprj을 불러와보자.
소스코드를 불러오면 이전에 만든 App.java를 가져올수있다. 이전에 명령어로 실행했지만 메이븐의 과정을 거쳐서 이클립스에 보여지게 할 수 잇께된다.
다른 툴에다가 해도 메이븐을 사용할 수 있다.

7.컴파일 플러그인으로 JDK 버전 변경하기

컴파일단계를 수행하고 있는 플러그인이 jdk버전을 설정하고 있는데 이것을 변경해보자.
단계들이 플러그인들과 연결되어있다.
컴파일을 담당하고 있는 것은 두가지 골이 있다.
compiler:compile / compiler:testCompile 전자는 컴파일의 컴파일 골을 사용하고 후자는 테스트 컴파일 단계에서 사용된다.
이 플러그인의 속성을 사용해서 설정을 변경하기 이위해선 pom파일을 설정해야한다.
pom파일에 이전에 작성한 컴파일 방법을 바꾸고 프로젝트 우클릭 - maven - update project를 항상해줘야한다. 그러면 1.5버전으로 낮아진다.
메이븐의 킥스타터 버전을 사용해서 버전이 낮아진것이다. 이것을 플러그인을 통해서
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
빌드과정의 플러그인을 3.8.1 소스코드는 1.8 타겟은 1.8로 설정하겠다고 재정의할 수있다.
3.6버전이상부터는 버전을 꼭 설정을 오버라이드 하듯이 할필요가 없어졋다.
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
강의는 1.8이지만 jdk 17을 사용하고 있으니 이렇게 바꿔주자.
이렇게 설정하면 설정이된다.
이전에 메이븐을 만들때 generate플러그인으로 인자를 여러개 적어서 만들었는데 mvn archetype:generate
No archetype defined. Using maven-archetype-quickstart지정안하면 킥스타터 사용함.

8. 웹프로젝트로 변경하기

jdk버전을 바꿔보았다. jar 에서 war로 바꾸면 웹프로젝트가 된다. 모델변화를 알아서해준다.
이클립스 프로젝트에서 웹프로젝트로 바꾸고자하면 설정을 바꿀게 한두개가 아니고 잘못건들면 이클립스가 작동안하게 할 수 있다
메이븐의 pom파일을 보면 <packaging>jar</packaging>이라고 되어있다.
<packaging>war</packaging>이것을 바꾸면 이구조가 웹개발 구조로 바꾸게된다
메이븐 war 오류 https://velog.io/@yiwonjin/Maven-war%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-Cannot-access-defaults-field-of-Properties%EC%97%90%EB%9F%AC

9. 서블릿/JSP 라이브러리 설정하기

웹개발형태로 바꿔보았다. 서블릿이나 jsp라이브러리가 잇어야한다.
war로 바꾸면서 디렉토리도 바뀌고 실행환경도 바뀌었다.
빌드패스에서 톰캣을 넣어주자. 다른데서 개발할때마다 빌드를 해주면 라이브러리도 가지고 다녀야하기때문에 힘들다.
메이븐이 이것을 해결해준다.
메이븐이 이용하는 원격 저장소가 있다. 수많은 사용자들이 여기에 저장해두었다. 이라이브러리가 필요하다면 pom파일에 작성하면 알아서 가져와서 사용하게 된다.
프로젝트가 필요한것마다 알아서 가져와서 사용할 수 있게 된다. 프로젝트마다 필요한 라이브러리를 효율적으로 관리할수 있게된다. 관련된거를 모아서 사용하기때문에 효율성이 더 높아진다.
원격에잇는것을 가져다쓰면 사용자계정의 .m2/repository에 저장해서 사용하게된다.
https://mvnrepository.com/
그런데 jsp개발할때 톰캣이 알아서 다운받아서 줬다. 그래서 개별적인 버전을 모르는 경우가 많다.
https://tomcat.apache.org/whichversion.html에들어가면 톰캣 9.0이 어떤 jsp를 사용하는지 알 수 있게된다.
Tomcat JSP API을 하면 톰캣버전으로 알아서 나오게된다.
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api/9.0.70
톰캣버전에 맞게 들어가면 TOM.XML을 수정할 수있는 코드를 준다.
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jsp-api -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>9.0.70</version>
</dependency>
버전알아서 체크해서 다운받을 수있는거로 된다.

10. 라이브러리 오류 문제

라이브러리를 다운받을 필요없이 가져와서 등록만하면 된다 .라이브러리를 가지고다닐필요없이 pom.xml만 있으면된다.
그런데 골치아픈 오류가 있다. 자동으로 다운로드하고 링크가깨지면 다운로드가 되다마는 경우가 있다. 어디서 문제가 발생하는지 알 수 없게 된다.
https://youtu.be/u5yib2WUfdc
이클립스를 닫고 리포지토리의 파일을 다 삭제한다. 다시 이클립스를 실행하면 알아서 새로 다운로드 해준다.
라이브러리가 다운받다가깨지거나 그러면 이렇게 해보자.

11. 라이브러리 인덱싱 검색

설정할때 웹사이트가서 검색해서 포함해야하나? 이클립스에서는 라이브러리를 검색할 있는 기능이있다. 편집기에 이런 ui가 있다.
매번 <dependency>설정하기 귀찮다.
pom.xml을 키고 dependencies를 들어가서 add를 누르면 된다.
인터넷에 각종 설정방법을 들어가봐도 인덱스가 추가가 안되는데 이유를 알 수없다.!!
댓글에도 나와 같은 현상이 있는데 알수없다. 그냥 추가하자.

12. mvn install : 내가 만든 라이브러리 설치하기

모든 라이브러리가 로컬에 잇어야만 사용할 수 있다. 내가 만든라이브러리를 프로젝트 추가로했다.
examlib이라는 메이븐 프로젝트를 만들어보자.
com.nelecture.examlib.entity 밑에 Exam클래스를 만들었다.

public class Exam {
private int kor;
private int eng;
private int math;

public int total() {
    return kor + eng + math;
}

public float avg() {
    return total()/3.0f;
}
public Exam(int kor, int eng, int math) {
    super();
    this.kor = kor;
    this.eng = eng;
    this.math = math;
}
public int getKor() {
    return kor;
}
public void setKor(int kor) {
    this.kor = kor;
}
public int getEng() {
    return eng;
}
public void setEng(int eng) {
    this.eng = eng;
}
public int getMath() {
    return math;
}
public void setMath(int math) {
    this.math = math;
}
@Override
public String toString() {
    return "Exam [kor=" + kor + ", eng=" + eng + ", math=" + math + "]";
}

}
이걸 jar파일로 만들어서 보내기위해 로컬 리포지토리에 설치하는 것이 귀찮다.
메이븐명령어중에 install을 사용하면 간단하게 가져올 수있다.
run as 중 maven install을 하면저장소에 다운이된다.
C:\Users\pcc01.m2\repository\com\newlecture\examlib로 옮겨졋다.
여기서도 문제가 발생하는데 그냥 리인덱스가 안된다. 이것이 그냥 2022-12 이클립스의 오류인듯 하다.

-> 해결 2022-09로 낮춰도 안되길래 메이븐의 문제인가 했더니 결국 이클립스의 문제였다.
이클립스를 2022-06버전으로 낮추니 해결됬다.

5. Dependency 를 직접 Injection하기

부품조립작업을 맨땅에서 해보자.
Exam 인터페이스 NewlecExam();구현 객체

package spring.di;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.di.ui.ExamConsole;
public class Program {
public static void main(String[] args) {

    Exam exam = new NewlecExam();
    //ExamConsole console = new InlineExamConsole(exam); DI
    ExamConsole console = new GridExamConsole(exam);
    console.setExam(exam);
    console.print();}}

package spring.di.entity;

public interface Exam {
    int total();
    float avg();
}

package spring.di.entity;
public class NewlecExam implements Exam {
private int kor;
private int eng;
private int math;
private int com;

@Override
public int total() {

    return kor + eng + math + com;
}
@Override
public float avg() {

    return total() / 4.0f;
}}

package spring.di.ui;

import spring.di.entity.Exam;

public interface ExamConsole {
void print();
void setExam(Exam exam);}

package spring.di.ui;
import spring.di.entity.Exam;

public class InlineExamConsole implements ExamConsole {

private Exam exam;

public InlineExamConsole() {

}
public InlineExamConsole(Exam exam) {
    this.exam = exam;
}

@Override
public void print() {

    System.out.printf("total is %d, avg is %f\n", exam.total(), exam.avg());
}

@Override
public void setExam(Exam exam) {
    this.exam = exam;
}}

package spring.di.ui;
import spring.di.entity.Exam;
public class GridExamConsole implements ExamConsole {

private Exam exam;

public GridExamConsole() {

}

public GridExamConsole(Exam exam) {
    this.exam = exam;
}
@Override
public void print() {
    System.out.println("┌──────────┬──────────┐");
    System.out.println("│   total  │    avg   │");
    System.out.println("├──────────┼──────────┤");
     System.out.printf("│   %3d    │   %3.2f  │\n", exam.total(), exam.avg());
    System.out.println("└──────────┴──────────┘");
}

@Override
public void setExam(Exam exam) {
    this.exam = exam;
}}

ExamConsole console = new InlineExamConsole(exam);
콘솔에 출력하는 인터페이스 만듬
total is 0, avg is 0.000000로 나옴 Inline방식으로 출력하는 콘솔을 만들엇음.
ExamConsole console = new GridExamConsole(exam);
그리드 형식으로 출력하는 구현객체 만듬
┌──────────┬──────────┐
│ total │ avg │
├──────────┼──────────┤
│ 0 │ 0.00 │
└──────────┴──────────┘
InlineExamConsole, GridExamConsole이 Exam 객체를 조립하고잇다.
이것이 바로 DI이다.
DI하는 객체가 어디에 Injection되느냐에따라서 출력되는 모양이 다르다.
Inline을스다가 grid방식이 추가가되었다. 이걸바꾸는데 소스코드 바꾸는게 가능한가?
생성자를 다시 설정해줘야한다. 근데 이게 바깥으로 나와있다면? 바꿔치기만 함으로서 소스코드를 바꿀 수 있다.
ExamConsole console = [];이부분을 비워두고 누군가가 대신해줄수 있게 조립을 하게 해다랄하면?
스프링을 이용하면 소스코드를 변경하지 않고도 바꿔낄 수 있다.

6. 스프링 DI 설정을 위해 이클립스 플러그인 설치하기

지시사항을 해놓고 주문을 해야한다. 주문을 하는 대상이 스프링이다. 이 주문서가 바로 XML 혹은 어노테이션이다.
스프링 부트가 편하게 해주지만 스프링을 배워야 이해가 쉽다. 앞의시작부분을 편하게 해준다.
스프링이 이해하고 잇는 지시서 양식에 따라 해줘야한다.
상단메뉴에 Help - Eclipse marketplace가면 이클립스에서 사용할 수 있는 플러그인을 검색해서 다운받을 수 있다.
4.0은 스프링부트 기반이고 이 수업에선 스프링 3.0 을 다운받아 사용하자


프로젝트 - 우클릭 -new - Spring Bean Configuration File을 생성해서
setting.xml을 만들자.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
그러면 알아서 자바코드 기반으로 만드는 설정파일이 만들어진다.

7. 스프링 DI 지시서 작성하기(Spring Bean Configuration)

스프링이 우리에게 어떤 도움을 주는지?
Exam과 Console객체가 서로 결합되서 사용되는 것이다.
이전에 생성자로 결합을 했다면 이번에는 setter로 결합을 해보자.
@Override
public void setExam(Exam exam) {
this.exam = exam;
}
만약 Exam이라는 객체(NewlecExam)가 바뀌거나 콘솔객체( GridExamConsole)바뀐다면
이 결합관계도 바꿔야한다. 이 코드들을 다 바꿔야한다.

ExamConsole console = ?;을 설정으로 빼서 해줘야하는 것이 있는데 그것이 스프링이다.
원래있던 것을 스프링에게 지시하는 방법으로 코드를 변경한다.
<!-- Exam exam = new NewlecExam(); -->
<bean id="exam" class="spring.di.entity.NewlecExam" />
어떤 클래스를 객체화할것인지?=class 객체를 어떤이름으로쓸것인지?=id
같은 이름으로 클래스가 있을수잇으니 패키지명까지 반드시 작성해주자.
exam이라는 이름으로 꺼내쓸수있는 것이다.
똑같이 콘솔도 해준다.
<bean id="console" class="spring.di.ui.GridExamConsole">
<!-- console.setExam(exam); -->
<property name="exam" value ="exam" ref="exam"></property>
</bean>
그러나 값으로 exam을 가지고 있으니 setter를 넣어주지만 이름은 이렇게지어야함 name="setExam" -> name="exam"
그리고 값으로 value or ref인데 "spring.di.entity.NewlecExam"이기때문에 ref형식으로 넣어준다.
<property name="exam" ref="exam"/> <-이부분이 injection이다.
속성을 사용하는게아니라 setter함수를 사용하는 것이니 꼭 setter함수를 만들어줘야한다. 속성을 사용하는게아니다.
이제 스프링에게 이 지시서를 넘겨서 만들어 달라고 해야한다.

8. 스프링 IoC 컨테이너 사용하기(ApplicationContext 이용하기)

지시서를 읽어서 구체적으로 만들어주는것이 이 스프링 객체이다.
ApplicationContext context = new ClassPathXmlApplicationContext("setting.xml")
인터페이스 = 구현객체이다.
이 구현객체는 매우 다양하다.


이름이 조금씩 다른데 구체화딘 이름이다. 지시서를 어떻게 주는지를 알려주는 대에 대한 것이다.
class로 주면 ClassPathXml
c드라이브의 어딘가에있는 File이라면 FileSystemXml
웹에있다면 XmlWeb 웹의 ui
어노테이션을 사용한다면 Annotaitonconfig 어노테이션으로 지시사항을 넘길때 사용한다.

그런데 프로젝트에 스프링이 없어서 빨갖줄이 나온다. 메이븐프로젝트로 바꿔주자.
프로젝트 우클릭 - configure - convert to maven
pom.xml생긴다.
지시한 지시서를 읽어서 가져오기?
1.이름으로찾기
ExamConsole console = (ExamConsole) context.getBean("console");
가져다달라 object로 나오기때문에 형식변환을 해줘야한다.
2.examconsole의 클래스로 가져오기
ExamConsole console = context.getBean(ExamConsole.class);
외부설정에 대한 권한을 가지고 프로그램을 바꿀수 있게 된것이다.
클래스가 겹칠경우 오류가 날수있는데 이것은 나중에 처리하는 방법이 따로있으니 괜찮다.
2번째가 타입변환을 하지 않아도되서 자주 사용된다.
지시서를 inline~으로 바꾸면? 그것이 실행된다.
지시서만 바꿔도 실행되는 내용이 바뀌는 것을 알 수 있다.
일어나는 변화를 지시서만 바꾸면된다.

2023.01.13 후기

메이븐 설정이 정말 어렵다. 오류가 계속나고 빌드가 되지않아 원인을 찾느라 정말 오랜시간이 걸렸다.
이클립스 2022-12 , 2022-09 버전 자체에서 maven repository의 global - central repository를 rebuild index 자체가 진행되지 않는다. 왜 그런건지는 모르겠지만 이클립스 자체의 버그인지, 따로 해결하는 방법이 있는 것인지 알 수 없다. 결국 이클립스를 2022-06버전까지 낮춤으로써 해결했다.
스프링을 입문인데 만약 잘 사용할 수 있게 된다면? 매우 편할 것 같다.
드디어 객체 지향이라는 느낌이 뭔지 알게되는 설계가 되는 것 같기도 하다.
국비 가기 전 어느정도 이해를 해서 다시 들을때 무리를 좀 줄이고자 한다.
이제 진짜 얼마 남지 않았다!!
중요한 것은 꺾이지 않는 마음.

'기초단계 > SPRING' 카테고리의 다른 글

2023.01.17 Spring  (0) 2023.01.17
2023.01.16-2 Spring  (1) 2023.01.16
2023.01.16-1 Spring  (0) 2023.01.16
2023.01.15-2 Spring  (0) 2023.01.15
2023.01.15-1 Spring  (0) 2023.01.15

+ Recent posts