20240213 스프링1일차(설치, 파일 위치, 의존성 주입)

2024. 2. 13. 17:532023.11.21-2024.05.31

1.스프링 설치

Spring Tools4 > 맨 아래 Spring Tool Sutie 3 wiki 다운

https://spring.io/

 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io

*환경변수 설정 > 다른 블로그 많으니까 참고해서 보기

 

 

 

*폴더 위치 외우기

 

src/main/java : 작성되는 코드의 경로

src/main/resources : 실행할 때 참고하는 기본 경로( 주로 설정 파일들을 넣는다)

src/test/java : 테스트 코드를 넣는 경로

src/test/resources : 테스트 관련 설정 파일 보관 경로

 

servlet-context.xml : 웹과 관련된 스프링 설정 파일

root-context.xml : 스프링 설정 파일

views : 템플릿 프로젝트의 jsp 파일 경로

web.xml : 톰캣의 web.xml 파일

 

pom.xml : 메이븐이 사용하는 pom.xml

 

*의존성 주입

-

 

*controller

//2024.02.13
//새로운 controller만들기
/*
 * @Controller	 = 객체생성 = 컨트롤러로 만들기
 * @Service		 = 객체생성 = 서비스로 만들기
 * @Repository	 = 객체생성 = DAO
 * @Component 	 = 객체생성 = 그 외 객체로 만들기
 */

 

@Controller
public class IndexController {
	//주입
	//@autoWired = 스프링 제공 = 객체의 타입으로 검사 >이걸 제일 많이 씀
	//		@Qualifier("")
	//@Inject 	 = 자바 제공	=객체의 타입이 일치하면 자동주입
	//		@named("")
	//@Resources = 자바 제공	=id가 일치하는 것 주입
	//		@Resource(name="")
	
	
	@Inject
	private Human human;
	
	
	//@RequestMapping(value = "/", method = RequestMethod.POST)
	//@RequestMapping(value = "/")  GET, POST 같이 들어올때
	//@RequestMapping(value = "/", method = RequestMethod.GET)
	//@RequestMapping("/")// 어차피 같이 들어오니까 축약해 놓은 것
	
	@GetMapping("/")
	public String home() {
		
//		Human h = new Human();
//		h.setAge(10);
//		h.setName("홍길동");
		
		System.out.println(human.getAge());//0
		System.out.println(human.getName());//null
		
		return "index";  //		/WEB-INF/views/index.jsp 
		
	}
	
	//POJO = 
	//DI = 의존성 주입 =객체를 생성하지 않고 객체를 사용하는 것
	//AOP = 관점지향 프로그래밍
	//IoC = 제어 역전 = 객체 생명주기 = 스프링에게 제어 권한이 있는 것.
	//					Life Cycle = (객체 생성 -> 사용 -> 종료)

	//결합도는 낮을수록 좋고, 응집도는 높을수록 좋다
	
	//Controller -> Service -> Repository -> Mybatis ->DB
	//							DAO					   maridb
	//MVC -> 
	//M(모델) 	  데이터	= 데이터베이스 값, DAO/DTO/mybatis/DB
	//V (뷰)	  화면		= Model값을 붙여 사용자에게 보여줍니다.
	//C(컨트롤러) 흐름제어 	= 사용자 요청이 들어오면 먼저 동작



}

 

@Controller

 

 

 

 

package org.mask.dto;

import lombok.Data;

@Data
public class BoardDTO {
	private int board_no, board_count, comment;
	private String board_title, boatd_write, board_date;

}​
package org.mask.human;

import lombok.Getter;
import lombok.Setter;

//test DI
@Getter
@Setter
public class Human {
	private int age;
	private String name;

	
}

*자습시간에 책보면서 정리하기

 

스프링 레거시 = jsp

스프링 부트 = jsp, 타임리프

(spa도 해야하고, aws도 해야하고, 도커도 해야하고, 리눅스도 해야하고)

 

 

package org.mask.controller;

import javax.inject.Inject;

import org.mask.human.Human;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

//2024.02.13
//새로운 controller만들기
/*
 * @Controller	 = 객체생성 = 컨트롤러로 만들기
 * @Service		 = 객체생성 = 서비스로 만들기
 * @Repository	 = 객체생성 = DAO
 * @Component 	 = 객체생성 = 그 외 객체로 만들기
 */

@Controller
public class IndexController {
	//주입
	//@autoWired = 스프링 제공 = 객체의 타입으로 검사 >이걸 제일 많이 씀
	//		@Qualifier("")
	//@Inject 	 = 자바 제공	=객체의 타입이 일치하면 자동주입
	//		@named("")
	//@Resources = 자바 제공	=id가 일치하는 것 주입
	//		@Resource(name="")
	
	
	@Inject
	private Human human;
	
	
	//@RequestMapping(value = "/", method = RequestMethod.POST)
	//@RequestMapping(value = "/")  GET, POST 같이 들어올때
	//@RequestMapping(value = "/", method = RequestMethod.GET)
	//@RequestMapping("/")// 어차피 같이 들어오니까 축약해 놓은 것
	
