SlideShare a Scribd company logo
1 of 14
Download to read offline
스프링 프레임워크 입문
스프링이 뭔데?
스프링 프레임워크(이하, 스프링)를 사용한 예제 코드를 보며 스프링의 주요 철학과 기능을
빠르게 학습합니다.
수업 목표
● 실제 코드를 보며 스프링 프레임워크에 대해 소개합니다.
● 스프링 프레임워크가 개발자에게 주는 가치를 이해합니다.
● 짧은 시간 안에 간략하게 이해하는 것을 목표로 합니다.
수업 계획
1. 강의 소개
a. 강의 소개
b. 프로젝트 세팅
c. 프로젝트 살펴보기
2. Inversion of Control
a. IoC 소개
b. IoC (Inversion of Control) 컨테이너
c. 빈 (Bean)
d. 의존성 주입 (Dependency Injection)
3. Aspect Oriented Programming
a. AOP 소개
b. AOP 적용 예제
4. Portable Service Abstraction
a. PSA 소개
b. 스프링 트랜잭션
c. 캐시
d. 웹 MVC
5. 강의 마무리
참고
● 스프링 학습 방법
● 토비의 스프링
● 스프링 프레임워크 레퍼런스
● PetClinic
● Youtube/백기선
프로젝트 세팅
Spring-PetClinic
JDK 버전: 1.8 (9랑 10은 노노)
소스 코드: ​https://github.com/spring-projects/spring-petclinic
IDE: 인텔리J (커뮤니티 버전도 괜찮습니다.)
주의 할 점: ​wro4j 메이븐 플러그인이 현재 Java 9 이상을 지원하지 않습니다.
실행 방법:
● mvn spring-boot:run
● IDE에서 메인 애플리케이션 실행
프로젝트 구조 설명
● 일반적인 메이븐 프로젝트
● 스프링 부트 기반 프로젝트
Inversion of Control
제어가 뒤바꼈다고? 뭔 소리야?
“내가 쓸 놈은 내가 만들어 쓸께...” (일반적인 의존성에 대한
제어권)
class OwnerController {
private OwnerRepository repository = new OwnerRepository();
}
“내가 쓸 놈은 이 놈인데... 누군가 알아서 주겠지...” (IoC)
● 내가 쓸 놈의 타입만 맞으면 어떤거든 상관없지 뭐.. .
● 그래야 내 코드 테스트 하기도 편하지.
class OwnerController {
private OwnerRepository repo;
public OwnerController(OwnerRepository repo) {
this.repo = repo;
}
// repo를 사용합니다.
}
class OwnerControllerTest {
@Test
public void create() {
OwnerRepository repo = new OwnerRepository();
OwnerController controller = new OwnerController(repo);
}
}
IoC (Inversion of Control) 컨테이너
ApplicationContext (BeanFactory)
빈(bean)을 만들고 엮어주며 제공해준다.
빈 설정
● 이름 또는 ID
● 타입
● 스코프
아이러니하게도 컨테이너를 직접 쓸 일은 많지 않다.
빈 (Bean)
스프링 IoC 컨테이너가 관리하는 객체
어떻게 등록하지?
● Component Scanning
○ @Component
■ @Repository
■ @Service
■ @Controller
● 또는 직접 일일히 XML이나 자바 설정 파일에 등록
어떻게 꺼내쓰지?
● @Autowired 또는 @Inject
● 또는 ApplicationContext에서 getBean()으로 직접 꺼내거나
특징
● 오로지 “빈"들만 의존성 주입을 해줍니다.
의존성 주입 (Dependency Injection)
필요한 의존성을 어떻게 받아올 것인가..
@Autowired / @Inject를 어디에 붙일까?
● 생성자
● 필드
● Setter
AOP 소개
흩어진 코드를 한 곳으로 모아
흩어진 AAAA 와 BBBB
class A {
method a () {
AAAA
오늘은 7월 4일 미국 독립 기념일이래요.
BBBB
}
method b () {
AAAA
저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다.
BBBB
}
}
class B {
method c() {
AAAA
점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요.
BBBB
}
}
모아 놓은 AAAA 와 BBBB
class A {
method a () {
오늘은 7월 4일 미국 독립 기념일이래요.
}
method b () {
저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다.
}
}
class B {
method c() {
점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요.
}
}
class AAAABBBB {
method aaaabbb(JoinPoint point) {
AAAA
point.execute()
BBBB
}
}
AOP 적용 예제
@LogExecutionTime 으로 메소드 처리 시간 로깅하기
@LogExecutionTime 애노테이션 (어디에 적용할지 표시 해두는
용도)
@Target​(ElementType.​METHOD​)
@Retention​(RetentionPolicy.​RUNTIME​)
public ​@​interface ​LogExecutionTime ​{
}
실제 Aspect (@LogExecutionTime 애노테이션 달린곳에 적용)
@Component
@Aspect
public class ​LogAspect {
Logger ​logger ​= LoggerFactory.​getLogger​(LogAspect.​class​)​;
​@Around​(​"@annotation(LogExecutionTime)"​)
​public ​Object ​logExecutionTime​(ProceedingJoinPoint joinPoint) ​throws ​Throwable {
StopWatch stopWatch = ​new ​StopWatch()​;
​stopWatch.start()​;
​Object proceed = joinPoint.proceed()​;
​stopWatch.stop()​;
​logger​.info(stopWatch.prettyPrint())​;
return ​proceed​;
​}
}
PSA 소개
잘 만든 인터페이스
나의 코드
확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드
나의 코드
잘 만든 인터페이스 (PSA)
확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드
스프링 트랜잭션
PlatformTransactionManager
나의 코드
@Transactional
PlatformTransactionManager
JpaTransacionManager | DatasourceTransactionManager | HibernateTransactionManager
스프링 캐시
CacheManager
나의 코드
@Cacheable | @CacheEvict | ...
CacheManager
JCacheManager | ConcurrentMapCacheManager | EhCacheCacheManager | ...
스프링 웹 MVC
@Controller 와 @RequestMapping
나의 코드
@Controller | @ReuqestMapping | ...
Servlet | Reactive
톰캣, 제티, 네티, 언더토우
스프링 프레임워크 입문 강좌를 마쳤습니다.
감사합니다.
-백기선-

