전체 글

배운 것에 대한 내 생각을 가지고 정리하자
· 언어/C++
C++의 특성C++을 초기에 사용할 때 가장 먼저 마주치는 오류인듯 한데요, Java 기반의 언어를 주로 다뤄왔기 때문에 메모리를 수동으로 관리하는 C의 특성을 잘 이해하지 못 해서 해당 오류를 마주치게 되었습니다. C++의 경우, C 언어와 마찬가지로 메모리를 수동으로 관리하는 특성을 가지고 있는데요, 다음과 같이 포인터(*)를 선언하는 행위를 통해 메모리에 직접 접근할 수 있습니다.struct FreeNode { FreeNode* next;}; 코드 예시C++은 메모리를 수동으로 관리한다는 특성 때문에 많은 제약을 가지고 있는데요, 그 예시중 하나가 다음 메모리 할당 코드의 예시입니다.// MemoryPool.cppclass MemoryPool {private: struct FreeNode..
· 언어/java
우리는 보통 Java에서 JSON으로 직렬화를 많이하고, 이 때 사용하는 대표적인 라이브러리가 Jackson과 Gson입니다. Gson의 경우 사용법이 간단하지만, 개인적으로 커스텀하게 사용할 수 있는 부분이 적어 아쉬운 관계로 Jackson을 애용하는데요, Jackson에서 제공하는 다양한 직렬화 방법을 소개하고자 합니다. 직렬화란? 우리가 만든 자바 코드는 내부적으로 동작할 때는 문제가 없지만, 서버 외부와 통신하거나 엑셀 등의 출력을 위해 자바 코드를 외부와 소통할 수 있게 만드는 작업을 직렬화라고 합니다. 자바 진영에서의 직렬화는 보통 자바의 직렬화 방법과 JSON 직렬화가 대표적인데, 오늘 소개할 방법은 자바 직렬화보다 비교적 간단한 JSON 직렬화 방법입니다. JSON 직렬화는 자바 코드에 매..
· 언어/java
Java 언어에서는 전역 변수를 제어하기 위한 다양한 키워드 및 메서드를 제공해줍니다. 대표적인 예로는 volatile, static 등이 있죠. Volatile의 경우, 스레드 간에 변수 값을 항상 "최신 상태로" 보게 보장해주는 키워드입니다.Volatile은 다음과 같은 특징을 가지고 있습니다.가시성 보장: 한 스레드에서 변경한 값을 다른 스레드가 즉시 볼 수 있게 함메모리 캐시 무시: CPU 캐시에 있는 값을 사용하지 않고, 메인 메모리에서 직접 읽고 씀보통 서버 내부적으로 다수의 스레드가 동작할 때, 변수 값의 일관성을 확보하기 위해 사용하는 방법입니다. 아니 근데.. 정적 키워드 static이 있지않나요..??  static 키워드의 경우, "같은 값을 공유"하지만, "최신 값"은 보장하지 않는..
QueryDSL 의존성 추가를 위해서는 다음 두 가지 의존성을 추가해야 합니다.implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta") 문득, 개발을 하다가 궁금한 점이 생겼는데, querydsl-jpa 의존성 하나로 해결할 수 없을까? 라는 생각으로 이번 글을 작성하게 되었습니다. 우선 querydsl 저장소를 살펴보면, 다음과 같이 다양한 의존성을 제공하고 있습니다. 그 중에서 우리가 사용하는 querydsl-jpa와 querydsl-apt도 볼 수 있습니다. 그리고, 우리가 사용하는 querydsl-jpa의 의존성을 보면 다음과 같이 query..
AWS EventBridge란? Event는 특정 작업이 수행될 때 그에 따른 부가 작업이 수행되는 서비스를 말하며, 이 Event는 작업의 순서에 따라 동작할 수도 있고 일정에 따라 동작할 수도 있는 유동적인 기능입니다. AWS 에서는 이 이벤트 버스, 일정 스케줄링, 파이프라인 등을 통해서 특정 작업을 Trigger 할 수 있는 기능을 제공하는 EventBridge라는 기능을 제공하는데요, EventBridge의 기능 중에 보통 대중적으로 많이 사용하는 일정 관련 스케줄링을 설정하는 서비스를 알아보려합니다. AWS 일정 관리 우리는 흔히 스케줄링이라고 하는 기능을 사용하여, 특정 시간에 반복적으로 동작하는 서비스를 구성할 떄 사용하는 기능입니다. 일정 관리 설정 [EventBridge]의 [일정] 메..
AWS Batch란? AWS에서 제공하는 작업 관리 서비스로, 대량의 배치 작업을 수행할 수 있고 AWS 서비스와 긴밀한 결합 및 호환성을 제공해주기 때문에 작업 관리 서비스로 많이 이용되고 있습니다. 단일 작업이면 람다를 사용하는 것이 더 낫지 않나? 보통 서버리스 아키텍처로 람다를 많이 도입하지만, 람다의 경우 가벼운 실행 환경이나 짧은 시간을 요구하는 방식에서 사용합니다. 일반적으로 람다의 경우 실행 시간이 15분이 넘어가면 안 되기 때문에 단발성으로 장시간 실행하는 어플리케이션의 경우 람다를 사용하지 못 하게 됩니다. 배치 작업의 경우, EC2 / Fargate 기반의 Spot Instance를 사용하기 때문에 서버리스가 아닌 컨테이너 기반이지만, 장시간 실행이 가능하고 스케일업이 가능한 특징을 ..
ECR Registry란? AWS에서 제공해주는 완전 관리형 컨테이너 저장소로, 도커와 같은 컨테이너 기반의 이미지를 AWS상의 외부 저장소로 사용할 수 있는 서비스입니다. ECR을 왜 사용할까? 첫 째로, 우리가 배포하고자 하는 서버의 이미지를 저장할 외부 공간을 대여하기 위해서입니다. 로컬에서 빌드 과정을 거치고 로컬상의 도커허브에 푸쉬하고 관리하는 경우 외부 이미지 저장 공간이 필요하지 않지만, 우리의 서버를 AWS EC2 등의 서버에서 컨테이너 기반으로 배포하고 싶을 때는 로컬 도커 허브 저장소를 사용할 수 없게 됩니다. 이를 위해 AWS에서는 Github이라는 외부 소스 저장소를 제공하듯이, 서버 이미지를 저장할 수 있는 컨테이너 저장소인 ECR 서비스를 제공하고 있습니다. 둘 째로, AWS 기..
보통 협업을 진행하다 보면 API 스펙을 전달해주고 완벽하게 테스트를 진행했는데도 들려오는 답변이 있습니다."API에서.. cors 에러가 발생해요.." 처음 협업을 진행하면서 CORS에 대해서 잘 모르기도 했었고, 스프링에서는 단순한 설정으로 이를 해결할 수 있었기 때문에 제대로 알아보고려고 하지 않았었죠. 이번에는 너무나 간단한 설정탓에 제대로 이해하지 못 했었던 CORS에 대해서 정리하고자 합니다. CORS란? CORS(Cross-Origin Resource Sharing)란, 클라이언트가 다른 출처(origin)에서 리소스를 요청할 때 발생하는 오류로 브라우저상에서 허용되지 않은 다른 출처를 제한하는 데 사용되는 보안 관련 오류입니다. CORS는 보통 아래 두 가지 이유로 발생하게 됩니다.브라우저..