<Interview> 2. Spring 정리
by BFine반응형
1. Spring 특징
자바기반의 어플리케이션 개발을 편하게 해주는 오픈소스 프레임워크이다.
-
경량의 프레임워크, IoC/DI, AOP, POJO를 지원
가. 프레임워크
- 프레임워크란 뼈대 이루는 코드, 기본적으로 제공하는 반구현 코드를 의미한다
- 개발자간 실력차이를 줄일 수 있음
- 유지보수 편리
나. IoC(Inversion of Control) / DI(Dependency Injection)
- 스프링 컨테이너에서 객체의 라이프사이클(생성,삭제)을 관리
- 객체 간의 의존성을 스프링 컨테이너에서 주입(new)시켜주는 기능
- 의존성이란 하나의 객체가 다른 객체 없이 제대로 할 수 없다는 것을 의미(Autowired 주입)
다. 컨테이너
- 컨테이너란 개발자가 작성한 코드의 처리과정을 받아서 자체적으로 처리하는 기능을 하는 것이다.
라. AOP(Aspect Oriented Programming)
- 관점지향프로그래밍 개발을 할때 핵심적인 부분과 공통으로 등작하는 로직을 분리하는 것을 의미(응집도 높아짐)
- 공통기능들은 외부의 독립된 클래스로 분리하고 코드에는 선언적으로 처리하여 적용
- 스프링은 프록시 기반의 AOP를 지원한다.(메서드에만 조인포인트 적용할 수 있음)
- pointcut : 어떤 형태의 메서드들에 advice를 결합할 것 인지 표기하는 것
- advice : 공통적인 부분들을 코드로 분리해 놓을 것을 의미합니다.
- Aspect : advice + pointcut => 어디에 적용할지 결정
- target : 핵심기능, advice를 적용하는 부분
- join point : advice 적용되는 기능들
- weaving : join point에 advice를 적용하는 과정
마. POJO(Plain Old Java Bean)
- 특정 인터페이스나 클래스를 상속받지 않는 순수 자바객체를 스프링 컨테이너가 저장(부품공장)
- POJO가 아닌 것은 Servlet 처럼 Httpservlet을 상속받아 구현해야 객체를 의미한다.(제약이 많음)
바. 구동
- 요청-> Web.xml -> 디스패쳐 서블릿 (판단) -> View or 핸들러 메소드를 호출 -> 컨트롤러 -> View
- Web.xml -> root-context.xml -> servlet-context.xml
- 스프링이 시작되면 스프링이 사용하는 메모리 영역을 만드는데 이를 Context라 한다.
- 이후 객체들을 생성 관리 해야하는 객체들에 대한 설정은 root-context.xml
- scan을 통해 패키지 탐색 -> @Component 어노테이션의 인스턴스 생성 -> DI
- 프레임워크란 뼈대 이루는 코드, 기본적으로 제공하는 반구현 코드를 의미한다
2. MVC
- 프로젝트를 Model View Controller로 3가지 구성요소로 나누어 개발하는 것을 의미한다.
- Controller 에서는 모든 요청을 받아서 각각의 요청에 따라 Model, View로 보내주는 역할을 담당한다.
- Model은 비지니스로직을 생성하고 처리하는 역할을 담당한다. (데이터 관리 등)
- View는 요청에 따라 사용자에서 화면을 보여주는 역할을 담당한다.
3. JDBC
- 자바 데이터베이스 커넥터로 자바 로직에서 데이터베이스에 접솔할 수 있게하는 자바 API
- 구현해야하는 로직이 많아서 주로 ORM을 활용한다.
PreparedStatement
은 set반환형(?의 인덱스,입력값)의 형태로 사용하고ResultSet
으로 결과값을 받는다.
4. DAO, DataSource, Connection Pooling
- DAO(data Access Object)로 DB에 직접 접근하는 객체로 개발자가 정의한 비즈니스 로직과 연결하는 고리역할을 한다.
- DataSource는 DB의 Connection 정보를 담고 있는 Bean이다.
- Connection Pooling은 DB와 연결되는 통로를 미리 만들어서 pool에 저장해두어 필요할때 쓰고 다시 반환하는 방법이다.
5. Bean
- Spring에서의 Bean은 애플리케이션을 구성하는 동시에 Spring IoC 컨테이너에 의해 관리되는 객체들을 말한다.
- 개발자가 생성한 객체가 아닌 Spring에서 라이프사이클을 담당하는 객체를 의미한다.
6. ORM
Object-Relational Mapping으로 RDB는 객체지향이 아니기 때문에 나온 기술
-
RDB의 데이터 읽고 쓰는 처리를 객체에 데이터를 읽고 쓰는 방식으로 구현한 기술이다.
가. JPA & Hibernate
- Java Persistance API는 표준 ORM 기술로 종류 중 하나로 Hibernate가 있다.
- Persistance : 지속성 별도의 기억장소에 데이터를 보존
- 객체지향을 DB에도 접목시켜 객체지향프로그래밍을 극대화하는 장점이 있다.
- 장점으로 관계매핑, Entity 테이블 생성 관리 가능함, CRUD 편
나. Mybatis
- SQL 기반으로 데이터베이스에 접근(ORM이 아니다), SQL mapper
- 기존의 SQL을 사용하기 때문에 진입장벽이 낮다.
- 단점으로 컬럼이 추가될경우 VO 수정-> 쿼리수정 -> 로직수정 해야하는 번거로움
7. RESTAPI
API(Application Programming Interface)는 어플리케이션 간 제어를 위해 미리 약속된 규약이나 인터페이스
인터페이스는 2개 이상의 시스템이 상호연결을 할 수 있게 도와주는 것들(하드웨어, 소프트웨어, 규약 등)
REST(Representational State Tansfer) API
앱에서 HTML이 아닌 고유화면을 사용하게 되면서 서버의 역할은 데이터에 대한 처리를 목적으로 하는 형태로 진화했다.
-
REST는 서버와 클라이언트 사이에서 주고받는 아키텍처 스타일 중 하나로 HTTP 프로토콜 이용하는 리소스 중심의 처리 방법이다.
- URI를 계층적으로 설계(GET, POST, PUT, DELETE)
- 요청 횟수와 상관없이 결과가 일정하기 때문에 오류가 발생하더라도 HTTP status 코드를 확인해 유지보수가 용이하다.
- 순수한 XML이나 JSON을 반환한다.
- Stateless
가. JSON
- JavaScript Object Notation(표기법) 대괄호 안에 Key : value 형태로 구성되는 경량의 데이터 포멧
8. JSP & Servlet
- Java Server Page로 HTML에 자바를 사용해서 웹서버에서 동적페이지를 생성하는 서버사이드 스크립트 기반의 언어이다.
- 이전에 Servlet으로 자바코드를 만들어서 동적페이지를 구성했는데 수정하면 다시 컴파일 해야하므로 생산성 저하가 발생했다.
- 스크립트 언어는 프로그램 실행과정 없이 번역만 하기때문에 메모리 효율이 좋다.
9. Spring Security
- 필터와 인터셉터 기반의 권한부여와 인증을 처리하는 프레임워크
- CSRF(Cross Site Request Forgery) 방지(시큐리티는 CSRF토큰을 사용하는데 이 토큰값 비교를 통해 검사)
- 공격자가 메일이나 게시물에 악성 스크립트를 심어 사용자가 이를 확인할 경우 사용자의 권한으로 스크립트가 실행되는 공격방법(서버공격)
- XSS 웹페이지에 악성코드를 심어놓아 클라이언트의 쿠키를 가로체는 방법이다.(클라이언트공격)
10. Spring boot
- 기존 spring의 복잡한 설정들을 도와주어 개발자는 간단한 스프링 설정을 통해 웹어플리케이션을 구축할 수 있게 도와주는 플랫폼(도구)
- 기존 Spring의 무거운 설정(XML)을 대신 자동으로 처리하여 프로젝트 개발을 간편하게 해주는 개발 플랫폼이다
- 내장 WAS (tomcat, jetty)가 있어 war 파일을 배포할 필요가 없다.(자체적으로 배포&실행)
- 장점 : starter - Dependency , 내장WAS , 자동설정
- 단점 : 큰규모에 적합하지 않다(?)
11. 프록시 패턴
- 클라이언트가 직접 타켓에 접근하려고 할때 프록시가 인터셉트해서 대신 처리하는 것 (권한,흐름제어를 가짐, 인터페이스 역할)
- 장점은 캐싱을 통해 이미 로딩 된 부분에 대해서는 다시 타겟에 접근 할 필요없이 프록시에서 처리한다.
- 단점은 새로운 클래스를 추가해야 할때 인터페이스를 추가해야한다.
12. DispatherServlet
- 클라이언트의 요청을 받아 요청에 대한 컨트롤러를 선택하여 전달하고 또한 반환결과(뷰, 데이터)를 응답으로 클라이언트에게 전달하는 역할을 한다.
참고 & 출처
- 아이티고 Spring 강좌
- https://itmining.tistory.com/20
- https://gmlwjd9405.github.io
- https://limmmee.tistory.com/13
- https://www.slideshare.net/rheehot1/connection-pool-67337828
- https://overman.tistory.com/entry/JSP-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
- https://m.blog.naver.com/PostView.nhn?blogId=tmondev
- http://elearning.kocw.net/ucampus/cyber/1/lecture_09/lec_02.html
- https://youtu.be/X4vsFpPg1z4
- 스프링 퀵 스타트
- 코드로 배우는 스프링 웹프로젝트 개정판
반응형
'공부(2018~2019) - 스킨변경전 > Interview' 카테고리의 다른 글
<Interview> 6. 기타 정리 (0) | 2019.03.25 |
---|---|
<Interview> 5. 운영체제 정리 (0) | 2019.03.06 |
<Interview> 4. 자료구조 정리 (0) | 2019.03.05 |
<Interview> 3. 네트워크 정리 (0) | 2019.03.04 |
<Interview> 1. JAVA 정리 (0) | 2019.03.02 |
블로그의 정보
57개월 BackEnd
BFine