C++의 특성C++을 초기에 사용할 때 가장 먼저 마주치는 오류인듯 한데요, Java 기반의 언어를 주로 다뤄왔기 때문에 메모리를 수동으로 관리하는 C의 특성을 잘 이해하지 못 해서 해당 오류를 마주치게 되었습니다. C++의 경우, C 언어와 마찬가지로 메모리를 수동으로 관리하는 특성을 가지고 있는데요, 다음과 같이 포인터(*)를 선언하는 행위를 통해 메모리에 직접 접근할 수 있습니다.struct FreeNode { FreeNode* next;}; 코드 예시C++은 메모리를 수동으로 관리한다는 특성 때문에 많은 제약을 가지고 있는데요, 그 예시중 하나가 다음 메모리 할당 코드의 예시입니다.// MemoryPool.cppclass MemoryPool {private: struct FreeNode..
우리는 보통 Java에서 JSON으로 직렬화를 많이하고, 이 때 사용하는 대표적인 라이브러리가 Jackson과 Gson입니다. Gson의 경우 사용법이 간단하지만, 개인적으로 커스텀하게 사용할 수 있는 부분이 적어 아쉬운 관계로 Jackson을 애용하는데요, Jackson에서 제공하는 다양한 직렬화 방법을 소개하고자 합니다. 직렬화란? 우리가 만든 자바 코드는 내부적으로 동작할 때는 문제가 없지만, 서버 외부와 통신하거나 엑셀 등의 출력을 위해 자바 코드를 외부와 소통할 수 있게 만드는 작업을 직렬화라고 합니다. 자바 진영에서의 직렬화는 보통 자바의 직렬화 방법과 JSON 직렬화가 대표적인데, 오늘 소개할 방법은 자바 직렬화보다 비교적 간단한 JSON 직렬화 방법입니다. JSON 직렬화는 자바 코드에 매..
Java 언어에서는 전역 변수를 제어하기 위한 다양한 키워드 및 메서드를 제공해줍니다. 대표적인 예로는 volatile, static 등이 있죠. Volatile의 경우, 스레드 간에 변수 값을 항상 "최신 상태로" 보게 보장해주는 키워드입니다.Volatile은 다음과 같은 특징을 가지고 있습니다.가시성 보장: 한 스레드에서 변경한 값을 다른 스레드가 즉시 볼 수 있게 함메모리 캐시 무시: CPU 캐시에 있는 값을 사용하지 않고, 메인 메모리에서 직접 읽고 씀보통 서버 내부적으로 다수의 스레드가 동작할 때, 변수 값의 일관성을 확보하기 위해 사용하는 방법입니다. 아니 근데.. 정적 키워드 static이 있지않나요..?? static 키워드의 경우, "같은 값을 공유"하지만, "최신 값"은 보장하지 않는..
작성 계기우리는 자바를 배울 때 javac로 컴파일 하고 java 파일로 실행하는 단계를 먼저 배운다우리가 처음 배울 때 고생했던 Java 프로퍼티가 왜 사용되는거고, Java에서 이를 어떻게 인식해서 사용하는걸까?또한, Java라는 언어는 OS 독립적으로 사용될 수 있다고 하는데, 어떻게 그게 가능한걸까?이러한 근복적인 시스템 프로그래밍적인 질문이 문득 머릿속을 지나치게 되었고 어쩌면 다른 오픈소스 라이브러리들보다 먼저 분석했어야할 Open JDK 라이브러리 내에서 JVM이 어떻게 동작하는지에 대한 분석을 시작하게 되었다 방대한 JDK 중에 무엇을 알아볼 것인가?우리가 Java 파일을 실행할 때, JVM이 어떻게 이를 인식하는지 실행흐름을 대략적으로 살펴보려한다소제목에서 말했듯이 JDK 자체가 너무 방..
context.Context작업을 취소하고, 타임아웃을 설정하며, 값들을 전달하는 기능을 제공하는 표준 인터페이스고루틴 간의 작업을 관리하고 조정하는 데 사용된다주요 기능취소 신호 전파:작업을 취소할 수 있는 기능을 제공하여, 하나의 작업이 취소되면 관련된 모든 작업이 취소될 수 있다.타임아웃 설정:작업의 최대 실행 시간을 지정하여, 지정된 시간이 초과되면 자동으로 작업을 종료한다값 저장 및 전달:컨텍스트를 통해 값들을 저장하고, 이를 다른 함수나 고루틴에서 사용할 수 있다주요 메서드Done(): 컨텍스트가 취소될 때 닫히는 채널을 반환한다Err(): 컨텍스트가 취소된 이유를 반환한다Deadline(): 컨텍스트가 작업을 완료해야 하는 시한을 반환한다Value(key interface{}): 컨텍스트에 ..
고루틴(goroutine)Go 언어에서 제공하는 경량 스레드동시성과 병행성을 쉽게 구현할 수 있도록 설계된 기능으로, Go 언어의 주요 특징 중 하나운영 체제의 스레드보다 훨씬 가볍고, 더 적은 메모리로 많은 고루틴을 실행할 수 있다.고루틴의 초기 스택 크기작은 초기 스택 크기: Go 1.4 이후의 고루틴은 약 2KB의 초기 스택 크기를 가지고 시작한다.스택 크기 조절: 고루틴이 더 많은 스택 공간을 필요로 하면 자동으로 스택이 확장되며, 필요하지 않으면 축소한다.사용자 수준 스케줄링M스케줄링 모델 : Go 런타임은 많은 수의 고루틴을 소수의 운영 체제 스레드에 매핑하는 M스케줄링 모델을 사용한다경량 컨텍스트 스위칭: 고루틴 간의 컨텍스트 스위칭은 운영 체제의 스레드 간 컨텍스트 스위칭보다 훨씬 가볍다...
Java와의 차이점Java의 참조 타입과 값 타입Java에는 원시 타입(primitive type)과 참조 타입(reference type) 존재모든 객체는 참조 타입이며, 메서드 호출 시 객체를 참조로 전달한다Java의 객체는 명시적으로 포인터를 사용할 필요가 없다. 모든 객체 변수는 자동으로 참조 타입으로 동작한다Go값 타입과 포인터 타입값 타입은 변수의 값을 직접 저장하고, 포인터 타입은 변수의 주소를 저장한다포인터 타입은 메모리의 특정 위치를 가리키며, 이를 통해 원본 데이터를 수정할 수 있다Go에서 포인터 타입의 사용 예원본 데이터 수정포인터를 사용하면 함수나 메서드에서 원본 데이터를 수정할 수 있다값 타입을 사용하면 데이터의 복사본을 전달하므로 원본 데이터는 수정되지 않는다메모리 사용 효율큰 ..
AWS 생성 및 접속 방법 AWS EC2 생성 및 접속 AWS 인스턴스 생성 기본 설정 위 사진의 순서에 맞게 서버의 이름 / OS / AMI를 선택한다 개인적인 프로젝트라면 3 번 항목을 참고하여 프리티어로 사용해야 과금이 덜 나가게 된다 키 페어 생성 [키 iron-jin.tistory.com Github Push 전 점검 사항 package 목록 뽑아서 txt 파일로 만들어준다 명령어 ) pip3 fressze >> packages.txt 생성 된 파일 정보 pip로 install했던 라이브러리 정보들이 생성된다. Github 연동 및 받기 Repository 생성 및 커밋 Github에 Repository를 생성하고, 프로젝트를 Push한다. 해당 내용에 대한 추가 글 작성 필요 EC2에 접속하여..