목록Study (269)
전공공부
Security docker user 지정 docker run ubuntu sleep 3600 cli docker run --user=1000 ubuntu sleep 3000 Dockerfile FROM ubuntu USER 1000 컨테이너 안의 루트 유저는 루트 유저의 호스트와 다릅니다. docker run --privileged를 사용해서 런 시켜야 컨테이너의 루트 사용자 처럼 행동합니다. Kuberbetes Security pod - level security apiVersion: v1 kind: Pod metadata: name: web-pod spec: securiyContext: runAsUser: 1000 containers: - name: ubuntu image: ubuntu comman..

1. 상속을 고려한 설계와 문서화의 이해 상속을 사용 할 때 메소드 재정의하면 무슨 일이 일어나는지를 정확히 정리하여 문서로 남겨야 한다. 덧붙여서 어떤 순서로 호출 할 지, 각각의 호출 결과가 이어지는 처리에 어떤 영향을 주는지도 담아야 한다. 더 넓게 말하면, 재정의 가능 메서드를 호출 할 수 있는 모든 상황을 문서로 남겨야 한다. 기존의 API 문서의 메서드 설명 끝에서 종종 "Implementation Requirementss"로 시작하는 절을 볼 수 있는데, 그 메서드의 내부 동작 방식을 설명하는 곳이다. 다음 예는 java.util.AbstractCollection 에서 발췌한 예이다. 내부 동작 방식을 설명하는 이유 /** * {@inheritDoc} * * @implSpec * This i..
Secret을 만든 후 Pod 주입을 통해서 암호화된 값을 넣을 수 있다. kubectl create secret generic --from-literal==form literal 사용법 kubectl create secret generic app-secret --from-literal=DB_HOST=mysqlform file 사용법 kubectl create secret generic app-secret --from-file=옵션이 너무 많을때는 파일을 통해 연결 secret.yml 파일 지정 secret-data.yml apiVersion: v1 kind: Secret metadata: name: app-secret data: DB_HOST: base64로 인코딩 하는 법 echo -n 'my..
kubectl create configmap --from-literal== # --from-literal 콘피그맵의 키 벨류 값을 설정해주는 구성 항목 kubectl create configmap --from-literal= 선언적 방식 apiVersion: v1 kind: ConfigMap metadata: name: app-config data: APP_COLOR: blue APP_MODE: prod kubectl get configmaps # 콘피그맵 확인 포드에서 사용하는 방법 pod.yaml apiVersion: v1 kind: Pod metadata: name: simple-webapp-color labels: name: simple-webapp-color spec: containers: - ..

Cloneable은 복제해도 되는 클래스임을 명시하는 용도의 믹스인 인터페이스이지만, clone 메서드가 정의된 곳이 Object 클래스이고 그마저도 protected이다. 그래서 Cloneable을 구현 하는 것 만으로는 외부 객체에서 clone을 사용 할 수 없다. Cloneable을 이례적으로 Object 클래스의 protected 메서드인 clone의 정의를 정의한다. 일반적으로는 인터페이스에서 정의한 기능을 클래스에서 받아서 사용하는 행위를 진행하는데, Cloneable의 경우 상위 클래스에 정의된 protected 메서드의 동작 방식을 변경한다. 그래서 Object.clone() 을 만약 바로 불러서 내부적으로 구현하여 사용 하려고 하면 아래의 설명을 참고하면 throws CloneNotSup..

자바는 Managed Language로써 일반적으로 언어상에서 메모리를 관리해주는 언어이다. 그래서, 메모리를 직접 관리하지 않아도 된다고 착각 할 수 있는데 이는 사실이 아니다. 예시 코드 public class Stack{ private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack(){ elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e){ ensureCapacity(); elements[size++] = e; } public Object pop(){ if(size ..
스택 자료구조 특성상 FIFO을 이용한 풀이이다. 1) 스택에 인덱스 값을 저장 2) 하강하는 배열이면 바로 스택에 추가하여 관리한다. 3) 스택의 가장 peek 값인 제일 최신의 앞 자리수와 현재 들어온 뒷 자리인 값을 비교 4) 뒷 자리가 스택의 peek 부분 보다 크다면 바로 뒤에 존재하는 큰 수 이다. 이 때의 값을 answer 배열에 저장하고 이때 사용된 numbers 값은 스택에 집어 넣어서 다음에 나올 뒷 숫자와 비교를 진행한다. ※ 스택에 들어가는 수들은 다음 숫자와의 비교를 위해서 들어가고 스택은 FIFO 인 것을 생각해야 보인다. import java.util.*; class Solution { public static int[] solution(int[] numbers) { int[]..
문제점 정적 팩토리, 생성자는 선택적 매개변수가 많을 때 적절하게 대응하기 어렵다. 예시 Code 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리 같은 필수 항목 몇 개와 총 지방, 트랜스 지방, 포화지방, 콜레스테롤, 나트륨 등 총 20개가 넘는 선택 항목으로 이뤄진다. 그런ㄴ데 대부분 제품은 이 선택항목 중 대다수의 값이 그냥 0이다. 1. 점층적 생성자 패턴 각 생성자의 매개변수 개수를 다르게 만들어, 여러 개의 생성자를 만드는 방식이다. 예시 public class NutritionFacts { private final int servingSize; private final int servings; private final in..