전체 글(343)
-
[Kafka] Avro 알아보기
서론 데이터를 파일에 쓰거나 네트워크를 통해 전송하려면 바이트열 형태로 encoding 작업이 필요하다. 인메모리 표현에서 바이트열로 전환하는 작업을 인코딩(encoding, 부호화, serializing) 이라 하며, 그 반대를 디코딩(decoding, 복호화, deserializing) 이라 한다. Binary Encoding 여러 인코딩 방법이 존재하지만 우선 이진 부호화 방식을 살펴보자. 이진 부호화는 데이터를 이진 숫자(0, 1)로 표현하는 과정을 의미한다. 데이터를 이진 형태로 표현하기 때문에 JSON, XML 같은 부호화 방법보다 효율적인 데이터 저장 및 전송이 가능하다. 가독성이 뛰어난 JSON 방식보다 읽기는 어렵겠지만 대규모 데이터셋을 저장해야 하는 상황이라면 이진 부호화가 좋은 선택이..
2024.03.04 -
[책] 개발자를 위한 최소한의 실무 지식
책 표지의 현장에서 바로 써먹는 40가지 핵심 기술이란 카피가 눈에 띄어 읽게 됐다. 과연 나는 최소한의 실무 지식을 갖췄을까? 그렇지 않다면 어떤 점을 더 갖춰야 할까 라는 마음으로 읽었다. 예상 독자 책의 예상 독자는 개발자로 취업을 준비 중인 사람, 이제 막 커리어를 시작한 신입 개발자, 그리고 어느정도 개발 경험이 있는 주니어 개발자를 대상으로 한다. 책을 읽어보니 어느정도 아는 내용에 대해선 더 자세히 알수 있어 유용했고, 새롭게 배운 내용은 배운다는 마음으로 읽을 수 있어 좋았다. 책 구성 1부에서는 학업에서 배운 데이터베이스, 보안, 자원관리, 성능 등 다양한 이론을 현장에서 적용할 수 있는 실무적 관점을 제공한다. 데이터베이스의 중요한 개념을 실무에 녹인 관점을 보여주고, 소프트웨어 특징에..
2024.02.21 -
운영중인 서비스 스프링부트 3 업그레이드
목차 0. JDK 1. javax -> jakarta 2. querydsl 3. spring security 현재 Tidify iOS 앱을 운영 중이다. 서버는 스프링부트 2.7.8 버전을 사용 중이었는데 연휴기간 동안 버전업을 진행했다. 버전업을 진행하면서 다양한 벽(?)에 부딪혔는데 그 과정을 하나하나 풀어보겠다. 스프링부트 3 에는 다양한 라이브러리가 추가됐지만 다음의 큰 특징이 있다. Java17과 Java19 지원 (Java 21 도 추가) GraalVM 지원 Spring framework 6.0 기반 0. jdk 스프링부트 3은 java17 을 기반으로 작성됐기 때문에 17 미만의 JDK는 지원하지 않는다. 기존에도 jdk 는 java 17 을 사용하고 있었기에 별도로 jdk 업데이트는 하지 ..
2024.02.19 -
데이터 중심 애플리케이션 설계 #1장
1장 신뢰성, 확장성, 유지보수성 이 3가지 관심사를 엔지니어링 측면에서 생각해보자. 신뢰성 : 하드웨어 / 소프트웨어 / 인적 오류 같은 역경에 직면하더라도 시스템은 지속적으로 올바르게 동작해야 한다. 확장성 : 시스템의 데이터 양, 트래픽 양, 복잡도가 증가하면서 이를 처리할 수 있는 적절한 방법이 있어야 한다. 유지 보수성 : 시간이 지나면서 여러 다양한 사람들이 시스템 상에서 작업할 것이기 때문에 모든 사용자가 시스템 상에서 생산적으로 작업할 수 있게 해야 한다. 신뢰성 “무언가 잘못되더라도 지속적으로 올바르게 동작함”을 신뢰성의 의미로 이해할 수 있다. 잘못될 수 있는 일을 결함(fault)라 부르며, 이를 예측하고 대처할 수 있는 시스템을 내결함성(fault-tolerant)을 지녔다고 한다...
2024.02.08 -
[Java] 1급 컬렉션으로 리팩토링
목차 서론 배경 설명 및 요구사항 Before Refactoring 일급 컬렉션이란? After Refactoring 일급 컬렉션 사용시 이점 요약 및 결론 서론 일급 컬렉션의 개념을 모호하게 알고 있었는데, 이번 기능 개발을 통해 일급 컬렉션을 사용해야 이유와 사용 후 코드 응집력이 높아지는 것을 직접 경험한 내용을 공유합니다. 배경 설명 및 요구사항 호텔 도메인의 백오피스를 개발하고 있다. 호텔에 등록된 객실을 한눈에 볼 수 있는 페이지에서 객실의 순서를 클릭-드래그하여 변경할 수 있는 기능이 개발 사항이었다. 검은 박스로 표시된 두 객실의 순서를 변경하는 것으로 인접한 객실의 순서 뿐만 아니라 인접하지 않은 객실의 순서도 드래그로 변경할 수 있어야 했다. 추가로 아래 이미지의 검은 박스로 표시된 요..
2024.02.02 -
[AWS] ECR 이미지 푸시
기존 NCloud 플랫폼에서 운영중인 서버를 AWS 로 이관하게 됐다. 단일 compute server 에서 운영중인 서버를 이번 기회에 AWS ECS 를 통해 배포하려고 한다. 마이그레이션 과정을 기록해본다. 우선 ECR에 Private Repository 는 생성해둔 상태다. Repository 이름은 운영중인 서비스(tidify)의 이름을 따서 지었다. 해당 Repository를 클릭해보자. 텅빈 저장소를 확인할 수 있다. 이제 우리의 도커 이미지를 이 Repository에 저장하기 위해 푸시 명령 보기 버튼을 클릭해보자. 1번 단계에서 우선 도커 클라이언트를 인증해야 한다. 필자는 로컬에 AWS CLI 도 설치 되지 않은 상태라 AWS CLI 부터 다운받았다. AWS CLI 설치 및 Configu..
2024.01.30 -
(요약) 성장하고 싶은 당신이 꼭 해야하는 인지적 활동
출처 : 성장하고 싶은 당신이 꼭 해야하는 인지적 활동 성장 마인드셋과 지속적인 학습 고정 마인드셋을 가진 사람은 도전을 피하는 경향이 있고, 성장 마인드셋을 가진 사람은 어려운 도전을 받아들이고 버틸 가능성이 높다. 뇌 가소성과 수녀 연구 뇌는 고정돼 있지 않고 지식이나 경험이 쌓이면서 변화함 사망하기 전까지 인지 시험에서 최우수 성적을 거둔 수녀가 사망한 뒤 뇌 해부 -> 알츠하이머 병으로 뇌의 대부분이 손상된 상태였지만 사망 전까지 그녀에게 치매 증상은 없었다. 과학자들은 치매증상이 나타나지 않은 이유 중 하나로 지속적인 성장을 꼽았다. 인지적 활동 자신을 돌아보고 노출하라. 모든 학습과 개선의 필수적 요소는 자기 돌아보기(self-reflectivity) 와 메타인지. 자신이 하는 것을 관조, 관..
2024.01.28 -
예시를 통한 Go 객체 생성 이해하기
목표 Go의 struct 이해 struct의 method 이해 method 와 function 의 차이 이해 구조체(Struct ) 란? Go 언어의 struct는 데이터를 묶는 데 사용되는 자료형 입니다. struct는 다양한 데이터 타입의 필드를 묶어 하나의 레코드로 만들 수 있습니다. 이를 통해 관련 있는 데이터를 논리적으로 그룹화하고 구조화할 수 있습니다. 구조체 정의 구조체(struct)는 다음과 같이 정의할 수 있습니다. type 타입명 struct { 필드명 타입 ... 필드명 타입 } 초기화 아래 예시코드는 Account 구조체를 Owner(계좌주)와 Balance(잔액) 필드와 함께 정의했습니다. 구조체로 변수를 생성할 때 필드 순서로 초기값을 대입하거나, 필드명을 지정하여 초기화 할 수..
2024.01.25 -
[Golang] new, make, pointer 탐구
목차 1. new 키워드 2. 틈새 포인터 설명 3. 키워드 4. 요약 Go 언어의 new 와 make 는 새로운 데이터 구조를 생성한다는 공통점이 있지만 적용할 상황과 대상이 다른다. 둘의 공통점과 차이점을 비교하여 어느 상황에 적합하게 사용할 수 있는지 알아보고, 더불어 알게된 포인터 지식도 같이 정리해본다. new 키워드 사용 목적 new 는 주로 기본 데이터 타입(원시 타입)의 포인터를 할당할 때 사용된다. 즉 새로운 인스턴스를 할당하고 해당 인스턴스의 포인터를 반환한다. new 는 메모리 할당 후 제로값으로 초기화된 포인터를 반환하며, new 로 생성된 값은 0 또는 nil 값으로 초기화 된다. var k *int k = new(int) fmt.Println("k: ", k, " *k: ", *..
2024.01.07