본문 바로가기
728x90

전체 글252

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.
jmh 오..jmh 써보신분??궁금해서 써봤는데..*JMH란? JMH는 OpenJDK에서 개발한 성능 측정 툴이다. 특정 메소드의 성능을 측정하는 식으로 사용할 수 있고 실제 테스트하기전 워밍업 과정과 실제 측정 과정을 수행하는데 각 과정의 실행 수를 제어할 수 있고, 측정 후 결과로 나오는 시간의 단위를 지정하는 기능도 제공한다.===저번 코틀린 스터디 중에 asSequence 얘기나왔었는데..어쩌다가 성능비교해봤네용 저도 코드 복붙복붙기준: 200만개 stream 이용한 -> filter, map, take, average 로 간단한 구현 각 1회 warmUp 처리1.iterator : 20초2.asSequence: 0.4초궁금하신분은?https://github.com/melix/jmh-gradle-plugin 2024. 8. 18.
sendWarmUpRequest 한번 호출해 놓으면 왜 빨라질까? WebClient를 통해 API 호출을 한 번 수행하면 이후 요청이 더 최적화될 수 있습니다. 이 최적화는 주로 커넥션 풀링과 DNS 조회 최적화에서 발생합니다. 아래에서 각 최적화가 어떻게 이루어지는지 설명드리겠습니다.1. 커넥션 풀링(Connection Pooling)커넥션 풀링은 클라이언트(예: WebClient)와 서버 간의 네트워크 연결을 재사용하여 성능을 최적화하는 방법입니다. 다음은 커넥션 풀링이 어떻게 이루어지는지에 대한 설명입니다:TCP 연결 재사용:WebClient는 HTTP 요청을 보낼 때 TCP 연결을 사용합니다. 이 TCP 연결은 설정하는 데 일정한 오버헤드(예: 3-way handshake)가 필요합니다.첫 번째 요청이 발생하면 WebClient는 서버와의 TCP 연결을 설정합니.. 2024. 8. 18.
아이템 46 - 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라 inline 한정자의 역할은 컴파일 시점에 '함수를 호출하는 부분'을 '함수의 본문' 으로 대체하는 것koltin 에서는 고차함수(함수를 인자로 받거나 반환하는 함수)를 사용할 수 있다.고차 함수는 성능에 영향을 미칠 수 있는데, 이는 함수 타입 파라미터를 갖는 함수를 호출할 때마다 새로운 함수 객체가 생성되고 이러한 함수 객체는 런타임 시점에 인라인되지 않기 때문에 오버헫가 발생할 수 있다.  일반적인 함수를 호출하면 함수 본문으로 점프하고, 본문의 모든 문장을 호출한 뒤에 함수를 호출했던 위치로 다시 점프 하는 과정을 거친다.하지만 함수를 호출하는 부분을 함수의 본문으로 대체하면 이러한 점프가 일어나지 않는다. inline 한정자를 사용하면 다음과 같은 장점이 있다.타입 아규먼트에 refied 한정자.. 2024. 8. 16.
728x90