> 카페


  http://cafe.naver.com/ojsag


> 네이버 SVN


  http://dev.naver.com

  

  * 멤버등록

  * 암호설정


> 이클립스


  * plug-in  

  * SVN Repository

  

https://dev.naver.com/svn/ojsag20


subclipe 설치 > SVN  설정 > checkout


> 소프트웨어 개발 패러다임


구조적     >     정보공학     >     객체지향 >                 Contents Based Development?                 >     SOA     >     ROA

"절차"            "데이터"                "클래스"                                - Controller - Suvlet

    멤버(필드, 메소드)                         - View - html, xml

  - Model - JSON

* library와 Contents의 차이

: library는 그냥 모듈화, Contents는 MVC 모델을 포함하는 모듈화


> 프토토콜


비연결지향 (HTTP)

연결지향(FTP)


> 웹


"비연결지향 프로토콜의 단점을 해결하기 위한 기술"


1. Client Side

쿠키

2. Server Side (서버상태를 저장하기위한 객체 4가지)

PageContext 페이지

HttpServletRequest

HttpSession 웹브라우저

ServletContext 톰캣

3. File

4. DBMS


 > 요청 (Client Side - HTML5 + CSS + JavaScript + jQuery + Ajax)


URL


> 응답 (Server Side - Controller + View + Model Service + Model Entity)


HTML, XML, JSON, Text, ...


> 소프트웨어 공학


95년도 4학년 과정으로 선택과목으로 등장

2000년도 이후 필수과목으로 채택


"품질" - ISO 9126(6가지 품질), IEEE 1471(아키텍처 표준), ISO 52000(테스트 표준)

"객체지향"


> 소프트웨어 위기


"스파게이티 소스"


> 클래스 vs 객체지향


1. 저장위치

- 클래스 : 파일이므로 하드디스크

- 객체 : 파일의 클래스 로더가 클래스를 로딩하여 메모리에 올림. 값을 담기위해 만들어진 구조체.


2. 값의유무


> 객체 라이프 사이클


1. 클래스 정의

2. 객체참조변수 선언

3. 객체생성

4. 생성자호출

5. 주소할당

6. 객체사용

7. 객체소멸


"    Student st = new Student();   "


1. 클래스 정의 : Student. Student는 이미 정의되어 있어야 함.

2. 객체 선언 : st, 

3. 객체 생성 : new, 개발자가 직접 객체를 생성하느냐, Controller에게 객체생성을 위임하느냐(IoC), 


* has a, is a 관계

dependency, association, composition, aggregation


4. 생성자 호출 : (). 

5. 주소할당 heap메모리를 "st" 객체참조 변수에 assignment :  =. call by value, call by reference, call by name(없어짐)

6. 객체사용. polymorphism

7. 객체소멸.  java performance tuning 


java - " fojo, annoation "


> OOSD 기본 개념 7가지


<Object-Oriented Design concepts>


Cohesion 응집도. 하나의 클래스가 하나의 기능에 얼마큼 충실하는지 나타내는 척도. 높을수록 좋음.

Encapsulation. 

Coupling 결합도. 응집도를 높이기위해 클래스를 잘게 나누면, 원래 하나였던 클래스는 서로의 결합도를 높이게 됨. 모듈화의 결정 포인트를 잘 맞춰야 함. 낮을수록 좋음.

*Looser Abstract Coupling

Implementation ingeritance .

Composition

Interface ingeritance

Polymorphism


<java method 5가지>


*Looser Abstract Coupling


---------------------------

client  -->   <<interface>>

Service

^

|

|

ServiceImpl

---------------------------


interface Service {

}


class ServiceImpl implements Service {

}


class Client {

Service s;

}



cf. looser couping

 http://tadhg88.blogspot.kr/



> 클래스 간의 관계

* Is-a

* has-a


> OOSD 원리 3가지

> 디자인 패턴


> 웹 서비스


-----------------------------------------------------

