대용량 파일을 WAS에 직접 올려야 했던 비극 (feat. Chunk Upload)
문제 상황 회사 프로젝트 중 2~6GB에 달하는 대용량 압축파일을 업로드해야 하는 상황이 있었다.하지만 적절한 인프라가 갖춰지지 않아, S3 같은 외부 저장소 없이 WAS(Web Application Server)에 직접 업로드해야만 했다. 시스템 구조 화면 → A 시스템(통합포탈 백엔드) → B 시스템(파일 업로드 처리 서버) → 외부 AP...
문제 상황 회사 프로젝트 중 2~6GB에 달하는 대용량 압축파일을 업로드해야 하는 상황이 있었다.하지만 적절한 인프라가 갖춰지지 않아, S3 같은 외부 저장소 없이 WAS(Web Application Server)에 직접 업로드해야만 했다. 시스템 구조 화면 → A 시스템(통합포탈 백엔드) → B 시스템(파일 업로드 처리 서버) → 외부 AP...
들어가며 2023년 4월 4일 신입으로 입사한 후, 두 번째 연 회고록이다. 연차가 쌓인다는 것은 좋으면서도 달갑지만은 않다. 기회는 많아지지만, 그만큼 책임과 기대도 커진다. 하지만 연차가 쌓이는 만큼 회사에서는 나에게 당연한 수준과 책임, 실력을 기대한다. 나는 개발자로서의 역량이 연차보다 빠르게 쌓이고 있을까? 이번 회고를 하며, 신입을 벗어나기...
이 글은 Stream API가 아니라 I/O Stream에 대한 내용입니다. 자바 입출력 스트림에 대해 강의를 듣던 중 문득 이런 생각이 들었다. 입출력 스트림이 왜 필요할까? 파일 시스템, 입출력, 네트워크 통신 등에서 왜 Stream이라는 것이 필요할까? 나는 개발 용어를 보면, 그 뜻이나 어원부터 찾아보는 습관이 있다. Strea...
컴퓨터의 언어 개발하면서 우리는 우리의 언어(자연어)를 사용한다. 예를 들면 String introduce = "안녕하세요. Leoh 입니다." 처럼 말이다. 이런 자바 코드를 보고 컴퓨터는 어떻게 해석할까? 컴퓨터가 한글과 영어를 잘 아는 저명한 통역가일까? 사실 그렇지 않다. 컴퓨터는 0과 1밖에 모른다. “트랜지스터” 라고 불리는 스위치가 ...
개요 어느샌가부터 자바에는 Record라는 신기한 타입이 생겼다. 처음에는 무슨 음반(?) 이라고 생각했으나, 다시 생각해보니 Row의 의미를 가진 타입이라고 생각했다. 컴퓨터 과학에서 레코드(record, struct)는 기본적인 자료 구조이다. 데이터베이스나 스프레드시트)의 레코드는 보통 로우(row)라고 부른다. 레코드는 각기 다른 ...
Objects.requireNonNull() 자바에서 null을 처리하는 것은 굉장히 중요하다. 잠재적인 null을 처리해주지 않으면 런타임환경에서 예상치 못한 예외가 발생하여 서비스에 치명적일 수 있다. 이러한 자바 + 스프링을 사용하면서 null을 처리하는 방법은 다양한데, 이 중 Objects.requireNonNull()에 대해 알아보려고 ...
DTO를 만들다보면 Integer와 같은 Wrapper 클래스를 사용할 지, 원시타입(int) 그대로를 사용할 지 고민될 때가 있다. 둘은 어떤 차이가 있고 어떤 게 더 좋은 지 알아보자. 원시타입과 Wrapper 클래스 원시타입과 Wrapper 클래스의 선택지를 알아보기 전에 각각이 무엇인 지 간단히 알아보자. 원시타입 (Primitive Typ...
문제 스프링부트에서 트랜잭션을 관리할 때, 대부분의 개발자들이 선언형 트랜잭션이라 불리는 @Transactional 어노테이션을 사용한다. 그 이유는 확실하다. @Transactional은 AOP로 트랜잭션을 관리해주기 때문에, 개발자가 트랜잭션을 관리하는 코드를 작성하지 않아도 된다. 그런데 만약 선언형 트랜잭션과 명령형 트랜잭션을 같이 사용하게...
두 번 째 개발블로그 이사다. 처음에는 Velog, 그리고 Tistory를 거쳐 Github Pages(jekyll + chirpy)로 옮기게 되었다. 이유없이 심심해서 옮긴 것은 아니다. 정착하지 못하고 이리저리 옮긴 이유는 다음과 같다. Velog 장점 UI가 직관적이고, 심플하다. 마크다운에 최적화되어 마크다...
문제와 해결 사이드 프로젝트에 스프링 시큐리티를 적용하기 위해 기본적인 Security Config 파일(WebSecurityConfig.java)를 생성하였었다. 그 후 TDD로 개발을 진행하는데, 소나큐브 + jacoco에서 테스트 커버리지 대상에 Config 파일도 포함시켰다. Config 파일에 대한 테스트가 없기 때문에 86.70%...