목록전체 글 (272)
091
1. 도커 네트워크 - 컨테이너는 서로 격리된 공간이라서, 아무 설정이 없다면 다른 컨테이너와 통신할 수 없습니다. 하지만 실제 서비스에서느 프론트앤드, 백앤드, DB처럼 여러 컨테이너가 서로 통신을 해야하기 때문에, 이러한 컨테이너들을 연결해주기 위한 가상의 통로가 도커 네트워크입니다.-> 도커를 설치하면 기본적으로 docker0이라는 가상 이더넷 브리지가 만들어집니다. 별도 설정이 없으면 모든 컨테이너는 이 docker0 브릿지에 연결되어 IP 주소를 하나씩 할당받습니다. -> 위의 구성에도 나오는 도커 네트워크 구조를 소개해보겠습니다.• eth0: 컨테이너 내부에 만들어지는 기본 네트워크 인터페이스입니다. 컨테이너마다 하나씩 가지고 있고 연결된 브릿지와 같은 대역의 IP를 받습니다.• vethxx..
1. 컨테이너 볼륨 - 도커는 이전 글에서 말했다시피 유니언 파일 시스템을 사용합니다. 하나의 이미지로 여러 컨테이너를 만들 수 있고, 변경된 내용은 컨테이너의 쓰기 기능 레이어에 저장됩니다. 여기서 문제는 컨테이너 내부 데이터가 컨테이너 종료(삭제) 시에 함께 사라진다는 점입니다. 그래서 데이터를 영속적으로 유지하기 위해서는 도커 볼륨을 사용해야합니다.-> 서비스의 데이터와 로직은 분리되어야하고 컨테이너와 독립적으로 운영되기 때문에 컨테이너 삭제 시에도 볼륨은 함께 삭제되지 않습니다. 컨테이너에서 생성·재사용할 수 있고, 호스트 OS에서 직접 접근도 가능합니다. 다른 컨테이너로 언제든 옮겨 붙을 수 있기 때문에 운영자가 데이터를 안전하게 관리할 수 있습니다. - 볼륨(Volume)은 파일과 디렉터리를 ..
1. Jackson - Jackson은 Java 객체와 JSON 데이터를 서로 변환해주는 Java 라이브러리입니다. Java에서는 데이터를 객체 형태를 다루지만, HTTP 통신에서는 주로 JSON 형식으로 데이터를 주고받기 때문에 Java 객체와 JSON 사이의 변환이 필요합니다. -> Jackson은 이러한 변환을 자동으로 처리하여 Java 애플리케이션에서 JSON 데이터를 쉽게 주고받을 수 있도록 합니다. - Java 객체를 JSON으로 변환하는 것을 직렬화라고하며, 반대로 JSON을 Java 객체로 변환하는 것을 역직렬화라고 합니다. 이러한 처리가 필요한 이유는 Java 객체 자체를 네트워크를 통해 그대로 전달할 수 없기 때문입니다. Java 객체는 실행 중인 JVM의 메모리 공간에 존재하는 객체입..
1. JMM(Java Memory Model) - Java Memory Model(JMM)은 멀티스레드 환경에서 메모리의 변경 사항이 각 스레드에 어떻게 보이는지, 그리고 여러 메모리 연산 사이의 순서 관계가 어떻게 보장되는지를 정의하는 Java의 메모리 모델입니다. 멀티스레드 환경에서는 여러 스레드가 동시에 실행되며, 실제 실행 과정에서는 CPU와 메모리 시스템의 특성 등에 의해 한 스레드의 메모리 연산이 다른 스레드에서 동일한 방식으로 즉시 관찰된다고 단순하게 가정할 수 없습니다. 따라서 Java는 멀티스레드 환경에서 메모리 접근의 가시성과 연산의 순서 관계를 정의하기 위한 규칙으로 JMM을 제공합니다. Race Condition(경쟁 상태)1. Race Condition- 레이스 컨디션이란 둘 이..
1. Race Condition- 레이스 컨디션이란 둘 이상의 실행 흐름이 동일한 상태에 동시에 접근하고, 그 결과가 실행 순서에 다라 달라지는 상황을 의미합니다. 예를 들어 설명해보겠습니다. increment() 함수를 스레드 A,B 에서 동시에 실행했다고 봤을 때, 기대한 결과는 count가 2가 되는 것이지만, 실제 결과는 1입니다.즉, 여러 실행 흐름이 동일한 변경 가능한 상태를 공유하면서, 연산이 서로 간섭할 수 있기 때문에 결과가 실행 순서에 따라 다르게 나올 수 있습니다. 그렇다면 이러한 문제는 왜 발생하는 걸까요? 바로 각 연산이 원자적으로 하나의 작업으로 처리되지 않기 때문입니다. *스레드(Thread)란 하나의 프로세스(실행 중인 프로그램) 내에서 운영체제가 CPU에 할당하여 처리하는..
1. Record - Record란 불변성(Immutability)을 보장하는 데이터 캐리어(ex. DTO 또는 VO)를 명확하게 간결하게 정의하기 위한 특수한 형태의 클래스입니다. -> Record를 선언하면 내부에서 아래의 3가지 작업을 수행합니다.(1) java.lang.Record를 상속하기 때문에 다중 상속이 불가하고, 인터페이스 구현은 가능합니다.(2) Record 클래스 자체와 내부에 선언된 모든 필드는 private final로 선언됩니다.(3) 상태를 모두 포함하는 표준 생성자, 필드명과 동일한 이름의 접근자 메서드(getFieldName()가 아니라 fieldName() 형식), 내부 상태를 기반으로 한 equals(), hashCode(), toString()의 메서드가 자동으로 생성..
1. 도커(Docker) - 컨테이너 서비스란 애플리케이션을 실행에 필요한 모든 환경을 독립된 규격 상자에 담아 어느 컴퓨팅 환경에서든 일관되고 신속하게 실행, 배포할 수 있게 해주는 운영체제 레벨의 가상화 기술입니다. - 도커란 기존의 리눅스 컨테이너(LXC)를 이용한 애플리케이션 컨테이너 기술입니다. 개발 -> 테스트 -> 배포 -> 운영 단계마다 컴퓨팅 환경(CPU, 메모리, 스토리지, 네트워크, 보안 패치 등)이 달라서 생기는 시행착오와 오류를 해결하기 위해 어디서든 일관된 환경을 제공할 방법으로 사용됩니다. Q. 가상 머신과 컨테이너는 그럼 무슨 차이가 있는건가요?A. 구분가상화 수준방식가상 머신(VM)하드웨어 레벨하이퍼바이저로 OS 전체를 가상화컨테이너운영체제 레벨호스트 OS 커널을 공유하..
1. 분류분석 이론- 분류 분석이란 그룹이 알려진 데이터로 학습 후 새로운 데이터가 어느 그룹인지 예측하는 지도 학습의 일종입니다. -> 분류(Classification)는 학습단계와 분류(실전)단계로 구성되어있으며 분류된 학습 데이터를 가지고 분류안된 새로운 데이터를 분류합니다. 그룹(group,class)의 형태로 알려진 데이터들이 있을 때 그룹을 모르는 어떤 데이터에 대해 어느 그룹에 속하는지를 예측하는 기술입니다.-> 군집(Clustering)은 여러 개의 독립변수들을 활용해 유사한 특징을 가지는 개체들을 몇 개의 군집으로 집단화시키는 방법입니다. 분류된 학습 데이터가 없으므로 두 점간의 거리를 이용하여 군집을 분류합니다. 주어진 대상 데이터들을 유사성이 높은 것끼리 묶어주는 기술로, 묶음을 군집..
