분류 전체보기
-
Base64 인코딩이란?CS 2024. 2. 23. 00:01
개요 프로그래밍을 하다 보면 인코딩, 디코딩을 수행하게 되는데 Base64 인코딩에 대해서 알아보고자 합니다. Base64 인코딩이란? 바이너리 데이터 0과 1을 64개의 문자로 매핑시키는 표가 존재하고, 해당 방식으로 문자를 변환시킵니다. 64개의 문자로는 A-Z, a-z, 0-9 부호 2개(+, /) 패딩(=)을 활용합니다. 패딩이란 부족한 bit수를 채우는 과정을 뜻합니다. 바이너리를 보면 000000 ~ 111111로 구성된 모습을 볼 수 있습니다. 이를 통해 하나의 문자(Char)는 6개의 비트로 구성되는 것을 이해할 수 있습니다. 즉, 6개의 비트인 바이너리 데이터를 ASCII 문자로 혹은 ASCII 문자를 바이너리로 데이터로 변환하는 방법입니다. 패딩이 필요한 이유와 어떻게 변환되는지는 예시..
-
MongoDB 인덱스 운영법프로젝트/mongoDB 2024. 2. 22. 00:01
개요 공식문서를 기반으로 MongoDB의 인덱스의 운영법에 대한 알아보는 시간을 가져보고자 합니다. 기존에 존재하는 컬렉션에 인덱스 만들기, 인덱스 사용 측정법, 인덱싱 전략에 대해 정리해보고자 합니다. 기존에 존재하는 컬렉션에 인덱스 만들기 기존에 존재하는 컬렉션에 인덱스를 만들기 위해서는 인덱스가 내부적으로 어떻게 생성되는지 이해해야 Live(Production) 레벨에 나가있는 상용 데이터베이스에 문제가 발생하지 않을 수 있습니다. MongoDB 인덱스는 내부적으로 어떻게 생성될까요? MongoDB 4.2부터 인덱스가 생성되는 처음과 끝에 메타데이터 변경을 보호하기 위해 exclusive lock을 잡는 최적화된 빌드 프로세스를 사용합니다. (빌드 프로세스의 시자과 끝에서만 잠금이 유지되어 효율적이..
-
intellij java 다운로드 및 terminal JDK 버전 변경IntelliJ 2024. 2. 21. 00:01
Intellij Java 다운로드 File -> Project Structure -> Project Settings -> Project -> SDK 드롭다운 선택 -> Download JDK MacOS 현재 사용 중인 Java 버전 확인 java -version 현재 로컬에 설치되어 있는 Java 버전 확인하기 /usr/libexec/java_home -V Java 버전 변경 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) export JAVA_HOME=$(/usr/libexec/java_home -v 11) 터미널 재시작하면 버전이 다시 원래대로 돌아가는 경우 vim ~/.zshrc export JAVA_HOME=$(/usr/libexec/java_home -v..
-
git commit전 git hook 거는방법Git 2024. 2. 20. 00:01
개요 git hook을 통하여 개발편의성을 올려보고자 합니다. Git Hook Git은 특정 상황에 특정 스크립트를 실행할 수 있도록 Hook이라는 기능을 지원합니다. Git Hook 목록 찾아보기 cd ./git/hooks/ ls 현재 가지고 있는 git repository에 접근합니다. ./git/hooks/ 디렉터리로 이동하여 가지고 있는 파일을 조회해 보면 여러개의 .sample 확장자 파일이 존재합니다. pre-commit, pre-push 등의 이름으로 어떤일을 하는지 예측해 볼 수 있습니다. (커밋 전, 푸시하기 전) 정확한 설명은 git의 문서에서 확인해 볼 수 있습니다. https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks Git - Git..
-
kotlin operator fun invokeKotlin/Kotlin 2024. 2. 19. 00:01
개요 kotlin의 operator 중 invoke라는 연산자를 알게 되어 알아보고자 합니다. invoke 연산자란? object MyFunction{ operator fun invoke(str: String): String{ return str.lowercase() //소문자로 바꿔줌 } } operator fun invoke를 활용하여 invoke 연산자를 정의할 수 있습니다. MyFunction Object는 문자를 받아 소문자로 변환해주는 역할을 수행합니다. 다음과 같이 호출해볼 수 있습니다. val upperCaseString = "HELLO WORLD" println(MyFunction.invoke(upperCaseString)) //hello world invoke의 특성상 메서드 이름을 생..
-
전문통신이란?CS 2024. 2. 18. 00:01
개요 전문통신이라는 용어를 알게 되었고 전문통신은 어떤 것인지 알아보고자 합니다. 전문통신 전문은 한자로 (온전할 전 + 글월 문)이며 전체 문자를 뜻합니다. 영어로는 full-text 라 불리고 고정길이로 전송합니다. 서로 주고받을 데이터 포맷을 약속(프로토콜) 한 후 약속된 데이터 패킷을 전송하고 수신하는 것을 말합니다. 언어는 달라도 바이트 배열을 다 사용이 가능하기 때문에 예전에 바이트배열 형태로 통신을 수행하였습니다. C언어와 Java와의 통신도 바이트배열은 가능합니다. 이런 바이트 배열을 소켓 통신을 통해 주고받습니다. 예를 들어 120바이트로 구성된 배열을 전문 통신을 사용한다고 가정하면, 헤더 용도로 30바이트를 사용하고, 본문으로는 70바이트, 나머지 20바이트는 범용적으로 사용하기 위한..
-
Charset이란?CS 2024. 2. 17. 00:01
개요 프로그래밍을 하다 보면 Encoding, Decoding의 개념등을 활용해보곤 했는데 거기서 사용되는 Charset이라는 개념을 확실하게 잡고 가고자 합니다. Charset이란? 컴퓨터는 0과1로 모든 것이 표현됩니다. 컴퓨터에서 사람이 이해할 수 있는 문자를 표현하기 위해서는 어떻게 해야 할까요? 사람이 이해할 수 있는 문자가 컴퓨터에 0과 1로 표현되려면 어떻게 해야 할까요? 컴퓨터와 언어가 변환될 수 있도록 각 문자를 정수값에 대응시켜놓은 표가 존재해야 합니다. 즉, Charset은 인코딩, 디코딩의 방식을 정해주는 것입니다. 컴퓨터는 정의된 Charset을 통하여 Encoding, decoding을 수행합니다. 해당 표는 ASCII라는 Charset이며 문자 A는 01000001로 인식되고 ..
-
SLASH23 - 새로운 은행을 위한 Modern 대외 연계 시스템 구축기세미나, 영상 요약정리 2024. 2. 16. 00:01
https://www.youtube.com/watch?v=eS9tukmYBLI&list=PL1DJtS1Hv1PiGXmgruP1_gM2TSvQiOsFL&index=24 토스뱅크의 Server Developer 이상민 님의 발표를 요약해 보겠습니다. 은행의 시스템 구조 채널계에서는 유저의 요청을 받습니다. 계정계에서는 은행에서 다른 은행으로 돈을 보내거나 대외기관을 통해 신용점수등을 조회합니다. FEP는 Feont End Processor의 약자로 대외기관과 계정계가 통신할 때 사용됩니다. FEP의 핵심 - 대외기관과 메시지 주고받기 FEP는 TCP로 세션 관리에 역할을 수행합니다. 대부분의 은행이 그래왔듯이 토스뱅크도 외부 업체가 만든 FEP 솔루션을 사용 중이었습니다. FEP 단점 1 - 생산성 감소 솔..