📚 2022 기술 서적 기록 🌱 읽어야할 책 모던 자바 인 액션 단위 테스트 생산성과 품질을 위한 단위 테스트 원칙과 패턴 쿠버네티스 인 액션 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 📖 읽는 중 시작하세요! 도커/쿠버네티스 아파치 카프카 애플리케이션 프로그래밍 with 자바 📕 다 읽은 책 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 15단계로 배우는 도커와 쿠버네티스 프로그래머의 뇌 비고 카프카 책은 다음에 다시 읽기로 하고 미룸
시작하며 러스트는 에러를 크게 회복 가능한(recoverable) 에러와 회복이 불가능한(unrecoverable) 에러 두가지로 구분한다. 러스트에는 예외라는 개념이 없고, 회복 가능한 에러를 표현하는 Result 타입과 회복 불가능한 에러가 프로그램의 실행을 종료하는 panic! 매크로를 지원한다. panic! 매크로를 이용한 회복 불가능한 에러 처리 panic! 매크로를 실행하면 프로그램은 실패 메시지를 출력하고 스택을 모두 정리한 다음 종료한다. fn main() { panic = 'abort' } 에러 메시지에는 패닉 메시지와 패닉이 발생한 소스 코드의 위치가 출력된다. panic! 역추적 사용하기 범위를 벗어난 인덱스를 이용해 panic! 매크로 호출해보자 책에서는 작성한 파일이 아닌 mod...
1. 시작하며 SOLID 원칙에 대해 공부할 기회가 생겨 읽은 내용을 정리하고자 한다. 이 글을 통해 주로 공부하였으므로 원문을 확인하는 것을 추천한다. SOLID 원칙은 2000년대 초반 로버트 마틴이 제안한 프로그래밍 및 설계의 다섯 가지 원칙이다. 이를 마이클 페더스가 앞글자를 따서 SOLID라 명명하고 기본 개념을 구축하였다. 이 디자인 원칙은 코드를 더 유지보수하기 쉽고, 설계를 이해하기 쉬우며, 확장성이 뛰어난 소프트웨어를 만들 수 있도록 도와준다. 결과적으로 복잡성, 종속성을 감소시켜 개발자가 다른 영역에 영향을 주지 않고 한 영역을 변경할 수 있도록 한다. 2. SOLID 원칙이란 Single Responsibility Open/Closed Liskov Substitution Interfa..
1. 시작하며 JUnit5는 가장 인기 있는 단위 테스트 프레임 워크이다. JUnit5 의 기본 기능에 대해 알아보자 2. JUnit5 란? JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform : 테스트를 실행해주는 런처 제공, TestEngine API 정의 JUnit Jupiter : TestEngine API 구현체로 JUnit5 제공 JUnit Vintage : JUnit4와 JUnit43을 지원하는 TestEngine 구현체 2.1 JUnit Platform JVM에서 테스트 프레임워크를 시작하기 위한 런처를 제공한다. Junit과 클라이언트 간의 인터페이스를 제공한다. JUnit 플랫폼에서 실행되는 테스트 프레임워크를..
1. 시작하며 Google Associate Cloud Engineer (ACE) 자격증을 취득하여 후기를 남겨 둔다 공부 기간: 약 1개월, 30분 ~ 12시간 공부 방법: Coursera 강의, Dumps 문제 풀기 2. 공부 계기 예전에 딴 GCP 자격증이 만료되어 연장할 필요성을 느껴 자격증 공부를 시작하게 되었다. 실제 업무 시에는 아직 GCP 를 써본 적은 없지만 공부해두면 언젠가 도움이 되지 않을까라고 생각한다. 3. 자격증 소개 시험 소개 https://cloud.google.com/certification/cloud-engineer 시험 정보 소요 시간: 2시간 등록 수수료: $125 (온라인 $75) 언어: 영어, 일본어, 스페인어 시험 형식: 50문제, 객관식 및 선다형 형식 시험 진..
시작하며 화면에 가득찬 이미지를 설정하는데 게임 해상도에 따라 종횡비율이 변경되지 않기를 희망하고자 한다. 종횡비를 고정한 방법에 대해 기록하고자 한다. 예시 Overlay 슬롯에 가득찬 Image를 추가하였다. 게임 해상도에 따라 이미지가 늘어나는 것을 확인할 수 있다. 종횡비 고정 처리 Image를 Size Box으로 래핑 해주고, 그 Size Box를 Scale Box로 래핑 한다. Scale Box와 Size Box의 조합으로 원하는 비율을 고정 할 수 있다. Scale Box의 스트레칭 옵션으로 상하 혹은 좌우만 늘릴 것인지 상하좌우 모두 늘릴것인지 설정 할 수 있다. Size Box의 Width와 Height Override를 입력해서 원하는 사이즈를 가지도록 설정하고 Scale Box의 슬롯..
시작하며 이번 장에서는 자주 사용되는 벡터, 문자열, 해시맵 세 가지 컬렉션을 알아보자 벡터에 일련의 값 저장하기 벡터는 하나 이상의 값을 하나의 데이터 구조에 담을수 있으며 모든 값은 메모리상에 연속으로 저장된다. 벡터는 같은 타입의 값만 저장할 수 있다. 새로운 벡터 생성하기 새로운 빈 벡터를 생성하려면 Vec::new 함수를 호출하면 된다. let v: Vec = Vec::new(); //값을 포함하는 벡터 생성 Vec 타입으로 유추 let v2 = vec![1,2,3]; 벡터 수정 벡터를 생성하고 값을 추가하려면 push 메서드를 사용한다. let mut v = Vec::new(); v.push(5); v.push(6); v.push(7); v.push(8); 벡터 해제 벡터 역시 범위를 벗어날 ..
시작하며 게임을 개발하다보면 특정 방향을 기준으로 회전된 벡터값을 구하거나 두 개의 방향벡터 사이의 각을 구해야 할 경우가 있다. 예제 코드를 기록하여 기억해 두고자 한다. 예시 캐릭터가 바라보는 방향을 기준으로 Z축 기준 +-30 각도의 방향 벡터를 구해보자. 코드 //회전된 방향 계산 FVector Forward = GetActorForwardVector(); Forward.Normalize(); FVector LeftDirection = Forward.RotateAngleAxis(-30.0f, FVector::UpVector); FVector RightDirection = Forward.RotateAngleAxis(30.0f, FVector::UpVector); //두 벡터 사이의 각도 float ..
시작하며 동적 계획법(Dynamic Programming)은 큰 문제를 작은 문제로 나눠서 푸는 알고리즘이다. 백준 알고리즘의 예제 문제를 통해 풀이 방법을 기록하고자 한다. 링크 : https://www.acmicpc.net/problem/1912 문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다. 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. ..
시작하며 백준 알고리즘 사이트의 예제를 통해 Dijkstra(다익스트라) 알고리즘을 정리하고자 한다. 링크 : https://www.acmicpc.net/problem/1916 문제 N개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 M개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고 한다. A번째 도시에서 B번째 도시까지 가는데 드는 최소비용을 출력하여라. 도시의 번호는 1부터 N까지이다. 첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호..
시작하며 백준 알고리즘 사이트의 예제를 통해 DFS와 BFS를 정리 기록하고자 한다. 개념적인 부분은 이미 정리를 했기때문에 코드를 통한 구현 방식을 기억하자 링크 : https://www.acmicpc.net/problem/1260 문제 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다. 예제 입력 4 5 1 1 2 1 3 1 ..
시작하며 언리얼 엔진에서 문자열을 다루어야할 경우가 종종 발생한다. 그 중 자주 쓰는 문자열 나누기와 공백(스페이스) 제거하는 방법을 기록하고자 한다. 문자열 나누기 파일의 경로에서 폴더명이나 파일명을 구하는 상황등에서 문자열을 특정 단어로 나누어야 할때가 있다. C++에서는 strtok 함수를 통해서 문자열을 나눴었는데, 언리얼 엔진에서는 ParseIntoArray 함수로 나눌수 있다. FString AssetPath = TEXT("Project/Content/Game//UI/HUD/HUD_Main.uasset"); TArray Paths; AssetPath.ParseIntoArray(Paths, TEXT("/")); for (FString& Element : Paths) { UE_LOG(LogClas..