JSTL, POJO, Annotation, 자바 리플렉션, Maven, Gradle, IoC, DI, AOP, 서블릿 컨테이너, 서블릿, 스프링 컨테이너, 빈

정영하·2023년 4월 10일
0

Spring jsp에서 JSP사용

  • build.gradle이나 pom.xml파일에 JSTL 추가
  • 빌드 툴에 맞게 둘 중 하나 build.gradle 이나 pom.xml에 추가
# build.gradle
implementation 'javax.servlet.jsp.jstl:jstl:1.2'
<!-- pom.xml -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
  • 다음 jsp파일 안에 talib 지시자로 라이브러리 선언을 해서 JSTL에서 사용
<%@ taglib prefix="{접두어}" uri="{관련 URI}" %>

<!-- ex -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

POJO

  • Plain Old Java Object, 오래된 방식의 간단한 자바 오브젝트
  • 특정 기술에 종속되지 않는 순수한 자바 객체, 특정 프레임워크에 의존하게 되면 POJO 라고 할 수 없다.
  • 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.

Annotation

  • 참고
    링크텍스트

  • 사전적 의미로는 주석

  • 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
    - 프로그램에게 추가적인 정보를 제공해주는 메타데이터(meta data : 데이터를 위한 데이터)라고 볼 수 있다.

  • Annotation 자체는 아무런 동작을 가지지 않는 단순한 표식일 뿐이지만, Reflection을 이용하면 Annotation의 적용 여부와 엘리먼트 값을 읽고 처리할 수 있다.

  • 종류가 많다

Annotation 사용 순서

  1. Annotation 정의
  2. 클래스에 배치
  3. 코드가 실행되는 중에 Reflection을 이용하여 추가 정보를 획득하여 기능을 실시

Reflection

  • Reflection이란 프로그램이 실행 중에 자신의 구조와 동작을 검사, 조사, 수정 하는 것이다.
  • Java와 같은 객체 지향 프로그래밍 언어에서 Reflection을 사용하면 컴파일 타임에 인터페이스, 필드, 메소드의 이름을 알지 못해도 실행 중에 클래스, 인터페이스, 필드 및 메소드에 접근할 수 있다.
  • Java와 은 객체 지향 프로그래밍 언어에서 Reflection을 사용하여 멤버 접근 가능성 규칙을 무시할 수 있다.

Maven

  • Maven은 Apache사에서 만든 빌드툴이다.
  • 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다.
  • 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
  • Maven은 중앙 저장소를 통한 자동 의존성 관리를 중앙 저장소(아파치 재단에서 운영관리) 라이브러리를 공유하는 파일 서버라고 볼 수 있다.
  • 프로젝트의 전체적인 라이프 사이클을 관리한다.
  • 플러그인을 구동해주는 프레임워크로 모든 작업은 플러그인에서 수행하게 된다.

특징

  • 빌드 과정을 쉽게 만든다
  • 정형화된 빌드 시스템 제공
  • Maven은 POM과 플러그인 세트를 사용하여 프로젝트를 빌드한다.
  • 양질의 프로젝트 정보 제공
  • 더 나은 개발

장점

  • 편리한 의존성 라이브러리 관리
  • 정해진 빌드 방법을 사용하여 협업에서 유리하게 작용
  • 다양한 플러그인을 통해 많은 작업이 자동화된다.

Gradle

  • Gradle은 CI/CD를 위한 아래 Task들을 자동화 시켜주는 Build Tool이다.
    - Compile : 안드로이드를 기준으로 Compile은 Kotlin 파일이나 Java파일을 바이트 코드로 변환해주는 작업
    • Test : 어플리케이션이 제대로 동작할지에 대한 Test(유닛 테스트, UI 테스트 등)를 지원
    • Packaging : 코드를 패키징해 aab파일이나 apk 파일로 만들어주는 것을 뜻한다
    • Deploy & Run : 코드를 어플리케이션으로 패키징해서 실제 기기에 넣어서 실행할 수 있도록 만들어주는 것을 뜻한다.

장점

  • 직관적인 코드와 자동완성
  • 다양한 Repository 사용 가능
  • 각 작업에 필요한 라이브러리들만을 가져오는 작업
  • 빌드 속도가 빠른 이유
    - 점진적 빌드
    - Gradle의 점진적 빌드는 이미 빌드된 파일들을 모두 다시 빌드하는 것이 아닌 바뀐 파일들만 빌드하는 것을 뜻한다. 이는 다른 빌드 툴들에 비해 많은 속도 향상을 이루어 낸다
    • Build Cache
      • 만약 두개 이상의 빌드가 돌아가고, 하나의 빌드에서 사용되는 파일들이 다른 빌드들에 사용된다면 Gradle은 빌드 캐시를 이용해 이전 빌드의 결과물을 다른 빌드에서 사용할 수 있다. 다시 발드하지 않아도 됨으로 빌드 시간이 줄어들게 된다.
    • Daemon Process
      • 메모리 상에 빌드 결과물을 보관한다. 이로 인해 한번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다. 실제로 안드로이드의 경우 프로젝트가 복잡해지면 처음 빌드하는데 긴 시간이 걸리는데, 둘째 빌드부터는 매우 적은 시간이 소모된다.
        • 다음 명령어로 데몬 프로세스 수행 여부를 결정할 수 있다.
gradle build --daemon
gradle build --no-daemon

IoC

  • Inversion of Control, 제어의 역전
  • 스프링 어플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 어플리케이션 코드 대신 스프링 컨테이너가 담당한다.
  • 이를 스프링 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.
  • 스프링 컨테이너를 IoC 컨테이너라고 부른다.

DI

  • Dependency(의존 관계)
  • A가 B를 의존한다 = 의존대상 B가 변하면 그것이 A에 영향을 미친다.
  • DI(의존 관계 주입) : 의존 관계를 외부에서 결정하는 것

AOP

  • Aspect Oriented Programming의 약자로 관점 지향 프로그래밍
  • 관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점으 기준으로 각각 모듈화 하는 것

AOP 주요 개념

  • Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함.
  • Target : Aspect를 적용하는 곳 (클래스, 메서드 .. )
  • Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체
  • JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
  • PointCut : JointPoint의 상세한 스펙을 정의한 것. 'A란 메서드의 진입 시점에 호출할 것'과 같이 더욱 구체적으로 Advice가 실행될 지점을 정할 수 있음

스프링 AOP 특징

  • 프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서임
  • 스프링 빈에만 AOP 적용가능
  • 모든 AOP 기능을 제공하는 것이 아닌 스프링 IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체들 간 관계 복잡도 증가 ...)에 대한 해결책을 지원하는 것이 목적

Servlet

  • 클라이언트 요청을 처리하고 그 결과를 반환하는 웹프로그래밍 기술 클라이언트가 요청을 하면 그에 대한 결과를 다시 전송해주는 역할을 자바 프로그램이 하는 것이다.

Servlet Container

  • 서블릿 컨테이너는 스스로 동작하지 않는 서블릿을 관리해주는 컨테이너
  • 클라이언트의 요청을 받고 응답 할 수 있도록 웹서버와 소켓으로 통신한다.
  • 톰캣이 대표적인 예시

Spring Container

  • 스프링 컨테이너는 스프링에서 자바 객체들을 관리하는 공간.
  • 자바 객체를 스프링에서 Bean이라고 한다.
  • 빈의 생성부터 소멸까지를 개발자 대신 관리해주는 곳
  • 크게 BeanFactory와 ApplicationContext로 나눈다.

0개의 댓글