홍창윤 강사님 / 010-3206-4184 / hiroad@naver.com

OJSAG 오라클자바소프트웨어아키테트그룹


'Development > Web' 카테고리의 다른 글

MVC 1  (0) 2015.08.30
서블릿  (0) 2015.08.30
이클립스 스프링 개발환경  (0) 2015.08.27
[JQuery] plug-in top 100  (0) 2015.05.27
[웹서비스] 기초 4 - QnA, Web Client  (0) 2015.05.01
#

#

#


1.  view 

test_view.html 파일


2.  model, view에서 넘어오는 데이터를 저장하는 DTO 클래스 작성

test_model_DTO.java


3. DB 생성 및 테이블 생성

4. model, DTO에서 데이터를 전달받아 실제 데이터베이스와의 작업을 처리하는 DAO 클래스 작성

test_model_DAO.java


5. controller, 사용자의 입력정보를 DTO에 담고, 해당 데이터를 DAO클래스의 관련 메서드에 전송하고

그 결과에 따라 이동할 페이지를 결정하여 제어하는 서블릿 클래스를 작성

test_controller.java


6. 처리에 대한 결과를 출력하는 view 페이지 작성

test_result_view.html


'Development > Web' 카테고리의 다른 글

HTTP와 웹 아키텍처  (0) 2015.11.02
서블릿  (0) 2015.08.30
이클립스 스프링 개발환경  (0) 2015.08.27
[JQuery] plug-in top 100  (0) 2015.05.27
[웹서비스] 기초 4 - QnA, Web Client  (0) 2015.05.01


#

1. 톰캣\conf\server.xml 웹서버 구동과 관련한 설정

2. 톰캣\conf\web.xml  모든 프로젝트에 공통적인 환경

톰캣\common\lib 모든 프로제트에 공통된 라이브러리

3. 프로젝트\WEB-INF\web.xml  프로젝트별로 적용되는 환경설정

4. 프로젝트\WEB-INF\lib 프로젝트별로 적용되는 라이브러리

5. 프로젝트\WEB-INF\classes 프로젝트별로로 적용되는 서블릿 파일을 인식하고 설정에 따라 init()/destroy()메서드를 실행


#  서블릿은 매핑과정이 필요. 2가지로 매핑이 가능

1. 어노테이션

2. web.xml


- web.xml

<servlet>

<servlet-name>ServletHello</servlet-name>    // 서블릿 클래스를 임의의 이름으로 정의하여, 이름을 가지고 사용

<servlet-class>kr.co.test.ServletHello</servlet-class>        // 해당 클래스 

</servlet>


<servlet-mapping>

<servlet-name>ServletHello</servlet-name>

<url-pattern>/ServletHello</url-pattern>

</servlet-mapping>




# 서블릿 라이프사이클

0. 서블릿은 클래스이고 HttpServet을 상속받아서 구현


1. init() 메서드에 의해여 초기화되면서 실행

web.xml이 실행이 되면서 실행되거나 최초 접속하는 클라이언트에 의해 실행

2. service(HttpServletRequest request, HttpServletResponse response) ...

클라이언트 요청으로 실행되며 main()에 해당


- doGet()

- doPost()

3. destroy() 메서드는 웹서버가 종료될 때 실행되며, 메모리 해제를 수행



// 12,3은 서블릿(GenericServet)을 오버라이해서 정의


4. PostConstruct : init 선처리

5. PreDestroy : destroy 선처리


// 4,5는 임의의 메소드명을 내가 지정해주고, 어노테이션으로 명시해줘야함

@PostConstruct

public void initPostConstruct() {}


@PreDestroy

public void destroyPreDestroy() {}


1-1. 

- init(ServletConfig)

- init()





# 초기화 매개변수

: 특정 서블릿이 생성될 때 초기에 필요한 데이터들을 위해(특정 경로 및 아이디 정보) 사용

