SpringBoot/day44 / 23.11.07(화) / (핀테크) Spring 및 Ai 기반 핀테크 프로젝트 구축

허니몬·2023년 11월 7일
0
post-thumbnail

Spring_참고폴더
Spring STS3 설정

  1. Temurin JDK 를 .msi 형태로 받아 실행

https://adoptium.net/temurin/releases/

  • Set Java_HOME variable 설정을 [Entire feature will be installed on local hard drive] 로
    변경합니다.
  1. JAVA_HOME 환경 설정을 확인합니다
  • 제어판 > 시스템 > 고급 설정 > 시스템변수 > JAVA_HOME

  • 시스템 변수 > Path 에서 JAVA_HOME 과 동일한 속성을 지운다
    삭제할 변수 : [C:\Program Files\Eclipse Adoptium\jdk-11.0.18.10-hotspot\bin]

// JAVA_HOME 과 겹치는 것 방

  1. Spring Tool Suite 3 다운로드 - Spring Tool Suite 3.9.17
    https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3
  • 아래 흰박스를 클릭해서 다운 후 압축 해제한다.


  • sts-3.9.17.RELEASE/STS.ini -> 메모장으로 열기
  • C:\Program Files\Eclipse Adoptium\jdk-11.0.21.9-hotspot\bin 안에
  • [sts-bundle] > [sts-3.9.17.RELEASE] 에 들어가 [STS.exe] 클릭해서 실행합니다
  • javaw.exe

추가 후 STS.exe 실행


  1. [Window] > [Preference] 에서 enc 로 검색 후 모두 encoding 을 UTF-8 로 변경합니다

  1. 기존 서버(VMWare)를 삭제하고 Apache 추가
  • 서버 창에서 기존 server(VMWare)를 삭제한다
  • [window] > [Preferences] > [Server] > [Runtime Environment]에서 아래 VMware 서버를 [Remove]

  • 새 서버를 아래와 같이 추가
    [Servers] >[No servers are available. Click this link to create a new server..] 클릭

  1. [Spring Legacy Project]를 만든다.
  • [File] > [New] > [Spring Legacy Project]

  • [Templates] 는 [Spring MVC Project]를 선택 > [Next]

  • 파일명은 3 개로 나눠서 만든다. **아래 참조

  1. 아래와 같이 프로젝트 설정을 바꾼다.

  • Java Build Path
    기존 JDK 삭제 후 [Add Library] > [JRE System Library][Add Library] > [Server Runtime]

  • Project Facets 설정
    JAVA 버전을 11 로 맞추기
    [Runtimes] 에 아파치 톰캣 9.0 체크 후 [Apply]

  • Java Complier 설정
    버전을 11 로 설정

  1. pom.xml 설정을 아래와 같이 변경한다
  • [test] > [src] > [pom.xml] 클릭

  • 수정사항 적용 시키기
    프로젝트 우클릭 > [Maven] > [Update Project]

  1. Run 해서 구동 확인하기
  • 프로젝트 마우스 우클릭 > [Run As] > [Run on Server]

  • 아래 창이 뜨면 구동이 성공적으로 된 것

  • utf-8 로 바꿀 것 바꾸기

설치 및 test end





레거시 만드는 동안에는 항상 xml 파일 수정 해야 함!

Spring 프로젝트 구조


P01_basic

  • Templates: Spring MVC Project

Spring.txt

# Framework
- 프레임워크는 작업의 구조가 정해져 있는 라이브러리이다
- 앱, 서버 등의 구동, 메모리 관리 등의 공통 부분은 프레임워크가 관리하며, 
- 개발자는 서비스별로 다른 부분만 프레임워크가 정해준 방식대로
- 클래스, 메서드 등을 구현

# Spring Framework
- 스프링 프렝미워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크이다

# Spring Framework 특징
1. 제어반전( IoC : Inversion of Control )
	- 스프링에서 설정한 내용을 기반으로 애플리케이션 필요 요소들을 호출

2. 의존성 주입 ( DI : Dependency Injection )
	- 상호 연결이 필요한 객체들을 스프링 설정에서 연결, 주입하도록 설정
	
