23/04/10(Spring개념정리)

조영문·2023년 4월 10일
0

개념정리

목록 보기
3/3

JSP의 라이브러리 JSTL사용법

JSTL이란 ?

  • 일반적으로 JSTL은 JSTL(JavaServer Pages Standard Tag Library) + EL의 조합을 말한다.
  • HTML 코드 내에 java 코드인 스크립틀릿 <%= student %>를 ${student}로, <%=if %>문을 <c:if>, <%=for%>문을 <c:forEach>로 대체하여 사용한다.

사용법

EL(Expression Language)

  • JSP 2.0 부터는 JSP 컨테이너가 EL표현식을 해석할 수 있게 도어 표준 액션 태그, 커스텀 태그, 템플릿 데이터와 같이 자바코드를 사용해야 했던 모든 곳에 EL을 사용할 수 있다. EL은 자바스크립트에서 확장된 Xpath에서 힌트를 얻어 만들어진 언어로 값이 없는 변수(null)에 대해 좀 더 관대하고 데이터 형 변환을 자동으로 해주는 특징이 있다. EL을 사용하면 값이 없거나 형 변환 등에 전혀 신경 쓸 필요 없이 서버로 전송해서 형변환 없이 사용할 수 있다.

사용법

스크립틀릿 vs JSTL

참고자료

https://daesuni.github.io/jstl/

POJO(Plain Old Java Object)

  • 오래된 방식의 자바 오브젝트
  • 특정 기술에 종속되지 않는 순수한 자바 객체(Ex. DTO에 getter, setter)
  • 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트이다

자바 어노테이션(Java Annotation)

  • 사전적 의미는 주석 / 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종
    - 메타데이터 : 애플리케이션이 처리해야할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지를 알려주기 위한 초기 정보이다.
  • 보통 '골뱅이(@)' 기호를 앞에 붙여서 사용한다.
  • 컴파일러에게 코드 작성 문법 에러를 체크할도록 정보 제공
  • 소프트웨어 개발 환경이 빌드나 배포시 코들르 자동으로 생성할 수 있도록 정보 제공
  • 런타임에 특정 기능을 실행하도록 정보 제공
  • 대표적으로 @Override, @Deprecated, @SuppressWarnings 등이 있다.

메타 어노테이션

  • 커스텀 어노테이션을 만들 때 사용한다.
  • @Retention : 어노테이션의 리텐션 기간을 명명한다.
  • @Document : 자바문서에도 어노테이션 정보가 표현된다.
  • @Target : 생설할 어노테이션이 적용될 수 있는 위치를 나열한다. 등등

자바 리플랙션(Java Reflection)

  • JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 해당 정보를 JVM 메모리에 저장한다. 그렇게 저장된 클래스에 대한 정보가 마치 거울에 투영된 모습과 닮아있어, 리플랙션이라는 이름을 가지게 된다. 리플랙션을 사용하면 생성자, 메소드, 필드 등 클래스에 대한 정보를 아주 자세히 알아낼 수 있다.
  • 대표적으로 여러 라이브러리, 프레임워크에서 사용되는 어노테이션이 리플랙션을 사용한 예시이다. 리플랙션을 사용하면 클래스나 메소드에 어떤 어노테이션이 붙어 있는지 확인할 수 있다. 어노테이션은 그 자체로는 아무 역할을 하지 않는다. 리플랙션 덕분에 우리가 스프링에서 @Component, @Bean과 같은 어노테이션을 프레임워크의 기능을 사용하기 위해 사용할 수 있는 것이다.

Maven vs Gradle

Maven

  • 아파치 메이븐은 자바용 프로젝트 관리 도구이다.
  • 아파치 Ant의 대안으로 만들어졌다.
  • 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.
  • 프로젝트를 진행하면서 사용하는 수 많은 라이브러리들을 관리해주는 도구, 그 라이브러리들과 연관된 라이브러리들까지 거미줄처럼 모두 연동이 되서 관리가 된다.

POM(Project Object Model)

  • Maven의 기능을 이용하기 위해 POM을 사용
  • pom.xml
    - 프로젝트 정보 : 프로젝트 이름, 라이센드 등
    - 빌드 설정 : 소스, 리소스, 라이브사이클별 실행한 플로그인 등 빌드와 관련된 설정
    - 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
    - pom 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등

Gradle

  • 빌드, 프로젝트 구성/관리, 테스트, 배포 도구
  • 안드로이드 앱의 공식 빌드 시스템
  • 빌드 속도가 Maven에 비해 10~100배 가량 빠름
  • Java,C/C++, Python 등을 지원
  • 빌드툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용 가능

Maven vs Gradle


  1. 스크립트 길이와 가독성 면에서 gradle이 우세하다.
  2. 빌드와 테스트 실행 결과 gradle이 더 빠르다. (gradle은 캐시를 사용해서 테스트 반복 시 차이가 더 커진다)
  3. 의존성이 늘어날수록 성능과 스크립트 품질의 차이가 심해질 것이다.

