- 웹서버
- 정적파일(html, css, js)
- 정적리소스(저장된 이미지, 동영상 등)
- 웹애플리케이션 서버
- 동적파일(jsp,servlet 등)
자바데이터를 html문자열로 감싼다
html사이에 자바 데이터를 넣는다.
자바객체
: 대상을 추상화 한 자바 코드
JSON
: 대상을 추상화 한 문자열 데이터
- 개별 바이트나 문자열인 데이터의 원천
- 데이터가 전송되는 통로
- 키보드, 파일, 네트워크 등등
- 객체를 데이터 스트림으로 만드는 것
- 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것
- 스트림을 객체로 만드는 것
- 다른 기종 간의 데이터 송수신
java객체 -> python객체
(호환이 되지 않아서 에러 발생)
java객체 -> 직렬화 -> json -> 역직렬화 -> python객체
프레임워크는 소프트웨어 개발을 위한 구조와 규칙들의 집합이다.
개발자들이 소프트웨어를 빠르게 개발하고 유지보수할 수 있도록 도와준다.
라이브러리와 프레임워크
협업 > 구조가 같으니 협업이 쉬움
안전성 > 확인해야할 사항들을 프레임워크가 체크함
보안 > 웹 관련 공격을 막을 방법을 미리 세팅해 놓음
신입 > 가이드가 없으면 신입은 코드를 짜기가 어려움
JSP 실행순서
- JDK(Java Development Kit) 설치
- Eclipse와 같은 Java용 통합 개발 환경(IDE) 설치
- IDE에서 Java 프로젝트 생성
- Java Servlet API 및 JavaServer Pages API 5. 라이브러리 추가
- 기타 라이브러리 추가
- web.xml 파일 구성. 서블릿 매핑과 JSP 매핑을 추가.
- 서블릿 파일 및 로직 파일 생성
- JSP 파일 생성
- Apache Tomcat과 같은 웹 서버를 사용하여 배포
Spring 실행순서
- JDK(Java Development Kit) 설치
- Eclipse와 같은 Java용 통합 개발 환경(IDE) 설치
- IDE에서 Spring Legacy 프로젝트 생성
- 메이븐 pom.xml에 라이브러리 추가
- web.xml 파일 구성
- root-context.xml 파일 구성
- servlet-context.xml 파일 구성
- applicationContext.xml 파일 구성
- dispatcher-servlet.xml 파일 구성
- 기타 등등 xml 파일 구성
- 서블릿 파일 및 로직 파일 생성
- JSP 파일 생성
- Apache Tomcat과 같은 웹 서버를 사용하여 배포
SpringBoot 실행 순서
- JDK(Java Development Kit) 설치
- Eclipse와 같은 Java용 통합 개발 환경(IDE) 설치
- start.spring.io에서 프로젝트 다운로드
- 로직 파일 생성 및 어노테이션 추가
- java -jar 로 배포
SpringBoot를 사용하면 간단한 실행 순서로 개발이 된다.
스프링 부트를 설명하자면
프로젝트 구성? 다 해놨어
톰캣 설치? 안해도 돼
라이브러리 버전? 특별한 거 아니면 신경 안 써도 돼
변형하고 싶다고? 맘대로 해
스프링 프레임워크랑 스프링 부트 프레임워크의 차이
IoC
개발자가 작성한 객체나 메서드의 제어를 개발자가 아니라 외부에 위임하는 설계 원칙을 제어의 역전이라고 한다.
즉, 프레임워크는 제어의 역전 개념이 적용된 대표적인 기술이라고 할 수 있다.
의존성 주입(DI)
어떤 작업을 할 때 꼭 필요한 객체를 개발자가 만들어서 넣는게 아니라 프레임워크한테 만들어서 넣어달라고 요청하는 것
즉, IoC는 DI(Dependency Injection)과 밀접한 관련이 있다.
DI는 IoC 원칙을 실현하기 위한 여러 디자인패턴 중 하나이다.
IoC와 DI 모두 객체간의 결합을 느슨하게 만들어 유연하고 확장성이 뛰어난 코드를 작성하기 위한 패턴이다.
AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.
관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것이다.
예를 들어 핵심적인 관점은 비즈니스 로직이 될 수 있고, 부가적인 관점은 핵심 로직을 실행하기 위해 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등이 될 수 있다.
모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것
소스 코드상에서 계속 반복해서 사용되는 부분들을 흩어진 관심사(Crosscutting Concerns)라고 한다.
결국 AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 흩어진 관심사(횡단관심모듈)를 모듈화하겠다는 의미다
1. 컴파일 타임 적용
컴파일 시점에 바이트 코드를 조작하여 AOP가 적용된 바이트 코드를 생성하는 방법.
2. 로드 타임 적용
순수하게 컴파일한 뒤, 클래스를 로딩하는 시점에 클래스 정보를 변경하는 방법
3. 런타임 적용
스프링 AOP가 주로 사용하는 방법. A라는 클래스 타입의 Bean을 만들 때 A 타입의 Proxy Bean을 만들어 Proxy Bean이 Aspect 코드를 추가하여 동작하는 방법.
Aspect : 흩어진 관심사를 모듈화 한 것.
- 스프링에서 제공하는 스프링 AOP는 프락시 기반의 AOP 구현체이다.
- 프록시 객체를 사용하는 것은 접근 제어 및 부가 기능을 추가하기 위해서이다.
- 스프링 AOP는 스프링 Bean에만 적용할 수 있다.
- 모든 AOP 기능을 제공하는 것이 목적이 아닌, 중복 코드, 프록시 클래스 작성의 번거로움 등 흔한 문제를 해결하기 위한 솔루션을 제공하는 것이 목적이다.
- 스프링 AOP는 순수 자바로 구현되었기 때문에 특별한 컴파일 과정이 필요하지 않다.
프록시 패턴
프록시 패턴에서는 interface가 존재하고 Client는 이 interface 타입으로 Proxy 객체를 사용한다.
Proxy 객체는 기존의 타겟 객체(Real Subject)를 참조한다.
Proxy 객체와 기존의 타겟 객체의 타입은 같고, Proxy는 원래 할 일을 가지고 있는 Real Subject를 감싸서 Client의 요청을 처리한다.
MVC 는 Model, View, Controller의 약자이다. 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴이다.
사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 된다.
애플리케이션의 정보, 데이타를 나타냅니다.
DATA, 정보들의 가공을 책임지는 컴포넌트를 말한다.
이 모델은 다음과 같은 규칙을 가지고 있다.
1. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
2. 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
3. 변경이 일어나면, 변경 통지에 대한 처리방법을 구현해야만 한다.
input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다.
데이터 및 객체의 입력, 그리고 보여주는 출력을 담당한다.
뷰에서는 다음과 같은 규칙들이 있다.
1. 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
2. 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
3. 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.
사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻합니다.
컨트롤러 또한 다음과 같은 규칙을 이해해야 합니다.
1. 모델이나 뷰에 대해서 알고 있어야 한다.
2. 모델이나 뷰의 변경을 모니터링 해야 한다.
MVC 사용 이유
서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 그렇게 애플리케이션을 만든다면, 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 되는 때문