1006 spring

정혜지·2022년 10월 6일

수업진행 환경

spring
-> eclipse : ide
-> maven : 빌딩도구

spring boot
-> intlli J : IDE
-> gradle : 빌딩도구


IOC
Inversion Of Control : 제어의 역전
제어의 흐름 역전 di의 기본철학

root-context

---> 주입 개념 알아보기
: 스프링 빈객체를 담고있는 컨테이너 역할

스프링 컨테이너에서 사용하는 자바 빈(bean)객체 : 자바 라이브러리 객체를 담고있다.

자바 로고 : 커피
커피 원료 : 커피콩 beans
beans : 
bean : 자바 객체
ejb 자바 객체 

connection pool 설정
Hikari Config

appServlet -> servlet-context.xml
서블릿과 연관되어있는

<!-- 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>

ㄴ 컨트롤러에 의해서 결과데이터를 어느화면에서 랜더링할건지(view 선택하는방법)
InternalResourceViewResolver -> 뷰를 선택하는 객체

파일 명명법
controller - service
database - persistence


MyBatis와 스프링 연동

Objectives
• MyBatis 세팅 : ORM(Object Relation Mapping)
• spring-mybatis 라이브러리 설정
• XML Mapper 파일
• Mapper 인터페이스 설정 확인

MyBatis
• SQL Mapping 프레임워크
• SQL과 Object간의 관계를 매핑해주는 역할
• JDBC코드에 비해 처리하는 부분이 간결해지고, close처리등이 지원
• Spring에서의 사용
• 스프링은 MyBatis와의 연결을 위한 mybatis-spring 라이브러리을 이용해서 연동처리

mybatis-spring의 설정
• 기본적으로 dataSource의 설정이 필요
• pom.xml에 라이브러리 추가

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>

SqlSessionFactory의 설정
• root-context.xml에 MyBatis설정
• MyBatis의 핵심 객체는 SqlSessionFactory타입의 객체
• SqlSessionFactoryBean은 내부적으로 MyBatis의
SqlSessionFactory를 생성

<!-- HikariCP configuration -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
destroy-method="close">
<constructor-arg ref="hikariConfig" />
</bean>
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>

스프링 웹 프로젝트

MVC(Model-View-Controller)
• 대부분의 서블릿 기반 프레임워크들이 사용하는 방식
• 데이터와 처리, 화면을 분리하는 방식
• 웹에서는 Model 2 방식으로 표현

웹 프로젝트의 구조
• 스프링을 실행하는 존재
ApplicationContext => WebApplicationContext
• 같이 연동되는 방식으로 동작하기 때문에 설정을 분리해도 통합해서
사용가능

ApplicationContext : 스프링 실행 최상위 객체

@RequestMapping(value = "/basic", method = { RequestMethod.GET, RequestMethod.POST })
	public void basicGet() {   // localhost:8080/sample/basic

		log.info("basic get...................");

	}

void 메소드에 return문이 없는 경우, value의 이름과 동일한 jsp를 찾기위해 시도한다

Controller의 리턴타입
• String: jsp를 이용하는 경우에는 jsp 파일의 경로와 파일이름을 나타내기 위해서 사

• void: 호출하는 URL과 동일한 이름의 jsp를 의미
• VO, DTO 타입: 주로 JSON 타입의 데이터를 만들어서 반환하는 용도로 사용 (추가
적인 라이브러리 필요
• ResponseEntity 타입: response할 때 Http 헤더 정보와 내용을 가공하는 용도로 사
용 (추가적인 라이브러리 필요).
• Model, ModelAndView: Model로 데이터를 반환하거나 화면까지 같이 지정하는 경
우에 사용 (최근에는 많이 사용하지 않습니다.).
• HttpHeaders: 응답에 내용 없이 Http 헤더 메시지만 전달하는 용도로 사용

AOP
Aspect Oriented Programming
:

프로젝트의 구성
• 일반적인 웹 프로젝트의 구조는 3-Tier의 구조를 활용
presentation<->Business<-> persistence tier

• 스프링 MVC를 이용하는 예제의 구성
presentation(spring MVC)<->Business(spring core)<-> persistence tier(mybatis) <-> DB

각 영역의 네이밍 규칙
• xxxController: 스프링 MVC에서 동작하는 Controller 클래스
• xxxSerivce, xxxServiceImpl: 비즈니스 영역을 담당하는 인터페이스는
‘xxxService’라는 방식을 사용하고, 인터페이스를 구현한 클래스는
‘xxxServiceImpl’이라는 이름을 사용
• xxxDAO, xxxRepository: DAO(Data-Access-Object)나 Repository(저장소)
라는 이름으로 영역을 따로 구성하는 것이 보편적. 예제에서는 별도의
DAO를 구성하는 대신에 MyBatis의 Mapper 인터페이스를 활용.
• VO, DTO: VO의 경우는 주로 Read Only의 목적이 강하고, 데이터 자체도
Immutable(불변)하게 설계. DTO는 주로 데이터 수집의 용도

profile
오히려 좋아

0개의 댓글