ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 22-09-14_jsp
    main 2022. 9. 14. 18:15

     

    아키텍쳐

     

     

    build라는 단어의 의미

    ------

    늦음

    ------

    code assistance (호로시스 ㄴㄴ... ctrl+space)

     

    build == 어플리케이션 전체에 전형적으로 적용할 수있는 설계

    design pattern == 소규모에 적용할 수 있는

        --> 어느 한 지점, 모듈에서 발새하는 문제를 해결하기 위한 설계도

    architecture == 어플리케이션 전체에 발생하는 문제를 해결하기 위한 코드

     

    -----

    MessageBundleReadServlet.java에서...

     

    model1으로 가면 시종일관 model1, model2으로 가면 시종일관 model2로 가야 함...

     

    model 1, 2의 차이는, 하나의 명령을 처리하는데에 있어서 역할이 나뉘어져있느냐 아니냐임. 

     

     그 명령을 집중적으로 처리 / 쪼개져서 처리

     

    --

     

    https://mangkyu.tistory.com/194

     

    [OOP] 객체지향 프로그래밍의 5가지 설계 원칙, 실무 코드로 살펴보는 SOLID

    이번에는 객체 지향 프로그래밍의 5가지 핵심 원칙인 SOLID에 대해 알아보고자 합니다. 실제로 애플리케이션을 개발할 때 어떻게 적용할 수 있을지 구체적인 예시를 들어 살펴보고자 합니다. 아

    mangkyu.tistory.com

     

    - 현재 만들어진 코드가 객체지향적이냐, 아니냐는 SOLID 다섯가지 원칙에 따라서 구분할 수 있음. 

    SRP(Single Responsibility Principle, 단일책임원칙)  
    SRP에서 시작되는
    O,L,I,D도 SRP에서 파생.
    model2도 SRP에서 시작.
     
    OCP(개방 폐쇄 원칙, Open-Closed Principle)  
     상속이라는 구조에는 개방적으로 대하고, 코드 자체를 뜯어고치는건 폐쇄적으로 대하라는 원칙
         - 가장 오래된 코딩 원칙 : 한번 만든 코드는 어떤 변경사항이 있더라도 뜯어고치지 않도록 한다. 그만큼 유연하게 설계해야 함. 
    .
    객체지향 언어의 특징 중, 상속성 ==> 원래 코드를 바꾸지 말고, 상속받아서 쓰기. 
     
    LSP (리스코프 치환 원칙, Liscov Substitution Principle )  
     : 객체지향 언어의 다형성을 의미  
    ISP (인터페이스 분리의 원칙, Interface Sergregation Principle)  
    : dao, service는 그냥 만들지 않고, interface를 먼저 만들고 사용방법을 만들어서 만듦
      - 왜 인터페이스를 통해서 실제 객체를 생성하는가?, 인터페이스는 왜 필요한가?

    인터페이스의 필요 이유 (사용시 장점)
     1) 협업
     2) 실행코드의 표준화

        (캡슐화)
     
    DIP or DRP ( DRP, 중복 제거의 원칙(Duplication remove Principle) / DIP (Dependency Inversion Principle, 의존 역전 원칙)  
    절차지향 언어가 먼저 나오고, 이 단점을 해결하기 위해 함수지향언어, 객체지향언어가 나옴

     - procedure... 비슷한 코드 반복해서 들어가고.. .이런 중복을 제거 위해 객체지향, 함수지향 언어들이 나오기 시작한 것. 
    DRP면 그 중복을 어떻게 없애냐 하는 원칙을 이야기 하는 거고, 

    DIP면(의존 역전 원칙)
    의존성이 뭔지를 먼저 알아야 함. 
    컨트롤러, 서비스,... 서비스가 완성되기 전에는 controller 못 만듦. 의존성... A객체가 B객체를 사용할 수 있도록 의존성을 설정할 떄, servlet, 생성 위해 가장 위에 service 생성하는 코드가 있음.
    service객체도 생성 위해서 가장 위에 dao를 생성하는 코드가 있음. 

     --> 내가 써야하는게 있더라도 ... 내가 안만들겠다. == 의존 역전 원칙
     -> 외부에 있는 누군가 만들어 준 거를 가져다 쓰겠다. 
     

    controller가 많아지는건, 책임을 분리를 잘 못시켜서...

     

     

    ---

    최종적으로 오늘 Layered architecture를 적용해보자. 

    여기서 제일 중요한 건 SRP임...단일책임 원칙. 

     

    model1, model2, MVC, Layered Architecture를 적용하면서 책임을 어떻게 둘거냐.

     

    우리가 해결할 문제는 다 복합문제임. 그러면 그 문제 안에 단계를 쪼개는 게 첫 번째 해야 할 일임. 

     

     

    holy..

     

    중프때 왜 ..나눴는가...

     

    ---

    나라는 client가 노예1(controller)에게 명령을 내림 

    그러면 노예1이 노예2(service)에게 라면땅을 만들라고 지시함 

    노예2가 노예3에게 라면가져오라 함. 근데 라면이 없음

    그러면 노예 3(dao)이 라면사오라고 함. file-properties

     

    --

    shival...ㅜㅜ

    금액 : 변수

    사온다는 행위 : method

     

    controller 역할은 client가 명령을 보낼 떄, 그 명령을 받고, line headerm body가 적절한지 검증하는 역할

    '순차적'으로 모든 과정을 거쳐야 response data가 나와서 이 구조를 layered architecture라고 함.

    뭔지도 모르고 맞게 그렸는지도 모름

    어쩃든 순서대로 저걸 다 겪는다고 해서 layered라고 함

     

     

    ====

    뭔가 만들어보겠음

    package kr.or.ddit.props.vo;
    
    /**
     * 
     * Property 한쌍의 정보를 관리하기 위한 Domain Layer
     *
     */
    public class PropertyVO {
    	//여기의 VO하나를 통해서 data도 information도 담기 위함.
    	private String propertyName;
    	private String propertyValue;
    	
    	private String description;
    	
    	
    
    }

     

     

    ClassPathResource 말고 FileSystemResource형태로 가지고 놀자. 그래야 서버가 꺼져도 파일이 안날아가

     

     

    ------

    JTestCase unit...Ctrl+N 해서 만들기..dao가 잘 작동하는지 test하고싶거든..

     

    mian은 배포할 용도..test는 배포 안 할 용도...

     

    Contains test Source 체크하면 Yes 되고 test용으로 어두워짐

    근데 이거 어렵고 불편함. mayven이라는 tool을 그래서 씀. 걔는 처음부터 main과 test를 나눠서 씀

     

    단위테스트의 단위는 method 하나를 의미람..

     

     

    저 @Test 하나가 하나의 단위임

     

     

     TDD (Test-Driven Development)
       :인터페이스 먼저 설계하고, 구현체 완성되지 않은 상태에서 Test를 먼저 함. 이후에 Test성공하도록 해 나가는 것

     

     

     

    메모리에서 작업한 데이터가 남으려면 파일로 저장이 되어야 함....

     

    Alt+Shift+J : 주석

     

    원래의 sevice 인터페이스의 시그니쳐(메서드)를 변경하고 싶지 않아 ==> RuntimeException사용

    ==> 실제로 ReuntimeException으로 많이 관리해서 사용함

     

    결합력은 낮추고 응집력은 높여라

    HCLC ( HighCohesionLooseCoupling)

     

    결합력 높을수록 다른걸 반드시 고쳐야 함. 예를들면 dao를고치면 service를고치듯이

    응집력???

    private PropertyDAO dao = new FileSystemPropertyDAOImpl();

    구현체에 종속되는 코드. 결합력이 높음

    	private PropertyDAO dao;
    
    	public void setDao(PropertyDAO dao) {
    		this.dao = dao;
    	}

    코드 결합력이 떨어짐. 더 좋음

     

     

    @Test

     : mark annotation

    @Test()

     

     

    EDD (Event driven Development)

     

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <jsp:include page="/includee/preScript.jsp" />
    </head>
    <body>
    <select id="propSel" size="10"></select>
    <table>
    	<thead>
    		<tr>
    			<th>프로퍼티명</th>
    			<th>프로퍼티값</th>
    			<th>비고</th>
    		</tr>
    	</thead>
    	<tbody id="dataArea">
    	
    	</tbody>
    </table>
    <form>
    	<input type="text" name="propertyName" placeholder="포르퍼티명"/>
    	<input type="text" name="propertyValue" placeholder="포르퍼티값"/>
    	<input type="submit" value="새 프로퍼티 추가" />
    </form>
    <div id="errArea"></div>
    <script type="text/javascript">
    // 	다음의 모든 요청은 비동기 처리를 기반으로 함.
    // 	1. 현재 페이지가 랜더링된 후 전체 프로퍼티 정보를 조회하여 select option 을 완성함. line : /properties (GET)
    // 	2. 선택 option이 변경될때마다 해당 프로퍼티의 정보를 조회하여 dataArea 에 랜더링함. line : /property?name=prop1 (GET)
    // 	3. 하단 form 을 비동기로 전송하여 새 프로퍼티를 추가하고, 기존의 option들의 앞메 추가함. line : /property (POST)
    // 	4. 모든 message(content)는 "json" 형식으로 교환됨.
    // 	5. 요청 처리에 실패한 경우, 해당 상태코드와 응답 메시지를 errArea 에 랜더링함.
    </script>
    </body>
    </html>

     

    *과제..

    비동기......UI 없이 순수 데이터로만 구성이 되어야 함....

     

    럼바우의 객동기?

     

     

     

    architecture diagram... 도식화....

     

     

    ==

    네 그렇습니다..... 이건 뭔소린지 조금 알겠네요... 이 과정을 순차적으로 다 겪어야지 response가 나가서, layerd architecture라고 합니당

     

    ==

     

    내일 수업예고...

    controller가 view로 이동할 때 model, information을 전달하는데 그 때 setAttribute의 형태로 전달하는데...

    Scope? 우리가 4가지 쓸 수 있어서...

     

    이 단계에서 information을 전달할 수 있는 방식이 몇가지고.......??????? 를 배울거다...

    Scope라는걸 알려면 '기본객체'라는 걸 알아야 함...가능하면 공부하고 오기...

    'main' 카테고리의 다른 글

    22-09-15_jsp  (4) 2022.09.15
    22-09-15_python  (0) 2022.09.15
    22-09-14_python  (1) 2022.09.14
    22-09-13_jsp(2)  (0) 2022.09.13
    22-09-13_python  (0) 2022.09.13
Designed by Tistory.