	@GetMapping("/")
	public String home() {
		
//		Human h = new Human();
//		h.setAge(10);
//		h.setName("홍길동");
		
		System.out.println(human.getAge());//0
		System.out.println(human.getName());//null
		
		return "index";  //		/WEB-INF/views/index.jsp 
		
	}
	
	//POJO = 
	//DI = 의존성 주입 =객체를 생성하지 않고 객체를 사용하는 것
	//AOP = 관점지향 프로그래밍
	//IoC = 제어 역전 = 객체 생명주기 = 스프링에게 제어 권한이 있는 것.
	//					Life Cycle = (객체 생성 -> 사용 -> 종료)
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>index</h1>
인덱스 입니다. 
</body>
</html>

 

 

POJO = 
DI = 의존성 주입

의존성 : 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미

A객체가 B객체 없이 동작이 불가능한 상황=> A가B에 의존적이다

주입
AOP = 관점지향 프로그래밍

IoC = 제어 역전 = 객체 생명주기 = 스프링에게 제어 권한이 있는 것.
// Life Cycle = (객체 생성 -> 사용 -> 종료)

 

 

기존 사용 방법 
객체 생성 > 객체에 값 집어넣기,> 값 불러오기

 

public String home() {
		
		Human h = new Human();
		h.setAge(10);
		h.setName("홍길동");
		
		System.out.println(h.getAge());//0
		System.out.println(h.getName());//null
		
		return "index";

 

 

root-context.xml에서 만들어주기

bean 안에 만들어 주기. 자바는 콩이라 어쩌구...

클래스, 아이디, 네임, 밸류 정확히 알기

<bean class="org.mask.human.Human" id= "human">
	<!-- 패키지명.클래스명 id >어떻게 부를건지/ new human과 같은 의미-->
		<property name="age" value="150"></property>	
		<property name="name" value="홍길동"></property><!-- 이건 변수 -->	
	</bean>

 

 

롬복 lombok

getter/setter, toString(), 생성자 등을 자동으로 생성해준다.

>1.18.3

https://projectlombok.org/

 

설치 후 추가하고 싶은 이클립스 추가 후 인스톨 누르면 끝

 

Project Lombok

 

projectlombok.org

 

자동으로 추가 되지 않았을 경우

porm.xml> <dependencies> 아래 추가 하기.

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.30</version>
		</dependency>

 

@Getter

@Setter 자동완성

@Data로 자동완성하면 더 다양하게 나온다.

package org.mask.human;

import lombok.Getter;
import lombok.Setter;

//test DI
@Getter
@Setter
public class Human {
	private int age;
	private String name;

	
}

 

 

MyBatis

https://mybatis.org/mybatis-3/ko/getting-started.html

 

https://mybatis.org/dtd/mybatis-3-config.dtd">

 

 

 

 

 

 

//Controller -> Service -> Repository -> Mybatis ->DB

//                                          DAO                            maridb
//MVC -> 
//M(모델)    데이터 = 데이터베이스 값, DAO/DTO/mybatis/DB
//V (뷰)   화면 = Model값을 붙여 사용자에게 보여줍니다.
//C(컨트롤러) 흐름제어  = 사용자 요청이 들어오면 먼저 동작

 

 

 

package org.mask.service;

import java.util.List;

import org.mask.dto.BoardDTO;
import org.springframework.stereotype.Service;

//Controller의 요청에 맞추어
//Repository에서 받은 정보를 가공하여
//Controller에게 넘겨주는 비지니스 로직

@Service
public class BoardService {

	public List<BoardDTO> boardList() {
		System.out.println("서비스입니다.");
		
		return null;
	}

}
package org.mask.controller;
//게시판 관련 기능을 여기에 넣겠습니다. 

import java.util.List;

import org.mask.dto.BoardDTO;
import org.mask.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class BoardController {
	
	//서비스와 연결하기
	@Autowired
	private BoardService boardService;

	@GetMapping("/board")
	public String board() {
		//DB에서 값을 불러와서 화면에 찍어주고 싶어요
		//				model					jsp
		//Controller = 흐름제어
		//Service	 = 로직
		//Repository = DAO
		
		//service에게 일 시키기
		System.out.println("컨트롤러입니다.");
		List<BoardDTO> list = boardService.boardList();
		return "board"; //jsp file name
	}
}

'2023.11.21-2024.05.31' 카테고리의 다른 글

20230215 스프링3일차()  (0) 2024.02.15
20240214 스프링2일차(어제복습)  (0) 2024.02.14
240208 스프링 맛보기  (0) 2024.02.08
240207 게시판만들기  (0) 2024.02.07
240204 게시판만들기-리뷰게시판 만들기  (1) 2024.02.04