필기시험준비3
스프링 프레임워크
스프링 프레임워크는 자바 개발을 편리하게 해주는 오픈소스 프레임워크 이다.
경량 컨테이너로서 자바 객체를 직접 관리
각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
제어의 역전(IoC)이라는 기술을 통해 어플리케이션의 느슨한 결합을 도모
컨트롤의 제어권이 사용자가 아닌 프레임워크에 있어서 필요에 다라 스프링에서 사용자의 코드를 호출한다.
의존성 주입(DI, Dependency Injection)을 지원
각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
관점 지향 프로그래밍(AOP, Aspect-Oriented Programming)을 지원
트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.
1. POJO
코드를 개발할때 개발자가 특정 라이브러리나 컨테이너 기술에 종속적이지 않음을 의미한다.
자바코드를 이용해서 객체를 구성하는 방식 그대로 스프링에서 사용할 수 있다.
개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있어서 생산성과 유연한테스트를 할 수 있게 된다.
2.DI
의존성주입 특정객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 말한다.
xml이나 java설정파일을 통해 객체간의 의존관계를 설정함으로써 객체는 직접 의존하고 있는 객체를 생성하거나 검색할필요가 없다.
구현객체가 달라졋을때 구현 클래스만 바꿔주면되고 그것을 의존하고 있는 객체를 바꿀필요가 없어진다.
정형화된 컨트롤러 서비스 리포지터리 같으 ㄴ코드는 컴포넌트 스캔을 활용하고
구현클래스를 변경해야하면 설정을 통해 스프링빈으로 등록한다.
DI가없다면 객체에서 필요료하는 객체를 직접생성해서 사용해야하는데 결합력이 너무 높아진다느 문제가 있다. 이를 해결해준다.
3. aop
관점지향프로그래밍이다. 다양한 곳에서 공통적으로 사용되는 관심요소를 단일 기능으로 뽀아내어 코드의 중복을 줄이고 관리를 효율적으로 하는 것을 목표로한다.
같은 클래스안에 둘다 정의하면 핵심비즈니스 로직과 공통로직이 섞여있을때 관리하기 어렵다
시간측정, 로그작성 같은 것을 말하는데 이 aop를 스프링이 지원한다.
4. MVC구조란
Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분, (DAO, DTO, Service 등)
View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간 (html, jsp, tymeleaf, mustache 등 화면을 구성하기도 하고, Rest API로 서버가 구현된다면 json 응답으로 구성되기도 한다.)
Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할. Model과 View는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어준다.
1.클라이언트는 URL을 통해 요청을 전송한다.
2.디스패처 서블릿은 핸들러 매핑을 통해 해당 요청이 어느 컨트롤러에게 온 요청인지 찾는다.
3.디스패처 서블릿은 핸들러 어댑터에게 요청의 전달을 맡긴다.
4.핸들러 어댑터는 해당 컨트롤러에 요청을 전달한다.
5.컨트롤러는 비즈니스 로직을 처리한 후에 반환할 뷰의 이름을 반환한다.
6.디스패처 서블릿은 뷰 리졸버를 통해 반환할 뷰를 찾는다.
7.디스패처 서블릿은 컨트롤러에서 뷰에 전달할 데이터를 추가한다.
8.데이터가 추가된 뷰를 반환한다.
아키텍쳐 패턴이다. 이패턴을 사용해서 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션 시각적요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영ㅇ향없이 쉽게 고칠 수 있따.
5. 제어의 역전
제어의 역전(IoC)란 모든 객체에 대한(생성, 라이프사이클 등) 제어권을 개발자가 아닌 IoC 컨테이너에게 넘긴 것을 말한다.
스프링에서는 IoC 컨테이너에 객체들을 생성하면 객체끼리 의존성을 주입(DI, Dependency Injection)하는 역할을 하고
컨테이너에 등록한 객체들을 '빈'이라고 한다.
부품들을 조립해서 생성까지 해줘서 담아준다. 작은부품 - 큰부품 -더큰부품 의 순서대로 조립된다.
그런데 일체형이라고 생각하며 A->B>C->D로 만들어진다.
결합형은 반대로 생성이 된다. 이것이 Inversion of Contorl(역순)이라는 뜻임. 이 부품들이 결합도되니 IoC 컨테이너라고 한다.
6. 싱글톤
스프링에서 bean 생성시 별다른 설정이 없으면 default로 싱글톤이 적용된다.
스프링은 컨테이너를 통해 직접 싱글톤 객체를 생성하고 관리하는데,
요청이 들어올 때마다 매번 객체를 생성하지 않고, 이미 만들어진 객체를 공유하기 때문에 효율적인 사용이 가능합니다.
이를 통해 다음과 같은 장점을 얻을 수 있다.
static 메소드나 private 생성자 등을 사용하지 않아 객체지향적 개발을 할 수 있다.
테스트하기 편리하다.
싱글톤패턴이란
Singleton pattern(싱글턴 패턴)이란 애플리케이션에서 인스턴스를 하나만 만들어 사용하기 위한 패턴이다.
커넥션 풀, 스레드 풀, 디바이스 설정 객체 등의 경우, 인스턴스를 여러 개 만들게 되면 자원을 낭비하게 되거나 버그를 발생시킬 수 있으므로 오직 하나만 생성하고 그 인스턴스를 사용하도록 하는 것이 이 패턴의 목적이다.
7. maven & gradle
프로젝트 관리에 필요한 모든 작업을 추상화하고 표준화해서 반복을 제거한다.
라이브러리를 지원함으로써 직접 설치안해도된다.
프로젝드 빌드에필요한 라이브러리 플러그인들을 저장소에서 개발자 pc로 자동다운로드해준다.
jsp & 서블릿
1.JSP와 서블릿의 차이?
서블릿인 이유
servlet이라고 명칭하는 이유? 클라이언트가 list reg edit del요청하는데 서버에는 그럴때마다 해결할수잇는 코드가 있다.
서버는 요청에 따라 파현화된 것이 실행되고 종료되면 끝난다. 조각난 서버어플리케이션을 의미하는 것같다. Server Application Let이라 servlet
서블릿은 자바코드에 HTML코드가 삽입
JSP는 JAVA SERVER PAGE로 HTML코드에 JAVA코드가삽입
서블릿클래스는 컴파일과정과 등록과저이 필요하지만 jsp는 필요없다.
복잡한 로직을 구현하면 html중심의 코드가 이해하기 어렵게 만들수있다.
그래서 JSP와 서블릿을 혼용한 mvc프로그래밍 방법을 사용한다. model2
2. JSP구성요소인 지시어 주석문 선언문 연사문 수행문
지시어
<%@ %> page JSP페이지에 대한 정보를 지정한다.(문서타입 출력 버퍼크기 에러페이지)
language, contentType, import session buffer등등
taglib JSP페이지에서 사용할 태그 라이브러리 지정
include JSP페이지의 특정 영역에 다른 문서를 포함
선언문
<%! %>자주사용X
연산문(표현식)
<%=%>값을 출력
수행문(스크립트릿)
<%%>자바코드를 실행
3. request response객체
request : 클라이언트에서 넘어오는 데이터를 전달받기 위한객체
response : 서버에서 클라이언트로 데이터를 전달하기 위한객체
4. GET방식과 POST방식차이
GET은 URL에 값이 ?뒤에쌍으로 이어붙이고 POST는 BODY에 붙여서 값을 전달한다.
GET은 클라이언트에서 어떠한 리소스부터 정보를 요청하기 위해 사용되는 메서드
데이터를 읽거나, 검색할 때 사용되는 메서드로 사용됩니다.
POST는 리소스를 생성, 업데이트 하기 위해 서버에 데이터를 보낼 때 사용되는 메서드
GET과 달리 전송해야 되는 데이터를 body에 담아서 전송되며, content-Type에 요청 데이터 타입 표시에 따라 결정 됩니다.
5. 쿠키와 세션
쿠키는 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일입니다.
HTTP에서 클라이언트의 상태 정보를 PC에 저장했다가 필요시 정보를 참조하거나 재사용할 수 있다.
세션은 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다.
쿠키는 클라이언트에 서 실해되서 보안이 취약하나 속도가빠르다.
세션은 서버에 실행되며 속도는 느리지만 보안기능이 강력하다 로그인들을 세션으로 처리한다.
6. XML
XML은 특수목적의 마크업 언어를 만드는 용도에서 권장되는 다목적 마크업 언어이다.
XML은 수맣은 데이터 기술하는데 적용할 수 있다.
단순성 일반서어 인터넷을 통한 사용가능성을 강조하였다. XML은 텍스트데이터형식으로 유니코들르 통해 전세계언어를 지원한다.
XML설계가 문서에 집중하지만 임의의 자료구조를 나타내는데 널리쓰이고 있다.
7. REST API란
REpresentational State Transfer 의 약자이다. 여기에 ~ful 이라는 형용사형 어미를 붙여 ~한 API 라는 표현으로 사용된다.
즉, REST 의 기본 원칙을 성실히 지킨 서비스 디자인은 'RESTful'하다라고 표현할 수 있다.
리소스 와 행위 를 명시적이고 직관적으로 분리한다.
리소스는 URI로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 한다.
행위는 HTTP Method로 표현하고, GET(조회), POST(생성), PUT(기존 entity 전체 수정), PATCH(기존 entity 일부 수정), DELETE(삭제)을 분명한 목적으로 사용한다.
Message 는 Header 와 Body 를 명확하게 분리해서 사용한다.
Entity 에 대한 내용은 body 에 담는다.
애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API 버전 정보, 응답받고자 하는 MIME 타입 등은 header 에 담는다.
header 와 body 는 http header 와 http body 로 나눌 수도 있고, http body 에 들어가는 json 구조로 분리할 수도 있다.
API 버전을 관리한다.
환경은 항상 변하기 때문에 API 의 signature 가 변경될 수도 있음에 유의하자.
특정 API 를 변경할 때는 반드시 하위호환성을 보장해야 한다.
서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
브라우저는 form-data 형식의 submit 으로 보내고 서버에서는 json 형태로 보내는 식의 분리보다는 json 으로 보내든, 둘 다 form-data 형식으로 보내든 하나로 통일한다.
다른 말로 표현하자면 URI 가 플랫폼 중립적이어야 한다.
8. 그렇다면 API란?
API는 Application Programming Interface의 약자로서 운영체제와 응용프로그램 사이의 통신에 사용되는 언어나 메시지 형식을 이야기한다.
쉽게 말하면 API는 가게의 점원이라고 말할 수 있다. 점원은 손님의 주문을 받아 요리사에게 주문을 전달한다. 반대로 요리사에게 받은 음식을 손님에게 전달한다. 점원의 역할처러 API는 중간 전달자라고 할 수 있다.
각 손님과 요리사를 각 서버라고 한다면 API는 중간에서 양쪽 서버를 연결해주는 것이라고 이해할 수 있을 것 같다.
그렇다면 OPEN API(내가 사용했던 다음 카카오 지도 API등등)은 어디서든 활용할 수 있도록 만들어 놓은 것일아고 보면될 것같다.
API를 제공하는 기업은 자신의 서비스를 알릴수 있고 반대로 이용하는 기업은 서비스를 더 쉽고 좋게 사용할 수 있는 것이다.