IoC, DI, AOP

IoC(Inversion of Control; 제어의 역전)

  • 프레임워크의 라이프사이클을 관리한다.
  • 객체의 생성과 그 객체들의 관리까지 모두 한다는 개념
  • IoC 컨테이너는 객체의 생성, 초기화, 서비스 소멸에 관한 모든 권한을 가지면서 객체의 생명주기를 관리한다.

DI(Dependency Injection; 의존성 주입)

  • 객체 자체가 아니라 프레임워크에 의해 객체의 의존성이 주입되는 설계 패턴인데 IoC와 연결되는 개념이다. IoC의 제어권이 프레임워크에게 가게 되는 것은 IoC컨테이너는 DI를 통해 주입시키는데 주입하는 방법은 생성자, 메소드의 setter, 멤버변수에 @Inject, @AutoWired를 통해 주입한다.

AOP(Aspect Oriented Programming; 관점지향프로그래밍)

  • 개발 시 반복되는 작업들이 있다. 이것들의 공통 작업되는 것들을 모아서 필요한 적절한 시기에 적용하는 개념이다.
  • 따로 코드 밖에서 개발을 해두고 프록시 개념으로 메소드가 실행되기 전, 실행된 직후, 실행시점에 따라 기능을 적용시키는 것이다.

서블릿 컨테이너와 서블릿

Servlet(서블릿)

  • 클라이언트 요청을 처리하고, 그 결과를 반환하는 웹 프로그래밍 기술이다. 클라이언트가 요청을 하면 그에 대한 결과를 다시 전송해주는 역할을 자바 프로그램이 하는 것이다. 동적인 페이지를 작성가능하다.
  • http요청(request) / 응답(response)
  • Servlet 동작 방식
  • 사용자가 URL(ex. localhost:8080/hello) 입력하면 HTTP request가 Servlet Container로 전송
  • 요청을 전송받은 Servlet Container는 HttpRequest, HTTPResponse 객체를 생성
  • 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾는다. 여러기서 helloServlet을 찾게 된다.
  • service 메서드를 호출한 후 클라이언트의 GET,POST 여부에 따라 doGet(), doPost()를 호출
  • 동적페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.
  • 응답 후 HttpServletRequest, HttpServletResponse 객체를 소멸한다.

Servlet Container(서블릿 컨테이너)

  • 스스로 동작하지 않는 서블릿을 관리해주는 컨데이너이다. 클라이언트 요청을 받고 응답할 수 있도록 웹서버와 소켓으로 통신한다. 톰캣이 서블릿 컨테이너의 대표적인 예이다.
  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리한다.
  • 서블릿 객체는 싱글톤으로 관리한다.
  • 동시 요청을 위한 멀티 쓰레드 처리 지원한다.

스프링 컨테이너와 빈(Bean)

Spring Container(스프링 컨테이너)

  • 스프링에서 자바 객체들을 관리하는 공간을 말한다. 자바 객체를 스프링에선 빈이라고 하는데, 스프링 컨테이너에서 이 빈의 생성부터 소멸까지를 개발자 대신 관리해주는 곳이다.
  • 컨테이너느 크게 두 가지이다. BeanFactory, ApplicationContext이다. ApplicationContext 컨테이너가 BeanFactory의 기능을 포괄하면서 추가적인 기능을 제공하기 때문에 대부분의 경우에는 ApplicationContext을 사용한다.
  • 스프링 컨테이너에 객체, 빈을 등록하는 이유는 스프링이 각 객체간 의존관계를 관리하도록 하는데에 큰 목적이 있습니다. 객체가 의존관계를 등록할 때는 스프링 컨테이너에서 해당하는 빈을 찾고, 그 빈과 의존성을 만듭니다.

Bean(빈)

  • 스프링은 보통의 경우 스프링 컨터이너에 빈 인스턴스를 단 한개만 저장하는 싱글톤 방식을 채택한다. 빈 이름은 항상 다르게 지정이 되어야 한다. 유지보수, 에러 관리 차원에서.
  • 스프링 빈 등록 방법 2가지
  1. 컴포넌트 스캔
    • @Component 어노테이션을 통해 가능한데, 이 외에도 스프링 프레임워크에서 제공하는 @Controller나 @Service 혹은 @Repository와 같은 Annotation은 인터페이스로 @Component 어노테이션을 받기 때문에 컴포넌트 등록 가능.
  2. 스프링 빈 직접 등록
    • 스프링 빈을 직접 등록하는 것은 @Configuration과 @Bean 어노테이션으로 가능하다

스프링 프레임워크 / 스프링부트 프레임워크

TCP SCHOOL 사이트에서 실습

  • JQuery
  • Ajax

0개의 댓글