프로그래밍(Web)/업무관련

    [바미] Java ConcurrentModificationException 에러

    제가 Java에서 JsonArray를 사용하여 한 줄씩 가져오는 데이터를 하나로 묶기위해 dataAll()함수를 사용하다 위의 에러를 경험하게 되었습니다. JsonArray jsonArray = Utilfunc.getJsonString(onlineData, "data"); JsonArray data = new JsonArray(); for (JsonElement je : msg.getAsJsonObject().get("data").getAsJsonArray()) { JsonObject jo = new JsonObject(); jo.addProperty("symbol", je.getAsJsonObject().get("symbol").getAsString()); jo.addProperty("close_pri..

    [바미] TypeORM 타임존 이슈

    Typescript로 클라이언트 서버 개발 때 발견한 이슈를 공유하고자 글을 쓰게 되었습니다. 서버와 클라이언트가 Socket.io 통신을 통해 TypeORM을 사용하여 특정값을 조회한 데이터를 주고 받는 작업중에 TypeORM에서 조회한 타임존 값과 실제 테이블 제 컬럼값이 다른 것을 발견하였습니다. 예를들어 DB 내 실제 값은 2022-10-04 00:00:00 인데, 이 값을 TypeORM으로 가져왔을 때는 2022-10-03 15:00:00으로 변경되어 출력되어 있었던 것이죠. 처음에는 개발 서버 내부의 timezone이 상이해서 그런줄 알았는데 알고보니 코드 상에서 DB 연결을 위한 ORM 설정 부분에서 timezone 파라미터를 추가해주면 됐었습니다. const connectionInfo = ..

    [바미] Ajax data 주의 사항.

    Ajax에서 data로 보낸 뒤, Node SQL에서 파라미터로 받는 식의 형태로 작업하고 있던 중에 있었던 일입니다. result [Object: null prototype] { objA: 'data', objB: 'data', objC: 'data', objD: 'data', objE: 'data', objF: 'data' } 이런식으로 body를 보냈는데 objC값을 단일 값이 아닌 다중 값으로 변경되어 array로 보내주어야 했습니다. objC값을 받아오는 부분이 아래와 같은데 All A B 해당 부분 중 선택된 부분을 가져오기 위해 // name이 같은 div 값들을 배열에 담는다. var checkboxNames = new Array(); $('.filter_item.on').each(func..

    [바미] Header 관련한 삽질기

    GO를 사용하여 서버를 구축하고, 운영중에 있는데 문뜩 외부에서 Postman을 사용하여 무분별한 Post가 이뤄질 때, 우리의 데이터를 파싱할 때 이것을 막는 방법이 없을까? 생각해보게 되었습니다. 물론, 내부에 필수값이 존재하기 때문에 여기서 1차적으로 걸러지지만 이런것도 언젠간 뚫리기 마련이기 때문에 좀 더 단단한 무언가가 있었으면 좋겠다 생각이 들었습니다. 물론 완벽한 보안이라는 것은 존재하지 않지만 최소한의 방어벽을 둘러보고 싶었습니다. 먼저 찾아본 것은 'X-Csrf-Token'였습니다. 거기다 고릴라 안에 있던 패키지였기 때문에 이거다! 싶었죠. https://github.com/gorilla/csrf GitHub - gorilla/csrf: gorilla/csrf provides Cross..

    [바미] 서로가 서로를 필요로 할 때

    class ExamClass { constructor() { ... this.init(); } init() { this.A = new constructorA(this.B); this.B = new constructorB(this.A); this.C = new constructorC(this.A, this.B); } } 위처럼 A는 A를 생성하기 위해 B가 필요하고, B는 B를 생성하기 위해 A가 필요하는 상황이였습니다. 그 때는 ExamClass를 사용하여 해결하였습니다. class ExamClass { constructor() { ... this.init(); } init() { this.A = new constructorA(this); this.B = new constructorB(this.A); t..

    [바미] 이벤트 버블링 (Feat. 너는 움직이면 안돼지..)

    얼마전 JS로 업무를 보던 중에 생겼던 일입니다. 그 문제들을 해결하기 위해 공부하며 알아왔던 것들을 공유하고자 올리게 되었습니다. 어떤 창 안에서 무언가를 삭제 하려 할 때 확인 팝업창이 뜨게 되는데 그 확인 창을 닫게 될 때 그 창도 같이 닫히게 되는 버블링 현상을 마주하였습니다. 좀 더 쉽게 설명하자면 예시로 다나와 견적함을 들자면 여기에서 SSD항목을 삭제하려 할 때 삭제하겠냐는 확인 창이 뜰 것이고, 확인, 취소를 누르면 견적함 창까지도 꺼졌던 것이지요. 이 문제를 해결하기 위해 이벤트 버블링에 대해 알아야했고, 그 전에 이벤트 등록에 대해 알고 있어야 했었습니다. 이벤트 등록이란 웹 애플리케이션에서 사용자의 입력을 받기 위해 필요한 기능입니다. 아래와 같은 코드를 말하는데 print Event..

    [바미] 메모리 릭(memory leak)현상을 마주하다.

    메모리 릭(memory leak) 현상은 현상은 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상을 말합니다. 할당된 메모리를 사용한 다음 반환하지 않는 것이 누적되면 메모리가 낭비되고, 더 이상 불필요한 메모리가 해제되지 않으면서 메모리 할당을 잘못 관리할 때 발생하죠. 이 일이 어처구니 없는 실수로 제게도 발생해버렸습니다. 실시간으로 조회하는 함수() { functionA(); ... } 원인은 지속적으로 무언가를 조회하는 함수 안에 있는 functionA() 안에서 의미없는 오브젝트를 생성했기 때문이였는데요. fucntionA() { let objectA = new class(); } 이번 일을 계기로 콘솔창에 있는 좋은 기능을 하나 알게 되었는데요. Perfomance monito..

    [바미] 백오피스를 고민하다

    좋은 백오피스란 무엇일까, 그리고 어떻게 만들 수 있을까. 의도하지는 않았지만, 저는 항상 백오피스 개발을 맡아왔고, 외부 고객이 바라보는 프로덕트 이상으로 내부 고객이 사용하는 백오피스에 대한 고민을 많이 해왔습니다. 회사마다 팀마다 사정이 다 다르지만, 공통적으로 적용될 부분이 있다고 생각합니다. 백오피스? 일단 보편적인 정의를 먼저 살펴보겠습니다. 국문으로 검색해보면 '어드민 페이지'나 'ERP'와 백오피스를 동일하게 보는 글이 많습니다. 영문으로 검색하면 조금 다른데, 위키피디아 백오피스 항목을 보면 회사 내부자가 사용하는 툴이라고 하더라도 고객을 바라보는 CRM같은 툴은 front-office로 보고, 고객과 무관하게 회사 내부적인 비즈니스 운영을 위한 관리도구를 back-office로 보는군요..

    [바미] 무지성 코딩을 줄여보자.

    인터넷 상에 누군가가 진담반 농담반으로 그랬습니다. 개발자가 가장 필요한 덕목중에 하나는 복붙, 구글링이라구요.. 그러면서 위 사진을 덧붙였죠. 이번에 다룰 내용은 무지성으로 복붙, 구글링을 하다 생겨난 일이 였습니다. 개발을 하다보면 마감에 쫓기게 되는걸 여러번 느끼실 때가 있을겁니다. 저 역시 한참 압박에 시달릴 때 였습니다. 물론 회사에서 푸쉬를 하지는 않습니다만, 제가 생각한 일정에 맞는 결과가 나오지 않으면 저 혼자서 생각한 일정에 맞게 개발이 되야 한다는 엄청난 압박에 시달리더라구요.. 그러다보니 당장 눈앞에 보이는 결과에만 목이 매이게 되고, 그 결과물을 만들기 위해 하게되는 구글링과 복붙이 더 좋지 않은 상황에 몰고 가게 되었습니다. 제가 요번에 이 일이 있게 된 일 중에 하나가 '시간'과..