IT_Note

OSI 7계층의 목적

Network2017. 4. 3. 01:28




OSI 7계층이란?



- 개방형 시스템 상호연결(Open System Intercon-nection; OSI)모델로서 한글 그대로 시스템 상호 연결에 있어 개방모델을 뜻한다.

- 상호 이질적인 네트워크간의 연결에 어려움이 많은데 이러한 호환성의 결여를 막기위해 ISO(국제 표준화 기구)에서는 OSI 참조모델을 제시함

- 실제 인터넷에서 사용되는 TCP/IP는 OSI 참조 모델을 기반으로 상업적이고 실무적으로 이용될 수 있도록  단순화된 현실화의 과정에서 채택된 모형


이전의 여러 정보 통신 업체 장비들은 자신의 업체 장비 간만 연결이 되는 등 호환성이 없었다고 한다. 

따라서 ISO 단체에서 1984년에 OSI 참조모델을 발표하게 된다.

OSI란 네트워크 통신의 개방 시스템 상호 연결(OSI, Open Systems Interconnection)모델을 뜻한다.

모든 시스템 들의 상호 연결에 있어 문제없도록 표준을 만든 것이며 7개의 계층으로 구분이 된다.



즉, 호환성의 문제를 해결하기 위해 제시된 표준모델이다.




목적 


- OSI 7계층의 가장 중요한 목적은 2가지이다. 그것은 바로 표준과 학습도구이다.

- 비용절감은 표준화를 통해 장비별로 이질적인 포트의 문제나 프로토콜 등으로 인한 문제를 해결하기 위함이다.

- 비용절감의 예로서 3계층 장비인 라우터를 제작하였는데 그에 따른 1, 2, 4, 5, 6, 7 모두 제작해야하는 것이 아니라 프로토콜에 맞춰서 사용하게되면

   일일이 다 제작하지 않아도 되기 때문에 비용절감이 되는 것이며 이것이 표준화의 목적 중 하나이다.

- 네트워크 엔지니어의 경우는 주로 2, 3, 4 계층에 대해 업무를 수행한다. 그러나 당연히 1, 5, 6, 7 계층도 알아야 전반적인 설계와 문제해결이 가능하다.

- 추후에 OSI 7계층은 계층별의 기능과 통신의 과정을 잘 정립하여 교육하기 위한 목적으로 자리매김 하였다.


걍 계층의 캡슐화


- 먼저, OSI 7계층은 응용, 표현, 세션, 전송, 네트워크, 데이터링크, 물리 계층의 7계층으로 나뉘어진다.
- 데이터를 전송할 때 각각의 층마다 인식할 수 있어야 하는 헤더를 붙이게 되는데 이러한 과정을 캡슐화라고 한다.
- 데이터를 전송하고 전송매체를 통해 전송된 후 다시 1계층부터 7계층으로 올라가게 되면서 헤더가 벗겨지는데 이러한 과정을 디캡슐레이션이라고 한다.
- 각각의 층마다 이렇게 요청과 응답을 하면서 상호작용을 하기 때문에 서버와 클라이언트 관계라고 할 수 있다.



 

 Spring MVC 동작 방식

- web.xml의 등록된 DispatcherServlet를 통해서 요청에 대해 진입.

- DispatcherServlet은 Client로부터 들어온 URL을 HandlerMapping 라는 곳으로 전송

후 URL을 분석해서 알맞은 Controller 이름을 다시 DispatcherServlet으로 보냄.

-    HandlerMapping이라는    것을    통해서    실행될    Controller의    이름을    입력받은

DispatcherServlet은 전달받은 Controller를 실행시킴. 이렇게 실행된 Controller는 스프링에

서 제공하는 ModelAndView 객체에 뷰 페이지에 전달할 객체와 View Page 이름 정보를 담

고 DispatcherServlet으로 보냄.

- ViewResolver를 통해 보여 질 View 페이지를 탐색한 후 View 페이지를 보여줌.




'WEB > 이론' 카테고리의 다른 글

마이바티스 사용이유  (0) 2017.04.11
jdbc와 마이바티스  (0) 2017.03.21
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이.  (0) 2017.03.20
web.xml  (0) 2017.01.18


1.jdbc란?


 자바 프로그램 내에서 데이터베이스 질의문 즉, SQL을 실행하기 위한 자바 API(application programming interface)이다.


다음은 프로젝트시 사용했던 jdbc예제이다.



1.java swing을 통해 구현했던 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package server;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
 
public class DB_Main {
 
    public ArrayList<String> dbMain = new ArrayList<String>();
    String sql;
 
