Spring - 스프링의 특징과 의존성주입, DB연결

Luna·2023년 3월 13일
0

EZEN

목록 보기
35/40

수업내용

chapter 1

라이브러리가 제대로 설치가 되어 있어야 java 개발 시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해 준다.
Lombok라이브러리가 들어가 있어야 맞춰서 동작이 된다.
동작하지 않으면 지웠다가 다시 설치 하면 된다.

Maven Dependecies에 lombok라이브러리를 설치 하려면 pom.xml에 추가해야 한다.
Maven에 들어가서 lombok 검색 후 버전 찾아서 Sinppets 복사해서 붙여넣기.
교재 p.54 참고

<scope> 이 라이브러리를 언제 동작 할 것인지 정의를 해놓는 태그.
지워도 되긴 하지만 동작이 안 될 수도 있으므로 지우지 말고 주석처리를 해놓는다.

설정파일(pom.xml)을 바꾼 경우 프로젝트에서 우클릭 후 Maven-Update Project를 한번 해 주는게 좋다.

lombok라이브러리를 추가 하고 BoardVO 클래스를 만들어 변수를 선언했을 때,
getter/setter와 toString() 메서드를 만들지 않아도 BoardController에서 BoardVO를 import해서 생성하면 사용할 수 있다.

package org.zerock.board.vo;

import lombok.Data;

// Data를 저장하고 꺼낼 때 사용
@Data
public class BoardVO {
	
	// 여기서 getter/setter, toString()을 만들지 않았지만 lombok 라이브러리가 있어서 저절로 만들어져 있다.
	private long no;
	private String title;

}
	@RequestMapping("/board/list.do")
	public String list() {
		log.info("게시판리스트i");
		log.warning("게시판리스트w");
		BoardVO vo = new BoardVO();
		// BoardVO 클래스에서 getter/setter, toString 메서드를 만들지 않았지만 lombok라이브러리를 추가했기 때문에 사용이 가능하다.
		vo.setNo(10);
		log.info(vo.toString());
		return "board/list";
	}

결과

chapter 2 - 스프링의 특징과 의존성 주입

test 할 때 클래스 위치가 중요하다. 실제로 코드를 동작시키기 위해서는 src/main/java안에 클래스를 생성해야 하지만 테스트 할 때는 src/test/java에 생성해야 한다. 만약에 test에 생성하면 코드가 제대로 동작하지 않을 수 있으므로 위치를 잘 보고 클래스를 생성하자.

어노테이션의 종류

package org.zerock.board.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zerock.board.dao.BoardDAOImpl;

import lombok.Data;
import lombok.Setter;

/*
 *  Spring 자동생성 어노테이션 - root-context.xml에 아래처럼 설정이 되어 있어야 어노테이션 사용 가능.
 *  <annotation-driven /> <context:component-scan base-package="org.zerock" />
 *  @Controller, @Component, @Service, @Repository(DAO에 해당-컴퓨터를 꺼도 DB에 저장되는 부분)
 *  @RestController(Ajax같이 원본 데이터를 그대로 보낼 때 사용하는 Controller), @Advice(예외처리)
 */

@Service
@Data
public class BoardServiceImpl {
	
	@Setter(onMethod_ = @Autowired)
	private BoardDAOImpl dao;
	
}

라이브러리 등록시에 pom.xml에서 de

chapter 3 - 스프링과 Oracle Database 연동

Oracle 11g xe 사용

Grant를 사용해 권한을 줄 때는 sys계정으로 해야 한다.
Tomcat 기본 포트가 8080이고 Oracle 11g도 8080포트를 사용해서 충돌 할 수 있으므로 실습 때는 Tomcat 서버를 80포트로 변경해서 사용.

라이브러리 등록시에 라이브러리 파일을 찾아서 복붙 해도 되지만
pom.xml에 등록하면 된다.

<!-- DB 관련 라이브러리 -->
<dependency>
	<groupId>com.oracle.database.jdbc</groupId>
	<artifactId>ojdbc6</artifactId>
	<version>11.2.0.4</version>
