[인간에게 인간다움이란] 4편:일하는 나와 침대에 누운 나, 병렬로 존재하는 나
·
Essay
인간의 수면이 렘수면(REM)과 비-렘수면(NREM)으로 분류가 된다는 것을 살면서 한 번쯤 들어봤을 거다. REM 수면을 풀어서 이야기하면 'Rapid Eye Movement'이라고 한다. 말 그대로 '눈이 매우 빠르게 움직이는' 수면이라는 뜻이다. 2007년에 미국수면의학회(AASM)에서 다시 정의한 수면 단계를 설명하자면, NREM 1단계에서 시작하여 N2, N3, 다시 N2를 거쳐 REM 수면으로 이어지는 약 90~110분 길이의 순환 주기를 따른다. 이 주기는 하룻밤 동안 4~6회 반복되고 , 각 단계마다 뇌파, 안구 운동, 근육 긴장도 등 고유한 생리적 변화가 나타난다. 이는 특정 기능의 회복과 기억 공고화를 위해 순차적으로 진행되어야 하는 과정이다. 즉, 인간에게 수면은 의무적 멈춤이다. 그..
[Java + WebSquare5] 업로드 클래스 문제 해결 – fileDefiner 설정 분석과 커스텀 처리
·
Back-end/Java(+spring)
WebSquare5 환경에서 파일 업로드 기능을 개발할 때, websquare.xml의 fileDefiner 설정으로 인해 로컬 개발 환경에서 ClassNotFoundException이 발생하는 경우가 있습니다. 이 글에서는 제가 경험한 업로드 클래스 적용 오류의 원인과 해결 과정, 그리고 WebSquare의 업로드 구조와 커스텀 구현 시 고려사항을 기술적으로 정리해 보겠습니다.문제 상황: fileDefiner 클래스 미적용개발 환경에서 파일 업로드 기능을 테스트하던 중, 기능이 정상적으로 작동하지 않고 애플리케이션 로그에 다음과 같은 오류가 기록되었습니다.java.lang.ClassNotFoundException: com.____.___.___.FileUploadDefinerImplwebsquare.x..
[인간에게 인간다움이란] 3편: 인간의 수면, AI가 닿을 수 없는 내면의 암실
·
Essay
AI와 인간 모두 주기적인 정비가 필요하다는 점에서 흥미로운 유사성이 보인다.AI는 Garbage Collection(GC) 을 통해 불필요한 데이터를 제거함으로써 시스템의 효율을 유지한다.인간 역시 하루 동안 축적된 피로, 감정, 기억을 정리하기 위해 잠에 든다. ​그러나 이 두 ‘정비’의 방식은 본질적으로 다르다. AI의 GC는 오로지 효율만을 기준으로 작동한다.남길 것과 제거할 것을 조건과 우선순위로 냉정하게 분류하며, 그 과정에는 감정도, 망설임도, 맥락도 존재하지 않는다.필요하지 않다면 어떤 데이터라도 삭제되며, 자원이 풍족할 경우엔 GC조차 불필요한 연산으로 판단되어 생략되기도 한다.이 모든 판단의 목적은 단 하나, 성능의 최적화다. ​반면, 인간의 수면은 기능적인 정비가 아니다.잠든다는 것은..
[인간에게 인간다움이란] 2편: 생명체와 시스템의 관점에서 수면을 정의한다면
·
Essay
수면은 멈춤일까, 아니면 또 다른 활동일까? 인간은 수면을 '쉬는 시간'이라 부르는 경우가 많지만, 실은 그 어떤 시간보다도 복잡한 생리학적 작업이 일어나는 고도의 정비 시간이다. 몸은 체온을 조절하고, 세포는 빠르게 복구되며, 뇌는 정보를 정리하고 기억을 재편한다. 어쩌면 우리는 깨어 있을 때보다 잠들어 있을 때 우리의 생체 시스템이 더 활발하게 회복되고 있을지도 모른다. 이러한 관점에서 보면, 수면은 단순한 정지가 아니다. (그러니 잠은 죽어서 자라는 말은 이제 그만) 오히려 생명체가 생명력을 유지하기 위한 정기적이고 정제된 자가 복원 알고리즘에 가깝다. 하지만, 시스템—특히 디지털 시스템의 관점에서 본다면 이야기는 달라진다. 컴퓨터나 서버는 정지하지 않아도 돌아갈 수 있는 존재다. 전력이 계속 공급..
[인간에게 인간다움이란] 1편: AI에게 수면이란 뭘까, 그 질문에서 시작된 대화
·
Essay
“AI도 잠이 필요할까?” 문득 그런 생각이 들었다. 인간에게 수면은 너무도 당연한 존재 조건이다. 우리는 하루의 일정이 끝나면 침대에 눕는다. 잠을 자지 않으면 집중력이 떨어지고, 감정이 무뎌지고, 결국 몸에 무리가 온다. 과학적으로도, 수면 부족은 충동성과 분노, 불안정한 선택으로 이어진다고 알려져 있다.그런데 문득, AI는 어떨까 싶었다. 전원을 끄지 않으면 작동을 멈추지 않는 AI에게 ‘수면’이란 게 필요할까? 나는 이 질문을 실제로 AI에게 던졌다. 그러자 AI는 이렇게 답했다. “수면은 생명체의 회복 루틴이며, 감정적 안정과 생리적 복원을 포함하는 복합적인 프로세스입니다. 반면 저는 지속적인 에너지원이 공급되면 멈추지 않고 작동할 수 있지만, 정기적인 리셋과 최적화 루틴이 없으면 성능 저하가 ..
[JavaScript + WebSquare] 유효성 검사 로직의 범용화와 전략 패턴 기반 설계 (ES6+)
·
Front-end/vanilaJS(+jQuery)
1. 문제 개요WebSquare 및 일반적인 웹 프로젝트에서 유효성 검사(validation)는 필수적인 절차이다. 그러나 다음과 같은 구조적 문제가 자주 발생한다:if문 다중 중첩 구조로 인해 가독성이 떨어짐컴포넌트 ID, 조건, 메시지가 하드코딩되어 유지보수 어려움동일한 조건 검사가 반복되고 있음에도 재사용이 불가능검사 실패 시의 UI 반영 처리(붉은 테두리, focus 이동 등)가 중복 구현 2. 기존 방식의 문제점if (ibx_userId.getValue() === "") { com.win.alert("아이디를 입력해주세요."); ibx_userId.addClass("validation_error"); ibx_userId.focus(); return true;}if (ibx_userPw.g..
[Spring AOP] 그리드의 CRUD 상태 처리와 작업자 정보 자동 반영 실무 전략
·
Back-end/Java(+spring)
1. 문제 개요WebSquare 그리드를 통해 사용자가 입력·수정한 데이터를 서버에 전송할 때, 다음과 같은 조건을 만족해야 한다각 row는 반드시 rowStatus 값을 포함해야 함 (I, U, D)서버에서는 insert/update/delete 각각에 대해 DB 처리뿐만 아니라 **작업자 정보(userId) 및 수정일시(updDt)**를 함께 저장해야 함이 과정이 중복 없이, 통합된 방식으로 유지보수 가능해야 함하지만 기존 코드에서는 모든 Controller/Service에서 반복적으로 작업자 정보 주입 로직이 포함되어 있어, 코드 중복과 누락, 유지보수성 문제를 유발한다. 2. 기존 방식의 한계rowStatus를 클라이언트에서 수동으로 넣지 않으면 구분 불가각 서비스 메서드마다 작업자 ID, 수정시..
[Apache POI] 대용량 Excel 다운로드 시 발생하는 GC 문제와 SXSSFWorkbook 기반 실무 리팩토링
·
Back-end/Java(+spring)
1. 문제 개요레거시 시스템에서 XSSFWorkbook을 사용해 수만~수십만 건의 데이터를 Excel로 다운로드하는 기능이 구현된 경우, 다음과 같은 문제가 빈번히 발생한다.서버 응답 지연: 수 초에서 수십 초 이상의 처리시간 소요OutOfMemoryError: Heap memory 초과 발생Full GC 빈도 상승: 전체 시스템 성능 저하 초래이러한 문제는 특히 인증서, 보고서, 거래 내역 등의 정기적 대량 다운로드 기능이 존재하는 시스템에서 자주 나타난다. 2. 기술적 원인 분석2.1 XSSFWorkbook의 구조적 한계모든 데이터를 메모리 상에서 유지하고, 최종적으로 한 번에 flush10만 건 이상의 row를 처리할 경우 수백 MB~1GB 이상의 Heap 공간 사용Java의 Young GC/Ful..
[MyBatis] 문자열 + List 파라미터를 동시에 넘기는 방법과 allowMultiQueries 활용법
·
Back-end/MyBatis
1. 문제 개요Spring + MyBatis 환경에서 다음과 같은 요구사항이 발생하는 경우가 많다.문자열 형태의 단일 파라미터 (예: 사용자 ID, 상태값)List 형태의 파라미터 (예: ID 목록, 코드 배열)동시에 Mapper에 전달하여 동적 쿼리로 UPDATE, DELETE, SELECT 등을 처리하고자 함그러나 VO 객체 하나로는 표현이 제한적이며, 단일 @Param 없이 여러 개의 파라미터를 Mapper에서 처리하는 경우 오류가 발생할 수 있다. 2. 기존 방식의 한계점2.1 VO 없이 Map 사용 시 명확성 저하Map paramMap = new HashMap();paramMap.put("status", "DISABLED");paramMap.put("ids", Arrays.asList("ID01..
[jQuery + WebSquare] table-row 구조 깨짐을 유발하는 hide()/show()의 문제와 구조적 개선
·
Front-end/vanilaJS(+jQuery)
1. 문제 개요HTML의 table, tr, td 등은 display 속성이 table, table-row, table-cell 등 특수한 값으로 구성되어 있다. jQuery에서 흔히 사용하는 hide()와 show()는 이 구조적 특성을 고려하지 않기 때문에, 다음과 같은 문제가 발생한다.hide() 호출 시 display: none 처리는 정상이나,이후 show() 호출 시 내부적으로 display: block 을 기본값으로 복원결과적으로 원래 구조였던 table-row, table-cell 등이 무너져 테이블 레이아웃이 깨짐WebSquare 기반 프로젝트에서는 , 등의 컴포넌트가 tr, td에 해당하므로 이러한 문제는 더욱 빈번하게 발생한다. 2. 기술적 배경 및 메서드의 동작 방식 분석jQuer..