[스프링 게시판 - 1 환경설정] 흔한개발자

anonymous·2021년 5월 24일
0

게시판

목록 보기
1/3

개발환경 설치

설치파일 링크

하단에 있는 프로그램을 다운받아서 설치하기

이클립스 IDE
JDK-11
Tomcat 9.0.46 - 64bit-windowsZip
Maven 3.8.1

eclipse-inst-jre-win64.exe로 설치가 안되면 zip 파일로 받아서 압출 풀기

스프링 Spring Tool Suite(STS) 설치

If tag mismatch fail 설치 문제시 - 하단 링크에서 설치파일을 이클립스로 드래그앤드랍

sts 4
https://marketplace.eclipse.org/marketplace-client-intro?mpc_install=1794107
sts 3
https://marketplace.eclipse.org/content/spring-tools-3-standalone-edition

결과 :

신규 프로젝트 생성:

1 스프링 프로젝트 생성
File > New > Other > Spring Legacy Project > Spring MVC Project
2 톰켓 서버에 프로젝트 추가
3 결과물 (UTF-8 엔코딩 설정 전)

설치시 에러 대응

  • openjdk, jdk 버전에 따라서 스프링관련 툴 톰켓 등 지원여부가 다르다 버전확인 하면서 해야함.
  • 이클립스 자체 버그가 발생하는 경우가 있다 .metadata (이클립스 설정 정보)를 삭제하고 다시 시도
  • cmd 로 java -version 했을 때 jdk가 정상적으로 path에 설정됐는지 확인! eclipse.ini sts.ini 등 시작 config 파일에 jdk 설정되었는지 확인!
-vm
C:\Program Files\Java\jdk-11.0.12\bin\javaw.exe
  • 참고로 sts4에서는 spring legacy project 지원하지 않아 sts3 addon도 설치해야함!

스프링 프로젝트 폴더구조 분석:


1 src/main/java에 자바 파일을 보관
2 src/main/resources 스프링 설정 파일, 쿼리를 보관
3 src/test TDD 작성
4 src/main/webapp jsp, js 파일을 보관
5 servlet-context.xml, root-context.xml - 서블릿 설정 파일

폴더구조 2차:

첫 Controller 분석:

/**
 * Handles requests for the application home page.
 */
 
//비즈니스 로직 분기, 수행결과 응답해주는 Dispatcher 역할 담당하는 클래스
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
         
        //클라이언트 jsp 요청에 해당하는 비지니스 로직을 찾는 역할.
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
                //비즈니스 로직에서 수행한 결과를 화면에 보내줌. 
                //serverTime 이름으로 formattedDate을 전송. 
		model.addAttribute("serverTime", formattedDate );
	 
          /**
          * 수행결과 응답을 보내주는 위치 명시. home = home.jsp 
          * 서블릿 설정에서 자동으로 앞에 /WEB-INF/view prefix를 붙여주고.
          * jsp suffix를 붙여주게 되어 있다.
          */
		return "home";
	}
	
}

servlet-context.xml

  • 앞서 /WEB-INF/view/home.jsp로 연결하는 설정
	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>

        <!-- 해당 경로에 있는 모든 스프링 빈을 어노테이션을 통해서 자동으로 인식하게 한다. -->
        <context:component-scan base-package="com.company.first" />

JDK 설정

Tomcat 설정

Maven 설정


C:\DEV-ENV\apache-maven-3.8.1\conf\settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
  
    <localRepository>C:\DEV-ENV\apache-maven-3.8.1\repository</localRepository>
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

Maven로 라이브러리 관리하는 방법

pom.xml

1 라이브러리 추가

메이븐에서는 <dependency></dependency>라는 태그를 통해서 각 라이브러리를 추가할 수 있다.

2 상수 추가
<properties></properties> 자바의 final static과 유사. 상수로 선언하기.

3 라이브러리 버전 관리
<org.springframework-version>3.2.4.RELEASE</org.springframework-version> 스프링 버전을 정의 버전 변경시 숫자만 바꾸면된다.

4 라이브러리 다운 위치
<repositories></repositories> 라이브러리를 다운받을 저장소

5 라이브러리를 프로젝트에 지정
<dependencies><dependencies>