More Related Content

What's hot

Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발지수 윤
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVCArawn Park
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나JeongHun Byeon
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Jin wook
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시태현 김
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)YoungSu Son
 
React 튜토리얼 2차시
React 튜토리얼 2차시React 튜토리얼 2차시
React 튜토리얼 2차시태현 김
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptCheolhee Han
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작Taegon Kim
 

What's hot (20)

Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
Resource Handling in Spring MVC
Resource Handling in Spring MVCResource Handling in Spring MVC
Resource Handling in Spring MVC
 
Spring boot
Spring bootSpring boot
Spring boot
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
Spring Boot 1
Spring Boot 1Spring Boot 1
Spring Boot 1
 
Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트Angular2를 위한 타입스크립트
Angular2를 위한 타입스크립트
 
Django beginning
Django beginningDjango beginning
Django beginning
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)5.Spring IoC&DI(DI와 관련된 어노테이션)
5.Spring IoC&DI(DI와 관련된 어노테이션)
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
 
Modern PHP
Modern PHPModern PHP
Modern PHP
 
2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)2.Spring IoC & DI (ioc container)
2.Spring IoC & DI (ioc container)
 
React 튜토리얼 2차시
React 튜토리얼 2차시React 튜토리얼 2차시
React 튜토리얼 2차시
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
 
React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작React Native를 사용한
 초간단 커뮤니티 앱 제작
React Native를 사용한
 초간단 커뮤니티 앱 제작
 
3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)3.Spring IoC&DI(spring ioc실습, XML기반)
3.Spring IoC&DI(spring ioc실습, XML기반)
 

Similar to 스프링 프레임워크 입문

Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Woojin Joe
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)양 한빛
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerKyung Koo Yoon
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTWAnselmKim
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.장현 한
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Jaesup Kwak
 
