목록2021/09 (22)
KoreanFoodie's Study

가끔 우리는 말로 차마 형용하기 힘들 정도의 죄책감에 짓눌려질 때가 있다. 심지어 특별한 잘못을 하지 않았음에도 불구하고, 평소처럼 무난히 살아가고 있음에도 불구하고 말이다. 그러한 순간은 느닷없이 찾아온다. 아침에 일어나 달콤한 잠에서 깨어났을 때, 일을 나가기 위해 샤워를 하고 있을 때 등등. 세상 재미있게 게임을 하던 중에도 이른바 '현자 타임'이 찾아오기도 한다. 이렇듯 우리는 삶을 되돌아 보며 행복한 회상에 잠기기도 하지만, 후회와 박탈감으로 이불을 차며 발을 동동 구를 때도 있다. 그리고 그런 죄책감에 짓눌려 앞으로 나아가지 못하고 자기 자신만을 자책하는 것으로 하루를 마무리한다. 이런 단기적 우울 사이클은 어느 순간, 벚꽃이 지듯 사라져버리곤 한다. 하지만 그 씨앗은 여전히 우리 가슴 속에 ..
쿠버네티스의 구조 쿠버네티스는 애플리케이션 간에 OS를 공유해 VM을 사용하는 것보다 가볍다! 또한 추상화 레벨이 높아 리소스 관리가 효율적이다. 쿠버네티스가 제공하는 것 서비스 디스커버리와 로드 밸런싱 : DNS이름이나 IP 주소를 이용해 컨테이너를 노출할 수 있다. 트래픽 관리를 위한 로드 밸런싱도 제공한다. 스토리지 오케스트레이션 : 로컨 저장소/공용 클라우드 공급자 등이 원하는 저장소 시스텝을 자동으로 탑재할 수 있다. 자동화된 롤아웃과 롤백 자동화된 빈 패킹(bin packing) : 리소스 활용성 UP 자동화된 복구(self-healing) : 실패한 컨테이너의 재실행/교체 시크릿과 구성 관리 : 함호, OAuth 토큰/SSH 키 저장 관리 쿠버네티스 컴포넌트 "쿠버네티스를 배포하면 클러스터를..

돈은 기하급수적으로 버는 것이다. 흔히들 사람들은 '쉽게 들어온 돈은 쉽게 나간다' 따위의 말들을 하며 힘겨운 노동의 가치에 과도한 의미부여를 한다. 하지만 사람들은 정말 힘겨운 노동을 통한 이윤 창출을 의미있다고 여기는 걸까? 아니다! 사람들은 쉽고 편하게 돈을 벌길 원하고, 심지어는 일을 하지 않고도 하늘에서 돈이 떨어지길 빈다. 잠실역에는 매일 복권명당으로 알려진 편의점에 사람들이 줄을 서고, 공짜 쿠폰, 공짜 사은품을 받기 위해 장사진을 치기도 한다. 사람들이 힘들게 일해서 벌어야 돈이 안 빠져나간다고 스스로의 처지를 위로하는 것은 자기합리화에 가깝다. 혹은 부자들이나 연예인들을 보며 '저렇게 번 돈은 금방 사라진다'고 저주를 퍼붓는 것은 열등감과 질투의 표출이다. 부자는 위에 올린 사진처럼, '..

