
이번 개발건에 대용량 파일 업로드가 있어서 대리님이 실험을 해보라고 하셨고, 위 세 가지를 이용하여 테스트해보았다. Case#1 MultipartFile.getByte multipartFile.getByte로 바이트배열을 받고 그 바이트배열을 FileOutputStream을 이용하여 쓰는 방법이다. 1기가 파일을 업로드한다고 했을 때 위와 같은 결과가 나왔다. 항목에 대해 설명하자면, 첫번째 Max Heap은 최대 Heap 사이즈, used(before)은 작업 전 Heap 사이즈, used(after)는 작업 후 Heap 사이즈, used(gc-after)는 GC 후 Heap 사이즈이다. 위와 같은 경우, 작업 후에 메모리를 많이 차지하는 걸 알 수 있다. Case#2 MultipartFile.tran..
오늘부터 금요일까지 오라클의 SQL 성능 튜닝 관련 교육을 듣게 되었는데, 오늘 들은 첫 강 내용을 여기에 정리해둔다. OLTP: 많은 유저가 트랜잭션을 멀티로 발생시키는 것 DLAP: 소수의 파워유저들이 많은 데이터를 이용하는 것(예를 들자면, 통계) 튜닝을 알기 전에 먼저 SQL이 어떻게 처리되는지 그 구조를 알아야 한다. 기본적으로 사용자가 SQL로 요구를 하면 Optimizer가 SQL을 해석하고 실행계획을 작성하고 실행한다. SQL을 해석하고 실행계획을 작성하는 데 있어서 DATA Dictionary를 참조한다. 이때 DATA Dictionary는 인덱스정보, 데이터 건수 정보 등을 담고 있다. 오라클은 인스턴스 여러 개가 하나의 storage를 바라보는 식이다. 하나의 인스턴스 안에는 Buff..
쿠버네티스에서 Pod는 애초에 쓰고 버리고 새롭게 시작할 수 있게 설계되어 있다. Pod의 IP주소는 기동시 부여되고, 종료시 회수되기 때문에 Pod가 죽고 다시 살아날 때 IP주소가 변경된다. 그렇기 때문에 Pod의 IP주소로 Pod에 접근할 수 없다. 그래서 Pod에 접근하려면 Service를 사용해야 한다. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR clusterip-nginx ClusterIP 10.104.201.2 80/TCP 5m34s app=nginx-app 위와 같은 서비스가 있다고 해보자. ClusterIP로 된 Service이다. 이 서비스는 app=nginx-app인(key-value 구조) Pod들에 접근할 수 있는 서비스이다. ..
대리님들이 자바8의 메서드 참조에 대해 말씀하시는걸 주워듣고 나도 이래저래 공부를 했는데 메서드 참조는 이해가 안 갔다. 그러다가 오늘 갑자기 깨달음을 얻어서 간단하게 정리해둔다. 메서드 참조는 말그대로 메서드를 참조하는 것이다. 그렇다면 메서드를 왜 참조하느냐? 이미 있는 메서드를 사용하기 위해서이다. public class Hello { private static final String HELLO = "안녕하세요!"; public String sayHello() { return HELLO; } public String sayHello(String name) { return name + "님, " + HELLO; } } 위와 같은 클래스가 있다고 해보자. 이름을 입력하면 이 이름을 이용해서 인삿말을 출..

외부 직원에게 사정상 vm 접근권한을 보내줄 때, 나는 따로 계정을 만든 뒤, /etc/sudoers에 등록하고 넘겨주면 되지 않나 했는데, 팀장님은 wheel 그룹을 주면 된다고 하셨다. 그래서 wheel 그룹을 찾아보니 /etc/sudoers에 이미 wheel 그룹이 정의되어 있어서 wheel 그룹을 주는 방법이 더 간단하겠다고 생각했다. 이때 wheel 그룹에 유저를 추가하는 명령어도 여러 가지가 있는 것 같은데 우선 팀장님이 알려주신 것과 더 찾아본 바 아래 두 가지와 같다. // 1. gpasswd -a [사용자계정] wheel // 2. usermod -aG wheel [사용자계정]

DispatcherServet은 HTTP 요청을 제일 앞에서 받아 적합한 컨트롤러로 요청을 넘겨주는 Front Controller의 역할을 한다. DispatcherServlet이 어떻게 동작하는지 보기 위해서는 그 클래스를 까보면 된다. (예전같았으면 인터넷 검색을 주로 했겠지만 스프링 자체가 실력있는 분들이 작성한 코드다보니 이런 분들이 작성한 코드를 보고 배우는 경험도 되고 직접 뜯어보는게 훨씬 기억에 잘 남아서 요즘은 공식문서를 보며 코드를 뜯어보고 있다.) 먼저 계층구조를 뜯어보면 위와 같다. 이제부터 살펴볼 DispatcherServlet은 FrameworkServlet을 상속하고 있다. FrameworkServlet은 WebApplicationContext를 멤버변수로 가지고 있다. publ..

log 설정도 한 번 봐야지, 봐야지 하다가 오늘 마침 설정 건드린 김에 정리해본다. 오늘 내가 설정 수정한 내용은 시스템 분리였다. 기존 A시스템이 있는 상태였고, 여기에 B시스템을 새로 추가하면서 로그를 따로 관리하게 되어 분리해야했다.(기존 시스템에 새로운 시스템을 추가하는 것에 대한 논의는 차치하고.) logback 설정파일 일반적으로 logback 설정파일은 src/main/resources 아래에 logback.xml로 존재한다. 구조는 , 안에 (선택), (선택), 최대 1개의 로 구성되어 있다. // 선택 // 선택 // 최대 1개 참고로 logback 0.9.17버전부터는 태그 이름의 경우, 대소문자를 구분하지 않는다고 한다. 예를 들어, , , 는 모두 이다. 다만, 이런 식으로 구성할..