서블릿도 클래스이므로 컴파일해 사용해야하는데, 매개변수가 바뀔떄마다 컴파일 하지않고 좀 더 효율적인 측면에서
매개변수를 바꾸어 사용할 수 있도록 하기위해 사용


초기화 파라미터 사용 방법

1. web.xml에 기술 후, servlet파일에서는 ServletConfig 클래스를 이용하여 접근이 가능

2. Servlet(클래스)파일에 직접 기술


1.

- 서블릿 클래스 제작

- web.xml에서 서블릿 등록 시, init-param태그를 사용하여 초기화 매개변수를 등록. servlet태그 안에다가 정의

<servlet>

<servlet-name>ServletHello</servlet-name>    

<servlet-class>kr.co.test.ServletHello</servlet-class>   


<init-param>

<param-name>id</param-name>

<param-value>userid</param-value>

</init-param>     

</servlet>


- 서블릿 클래스에서 getInitParameter(),로 가져와서 사용.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


String id = getInitParameter("id");

}


ServletConfig 클래스는 HttpServlet에서 상속하고있는데 내 servlet클래스는 이미 HttpServlet을 상속하여 생성하였으므로 따로 생성할 필요는 없고 

바로 사용하면 됨



2. 

ServletConfig를 상속받은 다른 클래스나 ServletConfig 객체 생성 후 매개변수 가져와 사용


@WebInitParam 어노테이션에 초기화 파라미터를 기술한 후,