사용자 정의 예외와 예외 발생 프로그램을 개발하다 보면 자바 표준 API에서 제공하는 예외 클래스만으로는 다양한 종류의 예외를 표현할 수가 없다. 애플리케이션 서비스와 관련된 예외를 애플리케이션 예외 (Application Exception)이라고 한다. 이는 개발자가 직접 정의해서 만들어야 하므로 사용자 정의 예외라고도 한다. 사용자 정의 예외 클래스 선언 사용자 정의 예외 클래스는 컴파일러가 체크하는 일반 예외로 선언할 수도 있고, 컴파일러가 체크하지 않는 실행 예외로 선언할 수도 있다. 일반 예외로 선언할 경우 Exception을, 실행 예외로 선언할 경우 RuntimeException을 상속하면 된다. public class SOME_Exception extends [ Exception | Run..

자동 리소스 닫기 자바 7부터는 try-with-resources를 사용하면 예외 발생 여부와 상관없이 상요해던 리로스 객체(각종 입출력 스트림, 서버 소켓, 각종 채널)의 close() 메소드를 호출해서 안전하게 리소스를 닫아준다. 리소스라는 말이 여러 가지 의미가 있겠지만 여기서는 데이터를 읽고 쓰는 객체라고 생각해 두자. FileInputStream fis = null; try { fis = new FileInputStream("file.txt"); } catch (IOException e) { ... } finally { if (fis != null) { try { fis.close(); } catch (IOException e) {} } } 파일을 사용할 때는 try-catch를 사용해서 clo..

예외와 예외 클래스 JVM 실행에 문제가 생겼을 때, 우리는 에러를 마주하게 된다. 자바에서는 에러 이외에 예외(exception)라고 부르는 오류가 있는데, 예외란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류를 말한다. 예외가 발생되면 프로그램은 곧바로 종료하지만, 예외 처리(Exception Handling)을 통해 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다. 예외는 두 가지 종류가 있다. 하나는 일반 예외(Exception)이고, 다른 하나는 실행 예외(Runtime Exception)이다. 일반 예외는 컴파일러 체크 예외라고도 하는데, 자바 소스를 컴파일 하는 과정에서 예외 처리 코드가 필요한지 검사하기 때문이다. 만약 예외 처리 코드가 ..

익명 객체 익명(anonymous) 객체는 이름이 없는 객체를 말한다. 익명 객체는 단독으로 생성할 수 없고 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다. 익명 객체는 필드의 초기값이나 로컬 변수의 초기값, 매개 변수의 매개값으로 주로 대입된다. UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 익명 객체가 많이 활용된다. 익명 자식 객체 생성 부모 타입으로 필드나 변수를 선언하고, 자식 객체를 초가값으로 대입할 경우를 생각해보자. 우선 부모 클래스를 상속해서 자식 클래스를 선언하고, new 연산자를 이용해서 자식 객체를 생성한 후, 필드나 로컬 변수에 대입하는 것이 기본이다. class Child extends Parent { } // 자식 클래스 선언 class A { P..

중첩 클래스 중첩 클래스를 사용하면 코드의 복잡성을 줄일 수 있다! 중첩 클래스는 클래스 내부에 선언되는 위치에 따라서 두 가지로 분류된다. 클래스의 멤버로서 선언되는 중첩 클래스를 멤버 클래스라고 하고, 메소드 내부에서 선언되는 중첩 클래스를 로컬 클래스라고 한다. 멤버 클래스는 객체가 사용 중일때는 언제든지 재사용이 가능하지만, 로컬 클래스는 메소드 실행 시에만 사용되고, 메소드가 실행 종료되면 없어진다. public class A { class B {...} // 인스턴스 멤버 클래스 static class C {...} // 정적 멤버 클래스 void method() { class D {...} } // 로컬 클래스 } 멤버 클래스도 하나의 클래스이기 때문에 컴파일하면 바이트 코드 파일(.clas..

인터페이스 상속 인터페이스도 다른 인터페이스를 상속할 수 있다. 인터페이스는 클래스와는 달리 다중 상속을 허용한다. 다음과 같이 extends 키워드 뒤에 상속할 인터페이스드을 나열할 수 있다. public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {...} 하위 인터페이스를 구현하는 클래스는 하위 인터페이스의 메소드 뿐만 아니라 상위 인터페이스의 모든 추상 메소드에 대한 실체 메소드를 갖고 있어야 한다. 그렇기 때문에 구현 클래스로부터 객체를 생성하고 나서 다음과 같이 하위 및 상위 인터페이스 타입으로 변환이 가능하다. 하위인터페이스 변수 = new 구현클래스(...); 상위인터페이스1 변수 = new 구현클래스(...); 상위인터페이스2 변수 = new 구현클래..

인터페이스의 역할 인터페이스는 객체의 사용 방법을 정의한 타입이다. 개발 코드가 중간에 인터페이스를 두는 이유는, 개발 코드를 수정하지 않고, 사용하는 객체를 변경할 수 있도록 하기 위해서이다. 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하므로 어떤 객체를 사용하느냐에 따라 실행 내용과 리턴값이 다를 수 있다. 따라서 개발 코드 측면에서 코드 변경 없이 실행 내용과 리턴값을 다양화할 수 있다는 장점이 있다. 인터페이스 선언 인터페이스는 "~.java" 형태의 소스 파일로 작성되고 컴파일러(javac.exe)를 통해 "~.class" 형태로 컴파일되기 때문에 물리적 형태는 클래스와 동일하다. public interface InterfaceName { ... } 인터페이스는 상수와 메소드만을..