11장 시스템
11장 시스템11장 시스템
11장 시스템kidoki
 
CleanSwift 적용기
CleanSwift 적용기CleanSwift 적용기
CleanSwift 적용기ssuser86e2971
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 
How_to_choose_the_right_framework
How_to_choose_the_right_frameworkHow_to_choose_the_right_framework
How_to_choose_the_right_frameworkJT Jintae Jung
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 

Similar to 스프링 프레임워크 입문 (20)

Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]Angular Seminar [한빛미디어 리얼타임 세미나]
Angular Seminar [한빛미디어 리얼타임 세미나]
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
 
Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
Basic.pptx
Basic.pptxBasic.pptx
Basic.pptx
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW[스프링 스터디 3일차] AOP와 LTW
[스프링 스터디 3일차] AOP와 LTW
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
 
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
[자바교육추천]자바웹기초와스프링프레임워크마이바티스재직자향상과정_자바학원/스프링학원/마이바티스/자바/웹기초/IT학원추천
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
12.AOP 충고(advice)
12.AOP 충고(advice)12.AOP 충고(advice)
12.AOP 충고(advice)
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
11장 시스템
11장 시스템11장 시스템
11장 시스템
 
CleanSwift 적용기
CleanSwift 적용기CleanSwift 적용기
CleanSwift 적용기
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
(Spring Data JPA)게시판 리스트보기_오라클, 스프링부트,페이지나누기
 
How_to_choose_the_right_framework
How_to_choose_the_right_frameworkHow_to_choose_the_right_framework
How_to_choose_the_right_framework
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 

Recently uploaded

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 

Recently uploaded (8)

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 