3. 관점 지향 프로그래밍 ( AOP : Aspect Oriented Programming ) 
	- 트랜잭션, 보안 등 여러 모듈에서 공톡저긍로 지원하는 기능을 분리하여 사용 가능

4. POJO ( Plain Old Java Object )
	- 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며, 
	  스프이 컨테이너로부터 필요한 객체들을 얻어 올 수 있다

com.combi.ex01

setting

  • Java Build Path : library : jdk, tomcat
  • Java Compiler 설정
  • Project Facets 설정
  • pom.xml
  • Maven - Update
  • 실행 test

MessageBeanKr.java

package com.combi.ex01;

public class MessageBeanKr {
	public void sayHello() {
		System.out.println("스프링 시작...");
	}
}

MessageBeanEn.java

package com.combi.ex01;

public class MessageBeanEn {
	public void sayHello() {
		System.out.println("spring start...");
	}
}

SpringStart.java

package com.combi.ex01;

public class SpringStart {
	public static void main(String[] args) {
		// 기본적인 자바 형식
		MessageBeanKr beanA = new MessageBeanKr();
		beanA.sayHello();
		
		MessageBeanEn beanB = new MessageBeanEn();
		beanB.sayHello();
		
	}
}

Main-run-console

스프링 시작...
spring start...


com.combi.ex02


MessageBean.inter

package com.combi.ex02;

public interface MessageBean {
	public void sayHello();
}

MessageBeanKr.java

package com.combi.ex02;

public class MessageBeanKr implements MessageBean{
	public void sayHello() {
		System.out.println("안녕 스프링...");
	}
}

MessageBeanEn.java

package com.combi.ex02;

public class MessageBeanEn implements MessageBean{
	public void sayHello() {
		System.out.println("Hi Spring...");
	}
}

PolyMain.java

package com.combi.ex02;

public class PolyMain {
	public static void main(String[] args) {
		MessageBean bean = null;
		bean = new MessageBeanKr();
		bean.sayHello();
		
		bean = new MessageBeanEn();
		bean.sayHello();
	}
}

Main-run-console

안녕 스프링...
Hi Spring...


com.combi.ex03


MessageBean.inter

package com.combi.ex03;

public interface MessageBean {
	public void sayHello();
}

MessageBeanKr.java

package com.combi.ex03;

public class MessageBeanKr implements MessageBean{
	public void sayHello() {
		System.out.println("안녕 스프링...");
	}
}

MessageBeanEn.java

package com.combi.ex03;

public class MessageBeanEn implements MessageBean{
	public void sayHello() {
		System.out.println("Hi Spring...");
	}
}

BeanFactory.java

package com.combi.ex03;
/*
 * # Factory 패턴
 * - 객체를 생서아는 디자인 패턴 중 하나
 *   객체 생성을 클라이언트로 부터 분리시켜서 객체 생성을 처리하는 팩토리 객체를 이용하여
 *   객체를 생성
 */
public class BeanFactory {
	public MessageBean getBean(String beanName) {
		if(beanName.equals("kr")) {
			return new MessageBeanKr();
		} else if(beanName.equals("en")) {
			return new MessageBeanEn();
		} else return null;
	}
}

FactoryMain.java

package com.combi.ex03;

public class FactoryMain {
	public static void main(String[] args) {
		BeanFactory factory = new BeanFactory();
		
		MessageBean bean = null;
		
		bean = factory.getBean("kr");
		bean.sayHello();
		
		System.out.println();
		
		bean = factory.getBean("en");
		bean.sayHello();
	}
}

Main-run-console

안녕 스프링...

Hi Spring...


com.combi.ex04


MessageBean.inter

package com.combi.ex04;

public interface MessageBean {
	public void sayHello();
}

MessageBeanKr.java

package com.combi.ex04;

public class MessageBeanKr implements MessageBean{
	public void sayHello() {
		System.out.println("안녕 스프링...");
	}
}

MessageBeanEn.java

package com.combi.ex04;

