Download presentation
Presentation is loading. Please wait.
1
SpringFramework 기말고사 요약 REST by SpringFramework
2
프레임워크란 무엇일까요? 스프링 프레임워크 프레임워크는 기본적으로 엔터프라이즈 환경(개인이 아닌 기업서비스를 하는 환경)에서
서비스를 구축할 때 DB연결, 웹서비스, 보안 및 로그 처리등의 부분을 미리 잡아 놓는 뼈대를 뜻함 라이브러리와 같은 것인가요? 우리가 필요한 기능이 있으면 라이브러리에서 해당 기능을 가져다 씁니다. 라이브러리는 그 기능을 수행하기 위해 모든 코드들이 짜여져 있고 우리는 그대로 쓰기만 하면 됩니다. 프레임워크는 틀만 짜여져 있을 뿐 그 안에 기능 코드는 우리가 구현을 해야합니다. 물론 잘못된 프로그래밍을 방지하기 위해서 가이드가 되어 있지만 기능 코드가 구현되어 있진 않음. DB 접근은 어떻게 구현이 되어 있나요? 보통은 JDBC는 지양하며, ORM 구조인 myBatis나 하이버네이트 구현체인 JPA를 지원함 스프링 프레임워크만의 장점은 먼가요? 1. 기존의 엔터프라이즈 프레임워크(스트러츠 외 다수) 보다 매우 가볍고 구현이 편리함 2. 의존성 주입을 통해 클래스 간의 관계를 느슨하게 만듦 3. 세부 로깅, 보안에 관련된 코드는 AOP로 처리하여 프로그램 설계를 깔끔하게 만듦 (유지 보수도 간결해짐) 현재 우리나라에서 많이 쓰고 있나요? 전자 정부 표준프레임워크 기반 기술로 채택이 되어 우리나라에선 앞으로 계속 크게 사용될 예정임
3
Lamda 이해하기 Lamda 새로운 프로그래밍 스타일과 전략을 짤 수 있는 기능입니다.
(Java 8 부터 지원이 가능했지만 이미 모든 프로그래밍 언어에 있던 식) - 람다는 간결하게 표현된 단일 메소드를 말하며, 어떤 행동을 정의함 - 문법 (예시) (Long val1, String val2 ) -> val1 + val2.length() 왼쪽은 매서드 인수 오른쪽은 해야할일(비즈니스 로직, 실제 함수 본체) 이름 없는 익명 함수를 의미한다. 입력할 인자 값 결과값
4
Lamda 이해하기 [Lamda 활용의 예시] Lamda 활용법 매서드 람다식 int max(int a, int b){
return a>b? a : b; } (int a, int b) ->{ return a > b? a : b;} (int a, int b) -> a > b? a : b ( a, b) -> a > b? a : b int printVal(String name, int I){ System.out.println(name+"="+i); (String name, int i) ->{System.out.println(name+"="+i);} (name,i) -> {System.out.println(name+"="+i);} (name,i) -> System.out.println(name+"="+i) int square( int x){ return x*x; (int x) -> x * x (x) -> x * x x -> x * x int roll(){ return (int)(Math.random() * 6); ()-> {return (int)(Math.random() * 6); } ()-> (int)(Math.random() * 6)
5
다수의 데이터를 다루고 표현하기 위한 표준화된 프로그래밍을 뜻함
컬렉션 프레임워크 LIST 다수의 데이터를 다루고 표현하기 위한 표준화된 프로그래밍을 뜻함 List, Set , Map Collection Map List Set 인터페이스 특징 List 순서가 있는 데이터의 집합, 데이터 중복 허용 (예) 대기자 명단 구현클래스 : ArrayList, LinkedList, Stack, Vector Set 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. 예) 양의 정수의 집합, 소수의 집합 구현클래스 : HashSet, TreeSet 등 Map 키(Key)와 값(Value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. (예) 우편번호, 지역번호(전화번호) 구현클래스 : HashMap, TreeMap, Hashtable, Properties
6
인터페이스란? 인터페이스란 인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상 매서드를 갖지만 추상화 정도가 높아서 몸통을 갖춘 일반 매서드 또는 맴버변수를 구성원으로 가질 수 는 없다. 기본 설계도와 같다. [인터페이스의 작성] Interface 인터페이스 이름 { public static final 타입 상수이름 = 값; public abstract 매서드이름(매개변수목록); } 1.8부터 (static 매서드와 디폴트 매서드도 허용됨) [인터페이스의 상속] 인터페이스는 인터페이스로만 상속받을 수 있으며, 클래스와 달리 다중상속이 가능 Ex) interface Fightable extends Movable, Attackable{ ~~~ }
7
인터페이스란? [인터페이스의 구현] 자체적으로 인스턴스를 생성할 수 없으며, 몸통을 만들어주는 클래스를 작성해야함
Ex) Class 클래스 이름 implements 인터페이스이름 [인터페이스를 이용한 다형성] - 인터페이스 Fightable를 클래스 Fighter가 구현했을 때 인스턴스를 클래스의 참조변수로 참조가능 ex) Fightable f = (Fightable) new fighter(); Fightable f = (Fightable) new fighter(); - 인터페이스는 메서드의 매개변수의 타입으로 사용 가능 (호출 시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야함) ex) void attack(Fightable f) //interface Fightable - 매서드의 리턴타입으로 인터페이스 타입 지정도 가능
8
인터페이스란? [인터페이스의 구현] 자체적으로 인스턴스를 생성할 수 없으며, 몸통을 만들어주는 클래스를 작성해야함
Ex) Class 클래스 이름 implements 인터페이스이름 [인터페이스의 장점] - 개발 시간을 단축시킬 수 있다 (인터페이스를 제공함으로서 양쪽이 동시에 개발 진행이 가능함) - 표준화가 가능하다 (프로젝트의 기본틀을 인터페이스로 작성하여 제공함으로써 정형화된 프로그램 개발가능) 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다 (상속 관계에 있지 않고 같은 조상클래스가 있지 않아도 하나의 인터페이스를 공통으로 구현하여 관계를 맺어줄 수 있다.) 독립적인 프로그래밍이 가능하다 (선언과 구현을 분리시켜 실제 구현에 독립적인 프로그램을 작성하는 것이 가능)
9
JDK 1.5 버전의 혁신적인 도입 GENERICS
1. 타입 안정성을 제공 - 의도하지 않은 타입의 객체가 저장되는 것을 막고, 저장된 객체를 꺼내올 때 잘못 형변환 되는 것을 줄여줌 2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해짐 [클래스 정의] [Generics 표현] Class Box{ Object item; Void setItem(Object item) { this.item=item; } Object getItem() { return item; Class Box<T>{ T item; Void setItem(T item) { this.item=item; } T getItem() { return item; //Type Variable
10
Generics란 무엇인가? GENERIC는 선언 시에 <T>로 선언한 다음
[객체 생성시] Class Box<T>{ T item; Void setItem(T item) { this.item=item; } T getItem() { return item; //Type Variable //T 대신 String 지정O Box<String> b = new Box<String>(); b.setItem(new Object()); b.setItem(“ABC”); String item = (String) b.getItem(); //에러. String 외 지정X //String 값이므로 O //형변환 할 필요가 없음 static 맴버에는 타입 변수 T 사용이 안됨 (모든 객체에 대해 동일하게 동작해야 하기 때문) Generic 타입의 배열을 생성하는 것도 안됨 (new T[10] 이런 방식은 안됨)
11
MVC 모델이란 디자인 패턴 중에 하나인 MVC 모델은
Model – View – Controller 로 구분하여 설계하는 방법을 뜻함 View [View] 고객이 원하는 결과를 보여줌 DB Model Controller [Controller] - 고객의 요청이 들어옴 - 고객의 요청을 기반으로 view나 model에게 요청을 보낸다 - 비즈니스 로직이 배치되어 있음 [Model] - DB의 데이터를 모델링함 - DB 데이터를 Controller에 전송한다 MVC 모델은 각 분야의 담당자들이 협업이 가능하며 단위테스트가 가능할 수 있도록 구성된 모델이다
12
JUnit 은 Java의 단위테스트 Framework
문자 혹은 GUI 기반으로 실행됨 단정문으로 테스트 케이스의 수행 결과를 판별함 (assertEquals(예상 값, 실제 값)) 어노테이션으로 간결하게 지원함 결과는 성공(녹색), 실패(붉은색) 중 하나로 표시
13
JUnit 은 다음 단정문으로 주로 테스트를 합니다. 저 신호등을 통과하지 못하면 빨간불이 켜집니다!
의미 assertArrayEqual(a,b) 배열 a,b가 일치함을 확인 assertEqual(a,b) 객체 a,b의 값이 같은 지 확인 assertSame(a,b) 객체 a,b가 같은 지 확인 assertTrue(a) A가 참인지 확인 assertNotNull(a) A가 null이 아님을 확인 [모든 단정문의 기능] 단정문은 신호등이라고 생각하면 됩니다. 저 신호등을 통과하지 못하면 빨간불이 켜집니다!
14
JPA란? [JPA 특징] - 자바 객체와 데이터베이스에 저장된 데이터를 매핑하는 기능
JPA는 Java Pesistence API의 약자 자바 표준인 O/R 매퍼(Object/Relational Mapper)에 관련된 명세임. 하이버네트나 이클립스 링크 같은 라이브러리를 사용하여 구현함 [JPA 특징] - 자바 객체와 데이터베이스에 저장된 데이터를 매핑하는 기능 - 데이터베이스에서 실행할 CRUD 처리를 캡슐화한 API - 자바 객체를 검색하는 데 사용하는 쿼리 언어인 JPQL - 다양한 데이터베이스에 존재하는 차이점을 JPA가 흡수함
15
JPA 적용코드 JPA활용하기 [Customer.java] [Customer.java]
기본적으로 findOne, save, findAll, delete 매소드가 제공됨 새로운 기능을 정의할때도 @Query를 활용해서 정의하면 됨
16
빈을 담는 그릇 컨테이너 컨테이너란 컨테이너 안에는 많은 객체가 있고 컨테이너는 이 객체를 생성부터 소멸까지 관리를 해줌
Bean을 담는 그릇 빈팩토리, 애플리케이션 컨텍스트 여기서 객체가 생성, 소멸, 주입됨 컨테이너 안에는 많은 객체가 있고 컨테이너는 이 객체를 생성부터 소멸까지 관리를 해줌 코드는 내가 짰지만 객체의 생성과 소멸은 컨테이너에서 알아서 함 빈을 인스턴스화 -> xml/config 파일 읽고 값을 주입 -> ….-> 인스턴스폐기 (그냥 그런가보다 하고 신경 안쓰고 프로그램을 짜면 됩니다만 만약 누군가 짜놓은 시스템이 신경쓰여서 직접 한번 컨테이너를 만들어보면 이게 얼마나 어마어마한 작업인지 알게 될 거도 대신 해주는 스프링한테 고마워할 스프링 컨테이너는 크게 빈팩토리 / 애플리케이션 컨텍스트로 구분됨 빈팩토리는 너무 기능이 없어서 주로 applicationContext를 사용하며, 가장 대표적인 컨테이너 임.
17
컨테이너 - 인스턴스의 스코프(범위)를 제어할 수 있습니다.
DI 컨테이너를 통해 인스턴스를 생성하면 다음과 같은 이점이 있습니다 - 인스턴스의 스코프(범위)를 제어할 수 있습니다. (인스턴스를 싱글톤(계속 생존) 으로 할 건지 매번 새로 생성할지에 대한 사항) - 인스턴스의 라이프 사이클(생명주기)을 이벤트로 제어할 수 있다. (예를 들면, 인스턴스를 생성할 때와 인스턴스를 소멸할 때 이벤트처리) - 공통 처리를 포함할 수 있다 (예를 들면, 트랜잭션 관리나 로깅관리) - 객체 사이의 의존 관계가 느슨해집니다
18
같은 일을 하는 인스턴스가 많으면 넘나 좋겠죠????^^
싱글톤 패턴(singleton pattern) 방과후 수업 Review 같은 일을 하는 인스턴스가 많으면 넘나 좋겠죠????^^
19
디자인 패턴이 무조건 좋은 것은 아닙니다. 패턴은 패턴일뿐입니다.
싱글톤 패턴(singleton pattern) 방과후 수업 Review 싱글톤의 의미는 매우 간단합니다. 생성하는 인스턴스를 오직 하나로 제한하는 디자인 패턴을 싱글톤이라고 합니다. 객체 지향 언어에서는 싱글톤이라는 말을 자주 사용합니다.(4대 디자인패턴 중 하나) 싱글톤이란 왜 싱글톤을 쓸까요?? 스프링에서의 싱글톤 100권의 책 하나의 문서대장 (EX) DB Connction 불필요한 호출로 자원의 낭비를 막음 인스턴스의 간섭으로 예상치 못한 결과를 만듦 인스턴스를 하나만 만들고 계속 재사용함 사실 싱글톤은 문제가 있음 1. private 생성자라 상속불가 2. 싱글톤은 테스트하기가 힘듦 3. 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다. 4. 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다. [싱글톤 레지스트리] 스프링은 이러한 단점을 보완하여 직접 싱글톤 형태의 오브젝트를 관리하는 기능을 제공 싱글톤의 기본 유형 public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance(){ return instance; } 하지만 이건 되게 많이 쓰는거라 알긴 해둬야함ㅋㅋㅋㅋㅋ 디자인 패턴이 무조건 좋은 것은 아닙니다. 패턴은 패턴일뿐입니다.
20
REST API의 이해 Representational safe transfer (REST) 기본요소
웹의 장점을 최대한 활용할 수 있는 네트워크 기반의 아키텍쳐 REST는 기본적으로 CRUD(생성/조회/수정/삭제) 4가지 메서드만으로 표현하며, 고객관리 프로그램에서는 다음과 같이 진행한다 Resource Method Message 기본요소 - 이름이 minio인 사람을 생성한다 REST 매서드 종류 기능 POST 생성 GET 조회 PUT 수정 DELETE 삭제 [REST 표현시] HTTP POST, { “users”:{ “name”:”minio” } 매서드 : HTTP POST 리소스 : 메시지 : JSON 형식의 {~~~}
21
실습하기 REST 서비스 구현하기 [CustomerRestController.java]
22
DI(의존성 주입) 의 이해 DI는 일반적인 호출방식이 아니며, 객체간의 관계를 느슨하게 만드는 방식입니다.
스프링에서 사용하는 대표적인 방법입니다. 붙인 클래스 들을 별도의 AppConfig 없이 자동으로 검색해서 연결해주는 애너테이션입니다. 연결하고 싶은 클래스(인터페이스 붙이고 붙이면 됩니다. @Component 추가 클래스 : AddCalculator 클래스 , Frontend 클래스 @ComponentScan 추가 클래스 : DiTestApppication 클래스 [추가예시] @ComponentScan은 본인의 패키지를 포함한 하위 패키지의 아래와 같은 애너테이션을 검색하여 등록합니다.
23
AOP의 개념 개념 이해 애스펙트의 주목적은 횡단 관심사의 모듈화에 있다, 횡단 관심사란 한마디로 한 어플리케이션의 여러 부분에 영향을 주는 기능이다. 일례로 보안은 하나의 어플리케이션 내에서도 여러 객체 메소드의 보안 규칙에 영향을 미치는 횡단 관심사이다. 보안 트랜잭션 기타 Service A Service B Service C [AOP의 적용 대상]
24
AOP의 구성요소 검침원이야기 [검침원 이야기 ] 전력회사 검침원이 주택을 방문해서 전력량계를 읽어서 전력회사에 보고하고자한다. 검침원이 해야하는 일을 어드바이스라고 한다. 검침원은 전력을 제공받는 모든 주택이 방문대상이 된다. 이 방문대상을 조인포인트라고 한다. 하지만 검침원 한 명이 전력회사가 서비스하는 모든 주택을 다 돌아다닐 순 없다 자신이 맡은 지역에 주택만을 방문하게 된다. 검침원에게 방문 대상을 할당하는 것, 즉 각 검침원마다 어디를 방문대상으로 할 지를 포인트커트라고 한다. 어드바이스(Advice) - ‘무엇’을 ‘언제’ 할지 정의 조인포인트 (JoinPoint)- 어드바이스를 적용할 수 있는 곳을 ‘조인포인트’ , 방문대상 포인트커트 (PointCut)- 작동조건 ‘어디서’ - 어드바이스가 어떤 조인포인트에서 적용되는지 애스펙트(Aspect) - 어드바이스와 포인트커트를 합친것 위빙(Weaving)- 어드바이스를 핵심로직 코드에 적용하는 것
25
Proxy 이해하기 Proxy 란 무엇일까요?
25 Proxy 란 무엇일까요? - Proxy는 대신 처리해주는 것을 의미. AOP를 구현하기 위한 방법으로 핵심기능을구현하지 않는 대신 여러객체에 공통으로 적용될 수 있는 기능을 구현하는 방법 프록시의 호출 및 처리 순서 1) 프록시 호출 2) 보조업무 처리 3) 프록시 처리 함수가 실제 구현 함수를 호출 후 주 업무 처리 4) 다시 프록시 함수로 돌아와서 보조 업무 처리
26
@Aspect 애너테이션을 활용한 AOP @Aspect : 애스펙트임을 나타낸다.
public class Audience { @Pointcut( "execution(* com.exam.aop.annotation.Performer.perform(..))") public void performance() { 포인트컷 정의 } @Before("performance()") public void takeSeats() { 공연 전 System.out.println("The audience is taking their seats."); public void turnOffCellPhones() { 공연 전 System.out.println("The audience is turning off their cellphones"); @AfterReturning("performance()") public void applaud() { 공연 후 System.out.println("CLAP CLAP CLAP CLAP CLAP"); @AfterThrowing("performance()") public void demandRefund() { 공연 실패 후 System.out.println("Boo! We want our money back!"); @Aspect : 애스펙트임을 나타낸다. @Pointcut 애스펙트 내에서 참조 가능한 포인트컷을 정의한다. @Before : takeSeats()와 turnOffCellPhones() 메소드가 performance() 메소드 전에 실행될 어드바이스임을 나타낸다. @AfterReturning : applaud() 메소드가 performance()가 정상 반환하면 실행될 어드바이스임을 나타낸다. @AfterThrowing은 demandRefund(): performance()에서 예외가 발생하는 경우에 실행돼야 함을 나타낸다. performance() 포인트컷의 이름은 다른 어드바이스 애너테이션에 인자(값 파라미터)로 전달되고 있는데, 이를 통해 각 어드바이스가 어디에 적용돼야 하는지를 알 수 있게 된다 26
27
Pointcut execution의 표현식
[기본형식] execution(수식어패턴? 리턴타입패턴 클래스이름패턴?이름패턴(파라미터패턴)) 예 시 의 미 execution(public void set*(..)) 리턴타입이 void며 이름이 set으로 시작하며 파라미터가 0개 이상인매서드 execution(* sp.aop.service.*.*()) sp.aop.service패키지의 파라미터 없는 모든매서드 execution(* sp.aop.service.*.*(..)) sp.aop.service패키지의 파라미터가 0개 이상인 모든매서드 execution(* get*(*)) get으로 시작하고 1개의 파라미터를 갖는 매서드 execution(Integer read*(Integer, ..)) 리턴값이 Integer이고 매서드 이름이 read로 시작하며 첫번째 파라미터 타입이 Integer이고 1개 이상의 파라미터를 갖는 매서드 * = 모든 값을 의미 .. = 0개 이상의 의미를 표현함
28
Advice의 종류 Advice의 종류 스프링은 프록시를 이용해서 매서드 호출 시점에 Aspect를 적용하기 때문에 구현 가능한 Advice의 종류는 아래와 같음 종류 의미 Before Advice 대상 객체의 매서드 호출 전에 공통 기능을 실행함 After Returning Advice 대상 객체의 매서드가 익셉션 없이 실행된 이후 공통 기능을 실행한다. After Throwing Advice 대상 객체의 매서드를 실행하는 도중 익셉션이 발생한 경우 공통 기능을 실행한다 After Advice 대상 객체의 매서드 실행하는 도중에 익셉션이 발생했는지의 여부에 상관없이 매서드 실행 후 공통 기능을 실행함 (try-catch-finally에서 finally와 비슷함) Around Advice 대상 객체의 매서드 실행전, 후 또는 익셉션 발생 시점에 공통 기능을 실행하는데 사용됨.
29
같이 함께 못해서 미안해요 시험 잘 보세요!!
Similar presentations