전체 글 210

Call-by-value vs Call-by-reference

Call-by-value vs Call-by-reference Call-by-value와 Call-by-reference는 프로그래밍에서 함수에 인자를 전달하는 두 가지 주요 방법입니다. Call-by-value (값에 의한 호출) 이 방식에서는 함수에 인자를 전달할 때 인자의 실제 값의 복사본을 만들어서 함수에 전달합니다. 함수 안에서 인자의 값이 변경되더라도, 원본 인자에는 영향을 주지 않습니다. 복사본을 사용하기 때문에 메모리 사용량이 더 많을 수 있고, 큰 데이터를 전달할 때 성능적으로 비효율적일 수 있습니다. Call-by-reference (참조에 의한 호출) 참조에 의한 호출은 함수에 인자를 전달할 때 인자의 메모리 주소를 전달합니다. 이로 인해 함수 안에서 인자의 값을 변경하면 원본 데이터..

(스터디) 파이브 라인스 오브 코드 4장 타입 코드 처리하기

4장 타입 코드 처리하기 이번 장에서 다룰 내용 if 문에서 else를 사용하지 말 것과 switch를 사용하지 말 것으로 이른 바인딩 제거하기 클래스로 타입 코드 대체와 클래스로의 코드 이관으로 if문 제거하기 메서드 전문화로 문제가 있는 일반성 제거하기 인터페이스에서만 상속받을 것으로 코드 간 커플링(결합) 방지하기 메서드의 인라인화 및 삭제 후 컴파일하기를 통한 불필요한 메서드 제거 간단한 if 문 리팩터링 규칙: if 문에서 else를 사용하지 말 것 if 문에서 else를 사용하지 않는 것은 많은 개발자와 프로그래밍 가이드라인에서 권장하는 스타일 중 하나입니다. 이 규칙을 따르는 이유와 그로 인한 이점에 대해 설명하겠습니다. 왜 else를 피해야 하는가? 가독성 향상: else 없이 코드를 작성..

(스터디) 파이브 라인스 오브 코드 리뷰 1-3장

1장 리팩터링, 리팩터링하기 좋은 코드란 (정의) 사람이 읽기 쉽고, 유지보수가 용이하며, 의도한 대로 잘 동작하는 코드 리팩터링이란 기능을 변경하지 않고 코드의 가독성과 유지보수가 쉽도록 코드를 변경하는 것 리팩터링 핵심 의도를 전달함으로써 가독성 향상 불변속성의 범위제한을 통한 유지보수성 향상 범위 밖의 코드에 영향을 주지 않고 1항과 2항을 수행 요약 리팩터링을 수행하려면 리팩터링 대상을 식별하는 스킬과 리팩터링 단계를 명시적으로 가진 문화, 리팩터링을 돕는 도구의 조합이 필요합니다. 일반적으로 코드 스멜은 리팩터링 대상을 설명하는 데 사용됩니다. 이것들은 모호해서 주니어 프로그래머가 내면화하기 어렵습니다. 이 책에서는 학습하는 동안 코드 스멜을 대체할 구체적인 규칙을 제공합니다. 규칙에는 세 가지..

성능 최적화를 위해 어떤 방법과 도구를 사용하나요?에 대한 답변

성능 최적화를 위해 어떤 방법과 도구를 사용하나요?에 대한 답변 성능 최적화 인덱싱, 캐싱, 멀티 스레딩 작업 처리, 하드웨어 성능 업그레이드 스케일 업, 스케일 아웃, 알고리즘 개선, 루프 최적화, 데이터 정규화 성능 최적화를 위한 방법과 도구 웹 성능 최적화는 매우 중요한 작업 중 하나입니다. 아래는 일반적인 최적화 방법과 그에 사용되는 도구들입니다. 1. 이미지 최적화 방법: 이미지 형식을 최적화하거나, 불필요한 이미지는 lazy loading을 사용합니다. 도구: ImageMagick, TinyPNG, WebP 등 2. 코드 최적화 방법: 미사용 코드 제거, 코드 분할, tree shaking 등을 실행합니다. 도구: Webpack, Rollup, PurifyCSS, Terser 등 3. 캐싱 전..

HTTPS 암호화 작동원리

HTTPS 암호화 작동원리 HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 암호화를 추가한 프로토콜입니다. HTTPS의 암호화 작동 원리는 크게 다음 단계로 나눌 수 있습니다. 1. 핸드셰이크 단계 클라이언트 → 서버: "안녕하세요, 접속하고 싶어요." 클라이언트가 서버에게 초기 연결 요청을 보냅니다. 서버 → 클라이언트: "안녕하세요, 이건 제 공개키입니다." 서버는 클라이언트에게 자신의 공개키와 인증서를 보냅니다. 클라이언트: "이 공개키를 믿을 수 있나?" 클라이언트는 받은 인증서가 신뢰할 수 있는 CA(Certificate Authority)에 의해 발급되었는지 검증합니다. 클라이언트: "이건 우리만의 비밀번호(Pre-Master Secret)..