public class MessageBeanEn implements MessageBean{
	public void sayHello() {
		System.out.println("Hi Spring...");
	}
}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
	<!-- bean.xml -->
	
	<!--  
		# .xml 파일
		- Spring 구성 파일로 사용됨
		  application 의 컨텍스트를 구성, 빈(bean)을 정의,
		  빈 간의 의존성 설정
		  
		# bean 설정
		- xml 파일 생성 : package 우클릭 -> Spring Bean Configuration File -> 에서 생성
		- 해당 bean 을 애플리케이션에서 사용할 수 있음		 
	-->
	<bean id="messageBeanKr" class="com.combi.ex04.MessageBeanKr"></bean>
	<bean id="messageBeanEn" class="com.combi.ex04.MessageBeanEn"></bean>
</beans>

XMLMain.java

package com.combi.ex04;

import org.springframework.context.support.GenericXmlApplicationContext;

public class XMLMain {
	public static void main(String[] args) {
		 
//		# GenericXmlApplicationContext class
//		- ApplicationContext 인터페이스를 구현한 class
//		  XML 기반의 설정 정보를 사용하여 ApplicationContext 를 생성하는 역할 
//		- bean.xml 에 정의한 <bean> 설정 정보를 읽어와서
//		내부적으로 MessageBean 객체를 생성하고 초기화 한다
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/combi/ex04/bean.xml"); 
		
		MessageBean bean = (MessageBean)context.getBean("messageBeanKr");
		bean.sayHello();
		System.out.println();
		MessageBean bean2 = (MessageBean)context.getBean("messageBeanEn");
		bean2.sayHello();
		
		context.close();
	}
}

Main-run-console

안녕 스프링...

Hi Spring...



P02_DI


DI.txt

# DI ( Dependency Injection : 의존성 주입 ) 
- 객체간의 결합을 느슨하게 하는 스프링 기술
- 객체 사이의 의존관계를 자기 자신이 아닌 외부에 의해서 설정하는 방식

# DI 방식( 의존 관계 관리 ) 
- 생성자 방식( Construction Injection )
  > 생성자를 통해서 의존관계를 연결시키는 것
  
- 메서드 방식( Setter Injection )
  > 'property' 태그의 name 속성을 사용해서 어떤 의존 관계가 주입되는지 알 수 있다.

com.di.ex01


MessageBean.inter

package com.di.ex01;

public interface MessageBean {
	public void sayHello();
	public void sayHello(String a, int b);
}

MessageBeanImpl.java

package com.di.ex01;

public class MessageBeanImpl implements MessageBean{
	private String fruit;
	private int cost;
	
	public MessageBeanImpl() {}
	public MessageBeanImpl(String fruit) {
		super();
		this.fruit = fruit;
		System.out.println("- MessageBeanImpl(String) - ");
	}
	
	public void setFruit(String fruit) {
		this.fruit = fruit;
		System.out.println("- setFruit() -");
	}
	
	public void setCost(int cost) {
		this.cost = cost;
		System.out.println("- setCost() -");
	}
	
	@Override
	public void sayHello() {
		System.out.println(fruit + "\t" + cost);
	}
	
	@Override
	public void sayHello(String a, int b) {
		System.out.println(a + "\t" + b);
	}
}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
	
	<bean id="messageBean" class="com.di.ex01.MessageBeanImpl">
		<!-- 생성자 -->
		<constructor-arg>
			<value>banana</value>
		</constructor-arg>
		<!-- Setter -->
		<property name="cost" value="3000"></property>
	</bean>
</beans>

TestMain.java

package com.di.ex01;

import org.springframework.context.support.GenericXmlApplicationContext;

public class TestMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex01/bean.xml");
		
		MessageBean bean = (MessageBean)context.getBean("messageBean");
		bean.sayHello();
		bean.sayHello("사과", 2000);
		
		context.close();
	}
}	

Main-run-console

- MessageBeanImpl(String) - 
- setCost() -
banana	3000
사과	2000


com.di.ex02


InterFoo.inter

package com.di.ex02;

public interface InterFoo {
}

Foo.java

package com.di.ex02;

public class Foo implements InterFoo{
	public Foo() {
		System.out.println("this : " + this);
		System.out.println("- Foo() -");
	}
	public Foo(String stn) {
		System.out.println("this : " + this);
		System.out.println("stn  : " + stn);
		System.out.println("- Foo(String) -");
	}
	public Foo(int num, String stn) {
		System.out.println("this : " + this);
		System.out.println("num  : " + num);
		System.out.println("stn  : " + stn);
		System.out.println("- Foo(num, String) -");
	}
	public Foo(int num, String stn, boolean flag) {
		System.out.println("this : " + this);
		System.out.println("num  : " + num);
		System.out.println("stn  : " + stn);
		System.out.println("flag : " + flag);
		System.out.println("- Foo(num, String, boolean) -");
	}
	public Foo(Bar bar) {
		System.out.println("this : " + this);
		System.out.println("- Foo(Bar) -");
		System.out.println("bar  : " + bar);
	}
}

