회사에서 개발하는 앱의 크기가 커지면서 관리자 화면에서 엑셀변환을 추출하는 것에 종종 OOM(Out Of Memory)이 일어났다. 그래서 자바 엑셀변환을 튜닝을 하게 되었는데, 튜닝 시 방법을 간단히 적어보려고 한다. 여기서 DI는 Apache Poi를 주로 사용했고, build.gradle 에 이와 같이 추가하였다. compile('org.apache.poi:poi-ooxml:4.0.0') 기존의 로직은 아래와 같았다. 더보기 public static ResponseEntity exportExcel(String fileName, List list , LinkedHashMap format) { try { // 확장명 붙여주기 if(!fileName.contains(".xlsx")) fileName +=..
어느 개발자들이나 신기술에 대한 갈망은 조금이나마 있을 것이다. 현재 우리나라에서 사용하고 있는 대부분의 프로그램 및 앱들은 SQL을 기반으로 작동하고 있다. 신기술이라고 얘기하기는 애매하지만 이번 글에서는 SQL을 되도록이면 최소화하여 (사용하지 않는 것이 아니다) 작동하는 프로그램의 원리에 대해 간단히 살펴보려고 한다. 가장 먼저 용어를 정리해보아야 한다. 글 제목에 적혀 있는 3개의 용어를 정리해보았다. 정의 ORM(Object Relational Mapping) : 객체와 DB 테이블이 매핑을 이루는 것 객체 하나는 하나의 테이블이 된다. JPA(Java Persistent API) : 자바 ORM 기술에 대한 API 표준 명세 (이 링크에서 JPA에 대한 어노테이션을 살펴볼 수 있어요) Hib..
Author: 주니용 요새 IT직군에서 알아주는 회사들은 대부분 입사 전 코딩 테스트를 필수로 치루게 된다. 나도 많은 코딩 테스트를 치뤄봤지만, 서버를 주로 개발한 사람의 입장으로서 자바를 코딩 테스트 언어로 많이 선택했었다. 내가 아는 한도에서 적어도 자바스크립트를 코딩 테스트 언어로 사용하는 이유는 다음과 같을 것이다. 편해서 또는 눈에 익어서 오토캐스팅이 되서 소스코드를 빠르게 작성하기 위해서 컴파일러 설치를 안해도 되서 현재도 그렇지만, 아직까지도 웹 생태계는 지속적으로 변하고 있다. 지금의 추세는 자바스크립트를 기본으로 한 프레임워크인 리-뷰-앵(React, Vue, Angular)의 시대라고 해도 과언이 아니다. 그래서 그런지 웹 개발을 할 수 있다는 사람이 주변에 너무나도 많고, 그 때문에..
Author: 주니용 2019년 기준으로 한국과 미국 간의 비행기 거리는 비행기 시간으로 18시간이 걸린다. 하지만 김포공항에서 출발한 비행기는 제주도까지 불과 1시간밖에 걸리지 않는다. 갑자기 뜬금포로 비행기 시간의 얘기가 왜 나오는 것이지?? 거리가 멀수록 데이터를 전송할 때 걸리는 시간도 비례한다. 즉, 우리는 서울에 서버를 위치해둔 홈페이지를 제주도에서 들어가는데 1초가 걸린다면 미국에서는 18배인 18초가 걸려야 하는 것이다. 충격이다. 대부분의 한국 사용자들은 못기다리고 탈주하겠지... (나는 그래요) 이런 문제를 해결하기 위해 한국 서버 미국 서버 사이에 중계기를 두어서 조금 더 빠르게 접근하고 전달하는데 필요한 자원낭비를 최소로 하는 것이 바로 CDN(Contents Delievery Ne..
저번 글에서 push, pull 까지 알아보았다면 이번에는 공동으로 사용하는 작업공간이라고 생각하고 git에서 제공하는 다른 명령어들을 알아보려고 한다. 한 브랜치에서 다수의 작업자가 공동으로 사용하는 일은 정말 많다. 지금 우리 회사에서도 이와 같이 사용하고 있어 종종 소스간에 충돌(conflict)이 일어나고 있다. 이를 효과적으로 나누기 위해 브랜치의 개념이 등장하였지만 부득이하게도 같은 브랜치에서 작업을 해야 하거나, 급하게 서버에 반영을 해야하는 등 브랜치를 사용하기 애매한 시점에는 다른 방법을 사용한다. 가장 먼저 확인할 사항은 소스가 최신화가 되어 있는지 pull을 받는 것이다. pull을 받게 되면 1초 전에 같은 브랜치에 올라간 소스일지라도 체크가 가능하지만, 일일히 소스를 수정할 때마다..
개발하는 프로젝트의 규모가 커지면 커질수록 많은 개발자들이 한 프로젝트 내에서 개발을 진행해야 하는 경우가 많이 생기게 되었다. 또한, 개인이 작업하는 경우에도 수정한 코드의 관리가 진행이 되야하는 경우가 있는데, 이렇게 소스 별로 관리를 하는 것 중 제일 많이 사용되고 있는 것이 바로 Git 이다. 우리가 흔히 알고 있는 GitHub, Git Bash, SourceTree, BitBucket 등은 모두 Git을 기반으로 작동하는 웹페이지 및 프로그램이다. GitHub에서는 public으로 제공되고 있는 모든 소스들을 무료로 제공해주고 있다. 단, private을 사용하려면 일정의 금액을 지불해야 하는 것으로 알고 있다. 반면, BitBucket은 기업용으로 주로 많이 사용하고 회사에 소속된 개발자들만 ..
이전에 근무 도중 점심 시간에 발생한 이슈였다. 개발한 앱의 특성상 클라이언트에서 호출 시점이 최우선인, 다시 말해 가장 먼저 호출되어야 하는 메소드가 있었다. 그 기능이 제대로 수행되지 않으면 시퀀셜하게 호출되는 API의 특성상 뒤에 호출되는 것들에도 영향도가 갈 수 밖에 없다. 그런데, 하필 API 업데이트를 진행한 후 앱이 기동이 되지 않는 것이었다. 클라이언트는 업데이트를 한 것이 없기에 이건 분명 서버의 문제였고, 내가 수정한 소스에서 일어나고 있는 문제였다. 실제로 그런 문제는 의외로 너무 단순한 문제였지만 중요한 문제기도 하였다. 여기서 알게된 것이 바로 Exception 처리의 중요성이고, 그 중 하나로 선택한 것이 NPE이다. NPE NullPointerException의 약자로 선언한 ..
아래 소스는 Java8을 기준으로 작성되었습니다. 혹시 오타가 있거나 잘못 이해한 부분이 있으면 댓글로 적어주세요 :) 글(1) 에서 기본적으로 정의를 했다면 이번에는 어떻게 구체적으로 사용하는지 설명해보려고 한다. Lambda와 Stream(1) Author: 주니용 아래 소스는 Java8을 기준으로 작성되었습니다. 혹시 오타가 있거나 잘못 이해한 부분이 있으면 댓글로 적어주세요 :) 프로그래밍하면서 정말 많이 사용하는 것 중 하나가 for문이다. abbo.tistory.com 기본적으로 인터페이스를 생성하면 다른 클래스에서는 아래와 같이 사용할 수 있다. 소스가 너무 길었음에도 람다를 사용하여 간편하게 만들었다. 파라미터를 사용하는 방법은 위와 같고, 2개 이상인 경우는 소괄호'()'를 붙여주면 된다..