You will be fine

<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

  • 클라이언트의 요청을 받아 요청에 대한 컨트롤러를 선택하여 전달하고 또한 반환결과(뷰, 데이터)를 응답으로 클라이언트에게 전달하는 역할을 한다.

참고 & 출처

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기