Bar.java

package com.di.ex02;

public class Bar {
	public Bar() {
		System.out.println("- Bar() - ");
	}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">

	<!-- applicationContext.xml -->
	<!-- Bar bar = new Bar(); -->
	<bean id="bar" class="com.di.ex02.Bar"></bean>
	<!-- Foo fooA = new Foo(); --> <!-- default 생성자를 생성해야 나머지 생성자들도 가능 -->
	<bean id="fooA" class="com.di.ex02.Foo"></bean>
	<!-- Foo fooB = new Foo(String); -->
	<bean id="fooB" class="com.di.ex02.Foo">
		<constructor-arg value="fooB"></constructor-arg>
	</bean>
	<!-- Foo fooC = new Foo(int, String); -->
	<bean id="fooC" class="com.di.ex02.Foo">
		<constructor-arg index="0">
			<value>1</value>
		</constructor-arg>
		<constructor-arg index="1" value="fooC"></constructor-arg>
	</bean>
	<!-- Foo fooD = new Foo(int, String, boolean); -->
	<bean id="fooD" class="com.di.ex02.Foo">
		<constructor-arg value="2"/>
		<constructor-arg value="fooD"/>
		<constructor-arg value="true"/>
	</bean>
	<!-- Foo fooE = new Foo(Bar); -->
	<bean id="fooE" class="com.di.ex02.Foo">
		<constructor-arg>
			<ref bean="bar"/> 
		</constructor-arg>
	</bean>
</beans>

TestMain.java

package com.di.ex02;

import org.springframework.context.support.GenericXmlApplicationContext;

public class TestMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex02/applicationContext.xml");
		
		context.close();
	}
}

Main-run-console

- Bar() - 
this : com.di.ex02.Foo@10959ece
- Foo() -
this : com.di.ex02.Foo@1da2cb77
stn  : fooB
- Foo(String) -
this : com.di.ex02.Foo@a530d0a
num  : 1
stn  : fooC
- Foo(num, String) -
this : com.di.ex02.Foo@6cd28fa7
num  : 2
stn  : fooD
flag : true
- Foo(num, String, boolean) -
this : com.di.ex02.Foo@1e04fa0a
- Foo(Bar) -
bar  : com.di.ex02.Bar@1af2d44a


com.di.ex03


UserVO.java

package com.di.ex03;

public class UserVO {
	private String userName;
	
	public UserVO() {
	}

	public UserVO(String userName) {
		this.userName = userName;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}
	
}

UserService.inter

package com.di.ex03;

public interface UserService {
	public void add(UserVO vo);
}

UserServiceImpl.java

package com.di.ex03;

public class UserServiceImpl implements UserService{
	
	public UserServiceImpl() {}
	
	@Override
	public void add(UserVO vo) {
		System.out.println("- add(UserVO vo) -");
		System.out.println("이름 : " + vo.getUserName());
	}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
	
	<!-- applicationContext.xml -->
	<bean id="userService" class="com.di.ex03.UserServiceImpl"></bean>
</beans>

TestMain.java

package com.di.ex03;

import org.springframework.context.support.GenericXmlApplicationContext;

public class TestMain {
	public static void main(String[] args) {
		GenericXmlApplicationContext context = new GenericXmlApplicationContext("com/di/ex03/applicationContext.xml");
		
		UserVO manA = new UserVO("userA");
		
		UserService userA = (UserService)context.getBean("userService");
		userA.add(manA);
		
		System.out.println();
		
		UserService userB = context.getBean("userService", UserService.class);
		System.out.println("userB : " + userB);
		
		context.close();
		
	}
}

Main-run-console

- add(UserVO vo) -
이름 : userA

userB : com.di.ex03.UserServiceImpl@4de4b452
profile
Fintech

0개의 댓글