01. Spring
728x90

Spring

스프링이란?

자바를 이용해 웹 애플리케이션을 개발할 때 주로 사용하는 기술

스프링 프레임워크의 특징

 - 의존 주입(Dependency Injection: DI) 지원

 - AOP(Aspect-Oriented Programming) 지원

 - MVC 웹 프레임워크 제공

 - JDBC, JPA 연동, 선언적 트랜잭션 처리 등 DB 연동 지원

Maven

pom.xml

 - 메이븐 프로젝트 설정 정보 관리 파일

 - 의존 모듈이나 플러그인 등에 대한 설정을 담는다

 <dependencies>

 - 메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리

 - dependency에 설정을 추가한다는 것은 소스 코드를 컴파일하고 실행할 때 사용할 클래스 패스에 spring-context 파일을 추가한다는 것을 의미

메이븐 리포지토리

 - pom.xml 설정 후, 콘솔창에서 mvn compile 입력 시 다운로드

import

 - existing maven projects

 

Gradle

build.gradle

 - 그래들 설정 정보 관리 파일

dependencies{}

 - 메이븐과 동의

그래들 리포지토리

 - build.gradle 설정 후 gradle wrapper 명령어 실행해 래퍼 파일 생성

 - gradlew compileJava 명령어를 실행해 빌드

import

 - existing gradle projects

 

Maven vs Gradle

Maven > Gradle

- 현업에서 많이 쓰인다

Maven < Gradle

 - 빌드타임이 100배 빠르다

 - Build라는 동적 요소를 XML로 정의하지 않아도 된다

 - 별도의 빌드스크립트를 통하여 사용할 애플리케이션 버전, 라이브러리 항목 등을 설정할 수 있다

 - 스크립트 언어로 구성되어 있기 때문에 변수 선언, if, else, for 등의 로직 구현이 가능하다

 

예시

Greeter.java

콘솔에 간단한 메시지를 출력하는 자바 클래스

public class Greeter {
	private String format;
    
    public String greet(String guest) {
    	return String.format(format, guest);
   	}
    
    public void setFormat(String format) {
    	this.format = format;
    }
}

AppContext.java

스프링 설정 파일

@Configuration

 - 해당 클래스를 스프링 설정 클래스로 지정

 - 스프링은 객체를 생성하고 초기화하는 기능을 제공

@Bean

 - 스프링이 생성하는 객체

 - 해당 메서드가 생성한 객체를 스프링이 관리하는 빈 객체로 등록

 - 메서드의 이름은 빈 객체를 구분, 참조할 때 사용

 - 객체를 생성하고 알맞게 초기화해야 함

@Configuration
public class AppContext {
	@Bean
    public Greeter greeter() {
    	Greeter g = new Greeter();
        g.setFormat("%s, 안녕하세요!");
        return g;
    }
}

Main.java

main() 메서드를 통해 스프링과 Greeter 를 실행하는 자바 클래스

AnnotationConfigApplicationContext

 - 자바 설정에서 정보를 읽어와 빈 객체를 생성하고 관리

 - AppContext 클래스를 생성자 파라미터로 전달

 - AppContext에 정의한 @Bean 설정 정보를 읽어 와 Greeter 객체를 생성하고 초기화

 - getBean() 메서드는 AnnotationConfigApplicationContext가 읽어와 생성한 bean 객체를 검색할 때 사용

import org.springframeword.context.annotation.AnnotationConfigApplicationContext;

public class Main {
	public static void main(String[] args) {
    	AnnotationConfigApplicationContext ctx = 
        	new AnnotationConfigApplicationContext(AppContext.class);
        Greeter g = ctx.getBean("greeter", Greeter.class);
        String msg = g.greet("스프링");
        System.out.println(msg);
        ctx.close();
   	}
}

 

Controller

사용자 요청 처리(action)

String action = request.getParameter("action");
		
switch(action) { // 자동으로 가능
    case "View":
        View(request, response); // 자동으로 불가능
        break;
}

method를 이용해서 data를 get 하는 작업

 - Dto(request.getParameter())

 - service가 가지고 있는 비즈니스 로직을 call

 - return "path"

String member = request.getParameter("member"); // 자동으로 세팅
Member dto = service.login(memberId, memberPw); // 자동으로 불가능
response.sendRedirect(request.getContextPath() + "/index.jsp");
S service;
private MemberDao init() {
	s = s.getInstance(); // 싱글톤: 자동으로 생성
}

Controller > Service > Dao > Data Source(DB) // 자동으로 세팅

 - new가 사라지고 container가 자동으로 생성

 - xml, annotation으로 설정하면 자동으로 세팅 가능

728x90

'프로그래밍 > SPRING' 카테고리의 다른 글

06. AOP  (0) 2022.04.26
05. DI 적용  (0) 2022.04.24
04. DI  (0) 2022.04.23
03. Spring Framework  (0) 2022.04.23
02. IoC & Container  (0) 2022.04.17