본문 바로가기

Programming

(29)
[Docker] 도커란 무엇이고, 왜 사용할까? 🐳 Docker, 도커 컨테이너를 사용해 응용 프로그램을 더 쉽게 만들고 배포, 실행할 수 있도록 설계된 도구 컨테이너 기반의 오픈소스 가상화 플랫폼이다. 리눅스나 윈도우 기반의 애플리케이션 모두 사용할 수 있으며 인프라에 관계없이 항상 동일하게 실행된다. ❓ 컨테이너 & 이미지 📦 컨테이너 컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위라고 Docker의 공식 홈페이지에서 정의하고 있다. 도커의 컨테이너란 우리가 일반적으로 알고 있는 컨테이너와 매우 유사하다. 일반적으로 컨테이너는 화물을 옮길 때 컨테이너에 물건을 넣어 다양한 운송 수단을 통해 쉽게 옮길 수 있도록 한 것이다. 이처럼 도커는 ..
[Java] JVM, JDK, JRE의 차이 JVM(Java Virtual Machine) JVM은 자바 가상 머신으로 자바 소스코드(.java)를 컴파일하면 생기는 자바 바이트 코드(.class)를 OS에 맞게 변환하여 실행하는 역할을 한다. 따라서, 특정 플랫폼에 종속적이게 된다. 특정 밴더(ex. 오라클, 아마존, Azul, ...)에 따라 여러가지로 구현되어 있는데 JVM은 단독적으로 배포되지 않고 최소한의 배포단위는 JRE이다. JRE(Java Runtime Environment) JVM + 라이브러리 자바 실행 환경, 자바 애플리케이션을 실행할 수 있도록 구성되어 있다. JVM과 핵심 라이브러리, 자바 런타임에서 사용하는 프로퍼티 세팅이나 리소스 파일 등을 포함하고 있다. 하지만, 개발 관련 도구를 제공하지 않기 때문에 JRE만 설치한다..
[Java] Iterable과 Iterator 자료구조를 공부하던 중 Iterable과 Iterator가 나왔다. Iterator는 알고 있었지만 Iterable은 알지 못했기 때문에 정리해보았다. Java 내부의 코드를 살펴보면, List, Set, Queue ⇒ Collection ⇒ Iterable 순서로 extends하는 관계를 가지고 있는 것을 알 수 있다. Iterable이 무엇이길래 extends 하고 있는지 알아보자. Iterable JAVA API 문서를 보면 Iterable 인터페이스에서 Iterator를 반환하는 iterator()가 메소드로 선언 되어 있음을 볼 수 있다. 이를 구현하는 클래스들은 강제적으로 iterator() 메소드를 구현해야 하고, forEach와 iterator()를 사용할 수 있게 되는 것이다. Itera..
ArrayList와 LinkedList의 차이, 선택하기 알고리즘 문제를 풀면서 List를 사용해야 되는 일이 자주 발생한다. 차이를 알아보고 효율적인 Collection을 선택해보자 ArrayList 구조 ArrayList는 내부적으로 배열의 형태를 지니고 있다. get / set 배열의 index를 통해 접근하는 방식이기 때문에, random access속도가 빠르며 get / set 메소드는 상수 시간을 가지게 된다. add ArrayList는 배열이기 때문에 중간에 값을 끼워넣는 연산이 불가능하다. 만약 새로운 값을 추가하려고 할 때, List의 크기가 생성되어 있는 배열의 size(생성시 따로 설정하지 않았다면 size = 10인 배열이 생성된다)보다 커지게 되면, 이전 크기의 2배가 되는 배열을 생성해 배열 전체를 복사하여 새로운 배열에 복사하고 제..
Mattermost Webhook를 활용한 Spring Exception Sender 만들기 이전까지는 팀 프로젝트를 진행할 때 기능별로 분류를 했었는데, Spring을 모르는 팀원과 같이 프로젝트를 진행하게 되어 역할 분담을 프론트엔드와 백엔드로 나눠 진행하게 되었다. 그러다보니 프로젝트에서 발생한 에러를 수정하기 위해 로그를 보기 어려웠다. 그러던 중 MatterMost를 통해 에러를 받아볼 수 있다는 것을 알게 되어 제작을 해보았다. 기본적으로 Message Template 중 Attachments의 디자인이 가장 마음에 들어 해당 형식으로 작성하기로 했다.ㅤ 이런 느낌... 또한 StackTrace도 함께 보내고 싶었는데 메세지에 모두 담으면 너무 길어져 보기 불편해 어떻게 보낼까 고민하던 중 props.card를 사용하면 Additional Info 로 활용할 수 있다고 하여 추가적으로..