1. 모놀리식 (Monolithic)모놀리식은 시스템의 모든 비즈니스 로직이 하나의 서버에 의해 처리되는 방식으로 배포가쉽고 시스템을 빠르게 만들 수 있다는 장점이 있어 초기 서비스를 만들 때 유용한 방식이다. 하지만 시스템 규모가 커짐에 따라 다음과 같은 단점이 발생할 수 있다. 단일장애지점 : 하나의 장애가 발생하면 시스템 전체에 영향을 미침트래픽 대응 : 특정 서비스의 트래픽 증가시 대응하기 위해 모든 서비스(시스템 전체) 리소스 스케일링 필요기술에 종속적 : 작은 기능을 수정 해도 전체 배포를 하기 때문에 테스트 시간이 많이 필요하고 오류가 자주 발생하여 신기술 도입 어려움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..
차세대 프로젝트에서 데이터 이관작업을 위해 AS-IS 테이블을 ①우리 개발 DBMS로 그대로 밀어 넣은 다음, ②프로시저를 돌려 개발에 사용되는 테이블에 데이터를 밀어 넣는 작업을 하는 중 DB가 뻗어버렸다.데이터가 1000만건이 넘어가고 다른 프로시저들이 함께 돌아가다 보니 프로시저를 한 번에 실행하기 어려웠던 것으로 보인다. 프로시저 분리 및 인덱스 추가그래서 테이블 데이터를 조건별로 데이터를 끊어서 밀어넣기로 했다. 그렇다 해도 최대 70만 건의 row를 조회하기 때문에 속도개선을 위해 SELECT 문에 조인 조건으로 사용 중인 컬럼들에 인덱스를 추가했다. (기간에 해당하는 컬럼은 기존에 조인조건에도 포함되었기 때문에 인덱스로 같이 잡혔다.) 결과확실히 데이터 건수가 작아지다 보니 실행 시간이 단..
- Total
- Today
- Yesterday
- 데이터베이스
- CSS
- 오라클
- Java
- JVM
- svn
- 이클립스
- 스프링
- JSP
- C++
- 백준
- 스프링부트
- SQL
- 네트워크
- Thymeleaf
- 개발용어
- C
- 환경설정
- 부트스트랩
- 국비교육
- 오류
- 프로그래머스
- Open API
- HeidiSQL
- CS
- 넥사크로
- 인턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |