스프링은 프레임 워크이다.
스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
Spring MVC : 규모나 서비스가 어느 정도 있는 애플리케이션은 MVC로 만들어서 WAS로 배포하는게 유리
Spring boot : 내장 톰캣 사용이 가능하여 규모나 서비스가 크지 않은 프로젝트에 적합
Spring Framework의 생명 주기에 대해서 말해주세요.
프로젝트 관리 도구로 가장 많이 사용되는 용도는 프로젝트에 필요한 라이브러리를 자동으로 관리해주는 빌드 도구
🔸 개발자가 직접 원하는 곳에서 new를 이용해 객체 주소를 관리했다면 IoC를 이용해서 스프링이 객체를 스캔하여 메모리에 올리기 때문에 이제는 객체를 개발자가 관리하는 것이 아니라 스프링이 관리해준다.
DI (의존성 주입) : 스프링이 관리하는 객체들을 어디서든지 가져다가 사용할 수 있게 하는것, 어디서든지 동일한 객체를 사용할 수 있으므로 싱글톤으로 관리가능
@Component : 클래스 메모리에 로딩
@Autowird : 로딩된 객체를 해당 변수에 넣기
관점 지향 프로그래밍의 약자로 기존 OOP에서 기능별로 클래스를 분리하였음에도 불구하고 여전히 로그나 트랜잭션, 자원해제, 성능테스트 메서드처럼 공통적으로 반복되는 중복 코드가 발생한다는 단점이 생긴다.
이를 해결할 수 있도록 개발 코드에서는 비즈니스 로직에 집중하고 실행 시 비즈니스 로직의 앞과 두에서 원하는 지점에 해당 공콩 관심사를 수행할 수 있게 하면서 중복 코드를 줄일 수 있는 방식이 바로 이 방식
🔸 클래스는 OOP방식으로, 개발 코드(로그, 트랜잭션, 성능테스트)처럼 반복되는 코드는 AOP방식으로 해서 코드 중복을 줄이자
VO : DTO와 목적이 같지만 차이점은 불변의 성격으로 getter의 기능만
DTO (Data Transfer Object) : 프로세스 간에 데이터 전달 객체, getter, setter 메소드만 포함
DAO (Data Access Object) : 데이터 접근 객체, CRUD 기능 담당
자바코드로 웹을 할 수 있게 컨테이너로 모아놓은 것 ▶ 톰캣
자바를 사용하여 웹을 만들기 위해 필요한 기술로 클라이언트의 요청을 처리하고, 그 결과를 반환하는 자바 웹 프로그래밍 기술
client request(자바) ▶ 서블릿 컨테이너 ▶
최초요청 시 : 스레드 생성 ▶ 서블릿 객체 생성 ▶ response
재 요청 : 기존에 있는 스레드 재사용
Frontcontroller 패턴 : web.xml이 처리해야 할 일이 많기 때문에 특정 주소는 낚아채서 Frontcontroller가 관리하는 것
RequestDispatcher : 웹서버 내부에서 자원을 요청하다보면 톰캣이 새롭게 request/response 해야하는 경우가 생긴다. 그리하여 기존 request/response를 유지하기 위해 나온 것
🔸 DispatcherServlet = Frontcontroller 패턴 + RequestDispatcher
DispatcherServlet이 자동생성될 때 수 많은 객체가 생성(IoC)된다. 보통 필터들이다. 해당 필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들을 자동 등록
DispatcherServlet 목적
컴포넌트 스캔 ▶ IoC 역할을 해준다 ▶ 필요한 것들을 메모리에 올려줌 (어노테이션으로 구분) ▶ 주소분배
스프링 컨테이너 종류
빈 팩토리 (BeanFactory)
빈을 생성하고 분배하는 책임을 지는 클래스
빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화 하지 않는다 (Lasy loading)
ApplicationContext
빈팩토리와 유사하지만 좀 더 많은 기능을 제공하는 것
컨텍스트 초기화 시점에서 싱글톤 빈을 미리 로드한 후 애프릴케이션 기동 후에는 빈을 지연없이 얻을 수 있다. bean을 제외한 객체들은 바로 메모리에 로딩
스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트
메서드가 객체를 리턴할때 메서드에 @Bean 어노테이션 사용
초기에 메모리에 로드되지 않고 필요할 때 getBean()이라는 메소드를 통해서 호출하여 메모리에 로드 할 수있다. 지금은 getBean()을 사용하지 않고 IoC를 사용하여 DI로 사용한다. ApplicationContext와 다른 점은 Bean Factory에 로드되는 객체들은 미리 로드되지 않고 필요할 때 호출하여 로드돼기 때문에 lasy-loading이 되는 점이다.
Filter : DispatcherServlet의 앞단 정보를 처리
Interceptor : DispatcherServlet에서 controller로 가기전에 정보를 처리한다.
🔸 전역적으로 처리해야하는 로직은 필터로 클라이언트에서 들어오는 디테일한 처리(인증, 권한)에 대해서는 주로 인터셉터에 처리
Representational State Transfer 자원을 이름으로 구분하여 정보를 주고 받는 것으로 네트워크 상에서 클라이언트와 서버 사이의 통신 방법 중 하나
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 보다 쉽게 도와주는 프레임워크
특징
Controller ▶ Service ▶ DAO ▶ MyBatis ▶ Database
JPA (Java Persistence API)로 자바 프로그램을 할때 영구적으로 데이터를 저장하기 위해 필요한 인터페이스
spring MVC는 MVC 패턴 기반의 웹 프레임워크
Spring MVC에서 HTTP 요청이 들어왔을 때의 흐름을 설명해 주세요.
Spring Security는 Spring 기반의 애플리케이션의 보안(인증과 관한, 인가)를 담당하는 스프링 하위 프레임워크
Container가 이해할 수 있게 구성된 순수 자바 코드로 이루어짐
Get | Post |
---|---|
데이터 요청 | 데이터 전달 |
데이터가 URL에 노출됨 | 데이터가 노출되지 않음 |
길이제한이 있음 | 길이 제한 없음 |
HTTP 프로톨콜은 연결 지향적인 성격이 아니기 때문에 새로운 페이지 요청 시 "새로운 접속"을 하기 때문에 특정 방문자가 머무르고 있는 동안 그 방문자의 상태를 지속 시키기위해 사용한다.
TCP | UDP |
---|---|
연결형 서비스 제공 | 비연결형 서비스 제공 |
높은 신뢰성 보장 | 신회성이 낮음 |
연결 설정 - 3way handshaking 연결 해제 - 4way handshaking | 데이터 수신 여부 확인 X |
데이터 흐름제어, 혼잡제어 | 데이터 전송 순서가 바뀔수 있음 |
양방향성 서비스 제공 |
정보화 프로젝트 및 유지보수의 효율적인 협업을 위한 버전관리
ex) cvs, svn, Git
정적 include : jsp가 컴파일 되기 전에 include한 파일이 부모페이지에 삽입되어 컴파일
동적 include : 사용자가 부모페이지 호출 시, 실행되어질 시점에 include파일 삽입
네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향프로그래밍 언어
클래스가 로딩될때, 메모리 공강을 할당하는데 처음 설정된 메모리 공간이 변하지 않음. 어디서나 속성과 메서드 공유 가능
지역변수 | 전역변수 |
---|---|
해당 함수 내에서만 사용가능 | 모든 함수에서 사용가능 |
함수를 벗어나면 자동 소멸 | 프로그램 종료시 소멸 |
변수에 값 자체를 저장
메모리상에 객체가 있는 위치(주소)를 저장
primitive type 간단한 데이터를 객체로 만들어야 할 경우
char
String
🔸 == 연산자를 사용해보면 char의 경우 값이 같다면 ==을 사용할 수 있지만 String의 경우 내용이 같더라도 서로 다른 좌표(주소)가 생성되기 때문에 ==으로 비교시 다른값으로 나온다. 그래서 string은 .equals()메소드로 내용물을 비교하여야 한다.
객체 할당 방식은 heap영역에서 할당되고, 리터럴 방식을 String Constant Pool이라는 영역에 할당
equals()로 비교하면 같은 값이지만 == 연산자로 비교 시 주소가 달라 다른 값으로 나온다
JVM (Java Virtual Machine)은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)
메소드 영역 (Method Area)
힙 영역(Heap Area)
JVM Stack Area (Thread Area)
객체지향 프로그래밍 객체와 객체의 상호작용을 통해 프로그램이 동작
객체 지향 프로그래밍은 OOP(Object Oriented Programming)이라고도 한다.
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
객체지향 특징
추상화
불필요한 정보는 숨기고 필요한 정보만을 표현함으로써 공통의 속성이나 기능을 묶어 이름을 붙이는 것
(여러개의 클래스에서 공통적인 요소, 필수적인 요소를담은 추상클래스)
캡슐화
속성과 기능을 정의하는 멤버 변수와 메소드를 클래스라는 캡슐에 넣은 것이다. 즉, 관련된 기능(메소드)과 속성(변수)을 한 곳에 모으고 분류하기 때문에 재활용이 원활하다.
목적 : 코드를 수정없이 재활용하는 것, 정보 은닉, setter와 getter로 접근
상속
부모 클래스의 속성과 기능을 그대로 이어 받아 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우, 상속받은 자식 클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것이다.
상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스 정의 가능, 코드를 공통적으로 관리하여 코드 추가 및 변경이 용이
다형성
하나의 변수명, 함수명 등이 상황에 따라서 다른 의미로 해설될 수 있는 것이다. 상속을 통해 기능 확장 / 변경 할 수 있게 하는 것
즉, 오버라이딩, 오버로딩이 가능
장점 | 단점 |
---|---|
코드재사용성이 높다 | 처리 속도가 상대적으로 느림 |
코드의 변경 용이 | 객체가 많으면 용량이 커질 수 있음 |
직관적인 코드분석 | |
개발속도 향상 | 설계 시 많은 노력과 시간 필요 |
상속을 통한 장점 |
객체지향 언어
절차지향 언어
객체지향 언어 | 절자지향 언어 |
---|---|
코드가 간단하여 프로그램 개발이 빠르다 | 컴퓨터 적업 처리 방식과 유사 |
기존코드 재사용 | 처리가 빠름 |
유지보수가 쉽다 | 효율적인 일처리 가능 |
처리속도가 느려질수 있다 | 프로그램 개발이 번거로움 |
코드가 많아 유지보수가 힘듦 |
객체는 OOP에서 데이터(변수), 데이터에 관련되는 동작(함수), 절차, 방법, 기능을 모두 포함하는 개념으로 모든 클래스의 최상위는 Object가 있다.
클래스로부터 "new"를 이용해서 객체를 생성
ex) Grandeur myCar1 = new Grandeur();
멤버 변수(속성), 메서드(기능), 생성자등으로 구성으로 클래스도 하나의 데이터 타입(자료형)
클래스 이름과 동일한 메서드
목적
특징
자료형 + 데이터형 + 변수이름
ex) public String color;
메서드를 호출할때 데이터를 전달 할 수 있다.
현 객체를 가리키는 것 this.변수명 = 전역변수
상위클래스에 변수를 말함
ex) 지점클래스가 본사클래스를 상속받고 있는 경우
this.openYear = 2000; (현재 클래스 개업년도)
super.openYear = 1995; (상속받는 클래스 개업년도)
변수
클래스 ▶ 객체 (인스턴스화) : 클래스로부터 새로운 객체를 생성하는 행위
객체, 객체 ▶ 클래스 (추상화) : 객체들을 추상화하여 그들의 공통적인 속성을 기술하는 것
클래스와 달리 캑체 생성을 x, 클래스에서 구현해야 하는 작업명세서
1개의 추상 메소드를 갖고 있는 인터페이스를 말한다.
Single Absttract Method(SAM)이라고 불리기도 함
목적
클래스의 공통된 부분을 뽑아서 별도의 클래스로 만들어 놓고, 상속해서 사용
공통점 | Interface | abstract class |
---|---|---|
추상메서드를 가진다 | 상수, 추상메서드만 가능 | 클래스 속성으로 메서드, 추상메서드 모두 ok |
객체 생성이 불가하며 자료형으로 사용됨 | 추상 메서드 선언만 가능 | 선언도, 구현도 모두 ok |
사용하기 위해서는 하위클래스에서 확장 구현해야함 | 다중상속 가능 | 단일상속만 가능 |
클래스
객체
인스턴스
프로세스 내에서 동시에 실행되는 독립적인 실행 단위
장점 | 단점 |
---|---|
빠른 프로세스 생성 | 교착상태에 빠질 수 있다 |
적은 메모리 사용 | |
쉬운 정보 공유 |
운영체제에서 실행중인 하나의 프로그램
같은 이름의 메소드를 여러개 정의하는 것으로 데이터 타입 or 매개변수가 달라야한다.
상속에서 나온 개념으로 상위클래스의 메소드를 하위클래스에서 재정의
시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭(연결이 끊긴 배열)을 찾아 자동으로 다시 사용가능한 자원으로 회수
equals() 메소드는 대상의 내용 자체를 비교
== 연산자는 대상의 주소값을 비교
a (주소: 500, 값: "aaa")
b (주소: 600, 값: "aaa")
a.equals(b) : true
a == b : false
자바에서 동일한 이름의 객체가 여러개 생성될 수 있는데 이 객체들은 이름만 같을 뿐 서로 다른 상태를 가진 객체들이 되는 것이다.
이런 객체를 구별하기 위해, 고유한 정수값으로 출력시켜주는 메소드가 hashCode()
List
Set
Map
Array는 길이가 정해져있는 배열
ArrayList 가변형 배열 메모리 위치가 쭉 이어짐 -> 검색에 빠름(조회에 유리)
Linked List 배열인데 모메로 위치가 뒤죽박죽 -> 삭제 시 빠름(삽입, 삭제 유리)
람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어
람다의 특징
람다의 장단점
장점 | 단점 |
---|---|
코드의 간결성 | 호출이 까다롭다 |
지연연산 수행 | 람다 사용시 단순 for, while 성능이 떨어짐 |
병렬처리 가능(멀티쓰레드 사용) | 불필요하게 사용시 가독성이 떨이짐 |
Genric은 일반적인 이라는 뜻을 가진 단어로 클래스 내웁에서 사용할 데이터 타입을 외부에서 지정하는 방법
목적
프로그래밍의 Generic
iterator
iterable
Iterable 인터페이스를 구현
동기화란 하나의 자원(데이터)에 대해서 여러 스레드가 사용하려고 할 때 한 시점에서 하나의 스레드만 사용할 수 있도록 하는 것
JSON은 경량의 DATA-교환방식
Javascript에서 객체를 만들 때 사용하는 표현식을 의미
객체를 통해 클래스의 정보를 분석해 내는 프로그램 기법으로 스프링 컨테이너에서 BeanFactory의 경우 객체가 호출될때 인스턴스를 생성하게 되는데 이때 필요한 기술이다.
직렬화
역직렬화