1. 모놀리식 (Monolithic)모놀리식은 시스템의 모든 비즈니스 로직이 하나의 서버에 의해 처리되는 방식으로 배포가쉽고 시스템을 빠르게 만들 수 있다는 장점이 있어 초기 서비스를 만들 때 유용한 방식이지만 시스템 규모가 커짐에 따라 다음과 같은 단점이 발생한다.단일장애지점 : 하나의 장애가 발생하면 시스템 전체에 영향을 미침트래픽 대응 : 트래픽 증가로 인한 스케일링이 필요할 때 시스템 전체 resource 스케일링 필요기술에 종속적 : 작은 기능을 수정 해도 전체 배포를 하기 때문에 테스트 시간이 많이 필요하고 오류가 자주 발생하여 신기술 도입 어려움2. MSA (Micro Service Architecture)모놀리식 아키텍처를 Microservice 단위로 쪼갠 후 독립적으로 구축하는 방식이다..
화면 구성 Script //좌측버튼 this.ExecSetTimerButton_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo){ console.log('>> setTimer function'); this.setTimer(1, 1000); }; //우측버튼 this.ExecKillTimerButton_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo){ console.log('>> killTimer function'); this.killTimer(1); }; //ontimer 함수 this.화면ID_ontimer = function(obj:nexacro.Form,e:nexacro..
메일전송 과정 화면의 HTML(스트링)을 gmail로 전송했을 때 텍스트는 보이지만 이미지는 보이지 않는 현상이 발생했다. Java의 SMTP를 이용해 전송했으며, 콘솔창을 통해 태그의 내용(메일의 body )이 정상적으로 생성된걸 확인했지만, 정작 메일을 수신했을 때 이미지만 보이지 않았다. 개발자 도구를 통해 메일을 확인해보니 이미지 영역의 태그는 존재하지만 로 비어있는 상태였다. 알고보니 gmail 뿐만 아니라 대부분의 메일 서비스에서는 Base64를 통한 이미지 표시를 지원하지 않는다고 한다. Base64 이미지를 담은 html 파일을 첨부파일로 보내도 브라우저에서는 확인 불가능하며 사용자의 PC에 해당 html 파일을 직접 다운로드 해야만 확인할 수 있었다. Gmail doesn't suppor..
1. FROM 테이블이 존재하는지 USER가 해당 테이블에 대한 SELECT 권한이 있는지 먼저 체크한다. 만약 JOIN절이 존재한다면, JOIN을 먼저 수행한다음 FROM절을 수행한다. 2. WHERE JOIN 혹은 FROM 절에서 가져온 테이블에서 조건에 맞는 ROW 만을 가져온다. 3. GROUP BY 명시한 컬럼들을 그룹화하며, 집계함수를 이용할 때 주로 사용한다. 4. HAVING GROUP BY 절이 존재한다면 다음으로 HAVING 절을 수행한다. WHERE 절과 마찬가지로 조건에 맞는 ROW를 가져온다. WHERE절은 테이블 상의 모든 필드에 조건에 두지만, HAVING은 GROUP BY에 의해 그룹화된 결과에 대해 조건을 준다. --WHERE 절 사용 SELECT department, sa..
1. 그리드 headclick 이벤트 추가 2. 이벤트 작성 head의 체크박스 인덱스는 0번째라고 가정한다. this.Grid00_onheadclick = function(obj:nexacro.Grid,e:nexacro.GridClickEventInfo){ try { if (e.col == 0) { /*체크박스 인덱스 : 0*/ var checkValue; if (obj.getCellProperty("Head", 0, "text") == "1") { obj.setCellProperty("Head", 0, "text", "0"); //체크해제 checkValue = "0"; } else { obj.setCellProperty("Head", 0, "text", "1"); //체크 checkValue = "..
1. 브라우저 주소창에 www.naver.com을 입력 2. 캐시탐색 DNS를 이용해 호스트네임(naver.com)의 서버로 접근하기 위한 IP주소를 얻을 수 있다. 그 전에 클라이언트 측에 저장된 캐시를 탐색한다. 만약 캐시에 IP 정보가 있다면 DNS로 요청을 하지 않아도 되므로 로딩속도 향상을 기대할 수 있다. 캐시 탐색은 (브라우저 캐시 → OS 캐시 → 라우터캐시 → ISP캐시) 순으로 순차적으로 이루어진다. 브라우저 캐시: 이미 방문한 웹 페이지의 데이터를 저장한 캐시이다. 캐시가 존재하면 서버로부터 데이터를 다운로드하지 않고 바로 표시할 수 있다. OS 캐시: 운영체제 수준에서 캐시가 구성되어 있는 캐시이다. 라우터 캐시: 라우터(공유기)에 저장된 캐시로 DNS 정보 및 웹 페이지 데이터의 ..
대량 데이터 삽입 로직 데이터 입력시 보통 단건 또는 10건 미만으로 입력이 들어오기 때문에 입력되는 ROW수 만큼 INSERT쿼리 호출이 이루어진다. 그러나 1만 8천 건 정도 되는 데이터를 한 번에 INSERT 하니, 수행 시간이 5분 이상 소요되었고 이대로는 사용할 수 없다고 판단했다.(오류는 나지 않더라도 예외 메세지가 뜨면서 통신이 끊어진것 처럼 보였다.) 일반적으로 사용했던 INSERT 로직 (대용량 INSERT에 부적합) 사용자가 이용할 수 없는 속도를 보여줬기 때문에 삽입하는 ROW 수만큼 쿼리를 호출해 수행하는 기존 INSERT 로직을 이용할 순 없었다. 나중에 들어보니 AS-IS(기존 시스템)에선 10분넘게 걸렸었다고한다... //paramList : 화면단에서 넘겨받은 Data for..
한 화면에 그리드가 몰려있는 경우, 모든 그리드의 BODY 영역의 row가 선택된 상태로 있기 때문에 보기 안좋을 때가 있다. Grid.selectRow() 메서드를 이용해 N개 의 그리드가 있을 때도 하나의 그리드의 row만 선택할 수 있도록 구현해보았다. * selectRow()메서드는 그리드의 selecttype 속성값이 "row" 또는 "multirow" 인 경우만 동작한다. 초기 포커스 해제하기 조회직후 콜백단에서 그리드 row를 선택하지 않도록 해준다. selectRow에 rowIndex 인자로 전달되는 -1 인덱스는 존재하지 않아 row가 선택되지 않지만 기존에 선택되어있는 row를 선택해제 시켜준다. this.init_GridFocus = function(objGrid){ if(typeof..
- Total
- Today
- Yesterday
- CSS
- 이클립스
- 환경설정
- 오류
- 백준
- Open API
- 스프링
- 넥사크로
- HeidiSQL
- 데이터베이스
- 오라클
- C++
- svn
- Thymeleaf
- 부트스트랩
- 프로그래머스
- 국비교육
- JSP
- Java
- CS
- 개발용어
- C
- 네트워크
- 인턴
- 스프링부트
- SQL
- JVM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |