본문 바로가기

Development

(89)
Data 설계와 처리방법의 중요성. 예전에 제품 퍼포먼스에 문제가 심각했었는데 서버쪽에서라도 문제의 일부를 해결해보자고 판단해서 서버를 새로 만들기로 결정했다. 퍼포먼스가 문제라면 차라리 c++ 로 구현할까 아니면 netty 로 구현할까 한참을 고민하다가 netty 의 성능이 꽤 좋다는 의견들이 많고 개발기간이 촉박해서 netty 로 구현했는데 중간중간 테스트에서도 만족할만한 성능을 보여줬다. 하지만 문제의 가장 근본이었던 database 구조를 수정하지 않았고 제품에서는 그 구조의 data 를 그대로 사용하다보니 data 가 커지기 시작하면서 다시 예전의 퍼포먼스 문제가 동일하게 발생했다. database 모델링을 다시하고 구조를 수정하기 위해서는 제품의 컨셉을 재점검 해야할 필요도 있고 이런것들이 사상 자체를 뒤흔들수도 있다. 한마디로..
Erwin 에서 논리모델 <--> 물리모델 컬럼 정렬하기. Erwin 에서 논리모델로 컬럼을 추가한뒤 물리모델로 가서 reset 하면 새로 추가된 컬럼이 논리모델에서의 순서대로 맞춰 보여지는데, 실제 스크립트 파일로 생성하면 논리모델에서 정렬한 컬럼 순서가 아닌 추가된 순서로 정렬되어 있다. Tools > Forwawrd Engineer > Schema Generation 메뉴에서 좌측의 Colmun 을 선택한 뒤 Physical Order 항목의 체크를 해제한다. 다시 스크립트 파일을 생성하면 논리모델에서 정렬한 순서대로 컬럼들이 정렬된 것을 확인할 수 있다.
PayPal 결제 연동 PDT / IPN 정의와 비교. * PDT 방식.(Payment Data Transfer) sync. 결제 완료 후 즉시 실행된다. 1. 쇼핑몰 서버에 접속한 고객이 paypal 을 통해서 결제를 한다. - 결제 버튼을 클릭하면 paypal 사이트로 이동한다. 2. 결제가 완료되면 paypal 에서 쇼핑몰 서버로 transaction id 를 보내준다. - transaction id, amount 등등 몇가지 정보를 보내주지만 transaction id 만 필요하다. 3. 서버에서 받은 transaction id 와 판매자의 auth token 을 다시 paypal 로 보낸다. - paypal 보안설정때문에 서버쪽 jdk 는 최신버전이어야 한다. 4. paypal 에서는 받은 데이터로 결제 상세정보를 다시 서버로 보내준다. - 서버쪽 ..
외부 인터넷이 연결되지 않은 경우 application-context 설정하기. 관공서 등과 같이 외부 인터넷이 안되는 환경인 경우 spring application 을 실행할때 schemaLocation 오류가 발생한다. 이때는 xsd 를 url 이 아닌 classpath 를 통해서 가져오도록 수정한다. 물론 처음 빌드는 인터넷이 되는 환경에서 모든 maven 라이브러리들을 다운로드 받은 상태여야 한다. Intellij 에서는 schemaLocation 의 classpath syntax 를 인식하지 못해서 빨간색의 오류로 출력되지만 정상적으로 빌드되고 실행된다.
Oracle 테이블 Index 삭제후 새로 생성하기. 오라클에서 작업하다보면 테이블 index 가 깨져서 데이터 추가/삭제가 안되는 경우가 가끔 발생한다. 주로 대용량 데이터를 입력하는 과정에서 그런 경우가 많았다. 그럴때는 index rebuild 가 안되서 일반적으로 테이블을 삭제했다가 새로 생성하고 데이터를 밀어넣는 불편한 방법을 사용하곤 했는데 sql developer 를 이용해서 깨진 index 를 삭제하고 새로 생성하는데 성공했다. (toad 로는 안되고 sql developer 로만 성공했다. 혹시 다른 툴로도 가능한지는 모르겠다.) 1. sql developer 를 실행한다. 2. 좌측의 database 목록에서 원하는 항목을 선택한다. 3. 테이블을 선택한다. 4. 가운데 테이블 정보화면이 출력된다. 5. 테이블 정보의 '인덱스' 탭을 선택..
Blocking, Non-Blocking, Synchronous, Asynchronous 많이 들었으면서도 자주 헷갈리는 개념들. 일단 결론부터 정리하자면, Blocking / Non-Blocking 방식은 Server 에서 Client 를 처리하는 Socket 동작 방식이고, 동기 / 비동기 방식은 프로세스를 처리하는 방식이다. * Blocking and Non-Blocking 방식. 1. Blocking 방식. - single thread 방식. server, client 작동 방식. request 를 받고 server 에서 처리 후 response 를 던져줄때까지 처리결과를 알 수 없었다. server 의 프로세스를 한번에 한개의 (자식)thread 가 사용한다는 의미. 임의의 A 메소드를 호출하는 뒤의 요청은 앞의 요청이 끝날때까지 기다려야 한다는 뜻. 이런 방식은 thread 의 b..
Oracle Sql Loader 를 이용해서 xml 포멧의 데이터 insert 하기. xml 포멧으로 된 데이터 파일을 oracle 테이블에 입력해달라는 요구사항이 들어왔다. sql developer 같은 툴에서는 불가하고 database server 에 원격으로 붙어서 작업한다. 1. oracle server 에 접속 후 작업 할 임의의 디렉토리를 생성한다. - C:\temp_data 2. 디렉토리 하위에 data 로 사용 할 xml 파일을 위치시킨다. - C:\temp_data\relation.xml 3. 디렉토리 하위에 control 파일을 위치시킨다. - sql loader 를 제어하는 파일. - C:\temp_data\relation.ctl 예) 파일내용. LOAD DATA INFILE 'C:\temp_data\relation.xml' INTO TABLE TBL_RELATION_..
Xcode 6 에서 깨끗한 프로젝트 생성하기. Xcode 5 까지는 프로젝트를 생성할때 Empty Application template 을 선택해서 스토리보드나 xib 파일이 없는 깨끗한 프로젝트를 생성. (내가 가장 선호하던 방법.) Xcode 6 부터는 Empty 하나만 남았는데 이걸로 프로젝트를 생성하면 정말 아무것도 없는 프로젝트가 생성된다. 이렇게 하지 말고, 1. Single View Application 프로젝트를 선택후 생성. 2. Main.storyboard, launchscreen.xib 파일 삭제. 3. SupportingFiles > Info.plist 파일을 열어서 - Main storyboard file base name 에서 Main 스토리보드 이름 제거. - Launch screen interface file base n..