기술 글
실무에서 부딪힌 문제와 해결 방법. 티스토리 시절 글을 2026년 기준으로 다시 썼습니다.
- 넥사크로 화면을 Vue 로 옮기기 — 스크립트는 그대로 두고 변환기로넥사크로 17 로 만든 ERP 를 Vue 3 로 옮긴 방법. xfdl 을 변환기로 Vue 템플릿으로 바꾸고, 업무 스크립트는 손대지 않은 채 직접 만든 런타임 위에서 돌린다.
- 넥사크로 스크립트 오류를 화면에 토스트로 띄우기브라우저 콘솔에 스크립트 하나를 붙여 넣어, 넥사크로 트레이스 로그와 자바스크립트 오류를 화면 왼쪽 위에 토스트 메시지로 보여 주는 디버깅 방법.
- Oracle 프로시저·함수·뷰 소스를 테이블에 백업하기 (DBMS_METADATA)DBMS_METADATA.GET_DDL 로 내 스키마의 프로시저·함수·뷰·패키지 DDL 을 백업 테이블에 쌓아 두는 프로시저와, 실수하기 쉬운 커밋·예외 처리·패키지 타입 이름을 정리했다.
- 넥사크로 24 에서 바뀐 속성 설정 방법 — set_value() 와 value 대입넥사크로 24 도움말은 속성을 set_ 메소드 대신 값 대입으로 설정하도록 안내한다. 두 방법이 모두 되는 이유를 개발자도구로 확인했다.
- Oracle 백업 테이블을 한 번에 만드는 DDL 생성 SQL (데이터·PK·코멘트)여러 테이블을 Z_BACKUP_ 테이블로 복사할 때 CTAS 가 빠뜨리는 PK·코멘트까지 DDL 로 만들어 주는 SQL. 작은따옴표가 든 코멘트, 시스템 이름 PK 같은 함정도 함께 정리했다.
- Spring SseEmitter 로 실시간 알림을 붙이며 겪은 일 — 세션 연장, 중복 로그인, 연결 정리SseEmitter 타임아웃이 세션을 계속 늘리고 중복 로그인 처리가 꼬였던 경험과, Spring Boot 3 기준 연결 관리·하트비트·프록시 설정을 정리했다.
- MySQL information_schema 로 MyBatis CRUD SQL 자동 생성하기테이블 이름만 넣으면 MyBatis 용 SELECT·INSERT·UPDATE·DELETE 문을 만들어 주는 MySQL 8 쿼리. GROUP_CONCAT DISTINCT 로 값이 빠지던 버그, 대소문자, 자동 증가·생성 열 처리까지 고친 버전이다.
- MySQL 에서 Oracle 의 테이블 함수 흉내 내기 — JSON_TABLE 과 대안들MySQL 저장 함수는 값 하나만 돌려준다. JSON 을 돌려주는 함수와 JSON_TABLE 로 테이블 함수처럼 쓰는 방법, 그리고 LATERAL·재귀 CTE·임시 테이블 같은 대안을 MySQL 8.4 기준으로 정리했다.
- 되요·됀다·됄까·됌·됬다 — '되'와 '돼' 쉽게 구분하는 법'되'와 '돼'가 헷갈릴 때는 '하'와 '해'를 넣어 본다. 돼요·된다·될까·됨·됐다가 맞는 이유와 자주 틀리는 예를 정리했다.
- 넥사크로 컴포넌트의 HTML 요소 찾기 — _unique_id 로 Static 글자 흘리기넥사크로 HTML5 화면의 컴포넌트는 규칙적인 id 를 가진 div 로 그려진다. _unique_id 로 그 div 를 찾아 Static 글자를 움직여 본 실험과 주의점.
- Oracle SELECT 로 출력물 다단(왼쪽·오른쪽 2단) 만들기한 페이지에 20건을 왼쪽 10건, 오른쪽 10건으로 나눠 찍는 다단 출력물용 SELECT. 행 번호로 페이지·줄·단을 계산하는 공식과 실제 테이블에 쓰는 방법을 정리했다.
- 넥사크로 객체의 종류 알아내기 — typeof 대신 instanceof넥사크로의 Dataset·Grid·Div 는 typeof 로 보면 모두 'object' 다. toString() 과 instanceof 로 종류를 구분하는 방법.
- 넥사크로를 쓰며 불편했던 점과 피해 가는 방법넥사크로 스튜디오의 편집기 한계, async 이벤트 함수 문제, this 범위, xfdl 파일의 형상관리 잡음까지 실무에서 부딪힌 불편과 우회 방법을 정리했다.
- 넥사크로에서 eval 없이 컴포넌트에 동적으로 접근하기넥사크로 화면 스크립트에 흔한 eval("this.div_row" + i) 패턴을 브라켓 표기법과 components 속성으로 바꾸는 방법. new Function 이 대안이 아닌 이유도 함께 정리했다.
- 테이블 정보로 MyBatis CRUD SQL 자동 생성하기 (Oracle 딕셔너리 활용)USER_TAB_COLUMNS·PK·코멘트를 읽어 MyBatis 매퍼에 붙여 넣을 SELECT·INSERT·UPDATE·DELETE 문을 만들어 주는 Oracle SQL. 감사 컬럼 처리와 jdbcType 까지 넣었다.
- 크롬 개발자도구로 넥사크로 화면 디버깅하기넥사크로 화면을 웹 브라우저로 띄워 console.log, debugger, 요소 선택, 중단점, 예외에서 일시중지로 디버깅하는 방법. trace 와 console.log 의 차이와 eval("debugger") 가 멈추지 않을 때의 설정도 정리했다.
- 삭제 전에 다른 테이블에서 쓰는 코드인지 확인하는 Oracle 함수FK 가 걸려 있지 않은 테이블 사이에서, 지우려는 코드 값을 다른 테이블이 쓰고 있는지 딕셔너리로 찾아 확인하는 PL/SQL 함수. 바인드 변수로 SQL 인젝션을 막고, FK 와의 차이도 정리했다.
- 자바스크립트 Number() 가 객체를 숫자로 바꾸는 순서와 nexacro.DecimalNumber(obj) 와 obj * 1 은 Symbol.toPrimitive, valueOf, toString 순서로 원시값을 얻는다. 넥사크로 BIGDECIMAL 컬럼의 nexacro.Decimal 끼리 == 비교가 false 인 이유와 올바른 비교 방법을 정리했다.
- Oracle 함수로 글자 사이에 공백을 넣어 균등 분할(균등 정렬)하기출력물 도구가 균등 분할을 지원하지 않을 때, 글자 사이에 공백을 고르게 넣어 정해진 폭에 맞추는 PL/SQL 함수. 공백 개수 계산 오류와 한글 폭 문제를 바로잡았다.
- SQL Server 에서 함수 기반 인덱스 만들기 — 계산 열 + 인덱스SQL Server 에는 Oracle 의 함수 기반 인덱스가 없다. 계산 열(Computed Column)에 인덱스를 거는 방법과, 사용자 함수를 쓸 때 막히는 조건(소유자·SCHEMABINDING·키 길이)을 정리했다.
- Oracle 가상 열(Virtual Column)로 조합 컬럼 만들기두 컬럼을 이어 붙인 "이름(대표자)" 같은 값을 매번 SQL 로 만들지 않고 가상 열로 정의하는 방법. NULL 처리, INSERT·UPDATE 제약, 인덱스까지.
- 파워포인트 '구역 추가'가 회색으로 비활성화될 때 — 확장자(.ppt)를 확인하자파워포인트에서 구역 추가 메뉴가 눌리지 않는다면 파일이 .ppt(호환 모드)인지 확인한다. .pptx 로 변환하면 바로 쓸 수 있다.
- DB 컬럼명 ↔ camelCase 변환기 직접 만들기USER_ID 같은 대문자 스네이크 표기와 userId·UserId 를 서로 바꿔 주는 HTML 한 장짜리 변환기. 정규식 설명과 함께 숫자·약어 처리 버그를 고친 버전.
- Oracle BETWEEN 으로 기간끼리 겹치는 데이터를 찾을 때 빠지는 함정데이터도 FROM~TO, 조회 조건도 FROM~TO 일 때 BETWEEN 두 번으로는 빠지는 행이 생긴다. 겹침 조건 두 줄로 끝내는 방법과 DATE·TIMESTAMP 에서 BETWEEN 을 쓸 때 주의할 점.
- Oracle 의 MAX() KEEP (DENSE_RANK LAST) 를 SQL Server 에서 쓰는 법그룹별 최댓값을 가진 행의 다른 열을 가져오는 Oracle KEEP 절을 SQL Server 2022 에서 ROW_NUMBER, FIRST_VALUE, CROSS APPLY, 문자열 결합 트릭으로 옮기는 방법과 각각의 함정.
- EXISTS 서브쿼리에서 별칭을 빼먹으면 테이블이 통째로 지워진다상관 서브쿼리 안의 열 이름이 바깥 테이블이 아니라 서브쿼리 테이블로 해석되어 DELETE 가 전체 행을 지운 사고. SQL Server 에서 DELETE 대상에 별칭 쓰는 법, IN·NOT IN 의 같은 함정까지 정리했다.
- Oracle 에서 구분자 문자열을 행으로 나누기 — 테이블 함수와 SQL 만으로 하는 방법쉼표로 이은 문자열(1교시,2교시,3교시)을 행으로 바꾸는 방법. 파이프라인 테이블 함수, CONNECT BY + REGEXP_SUBSTR, JSON_TABLE, SQL 매크로를 비교하고 빈 값이 사라지는 흔한 버그를 바로잡는다.
- 자바스크립트 배열에서 findRowExpr·getCaseCount 처럼 조건으로 행 찾기XPLATFORM·넥사크로 Dataset 의 findRowExpr, getCaseCount 를 일반 자바스크립트 배열에서 쓰는 방법. findIndex·filter 로 끝내는 방법과, "$:컬럼" 조건식 문자열을 그대로 쓰는 구현을 정리했다.
- Oracle JSON_TABLE 예제 — JSON 배열을 행과 열로 풀기화면에서 넘어온 JSON 배열을 JSON_TABLE 로 표처럼 조회하는 예제. 기본 문법, 18c 부터 되는 짧은 열 정의와 대소문자 함정, 중첩 배열(NESTED PATH)까지.