    public DB_Main(String sql) {  
        // TODO Auto-generated constructor stub
        try {
            this.sql = sql;
 
            //1. jdbc 드라이버를 메모리로 로드한다.
            Class.forName("oracle.jdbc.driver.OracleDriver"); 
            //2. DB 서버에 연결
            Connection con = DriverManager.getConnection(
                    "jdbc:oracle:thin:@192.168.43.34:1521:orcl",
                    "hr""hr"
                    );
            //3. sql 명령어 실행하기 위한 Statement 객체 생성
            Statement stmt = con.createStatement();  
            //4. sql 명령어 실행(Statement를 통해서)
            //검색한 결과가 rs에 담겨져 있음
            //ResultSet rs = stmt.executeQuery(SelectFrom.fromTable); 
            ResultSet rs = stmt.executeQuery(sql);
 
            while(rs.next()) 
            {
                if(sql.equals("select kind,id,name,pw,tel,address,birth from staff"))
                {
                    String kind = (rs.getString("kind").equals("0") ? "관리자" : "직원" );
                    String id = rs.getString("id");
                    String name = rs.getString("name");
                    String pw = rs.getString("pw");
                    String tel = rs.getString("tel");
                    String ad = rs.getString("address");
                    String birth = rs.getString("birth");
                    dbMain.add(kind);
                    dbMain.add(id);
                    dbMain.add(name);
                    dbMain.add(pw);
                    dbMain.add(tel);
                    dbMain.add(ad);
                    dbMain.add(birth);
                }
            }        
 
            rs.close();
            stmt.close();
            con.close();
 
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}


2. jsp와 연동한 예제 (DAO))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class BoardDAO {
 
    private Connection conn = DBConn.getConnection();    
    public int insertBoard(BoardDTO dto, String mode){ 
        
        int result=0;
        PreparedStatement pstmt=null;
        String sql;        
        String fields="num,userid,subject,content"
        
        sql="INSERT INTO freeboard (" + fields + ") VALUES (?,?,?,?)";
        
        try {
            pstmt = conn.prepareStatement(sql);
            
            int maxNum = maxBoardNum() + 1;
            
            pstmt.setInt(1, maxNum);
            pstmt.setString(2, dto.getUserId());
            pstmt.setString(3, dto.getSubject());
            pstmt.setString(4, dto.getContent());
            
            result = pstmt.executeUpdate();
            pstmt.close();
             
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        
        return result;
    
    
}
 



db와 연동해 커넥션을 맺고 쿼리문을 날려 resultset을 받아오고, 그걸 rs.next()와 같은 방법을 통해 받아온다.




2.마이바티스


jdbc는 SQL의 변경이 발생할 경우 java파일 ,즉 프로그램 소스를 수정하기 때문에 유연성이 좋지 못했는데, 마이바티스 에서는 SQL을 xml 파일에 작성하기 때문에, SQL의 변환이 자유롭고, 가독성이 좋다.



mvc2패턴의 자유게시판 글쓰기 흐름.


1.클라이언트 요청 - bbs/created 로 요청한다. 
var f 에 form내용을 실어보낸다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function check() {
        var f = document.boardForm;
 
        var str = f.subject.value;
        if(!str) {
            f.subject.focus();
            return false;
        }
 
        str = f.content.value;
        if(!str) {
            f.content.focus();
            return false;
        }
 
        var mode="${mode}";
        if(mode=="created")
            f.action="<%=cp%>/bbs/created";
        else if(mode=="update")
            f.action="<%=cp%>/bbs/update";
 
        return true;
 }

2.컨트롤러 (서블릿)  - 요청을 받는다 dto와 session을 들고  서비스에게 insertboard 명령


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//글쓰기 POST//
    @RequestMapping(value="/bbs/created", method=RequestMethod.POST)
    public String createdSubmit(
            Board dto,
            HttpSession session
            ) throws Exception {
        
        SessionInfo info = (SessionInfo)session.getAttribute("staff"); 
        
        if(info==null){
            return "redirect:/";
        }
        
        dto.setS_num(info.getS_num()); 
        service.insertBoard(dto);
        
        return "redirect:/bbs/list";
    }

3.서비스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Service("bbs.boardService")
public class BoardServiceImpl implements BoardService {
 
    @Autowired
    private CommonDAO dao;
 
    //글쓰기.
    @Override
    public int insertBoard(Board dto) {
 
        int result = 0;
 
        try {
            result = dao.insertData("bbs.insertBoard", dto);
        } catch (Exception e) {
            System.out.println(e.toString());
        }
 
        return result;
    }























4.DAO
1
2
3
4
5
6
7
8
9
10
11
12
13
 public int insertData(String id, Object value) throws Exception {
        int result = 0;
 
        try {
            result = sqlSession.insert(id, value);
        } catch (Exception e) {
            System.out.println(e.toString());
            
            throw e;
        } finally {
        }
        return result;
    }
 


5.맵퍼.xml


1
2
3
4
5
6
7
8
9
10
<mapper namespace="bbs">
 
    <!-- 글쓰기 -->
    <insert id="insertBoard" parameterType="com.sp.bbs.Board">
 
        INSERT INTO bbs (
        num,s_num,subject,content)
        VALUES( bbs_seq.NEXTVAL, #{s_num},
        #{subject}, #{content})
    </insert>


'WEB > 이론' 카테고리의 다른 글

마이바티스 사용이유  (0) 2017.04.11
spring mvc 동작방식  (0) 2017.03.22
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이.  (0) 2017.03.20
web.xml  (0) 2017.01.18

MVC 란 Model View Controller를 가리킨다.


사용자 인터페이스와 비즈니스 로직을 분리하여 웹개발을 하는 것이 목적

즉, 


모델은 애플리케이션의 정보, 데이터를 나타내며

뷰는 사용자에게 보여주는 인터페이스.

컨트롤러는 비즈니스 로직과 모델의 상호동작을 조정하는 역할을 한다. 



mvc1 패턴과 2패턴의 차이점으로는 mvc1 패턴의 경우에는 비즈니스로직과 디자인로직이 함께 있지만 


mvc2패턴은 서블릿이 컨트롤러 역할을 수행한다. 


사진 출처 : http://blog.daum.net/gunsu0j/165



1.요청 -  클라이언트 -----> 컨트롤러(서블릿 or jsp) --[dto] --> 서비스 --[dto]--> DAO --> DB 


2.응답 -  DB --> DAO --[dto]-> 서비스 --[dto]-->컨트롤러(서블릿 or j) --> view -------> 클라이언트



클라이언트는 컨트롤러로 요청을 한다. 컨트롤러는 dto라는 껍데기를 태워 비즈니스계층인 서비스단으로 보낸다. 

서비스단에서  퍼시스턴스 계층으로 명령을 해 DB와 연동한다.


그렇게 가져온 값을 JSP 뷰단으로 가져온 뒤  클라이언트 (HTML)로 보내준다.




 

'WEB > 이론' 카테고리의 다른 글

마이바티스 사용이유  (0) 2017.04.11
spring mvc 동작방식  (0) 2017.03.22
jdbc와 마이바티스  (0) 2017.03.21
web.xml  (0) 2017.01.18

web.xml

WEB/이론2017. 1. 18. 02:52

배포설명자(web.xml)


3. Web Application의배포


3.1 web.xml 의태그들설명


icon :  웹 애플리케이션을나타내기위해IDE나GUI툴에서사용되는하나또는두개의 이미지 파일들의위치를지정하는데사용한다.


Display-name : GUI툴이 웹애플리케이션을 표시하기 위해 사용하는 이름을 지정하는데 사용



Context-param : 어플리케이션의 초기화파라미터를 선언하는데 사용


filter : 서블릿이나 jsp 페이지로들어오는요청정보를사전에걸러내는기능

Filter-mapping : 필터를 지정했다면filter-mapping을지정하여하나이상의서블릿과연결함


listener : 서블릿 2.3버전으로부터 세션이나 서블릿컨텍스트가 생성 또는 수정되거나 소멸되는 것을 알려주는 이벤트리스너


servlet : 서블릿이나 jsp페이지에 초기화파라미터나 사용자url들을 할당할 때 사용되는 서블릿 jsp이름을지정


Servlet-mapping : 상대 URL경로를 좀 더 쉽게 다루기 위해 기본URL를 변경할 때 사용


description : 웹 어플리케이션에대한설명을나타낸다.


distributable : Distributable 요소가있다는것은 웹어플리케이션이 다중서버간에 분산배치 될 수있다는것을 의미한다.



Session-config : 일정시간동안 세션으로접근이없을경우서버는메모리를절약하기위해사용

     하지 않는메모리를삭제한다세션의시간유지기능

Mime-mapping : 특정한 MIME형을가진파일을웹어플리케이션에넣어두고싶은경우사용

Welcome-file-list : Url이 파일명이아닌디렉토리명으로받았을경우기본적으로불러올파일명을

   지정하는데 사용

Error-page : Http상태코드가 반환되거나예외가발생햇을때그내용을출력하는페이지

Tag-lib : 태그라이브러리 설명자파일의별칭을지정하는데사용

Resource-envref : Reource-env-ref 요소는자원(resource)과연관되어관리되는객체를선언하

   는 역할을한다.

Resource-ref : Resource-ref 요소는 외부에서참조해야할자원을선언할때사용

Security-constraint : 어떤url이 보호되도록지정하는역할을한다. Login-config와연결되어사용

Login-config : 보안된 페이지로들어가려는사용자에대한서버의인증방식을지정해준다.

Security-role : 통합개발 환경에서보안정보를좀더조작하기쉽게만들어준다.

Env-entry : 웹 어플리케이션의환경항목을선언한다.

Ejb-ref : 엔터프리이즈 빈의홈에대한레퍼런스를선언

Ejb-local-ref : 엔터프라이즈 빈의로컬홈에대한레퍼런스를선언

'WEB > 이론' 카테고리의 다른 글

마이바티스 사용이유  (0) 2017.04.11
spring mvc 동작방식  (0) 2017.03.22
jdbc와 마이바티스  (0) 2017.03.21
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이.  (0) 2017.03.20