모듈 |
설명 |
spring-beans |
스프링 컨테이너를 이용해서 객체를 생성하는 기본 기능을 제공한다 |
spring-context |
객체생성, 라이프 사이클 처리, 스키마 확장 등의 기능을 제공한다. |
spring-aop |
AOP (Aspect Oriented Programming) 기능을 |
spring-web |
REST 클라이언트, 데이터 변환 처리, 서블릿 필터, 파일업로드 지원 등 웹 개발에 필요한 기반 기능을 제공 |
spring-webmvc |
스프링 기반의 MVC 프레임워크이다. |
spring-websocket |
스프링 MVC에서 웹 소켓 연동을 처리하기 위한 API를 제공 |
spring-oxm |
XML과 자바 객체 간의 맵핑을 처리하기 위한 API를 제공한다 |
spring-xm |
트랜잭션 처리를 위한 추상 레이어를 제공한다. |
spring-jdbc |
JDBC 프로그래밍을 보다 쉽게 할 수 있는 템플릿을 제공한다. |
spring-orm |
하이버네이트, JPA, MyBatis 등과의 연동을 지원한다. |
spring-jms |
JMS 서버와 메시지를 쉽게 주고 받을 수 있도록 하기 위한 템플릿, annotation 등을 제공 |
spring-context- |
스케줄링, 메일 발송, 캐시 연동, 벨로시티 등 부가 기능을 제공 |
분류 전체보기
- 스프링 프레임워크의 주요 모듈 2018.01.18
- HTTP 란? 2018.01.16
- HTTP 요청과 응답 2018.01.16
- JAVA 쓰레드(Thread) main[왜 main을 static 으로 호출 해야하는지] 2018.01.15
- JAVA 쓰레드 스케줄링(Thread Scheduling) 2018.01.15
- JAVA 쓰레드 (thread) 란? 2018.01.08
- JAVA 다형성 (Polymorphism)과 인터페이스(interface) 2018.01.07
- JAVA 오버로딩 (Overloading) 2018.01.07
스프링 프레임워크의 주요 모듈
HTTP 란?
HTTP는 하이퍼텍스트 전송 프로토콜 (HyperText Transfer Protocol)의 약자입니다.
웹에서 사용하는 네트워크 프로토콜이며 TCP/IP 위에서 돌아갑니다.
요청(Request) / 응답 (Response) 모델을 사용합니다. 즉 클라이언트는 HTTP Request를 보내고,
웹 서버는 HTTP Response로 응답합니다. 브라우저는 컨테츠 타입에 따라 문서를 출력합니다.
HTTP요청
-URL
-HTTP메소드(GET/POST)
-파이미터 데이터
HTTP 응답
-상태코드
-컨텐츠 타입 (MIME)
-실제 컨텐츠
GET 메소드는 폼 데이터를 URL 뒤에 추가합니다.
POST 메소드는 요청의 Body에 폼 데이터를 포함합니다.
'지난 포스팅 > HTTP' 카테고리의 다른 글
HTTP 요청과 응답 (0) | 2018.01.16 |
---|
HTTP 요청과 응답
1. 사용자가 주소창에 URL을 입력합니다.
http://www.test1.com/test2/test3.html |
2. 브라우저는 이 정보로 HTTP GET 요청을 만듭니다.
Get/test2/test3.html HTTP/1.1 Host:www.test1.com User-Agent:Mozilla/5.0 (macintosh; ......... |
3. HTTP GET을 서버로 보냅니다.
4. 서버는 요청한 페이지를 찾고 HTTP 응답을 작성합니다. test3.html
5. HTTP 응답을 클라이언트로 보냅니다.
6. 브라우저는 HTML 을 화면으로 그립니다.
JAVA 쓰레드(Thread) main[왜 main을 static 으로 호출 해야하는지]
main 메서드에 작업을 수행하는 것도 쓰레드이며, 이를 main쓰레드라고 한다.
프로그램이 실행되기 위해서는 작업을 수행하는 최소 하나의 쓰레드가 필요하다.
그래서 프로그램을 실행하면 기본적으로 하나의 쓰레드를 생성하고
그 쓰레드가 main메서드를 호출해서 작업이 수행되도록 한다.
자바 어플리케이션이 실행되면 JVM은 main과 system이라는 쓰레드 그룹을 만들고
JVM에 필요한 쓰레드들을 생성해서 이 쓰레드 그룹에 포함시킨다.
예를 들어 main 메서드를 수행하는 main이라는 이름의 쓰레드는 main쓰레드 그룹에 속하고,
가비지 컬렉션을 수행하는 Finalizer 쓰레드는 system쓰레드 그룹에 속한다.
우리가 생성하는 모든 쓰레드 그룹은 main 쓰레드 그룹의 하위 쓰레드 그룹이 되며,
쓰레드 그룹을 지정하지 않고 생성한 쓰레드는 자동적으로 main 쓰레드 그룹에 속하게 된다.
'지난 포스팅 > Thread' 카테고리의 다른 글
JAVA 쓰레드 스케줄링(Thread Scheduling) (0) | 2018.01.15 |
---|---|
JAVA 쓰레드 (thread) 란? (0) | 2018.01.08 |
JAVA 쓰레드 스케줄링(Thread Scheduling)
Thread Scheduling
① Start()는 새로운 쓰레드를 생성하고, 쓰레드가 작업하는데 사용될 호출스택을 생성한다. 새로 생성된 호출 스택에 run()이 호출되어, 쓰레드가 독립된 공간에서 작업을 수행한다.
쓰레드를 생성하고 start()를 호출하면 바로 실행되는 것이 아니라 실행 대기열(Scheduler)에 저장되어 자신의 차례를 기다린다.
실행 대시열은 큐(Queue)와 같은 구조로 먼저 실행 대기열에 들어온 쓰레드가 먼저 실행된다.
② 실행 대기 상태에 있다가 자신의 차례가 되면 실행상태가 된다.
③ 주어신 실행시간이 다되거나 yield()메소드를 만나면 다시 실행 대기상태가 되고 다음차례 쓰레드가 실행된다.
④ 실행 중에 suspend(),sleep(),wait(),join(),I/O block에 의해서 일시정지 상태가 될 수 있다.
일시정지 상태에 있다가 다시 실행 대기상태가 된다.
⑤ 일시정지 상태를 벗어나 다시 실행대기열에 저장되어 자신의 차례를 기다리게 된다.
⑥ 실행을 모두 마치거나 stop()이 호출되면 쓰레드는 소멸된다.
'지난 포스팅 > Thread' 카테고리의 다른 글
JAVA 쓰레드(Thread) main[왜 main을 static 으로 호출 해야하는지] (0) | 2018.01.15 |
---|---|
JAVA 쓰레드 (thread) 란? (0) | 2018.01.08 |
JAVA 쓰레드 (thread) 란?
프로세스 (Process)란?
실행중인 프로그램을 말합니다.
프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당받아 프로세스가 됩니다.
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것은 쓰레드입니다.
쓰레드 (Thread) 란?
프로세스 내의 세부적 실행 단위 입니다.
여러개의 실들이 모여 하나의 옷을 만들 듯이
여러 thread(multi-thread) 들이 모여 하나의 process가 만들어 집니다.
예들 들어 동영상 플레이어은
영상 쓰레드 + 자막 쓰레드 + 음향 쓰레드가 모여 하나의 서비스 프로그램이 됩니다.
모든 프로세스에는 최소 하나 이상의 쓰레드가 존재합니다.
하나 이상의 쓰레드를 '멀티쓰레드(multi-thread)'라고 하며,
둘 이상의 쓰레드를 가진 프로세스를 '멀티쓰레드 프로세스(multi-threaded process)'라고 합니다.
이러한 멀티쓰레딩의 장점은 CPU의 사용률을 향상 시키고 자원을 보다 효율적으로 사용가능하며,
작업이 분리되어 코드가 간결해 집니다.
그러나 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업하기 때문에 동기화(synchronizaion), 교착상태(deadlock)와 같은 문제가 발생할 수 있습니다.
쓰레드 구현 방법은 두가지가 있습니다.
- Thread 클래스를 상속
- Runnable 인터페이스 구현
1) Tread 클래스 상속 예시
class Person extends Thread{ public void run() { for(int i=0;i<10;i++) System.out.println("Worker thread가 일을 하다 "+i); } } public class ThreadEx { public static void main(String[] args) { //Worker 스레드를 생성 Person worker=new Person(); //Worker 스레드를 실행가능상태(Runnable)로 보낸다 worker.start(); try { // 현재 실행주체 스레드(즉 메인스레드)를 // 1초간 중단 후 재개하도록 처리 Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("5초 뒤 main thread 종료"); } }
2) Runnable 인터페이스 구현 예시
class Teacher implements Runnable{ public void run() { for(int i=0;i<10;i++) System.out.println("학생들을 가르키다"+i); } } public class ThreadEx2 { public static void main(String[] args) { Thread t=new Thread(new Teacher()); //Runnable 을 구현한 클래스의 인스턴스를 생성 //Thread 클래스의 생성자 매개변수로 제공 t.start(); try { // 현재 실행주체 스레드(즉 메인스레드)를 // 1초간 중단 후 재개하도록 처리 Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("5초 뒤 main thread 종료"); } }
'지난 포스팅 > Thread' 카테고리의 다른 글
JAVA 쓰레드(Thread) main[왜 main을 static 으로 호출 해야하는지] (0) | 2018.01.15 |
---|---|
JAVA 쓰레드 스케줄링(Thread Scheduling) (0) | 2018.01.15 |
JAVA 다형성 (Polymorphism)과 인터페이스(interface)
다형성 (Polymorphism)이란?
간단히 말하면 "One Interface, Multiple Implements" 이다.
즉, 하나의 메시지 방식으로 여러 구현을 하는 것이다.
인터페이스(interface)는 일종의 추상 클래스로 구현하는 측과 사용하는 측의 약속이다.
인터페이스는 구현된 메서드를 정의할 수 없고
오직 추상메서드(abstract method)와 public static final 상수만 가질 수 있다.
Interface의 예시
interface Play { public void player(); public void stop(); } class MP3Player implements Play{ public void player() { System.out.println("MP3를 재생합니다"); } public void stop() { System.out.println("MP3를 정지합니다"); } } class CDPlayer implements Play{ public void player() { System.out.println("CDPlayer을 재생합니다."); } public void stop() { System.out.println("CDPlayer를 정지합니다."); } } public class Test { public static void main(String[] args) { Play p=new CDPlayer(); Play p2=new MP3Player(); // 상위 인터페이스 타입의 변수로 하위 구현 객체를 참조할 수 있다 p.player(); p.stop(); p2.player(); p2.stop(); } }
재생과 정지라는 버튼 기능을 추상화하여 다양한 기기에서 재생과 정지를 할 수 있다.
실제 구현 method를 몰라도 인터페이스 Play를 기기 타입으로 참조받아 사용할 수 있다.
인터페이스를 이용한 다형성의 장점
1) 개발 시간을 단축시킬 수 있다.
호출하는 측과 구현하는 측을 나눠 구현하기 때문에 호출하는 측에서는 메서드 구현 내용과 관계없이
선운부만 알면 사용이 가능하므로 동시 개발이 가능하다.
2) 표준화가 가능
인터페이스가 명세의 역할을 하기 때문에 일관되고 정형화된 프로그램의 개발이 가능하다.
3) 서로 관계가 없는 클래스들의 관계를 맺어 줄 수 있다.
하나의 인터페이스를 공통적으로 구현하도록 함으로써 관계를 맺어 줄 수 있다.
4) 독립적인 프로그램이 가능하다.
선언과 구현을 분리하여 독립적으로 프로그램 작성이 가능하다.
결과적으로 생성성을 높이고 유지보수성이 좋아진다.
JAVA 오버로딩 (Overloading)
오버로딩 (Overloading)이란?
메서드에 다양한 매개변수로 제 정의 하는 것이다.
class parent{ //부모 클래스 생성 //buy() 메서드를 생성 void count(int i) { System.out.println(i); } } class child extends parent{ //부모 클래스 parent를 상속 받는다 //부모의 count 메서드에 매개변수 int o 를 추가하여 오버로딩한다. void count(int i,int o) { System.out.println(i+""+o); } //기본의 count 메서드에 매개변수 String s를 추가하여 다시 오버로딩한다. void count(int i,int o,String s) { System.out.println(i+""+o+""+s); } } public class OverloadingTest { public static void main(String[] args) { child c=new child(); c.count(1); //부모의 매서드 실행 c.count(2, 3); //매개변순 2개 짜리 실행 c.count(4, 5, "오버로딩"); //매개변수 3개 짜리 실행 } }
'지난 포스팅 > 상속(Inheritance)' 카테고리의 다른 글
JAVA 오버라이딩(Overriding) (0) | 2018.01.07 |
---|---|
JAVA 상속(Inheritance)이란? (0) | 2017.12.29 |