스프링 프레임워크 입문

  • 1. 스프링 프레임워크 입문 스프링이 뭔데? 스프링 프레임워크(이하, 스프링)를 사용한 예제 코드를 보며 스프링의 주요 철학과 기능을 빠르게 학습합니다. 수업 목표 ● 실제 코드를 보며 스프링 프레임워크에 대해 소개합니다. ● 스프링 프레임워크가 개발자에게 주는 가치를 이해합니다. ● 짧은 시간 안에 간략하게 이해하는 것을 목표로 합니다. 수업 계획 1. 강의 소개 a. 강의 소개 b. 프로젝트 세팅 c. 프로젝트 살펴보기 2. Inversion of Control a. IoC 소개 b. IoC (Inversion of Control) 컨테이너 c. 빈 (Bean) d. 의존성 주입 (Dependency Injection) 3. Aspect Oriented Programming a. AOP 소개 b. AOP 적용 예제 4. Portable Service Abstraction a. PSA 소개 b. 스프링 트랜잭션 c. 캐시 d. 웹 MVC 5. 강의 마무리 참고 ● 스프링 학습 방법 ● 토비의 스프링 ● 스프링 프레임워크 레퍼런스 ● PetClinic ● Youtube/백기선
  • 2. 프로젝트 세팅 Spring-PetClinic JDK 버전: 1.8 (9랑 10은 노노) 소스 코드: ​https://github.com/spring-projects/spring-petclinic IDE: 인텔리J (커뮤니티 버전도 괜찮습니다.) 주의 할 점: ​wro4j 메이븐 플러그인이 현재 Java 9 이상을 지원하지 않습니다. 실행 방법: ● mvn spring-boot:run ● IDE에서 메인 애플리케이션 실행 프로젝트 구조 설명 ● 일반적인 메이븐 프로젝트 ● 스프링 부트 기반 프로젝트
  • 3. Inversion of Control 제어가 뒤바꼈다고? 뭔 소리야? “내가 쓸 놈은 내가 만들어 쓸께...” (일반적인 의존성에 대한 제어권) class OwnerController { private OwnerRepository repository = new OwnerRepository(); } “내가 쓸 놈은 이 놈인데... 누군가 알아서 주겠지...” (IoC) ● 내가 쓸 놈의 타입만 맞으면 어떤거든 상관없지 뭐.. . ● 그래야 내 코드 테스트 하기도 편하지. class OwnerController { private OwnerRepository repo; public OwnerController(OwnerRepository repo) { this.repo = repo; } // repo를 사용합니다. } class OwnerControllerTest { @Test public void create() { OwnerRepository repo = new OwnerRepository(); OwnerController controller = new OwnerController(repo); } }
  • 4. IoC (Inversion of Control) 컨테이너 ApplicationContext (BeanFactory) 빈(bean)을 만들고 엮어주며 제공해준다. 빈 설정 ● 이름 또는 ID ● 타입 ● 스코프 아이러니하게도 컨테이너를 직접 쓸 일은 많지 않다.
  • 5. 빈 (Bean) 스프링 IoC 컨테이너가 관리하는 객체 어떻게 등록하지? ● Component Scanning ○ @Component ■ @Repository ■ @Service ■ @Controller ● 또는 직접 일일히 XML이나 자바 설정 파일에 등록 어떻게 꺼내쓰지? ● @Autowired 또는 @Inject ● 또는 ApplicationContext에서 getBean()으로 직접 꺼내거나 특징 ● 오로지 “빈"들만 의존성 주입을 해줍니다.
  • 6. 의존성 주입 (Dependency Injection) 필요한 의존성을 어떻게 받아올 것인가.. @Autowired / @Inject를 어디에 붙일까? ● 생성자 ● 필드 ● Setter
  • 7. AOP 소개 흩어진 코드를 한 곳으로 모아 흩어진 AAAA 와 BBBB class A { method a () { AAAA 오늘은 7월 4일 미국 독립 기념일이래요. BBBB } method b () { AAAA 저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다. BBBB } } class B { method c() { AAAA 점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요. BBBB } } 모아 놓은 AAAA 와 BBBB class A { method a () { 오늘은 7월 4일 미국 독립 기념일이래요. } method b () { 저는 아침에 운동을 다녀와서 밥먹고 빨래를 했습니다. } } class B { method c() { 점심은 이거 찍느라 못먹었는데 저녁엔 제육볶음을 먹고 싶네요. } } class AAAABBBB { method aaaabbb(JoinPoint point) { AAAA point.execute() BBBB
  • 8. } }
  • 9. AOP 적용 예제 @LogExecutionTime 으로 메소드 처리 시간 로깅하기 @LogExecutionTime 애노테이션 (어디에 적용할지 표시 해두는 용도) @Target​(ElementType.​METHOD​) @Retention​(RetentionPolicy.​RUNTIME​) public ​@​interface ​LogExecutionTime ​{ } 실제 Aspect (@LogExecutionTime 애노테이션 달린곳에 적용) @Component @Aspect public class ​LogAspect { Logger ​logger ​= LoggerFactory.​getLogger​(LogAspect.​class​)​; ​@Around​(​"@annotation(LogExecutionTime)"​) ​public ​Object ​logExecutionTime​(ProceedingJoinPoint joinPoint) ​throws ​Throwable { StopWatch stopWatch = ​new ​StopWatch()​; ​stopWatch.start()​; ​Object proceed = joinPoint.proceed()​; ​stopWatch.stop()​; ​logger​.info(stopWatch.prettyPrint())​; return ​proceed​; ​} }
  • 10. PSA 소개 잘 만든 인터페이스 나의 코드 확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드 나의 코드 잘 만든 인터페이스 (PSA) 확장성이 좋지 못한 코드 or 기술에 특화되어 있는 코드
  • 12. 스프링 캐시 CacheManager 나의 코드 @Cacheable | @CacheEvict | ... CacheManager JCacheManager | ConcurrentMapCacheManager | EhCacheCacheManager | ...
  • 13. 스프링 웹 MVC @Controller 와 @RequestMapping 나의 코드 @Controller | @ReuqestMapping | ... Servlet | Reactive 톰캣, 제티, 네티, 언더토우
  • 14. 스프링 프레임워크 입문 강좌를 마쳤습니다. 감사합니다. -백기선-