Eclipse 설정

Git add ignore compiled classes

Check Default Encoding

Add Project to Tomcat Server

용어 정리

스프링 :

  • 스프링 : 자바 언어 기반 오픈 소스 웹 프레임워크. POJO

  • 프레임워크 : 자주 쓰는 유틸(클래스)의 모음(집합)

  • AOP(Aspect Oriented Programming) : 모듈 분리
    로깅, 트렌젝션, 보안 등 모듈을 분리해서 관리할 수 있다. 필요할 때만 호출.

  • DI(Dependency Injection) : 외부 설정에 모듈 정의해서 결합도 최소화.
    구성요소간 의존관계를 내부 소스코드가 아닌 외부 설정파일로 정의. 모듈 결합도를 낮춤. 즉 JAVA 데이터 저장하는 기능을 외부 Oracle DB를 사용할 수 있고 , JDBC, iBatis, JPA 등 다른 프레임워크로 짤 수 있다.

  • IoC(Inversion of Control) : 객체 생명주기 관리
    객체 생명주기를 스프링 컨테이너에서 관리.

MVC 패턴 :

사용자 인터페이스와 비즈니스 로직을 분리해서 웹 개발

  • Model : 애플리케니션 정보/데이터 처리

  • View : 사용자가 프로그램을 사용하는 엔터페이스 (웹페이지)

  • Controller : 비즈니스 로직과 모델의 상호작용 중재. MVC2에서는 서블릿 흐름 제어


사진 출처 : http://blog.daum.net/gunsu0j/165

Bean :

Bean : 스프링 컨테이너 안에 있는 객체
annotaion을 사용하여 일반적인 객체를 bean으로 등록할 수 있다
의존성 주입을 하기 위해서는 Bean이 되어야한다.
spring이 bean의 의존성을 관리해준다.

IOC :

IOC(Inversion of Control) : 객체 선언을 하지 않고 객체를 받아서 쓴다.
예)

/* 
일반적인 제어권: 자기가 사용할 의존성은 자기가 만들어서 사용
*/
@Service
public class CarService {
	private CarRepository carRepository = new CarRepository();
}
/*
Inversion Of Control
다른 누군가가 의존성을 밖에서 준다.(제어권의 역전)
의존성을 주입해주는 일:Dependency Injection(일종의 IOC)
*/
@Service
public class CarService {
	
    // CarRepository를 사용은 하지만 만들지는 않는다.
	private CarRepository carRepository;
    
    /*
    생성자를 통해서 받아온다.
    따라서 의존성을 관리하는 일은 CarService가 하는 일이아니다. 누군가 밖에서 해주는 것이다.
    */
    public CarService(CarRepository carRepository){
    	this.carRepository = carRepository;
    }
}

AOP 상세 설명 :

Concern : 다른 클래스에 비슷한 기능을 하는 부분 (메소드, 코드)
Advice : 해야할 일, 기능
Pointcut : 어디에 적용해야하는지 (A클래스, W 메소드)
Target : 각각 클래스 (클래스 A, B, C)
Join point : 끼어들 지점 (메서드 실행시, 필드에서 값을 가져갈 때)

1 만약에 노란색 기능을 수정하려면 각각 클래스에서 수정해줘야 해서 유지보수가 불편하다.

2 그래서 이렇게 흩어진 기능을 Aspect를 사용해서 모은다. 각각 Concern을 Aspect로 만들어주고 어느 클래스에서 사용할지 입력해주면 아래 그림처럼 Aspect가 모듈화된다.

AOP 적용은 런타임에 실행된다.

컴파일 타임 : 소스코드 -> .exe 코드
런 타임 : .exe코드 -> 실행

출처

https://addio3305.tistory.com/32
https://www.toolsqa.com/java/maven/how-to-install-maven-eclipse-ide/
https://jerryjerryjerry.tistory.com/62
https://velog.io/@max9106/Spring-AOP%EB%9E%80-93k5zjsm95
https://velog.io/@max9106/Spring-IOCInversion-Of-Control-Bean-%EB%93%B1%EB%A1%9D%ED%95%B4%EB%B3%B4%EA%B8%B0

profile
기술블로거입니다

0개의 댓글