</dependency>

<dependency>
	<groupId>com.zaxxer</groupId>
	<artifactId>HikariCP</artifactId>
	<version>2.7.4</version>
</dependency>

chapter 4 - Mybatis와 스프링 연동

복습 할 내용

p.38 Lombok 라이브러리 설치
p.54 pom.xml에 라이브러리 추가
1.8.12를 다운 받았는데 왜 pom.xml은 1.18.0을..?
p.48 의존성

어노테이션
Spring 자동생성 어노테이션
@Controller, @Component, @Service, @Repository(DAO에 해당-컴퓨터를 꺼도 DB에 저장되는 부분),@RestController(Ajax같이 원본 데이터를 그대로 보낼 때 사용하는 Controller), @Advice(예외처리)

github에 오늘 실습한 프로젝트 올려놓고 다운받아서 집에서 교재랑 복습하기~

try-with-resources 이게뭐야 복습하자
Connection pool?

정리 해 주신 것

<오늘 배운 스프링/lombok 중 의존성 주입 관련 정리>

  • Init에서 등록/조립했던 걸 스프링에서는 모두 애너테이션으로 할 수 있다.
    [객체 등록] - 등록하면 스프링에서 관리(자동 생성)해 줌
    @Controller - 컨트롤러에 붙임
    @Service - 서비스에 붙임
    @Repository - DAO에 붙임
  • 이외에도 @Component를 붙이면 스프링 실행 시 자동으로 객체를 생성해 줌
  • 우리가 작성해서 프로젝트에 사용하는 클래스인 경우 이렇게 애너테이션을 이용하는 경우가 많고,
    외부 jar 파일에서 가져오는 클래스는 xml 파일에서 태그로 등록하는 경우가 많음
  • 이렇게 스프링에서 관리하도록 등록된 객체를 Bean이라고 하며,
    Bean 확인은 root-context.xml 안에 Beans Graph 탭에서 가능

[조립]

(의존성 이해하기)
A 객체에서 B 객체를 변수로 사용한다
= A객체는 B객체를 필요로 한다
= A객체는 B객체에 의존한다(의존성)

-> A객체를 사용하려면 B객체를 생성해서 넣어줘야 함
(Service에서 DAO객체를 변수로 만들고 SetDao 해서 사용한 게 주된 예시)

스프링에서는 이걸 의존성 주입(DI)라고 함 - dependency injection
방법이 여러 가지 있는데,

1) @Inject를 붙인다 - JAVA에서 제공한다는데 쓰는 걸 본 적이 없음. 몰라도 될 듯

2) @Autowired를 붙인다. - 스프링에서의 가장 기본적인 DI 방법
->필요한 객체를 Bean으로 등록된 객체 중 찾아서 알아서 넣어 줍니다
(등록은 위에 [등록] 참고)

(예시)-----------------
public class A {

private B b; // A는 B객체를 변수로 사용함

@Autowired //A객체에는 B객체가 필요하다고 스프링에게 알림
public void setB(B b) { // A객체 등록 시 Bean에서 B객체를 찾아서 자동으로 b에 set해줌
this.b = b;
}

}

3) @Setter (onMethod_ = { @Autowired })

  • lombok에서 제공: setter를 만들어 줄 때 자동으로 @Autowired도 같이 해주는 것

여기서 lombok 기능 중 오늘 배운 것들 정리

  • lombok에서는 getter, setter 등을 자동으로 만들어 주는 기능을 제공함
    @Setter - 세터를 만들어 줌 (위처럼 @Autowired도 묶어서 사용하면 편리함)
    @Data - getter, setter, toString 다 만들어줌 - VO 클래스에 사용하면 편함

(예시)-----------------
public class A {

@Setter (onMethod_ = { @Autowired })
private B b; // 위의 예시처럼 @Autowired가 붙은 Setter를 자동으로 생성해 줌 -> 위와 동일하게 동작

}

0개의 댓글