TCP와 UDP의 차이점

TCP와 UDP의 차이점 TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 두 가지 주요한 통신 프로토콜입니다. 각각의 특성은 다음과 같습니다: TCP 연결 지향적: 통신을 시작하기 전에 연결을 설정하고, 통신이 완료된 후 연결을 종료합니다. 신뢰성: 데이터의 전달을 확인하고, 잘못된 데이터는 다시 전송합니다. 순서 보장: 전송된 데이터의 순서가 그대로 유지됩니다. 데이터 무결성: 중간에 데이터가 손상되거나 누락되는 것을 방지합니다. 속도: UDP보다 일반적으로 느립니다. 신뢰성을 제공하는 과정에서 오버헤드가 발생하기 때문입니다. 흐름 제어와 혼잡 제어: 네트워크 상황에 따라 데이터 전송 속도를 조절합니다. UDP 연결 없음: 미리 연..

메모리 누수의 개념, 종류 및 해결방법

메모리 누수의 개념, 종류 및 해결방법 메모리 누수의 개념 메모리 누수(memory leak)란 프로그램이 필요 이상으로 메모리를 점유하고, 더 이상 사용되지 않는 메모리를 반환하지 않는 현상을 말합니다. 이는 시간이 지남에 따라 메모리 사용량이 계속 증가하게 되어, 시스템의 성능을 저하시키거나 최악의 경우 프로그램이나 시스템이 중단되는 결과를 초래할 수 있습니다. 메모리 누수는 다음과 같은 경우에 발생할 수 있습니다: 동적 메모리 할당 후 반환하지 않음: 프로그래밍 언어에서 malloc() 또는 new 같은 함수로 메모리를 할당한 뒤, free() 또는 **delete**로 반환하지 않을 경우. 객체 참조 누락: 객체 지향 언어에서 객체가 더 이상 필요 없지만, 다른 객체가 여전히 그 객체를 참조하고 ..

자바 가비지컬렉션 종류와 동작원리

자바 가비지컬렉션 종류와 동작원리 자바에서는 가비지 컬렉션(Garbage Collection, GC)이라는 메커니즘을 통해 자동으로 더 이상 사용되지 않는 메모리를 회수합니다. 여러 가지 GC 알고리즘이 존재하며, 각각은 특정 상황에서 장단점을 가집니다. 가비지 컬렉션의 주요 영역 영구(Perm) 영역: 클래스와 메서드 정보가 저장됩니다. 힙(Heap) 영역: 객체가 저장되는 공간입니다. 스택(Stack) 영역: 지역 변수나 메서드 호출 정보가 저장됩니다. 주로 힙 영역에 대한 가비지 컬렉션이 이루어집니다. 가비지 컬렉션의 종류 Serial GC: 단일 쓰레드를 사용해 Young 영역과 Old 영역을 차례로 정리합니다. 단순하고 메모리를 효율적으로 정리하지만, GC 작업 동안에는 애플리케이션 작업이 멈춥..

마이크로서비스 아키텍처에서 서비스 간 통신 방법

마이크로서비스 아키텍처에서 서비스 간 통신 방법 마이크로서비스 아키텍처에서의 서비스 간 통신 방법 마이크로서비스 아키텍처에서는 여러 개의 작은 서비스들이 복잡하게 통신을 할 수 있습니다. 그래서 효과적인 서비스 간 통신 방법이 중요합니다. 다음은 일반적인 통신 방법들입니다. 1. HTTP/REST 특징: 가장 일반적이고 간단한 방법. 상태를 가지지 않는(stateless) 통신. 도구: RESTful API, JSON, XML 2. gRPC 특징: Google이 개발한 프로토콜. HTTP/2를 기반으로 하며, 효율적인 통신이 가능. 도구: Protocol Buffers, gRPC 라이브러리 3. 메시지 큐 특징: 비동기 통신을 위해 사용. 큐에 메시지를 넣어 놓고 다른 서비스가 나중에 가져감. 도구: R..

HTTPS, TLS, SSL

HTTPS, TLS TLS TLS(Transport Layer Security)는 네트워크 통신의 보안을 책임지는 암호화 프로토콜입니다. 이전에는 SSL(Secure Sockets Layer)이라고 불렸지만, 현재는 TLS가 더 발전된 버전으로 광범위하게 사용되고 있습니다. 목적 기밀성: 데이터를 암호화하여 제3자가 정보를 열람할 수 없도록 합니다. 무결성: 전송되는 데이터가 중간에 변경되거나 손상되지 않음을 보장합니다. 인증: 통신하는 양쪽 당사자가 서로를 신뢰할 수 있도록 인증서를 사용합니다. 작동 원리 핸드셰이크: 클라이언트와 서버가 처음 연결을 시도할 때, 암호화 방법과 키를 교환하는 과정을 거칩니다. 키 교환: 대칭키와 비대칭키를 사용하여 안전하게 통신을 위한 키를 교환합니다. 데이터 전송: 핸..