본문 바로가기
728x90

공부158

4 - 컨테이너를 실행해 보자 docker [명령어] [옵션] [대상] [인자] docker versiondocker --versiondocker psdocker ps -adocker rmdocker run --name [name] -d -p [port] 실습이라..뭐가 별로없다..ㅠㅠ 2024. 10. 27.
2 - 도커의 동작 원리 일반적인 서버라면 운영체제 위에 프로그램이나 데이터가 직접 올라가지만,도커를 사용하는 경우에는 운영체제 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작한다.*프로그램이나 데이터는 컨테이너 안에 위치한다데이터는 컨테이너 안에 위치한 것과 밖에 위치하는 것이 있다. --- 모든 컨테이너에는 '리눅스 운영체제 비슷한 무언가'가 들어 있다.최소한의 컨테이너에도 '리눅스 운영체제 비슷한 무언가'가 따려 나온다. '빈 컨테이너'라고 했지만 정말로 텅 빈 것은 아니다.-> 비슷한 무언가일뿐 실제 운영체제가 아니다. --- 운영체제는 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할 도커는 밑바탕에서 리눅스 운영체제가 동작하는 것을 전제로 하는 구조이기 때문에 리눅스 운영체제에서만 동작할 수 있다. wind.. 2024. 10. 13.
1 - 도커란 무엇인가 도커란 무엇인가?데이터 또는 프로그램을 격리시키는 기능 을 제공하는 소프트웨어 더보기도커?멀티 프로세스? 차이점 궁금하지 않나요격리수준: 도커는 파일 시스템, 네트워크 등을 포함한 완전 격리를 제겅히지만, 멀티 프로세스는 메모리만 격리하고 파일 시스템이나 네트워크는 공유할 수 있다사용 목적: 도커는 애플리케이션 배포와 격리된 실행 환경을 위해 사용, 멀티 프로세스는 하나의 시스템에서 여러 작업을 병렬로 처리하는 데 중점을 둠성능: 도커는 가상화와 비슷하지만 더 가벼운 방식으로 동작하며, 멀티 프로세스는 동일한 운영 체제 자원 안에서 프로세스만 격리하고 병렬 처리 수행 함.깨알상식: 멀티스레드, 멀티프로세스?멀티스레드는 T 메모리 구조에서 스택 영역을 스레드 개수만큼 분할해서 쓰는것즉 하나의 T 메모리 안.. 2024. 10. 6.
아이템 51 - 성능이 중요한 부분에는 기본 자료형 배열을 사용하라 성능이 중요한 코드 영역에서 기본 자료형 배열(Primitive Arrays)을 사용하는 것이 좋습니다. 기본 자료형 배열은 JVM에서 직접 메모리를 관리하며, 일반적인 컬렉션보다 성능 면에서 많은 이점을 제공합니다. 기본 자료형 배열을 사용하면 다음과 같은 이점이 있다.메모리 효율성: 기본 자료형 배열은 객체를 감싸지 않고 원시 데이터 자체를 저장하므로, 메모리 오버헤드가 적습니다. 예를 들어, IntArray는 정수값을 직접 저장하므로, List와 달리 각각의 정수가 별도의 객체로 관리되지 않습니다.성능 최적화: 기본 자료형 배열은 JVM이 직접 관리하므로, 연산 속도가 빠르고 캐시 효율성이 높습니다. 이로 인해, 대규모 데이터 처리를 할 때 성능이 크게 개선됩니다.간단한 데이터 구조: 기본 자료형 .. 2024. 8. 18.
아이템 50 - 컬렉션 처리 단계 수를 제한하라 컬렉션 처리 메서드는 비용이 많이 든다.적절한 메서드를 활용해서, 컬렉션 처리 단계 수를 적절하게 제한하는 것이 좋다// 비효율적인 코드val result = listOf(1, 2, 3, 4, 5) .map { it * 2 } .filter { it > 3 } .map { it + 1 } .filter { it 3 && it    .filter { it != null }.map { it!! }.filterNotNull().map { }.filterNotNull().mapNotNull { }.map { }.joinToString().joinToString { }.filter { }.filter { }.filter { && }.filter { it is Type }.ma.. 2024. 8. 18.
아이템 49 - 하나 이상의 처리 단계를 가진 경우네는 시퀀스를 사용하라 코틀린에서 컬렉션을 처리할 때, 다음과 같은 코드가 자주 사용됩니다:val numbers = listOf(1, 2, 3, 4, 5)val result = numbers .map { it * 2 } .filter { it > 5 } .map { it + 1 }println(result) // [7, 9, 11] 해당 코드는 map, filter 가 연속적으로 호출된다. 이런 방식은 각 단계마다 새로운 리스트를 생성하므로, 처리 단계가 많아질수록 불필요한 리스트 생성이 발생하고 성능이 저하될 수 있다. 이러한 문제를 해결하기 위해 코틀린은 시퀀스를 제공한다.시퀀스는 중간 처리 단계를 거칠 때마다 새로운컬렉션을 생성하지 않고, 필요할 때마다 요소를 하나씩 처리하는 lazy 방식을 사용한다.va.. 2024. 8. 18.
아이템 46 - 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라 inline 한정자의 역할은 컴파일 시점에 '함수를 호출하는 부분'을 '함수의 본문' 으로 대체하는 것koltin 에서는 고차함수(함수를 인자로 받거나 반환하는 함수)를 사용할 수 있다.고차 함수는 성능에 영향을 미칠 수 있는데, 이는 함수 타입 파라미터를 갖는 함수를 호출할 때마다 새로운 함수 객체가 생성되고 이러한 함수 객체는 런타임 시점에 인라인되지 않기 때문에 오버헫가 발생할 수 있다.  일반적인 함수를 호출하면 함수 본문으로 점프하고, 본문의 모든 문장을 호출한 뒤에 함수를 호출했던 위치로 다시 점프 하는 과정을 거친다.하지만 함수를 호출하는 부분을 함수의 본문으로 대체하면 이러한 점프가 일어나지 않는다. inline 한정자를 사용하면 다음과 같은 장점이 있다.타입 아규먼트에 refied 한정자.. 2024. 8. 16.
아이템 44 - 멤버 확장 함수의 사용을 피하라 어떤 클래스에 대한 확장 함수를 정의할 때 이를 멤버로 추가하는 것은 좋지 않습니다.확장 함수는 첫 번째 아규먼트로 리시버를 받는 단순한 일반 함수로 컴파일됩니다. 왜 멤버 확장 함수를 피해야 하는가?혼란스러운 함수 스코프:멤버 확장 함수는 해당 함수가 어디서 사용 가능한지, 또는 어떤 클래스에 속하는지 혼동을 일으킬 수 있습니다. 예를 들어, 함수가 멤버 함수인지 확장 함수인지 명확하지 않으며, 사용 범위가 제한되기 때문에 코드의 가독성을 해치게 됩니다.예상치 못한 동작:멤버 확장 함수는 일반적인 확장 함수와 다르게 동작할 수 있습니다. 특정 클래스 내부에서만 접근 가능한 확장 함수는 그 클래스의 외부에서는 전혀 보이지 않으며, 이는 코드의 일관성을 깨트리고 예상치 못한 동작을 초래할 수 있습니다.코드.. 2024. 8. 10.
아이템 43 - API 의 필수적이지 않는 부분을 확장 함수로 추출하라 클래스의 메서드를 정의할 때는 메서드를 멤버로 정의할 것인지 아니면 확장 함수로 정의할 것인지 결정해야 합니다. 멤버 함수로 정의한 경우class Circle(val radius: Double) { // 멤버 함수로 정의된 메서드 fun area(): Double { return Math.PI * radius * radius }}fun main() { val circle = Circle(5.0) println("Area: ${circle.area()}") // 멤버 함수 호출} 확장 함수로 정의한 경우class Circle(val radius: Double)// 확장 함수로 정의된 메서드fun Circle.area(): Double { return Math... 2024. 8. 10.
728x90