: @WebServlet(urlPatterns={"ServletHello"}, initParams=[@WebInitParam(name="id,value="aaaa")}) 


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


String id = getInitParameter("id");

}



# response 객체, HttpServletResponse

- 에러처리 : sendError, 

- URL  이동 : sendRedirect


# include, forward

- sendRidrect를 수행하면 버퍼가 비워짐. 

- forward나 include를 사용하면 현재 페이지가 가지고 있는 값들을 유지하여 페이지를 이동할 수 있음

- RequestDispatcher 객체를 사용


RequestDispatcher는 ServletContext에서 받아오면 됨

ServletContext context = ServletConfit객체.getServletContext();

RequestDispatcher dispatcher = context.getRequestDispatcher(페이지주소_상대경로);

dispatcher.include(request,response);

dispatcher.forward(request,response);



# 데이터 저장 영역

- Request, Session 객체

- 쿠키데이터 사용


- Request, Session 객체

1. request(servletRequest of HttpServletRequest)

- request.setAttribute(key,value);

- request.getAttribute(key,value);

- request.removeAttribute(key,value);


2. session(HttoSession)

- session.setAttribute(key,value);

- session.getAttribute(key,value);

session.removeAttribute(key,value);


3. application(ServletContext)

 application.setAttribute(key,value);

- application.getAttribute(key,value);

application.removeAttribute(key,value);


- 쿠키데이터 사용

1. Cookie 전송

Cookie cookie = new Cookie(key, java.net.URLEncoder.encode(value, "UTF-8");

cookie.setComment(주석);

cookie.setPath(도메인);

cookie.setMaxAge(유지시간(초단위));

cookie,.addCookie(cookie);


2. 개별 클라이언트의 Cookies폴더에 파일로 저장

3. Cookie 획득

Cookie[] cookies = request.getCookies();

for(int i=0l i<cookies.length; ++i);

if(key.equals(key)) {

String value = cookies[i].getValue();

}

}



# ServletContext

: 특정 데이터를 여러 서블릿클래스에서 다같이 사용할 수 있도록 지정. 여러 서블릿에서 공유하는 정보이므로 web.xml에서 servlet부분보다 위에 기술되어야함


- Context Parameter를 이용하여 web.xml에 데이터를 기술,

- servlet에서 공유하면서 사용


<context-param>

<param-name>id</param-name>

<param-value>aaaa</param-value>

</context-param>


String id = getServlet();



# Servlet 필터

웹상에서 사용자 요청페이지가 실행하기 전/후에 필요에 의해데이터를 가로채채 작업하고자 하는 경우 사용

- 전달받은 데이터를 인코딩하는 경우

- 세션 데이터를 인증하는 경우

- 이벤트나 공지 등 팝업을 추가하는 경우


- Filter 인터페이스를 구현하는 클래스로 작성한 후  

- 프로젝트에 인식을 위해 web.xml에 작성(등록하기)

filter, filer-mapping(필터가 언제 실행될지의 정보) 태그

- Servlet 부분보다 위에 작성해야 함



# Servlet 이벤트

서버가 실행된 이후에 특정 이벤트를 감지하여 그 시점에 작업을 하고자하는 경우

- 컨텍스트가 초기화하는 경우

- 세션이 생기거나 소멸되는 경우 

- 속성이 바뀌는 경우


- 서블릿 이벤트 리스너를 사용

1. ServletContext 객체 초기화/소멸

: ServletContextListener

2. ServletContext객체에 속성 추가/삭제/수정

ServletContextAttributeListener


3. Session

...


4. Request 

...


- 서블릿 이벤트를 등록 : web.xml

: Listener 태그를 사용

'Development > Web' 카테고리의 다른 글

HTTP와 웹 아키텍처  (0) 2015.11.02
MVC 1  (0) 2015.08.30
이클립스 스프링 개발환경  (0) 2015.08.27
[JQuery] plug-in top 100  (0) 2015.05.27
[웹서비스] 기초 4 - QnA, Web Client  (0) 2015.05.01



1. 다운로드





2. C: 밑에 "dev"라는 폴더를 생성 후 압축풀기


3. java 설치 후, jdk폴더를 dev에 복붙




4. eclipse.ini


-startup

plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar

--launcher.library

plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417

-product

org.eclipse.epp.package.jee.product

--launcher.defaultAction

openFile

--launcher.XXMaxPermSize

256M

-showsplash

org.eclipse.platform

--launcher.XXMaxPermSize

256m

--launcher.defaultAction

openFile

--launcher.appendVmargs

-vm

C:\dev\jdk1.8.0_60\bin\javaw.exe    // JDK 설정 , vmargs 보다 위에

-vmargs

-Dosgi.requiredJavaVersion=1.7        // 해당 버전이 1.7이면 1.7로 설정하면 속도가 더 빨라짐... 찾는 범위를 한정지어서 그런건가

-Xms1024m                                    // 메모리 힙 최소

-Xmx2048m                                    // 메모리 힙 최대 (컴터 메모리가 8GB이상일때만 2048정도로 해줭




# 이클립스 플러그인으로 설치

- Spring

- SVN

- Maven

- MyBatis


- MSSQL은 바로 메이블 플러그인이 바로 없어서 따로 메이븐 레파지토리쪽으로 설치해준 후에 매핑시켜주면 됨




'Development > Web' 카테고리의 다른 글

MVC 1  (0) 2015.08.30
서블릿  (0) 2015.08.30
[JQuery] plug-in top 100  (0) 2015.05.27
[웹서비스] 기초 4 - QnA, Web Client  (0) 2015.05.01
[웹서비스] 기초 3- 웹 서비스 구현  (0) 2015.04.29

http://www.jqueryscript.net/blog/Top-100-Best-Free-jQuery-Plugins-From-2014.html




Spring 2.5

- OS에 디펜던시가 큼

- AIX(IBM), ADF와 함께 쓸 때, 오동작을 일으키기도 함


싱글톤, 멀티쓰레드 환경에서 시리얼라이제이션을쓰면 ... ?


시리얼라이제이션

: 분산처리할때

serialized UI 라는 객체가 있음

- 자바에서 시리얼라이즈라하면,

Stream(byte화하는 것) 중 I/O계열에 있는 애들중

ByteArrayInputStream 등등 많은데, ObjectStream이란놈이있는데, 


- 엔드포인트에서 데이터 In/out할때 serialization 


=> 자바에서 Stream으로 데이터를 보낸때, DTO로 매번 감싸는 것도 문제이므로 오브젝트 자체에 Serial ID를 부여한다. 이런 방식을 일반적으로 자바에선 Serialize이라고 한다.

(de-Serialize, static변수는 적용할 수 없음)


- 스프링의 싱글톤과 VM측면에서의 싱글톤은 다른 의미이다.




# Stress 

1. 이용자수 (회원수) 100%

2. 동접자수 10%

3. 동시사용자수 10%

: 회원수가 100명일때, 동접자수가 10%인 10명이고, 동시사용자수가 10%인 10명일때, 처리시간이 1초정도? 



# 좋은도구, 시스템, 

코드 스니핏 - 이클립스에서 개발환경을 자동화해준다(자바 리플렉션, 인트로스펙션)

인트로스펙션 : 자바소스를 완변하게 분석해주는 툴 -> AST (Abstract Syntax Tree, AST view)

소스코드를 추상화 트리로 만들어 줘서 자바소스를 완벽하게 분해를 한다. 

클래스 정보를 로드를하면 메소드, 변수, 모든 정보를 알아낸다.(인트로스펙션)

문자열로부터 자바객체로 만들어낸다 (리플렉션)



# LRCP , 2PC

자바의 XA드라이버를 사용하지 않아도 요즘에나오는 WAS들은 2PC를 제공해주면서(WAS의 고급기술)분산트랜젝션을 제공할 수 있음



# 인프라개발자

EA - 

BA : domain, 비지니스아키텍트

TA : 테크니컬 아키텍트, System 구성

DA : Data 아키텍트, 

AA > SA : 소프트웨어 아키텍트, 

(AA가 더 넓은 영역을 커버하고있음, 가령 서울시를 설계한다면, SA는 건물의 내부를 설계)


XaaS -     

IaaS 

PaaS

SaaS

DaaS



인프라개발자 ...... 하드웨어 개발, 시스템 관련한 개발, 

: 레드햇 등에서 하드웨어 플러그인등 미들단에서 OS를 풍부하게해주는 개발을 하는데, 완전 인프라단은 아니지만, 인프라 개발자 범주에 들 수 있음.


----------------------------------------------

java 엔지니어 공부순서

1. 자바패턴,

2, 스프링소스까기(2달정도만 해도.. 스프링 고수가됨)

3. JDK소스까고, JavaDOC 보기


# 애플리케이션

: EPOT(e-portal:온라인포털)


$ 아키텍처 설계

> 레이어 - 각 레이어 별 적용 기술 요소 매핑



> 프로그래밍 규약

- 컴포넌트 : 스스로 동작할 수 있는 최소한의 단위

- 유틸리티 : 유틸리티 성 비지니스, 공통적으로 사용, 달력같은...

- 기능분류 : 퍼사드... 

- domain = DO = TO ...



> 코드 컨변션

- 이클립스 > preference > java > code style

  a. organize imports 

  b. code templates

  c. 카피라이트 자동화

...



> 개발표준, 메소드 접두어 명명규칙


# 컴포넌트 설계/분류

# 컴포넌트 분류



# 웹서비스 설계



http://www.nextree.co.kr/p2010/




# 웹 서비스 시나리오


- UDDI : 웹 서비스 관련 정보의 공개와 탐색을 위한 표준

- 공공데이터 포털





- 서비스제공자 

- 서비스요청자 


# 웹서비스 3가지 기술요소

- WSDL : Web Service Description Language, 웹서비스를 표현 및 기술, XML

- SOAP : Simple Object Access Protocol, 메시지프로토콜

- UDDI : 기술의 탐색, 등록 ----> 국내에선 없음

*Jax-WS - java 메시지와 Soap메시지를 매칭,바인딩 해주는 객체


# 웹 서비스 아키텍처 모델

- framework ? 반 자동화 되어있는, 스스로 동장할 수 없음, 프로그램으로 동작 시켜줘야함

- Server ? 서비스를 제공할 수 있음, 자동화 되어있는,


> 웹서비스 핵심 기술 표준

- XML

- XML 스키마

- SOAP

- WSDL

- UDDI


> 웹 서비스 확장기술 표준 (wS-*) 

- 보안처리 WS-Security, WS-Trust, WS-SecureConversation

- 트랜잭션처리 WS-Coordination, WS=Transaction

- 신뢰성있는 메시지 WS-ReliableMessaging, WS-Addressing

- 기타(BPM-업무프로세스, RM-자원관리)

=> 실무에서 이런 확장기술을 적용하는 분위기는 아니지 ㅎㅎ




# XML[Extensible Markup Language]

- W3C에서 다른 특수 목적의 마크업 언어를 정의하기 위한 마크업 언어

- XML 활용도 높다면 데이터처리에 사용, 보통 요즘엔 환경설정에 사용


- XML은 문서로 구조화 할때, 많이 사용


- HTML의 단점이, 표현과 구현을 섞어놓아 디자이너와 개발자의 협업이 어려웠음

- XML은 HTML에서 데이터만 끄집어내자하여 떨어져 나옴

- Transformation, XSLT

- CSV

- X-Path, XML의 path를 처리하는 기술

- XHTML, HTML5

- RDF, ROA, 시맨틱 웹의 토대

- 라이센스 제약이 없고, 플랫폼이 독립적, 많은 지원이 있음


> XML의 구조

- 버전표기

- root 엘리먼트 1개만 반드시 포함



> XML의 특징

- 문서의 내용과 스타일을 분리하여 사용

- 표준 규약,ft 

- 문서(microso, 전송자료(ACORD, OFX, IFX...)


> Well-Formed 

> Valied


> Namespace

: 논리적 이름 구분을 위함


> XML스키마의 목적

- DTD와 같이 XML문서를 구조화하기 위해 W3C에서 표준화하여 제공

> XML스키마의 특성

- XML문법, XML 네임스페이스 지원, 루트요소를 반드시 가져야함, 

- <schema>, 다양한 데이터타입, 문서화 메커니즘 제공

> DTD와 XML스키마의 특징 비교




> XML 스키마 네임스페이스


- 스키마 네임스페이스를 지정하지 ㅇ낳으면 파서는 XML 스키마로 인식할 수 없음

- xs, xsd와 같은 접두사를 많이 사용




> 대상 네임스페이스(targetNamespace)

- 새로운걸 만들어서 참조를 하려면 그대로~ 붙여야함

- targetNamespace를 안붙이면 안되. namespace중복이 되버려. 선언은 할 수 있음

> elementFormDefault, attributeFormDefault

- "qualified", "unqualified"

- XML파서가 알아서 처리를 해줌

- full package를 주는게 좋음.. 결국 언젠간 확장하다보면 충돌 날 수 있으므로



# SOAP

: 개방형 프로토콜을 사용하여, XML기반의 SOAP 메시지를 네트워크 상에서 교환하는 프로토콜(HTTP, HTTPS, SMTP를 기저로 깔고)

: 구조, 전송, 상호 중립성의 개념을 도입

: 태생 자체가 상호독립/호환을 위해서 만들어짐


- SOAP 1.2 version


> 특징 (장점)

- SOAP을 기본적으로 HTTP기반 위에서 동작,

- HTTP와 같이 프록시와 박화벽에 구애받지 않고 쉽게 통신이 가능,

- 플랫폼 및 프로그래밍 언어에 독립적

- 간단하고 확장가능, 멀티파트 MIME구조를 사용, 첨부를 통합하는 SOAP XMl 메시지를 지원

- 페이로드

> 특징 (단점)

- 성능이슈, (실제 stress test시, 응답속도가 예전에 비하여, 몇배이상 빨랐음) 

   ==> 상대적으로 늦는다는 이야기지, 이제는 더이상 단순히 느리다라고 할 수 없음



# SOAP 메시지 구조

1.1 버전


1.2 버전



# WSDL

: 웹서비스가 어디에 존재하는지, 웹서비스로 무엇을 할 수 있는지, 또 어떻게 하는지, XML형식으로 기술하여 제공

: SOAP메시지에서 주곱다아야하는 데이터가 WSDL에 있음


> WSDL 네임스페이스 목록

> 문서구조


> 웹서비스 스택



# 웹스비스 프레임워크

- Aegis Databinding

- Spring

- JAX-WS지원

- 비동기방식의 호출 지원

- 바이너리와 기존 프로토콜 지원

- 기타.. (책참고)


> Apache CXF 도구

> Apache CXF 아키텍처

- CXF-API : Bus,



> SOAP 메시지 구조



> Aegis, JAXB : 데이터바인딩 하는 친구들

: SOAP메시지가 들어오면 JAVA의 객체로 만들어지고 SOAP의 DATA부분의 내용을 또다른 자바객체로 바인딩하는 기술을 일컬음


> SDO, Service Data Objects





누가 추천해주신 wsgi(Web Server Gateway Interface)를 만들어보려구,

함께 추천해주신 파이썬책도 겸사겸사 주문했는데 아직두 발송전인듯..

인터파크는 평균 5일은 걸리는 것 같다는 ㅜㅜ


그래서 암튼 그전까지 퇴근 후 5일짜리 교육 신청함... 


주제 : 웹서비스 - WSDL & SOAP

목차 : 

1. 웹 서비스 개요

2. 웹 서비스 기반기술

3. 웹 서비스 프레임워크

4. 웹 서비스 구현

5. 웹 서비스 클라이언트 구현

6. 오픈 API와 매시업


포카칩뜯으면서 주저리 주저리 정리하고 자야지... 


------------------------------------------------------------------------------


1일차 - 웹 서비스 개요


# 웹서비스의 정의


> 웹서비스의 의미는 굉장히 다양함

> 전체 구성도


> Back-end, Front-end, Middle-ware(모바일환경에서의 push server, MQ ...)


> 정의

- 이종 시스템을 통합하고 HTTP를 통해 재사용 가능한 비즈니스 기능 공개 방법을 제공 - 서비스디자인패턴, 로버트다이뇨(2013)

- 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템 - 위키

- 기계 대 기계 상호작용을 지원하기 위해 설계된 소프트웨어 시스템 - W3C

=> 다 통합... 왠지 클라우드서비스가 생각난다..


> SOA vs ROA

- Service oriendted vs Resource Oriented

- OSGi, Open Service Gateway initiative


> SOAP/WSDL 기반에서 웹 서비스

- 클라이언트, 서비스 / 요청자, 제공자 / 서비스 컨슈머, 서비스 제공자


> 웹서비스 연관 용어

- 웹 2.0 

- Semantic Web, 웹 3.0

- Open API

- Mash-up


> 웹서비스의 등장배경

- 비지니스 관점 : 기업 내, 기업 간, 기업과 고객 간 통합된 서비스 증대 및 Time to Market

- 기술적 관점 : POP -> OOP -> COP: CBD -> SOP: SOA

                 절차지향 객체지향 컴포넌트지향 서비스지향

- 분산프로토콜 등장 : RMI(rmic.exe), RPC


> 웹서비스 사용 목적

- 웹서비스 레이어드 아키텍처


> 웹서비스 고려사항과 대안

- 마샬링, 언마샬링시 바이트스트림으로 직렬화하여 전송

- 네트워크 통신의 부분적 실패에 대비(여기서는 네트워크 통신의 장애를 말함)

- 웹서비스의 본질적인 위험요소 고려





> 웹서비스 API 스타일

- 엔터프라이즈 애플리케이션 아키텍처 패턴

- MVC Architexture

- 퍼사드(Facades[GoF]) 패턴

- RPC API(JAX-RPC) / 메세지 API(JAX-WS) / 리소스 API(JAX-RS)


> 웹서비스 API 설계 시 고려사항

- 캡슐화

- 서비스 계약 : 클라이언트와 서비스가 어떻게 상호작용 할 수 있는지 명시한 협약서

- 자율성 : 상호 결합성이 낮아야 함

- 지연시간

- 부분실패, RPC-API(proxy)

- 텍스트 기반 데이터의 바이너리 메시지 인코딩


> 테스트 개발환경 설정

- IDE 설치 및 Subversive, AnyEdit 플러그인 설치

- 빋드환경 배포, Maven

- WAS, Tomcat

- 개발 표준 설정 : 명명규칙, 소스코드 포맷, 파일 포맷 등








<금일 스터디 진행사항>

1. GIT 개념 및 간단한 사용법 발표(정X원님)와 이클립스와 GIT 연동

2. 프로젝트 관리 토론

3. 각 파트별 프로젝트 리딩
  - 주제에 대한 개발 가능 성 검토 및 개발 범위 산정
  - 공통 모듈 산출


---------------------------------------------------------------------------------------

1. GIT 개념 및 간단한 사용법 발표

: Git을 SVN과 비교하여 장점을 위주로 설명함.
  > Git은 "로컬저장소"가 있음
  > 속도가 빠름
  > commit에 대한 부담이 없음
  > 원격 저장소와 연결되어있지 않아도 버전관리가 가능함
  > 원격 저장소가 폭파되어도 로컬 저장소로 복원이 가능함

: 스테이지 영역이란?
  > 변경사항이 저장소에 commit하기 전에 거치는 중간단계(commit되기 전의 파일의 내용까지 기억해둠)
  > staging area가 필요할 때?
   : 커밋하기전에 변경사항들을 하나씩 "확인"하는 역할을 수행
         
: Git의 Snapshot
  >Git에서 각 버전의 차이점이 아닌 버전자체를 저장하는 기능
  > 파일과 각 버전의 변경내역이 아닌 버전 자체만을 다운로드 하기때문에 느리지 않고, 로컬 저장소에서 받기 때문에 
    네트워크가 불가한 상황에서도 받을 수 있음
  > 버전 자체를 저장하므로 버전의 차이가 발생할 때 이를 극복할 수 있게 도와줌

※ Git을 잘 설명해주는 곳...
- 이클립스와 github연동 : http://unikys.tistory.com/330


2. 프로젝트 관리 토론

: 프로젝트 관리도구 "Trello" 사용
  > 각 파트별로 보드를 만들어 관리
  > "Action Item(주단위 요구사항) -> Request(세부사항) -> TO DO(해야할것) -> Doing(진행중) -> Done(완료)"


3. 각 파트별 프로젝트 리딩

  ※ 공통목표 : 하이브리드 웹 구현

  [1PART]
   - 주제 : 나만의 다이어리
   - 내용 : 폰빌더(?)를 이용하여 나만의 다이어리를 만들자!
   - 목표 : 속지선택, 글쓰기, 사진넣기, 스티커 붙이기 등등
   - 엔드유저 : 다이어리를 사용하는 모든 일반인들

  [2PART]
   - 주제 : PocketTube
   - 내용 : 유튜브 API를 활용하여 확장되고 편리한 유튜브 서비스 제공
   - 최소목표 : 결과 내 검색, 즐겨찾기 기능(핸드폰 계정)
   - 최대목표 : 온라인계정 적용
   - 엔드유저 : 유튜브를 효과적으로 사용하고자하는 일반인들

  [3PART]
   - 주제 : 쇼핑몰 구축
   - 내용 : Spring과 MVC를 사용하여 기능구현보다는 만드는 과정에 포커스를 두고 진행
   - 최소목표 : 기본 웹페이지 구성(회원관리 및 게시판)
   - 최대목표 : 웹 쇼핑몰 
   - 엔드유저 : 쇼핑몰고객(.. 인가요?ㅋㅋㅋ 일단은 "과정"에 포커싱)


+ Recent posts