-
Kotlin Spring boot에서 AWS Secret Manager 사용하기
AWS Secrets Manager는 데이터베이스, API 키, 토큰 등 secret 정보를 안전하게 저장하고 교체 및 관리할 수 있게 해주는 AWS 서비스입니다. 코드 상에 보안 유지가 필요한 정보를 노출하여 공개 원격저장소에 올라가게 된다면? 더 나아가 서비스 코드일 경우는 그 영향은 치명적일 것입니다. 민감한 정보들을 관리하는 다양한 솔루션들이 있습니다. 그 중에 AWS Secrets Manager을 소개합니다. 본 글은 AWS RDS를 사용하는 것을 전제로 합니다. AWS에서 세팅하기 AWS 서비스 중 Secrets Manager를 이동합니다. 목록 우측 상단에 버튼을 클릭하여 신규로 생성합니다. Secret Type은 RDS를 선택하고 username과 secret name을 동일하게 /dev/..
-
kotlin 프로젝트에서 openapi code generator 사용하기
서론 현재 참여하고 있는 프로젝트는 쿠버네티스 환경으로, 여러 컴포넌트로 구성된 마이크로서비스 아키텍처입니다. 각 컴포넌트는 서로 다른 네트워크 주소와 포트에서 실행됩니다. 따라서 각 컴포넌트의 API를 호출하려면 다음과 같은 어려움을 겪었습니다. 하지만 분산된 시스템에서 서로 다른 서비스의 API를 호출하는 것은 복잡합니다. 네트워크 주소 관리, 로드 밸런싱, 오류 처리 등 고려해야 할 사항이 많기 때문입니다. 이러한 과정을 자동화하고 개발 효율성을 높이기 위해서 Open Api CodeGenerator를 도입하는 것을 고려했습니다. Open Api Code Generator는 OpenAPI Spec을 기반으로 프로젝트 코드를 생성해주는 오픈소스 툴입니다. 기본적으로 각 컴포넌트 API를 OpenAPI..
-
[querydsl] mysql filesort관련 group by 성능 최적화
mysql 환경에서 querydsl 를 도입하면서 성능 저하 문제를 피하기 위해 고민하고 있습니다. 데이터 조회 시 사용하는 group by 쿼리에서 불필요한 filesort 로 성능저하가 발생할 수 있습니다. filesort는 MySQL 서버가 메모리 버퍼에 담을 수 없는 방대한 데이터를 정렬하기 위해 임시 파일을 사용하는 방식입니다. 이는 불필요한 디스크 I/O 작업을 증가시켜 쿼리 실행 속도를 크게 저하시킵니다. 이번 포스트에서는 querydsl group by 쿼리에서 발생하는 filesort 문제를 분석하고, order_by_null 옵션을 활용하여 Filesort를 효과적으로 방지하는 방법을 소개합니다. MySQL 정렬 방식 MySQL은 데이터 정렬을 위해 다음 두 가지 방식을 사용합니다. 인..
-
[kotlin] 동시성 제어하기
동시성 문제는 여러 개의 스레드가 동시에 실행될 때 발생할 수 있는 문제로, 데이터 일관성 문제, 경쟁 조건 등이 대표적인 예입니다. 데이터 일관성 문제: 여러 스레드가 동일한 데이터를 동시에 수정할 때, 데이터의 일관성이 깨질 수 있습니다. 예를 들어, 한 스레드가 데이터를 수정하는 도중에 다른 스레드가 데이터를 수정하면 데이터가 손상될 수 있습니다. 경쟁 조건: 여러 스레드가 서로 경쟁하면서 자원을 사용할 때, 스레드 간의 충돌로 인해 예상치 못한 결과가 발생할 수 있습니다. 예를 들어, 한 스레드가 자원을 사용하고 있는 도중에 다른 스레드가 자원을 사용하려고 하면 충돌이 발생할 수 있습니다. 이번 포스트에서는 포인트 선물하기를 코틀린에서 동시성 문제를 해결할 때 사용할 수 있는 방법들을 소개하고자 ..
-
Java 기본 개념
Java 자료형 Primitive 실제 데이터 값을 저장하는 자료형 크게 논리형, 문자형, 실수형 boolean, char, byte(-128-127) , short, int, long, float, double Reference Type 메모리 주소 값을 통해 객체를 참조하는 타입 실제 객체 - 힙 영역에 저장 참조 타입 변수 - 스택 영역에 실제 객체들의 주소를 저장 객체를 사용할때 참조 변수에 저장된 객체의 주소를 불러와 사용하는 방식 Integer a = (Integer) 500; Integer b = (Integer) 500; System.out.println(a==b); //false Integer a = 127; Integer b = 127; System.out.println(a==b); /..
-
[대규모 서비스를 지탱하는 기술] 1장 정리
'대규모 서비스를 지탱하는 기술' 책을 읽고 정리하였습니다. 무엇을 '대규모'라고 하는가 취업 준비할 때 공고를 보면, 대규모 서비스를 운영해본 경험이 있는 분을 우대한다는 문구가 많았다. '무엇을, 어떤 것을 보고 대규모 서비스라고 하는지' 궁금했다. 대규모 서비스는 1대의 서버로 운영할 수 없는 서비스 , 즉 서버 확장이 필요한 서비스라고 한다. 고객은 웹 사이트, 앱 및 플랫폼에서 항상 똑같은 서비스를 제공받길 기대한다. 책을 주문하고 있는데 갑자기 웹 사이트가 느려지거나 404 페이지가 난다면? 이는 고객 만족도를 떨어트린다. 여러 번 발생한다면? 고객은 다신 서비스를 이용하지 않거나 다른 경쟁 서비스로 이동할 수 있다. 따라서 회사 입장에선 서비스가 더 빠르게 성장하길 원하기 때문에 확장성을 고..
-
JVM
JVM이 왜 등장했을까 Java는 네트워크에 연결된 모든 디바이스에서 작동하는 것이 목적이었다. 즉, 디바이스마다 운영체제와 하드웨어가 다르기 때문에 플랫폼에 의존적이지 않는 언어를 만들고 싶었다고 한다. 그래서 Java 바이트 코드를 실행시킬 수 있는 JVM이 등장했다. 주요 용어 환경, 플랫폼 = 운영체제 + CPU ex) 내 컴퓨터의 운영체제는 Linux야. CPU는 AMD 라이젠. 컴파일 플랫폼 : 프로그램을 만들고 있는 컴퓨터 (개발자 컴퓨터) 타겟 플랫폼 : 프로그램을 사용할 컴퓨터 (사용자 컴퓨터) 환경이 다를 경우 Java와 C/C++ 대응방식 C/C++ : 크로스컴파일; 타겟 플랫폼에 맞춰 컴파일 Java : 자바 바이트 코드는 플랫폼에 상관없이 / 플랫폼 독립적으로 JVM 위에서 동작 ..
-
[백준 9935번] 문자열폭발
https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 문제 접근 및 해결 방법 처음에 replace와 재귀를 이용해서 Java로 풀었는데 메모리 초과가 났다. 싸피분들과 리뷰를 하며 스택을 이용해야한다는 걸 알게 되었다. 백준 9935번 문자열 폭발과 유사해서 다시 풀어보았다. 마침 Go를 배우고 있어서 Go로 다시 풀어보았다. 풀면서 Go에 stack이 없어서 slice 개념을 이용해서 구현했다. 또한 풀면서 Go가 지원하는 자료형에..
-
Windows 에서 Go 환경 세팅
https://www.inflearn.com/course/go%EC%96%B8%EC%96%B4/ 쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정 - 인프런 | 강의 구글 서버, Docker, 우버등이 Go언어를 활용한 대표 프로젝트이고 최근에는 데이터 분석 및 블록체인에서도 많이 활용하고 있어 Go언어의 인기는 계속해서 수직 상승할 것으로 예상됩니다., 쉽고 www.inflearn.com (다음 강의를 듣고 학습하였습니다.) 0. Go, Atom, Git 다운로드 Go 다운로드 받기 Atom editor 다운로드 받기 git 다운로드 받기 Go 설치할 때 Go 경로는 기본적으로 주어지는 C:\Program Files\Go\ 로 했습니다. 1. Go 개발환경(공간) 생성 C:\workspace..
-
Windows 에서 godoc : 'godoc'은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
https://yeondube.tistory.com/entry/Windows-%EC%97%90%EC%84%9C-Go-%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85 Windows 에서 Go 환경 세팅 https://www.inflearn.com/course/go%EC%96%B8%EC%96%B4/ 쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정 - 인프런 | 강의 구글 서버, Docker, 우버등이 Go언어를 활용한 대표 프로젝트이고 최근에는.. yeondube.tistory.com GOPATH, GOBIN 환경변수를 모두 설정해주었습니다. Go 패키지들을 보기위해 cmd에서 godoc 명령어를 입력해보았습니다. 'godoc'은 내부 또는 외부 명령, 실행할 수 있는 프로그..
-
2021 카카오 채용연계형 인턴십 코딩테스트 + 서류 후기
2021 카카오 채용연계형 인턴십 코딩테스트에 참여하였다. 총 5문제 4시간으로 외부 IDE 제약없이 진행되었다. 1번 문제는 String 관련 문제였다. 자바스크립트로 정규표현식을 써서 해결했다. 2번 문제는 bfs를 이용하여 전탐색했다. 이때까지만 해도 카카오 문제가 이렇게 쉬워도 되나?라는 생각을 했다. 정말 쓸데없는 생각이었다. 3번 문제부터 정확성과 효율성을 보았다. 정확성은 모두 통과했지만 효율성이 0 pass 였지만 냈다.. 4번 문제 다익스트라를 이용하여 풀어보았지만 정확성 몇 개만 맞았었다.. 그래도 냈다 5번 문제는 손 대지도 못했다. 오픈카톡방에서 다들 3솔합이 거의 확정시 되는 것 같아 마음을 비웠었다. 하지만 내 생애 카카오 코테를 통과하는 날이 왔다; 하느님 감사합니다 발표 다음..
-
SSAFY(삼성청년소프트웨어아카데미) 5기 회고
예비 SSAFY 5기 SSAFY는 매 기수마다 경쟁률이 세다고 소문이 자자하기도 하고 4기 때 떨어져서 사실 지원할 생각이 별로 없었다. 2020년 하반기에 코딩테스트에서 무한 떨어짐을 반복한 나는 자신감이 밑바닥을 쳤었다. 하지만 클라우드 MSA 교육과정에서 만난 오빠, 동생들이 할 수 있다고 지원해보라고 용기를 불어넣어주셔서 지원하게 되었다. SW적성진단을 보는 날짜가 클라우드 교육과정 프로젝트 기간이랑 겹쳐 준비하기 빠듯했다.. 눈물 2020.11.21(토) 시험시간이 다가오면서 긴장감이 몰려와서 손이 덜덜 떨렸던 걸로 기억한다ㅋㅋㅋ 아는 놈은 정확히 팬다 마인드로 수리/추리 논리력(객관식)은 15문제 중에 10문제정도 풀었고, 컴퓨터 사고력은 3.5문제를 풀었었다. 4기때 떨어진 전적이 있어 별 ..
-
sort 함수 커스터마이징
sort 함수 커스터마이징 1. sort 함수 동작 방식 Array의 각 원소를 문자열로 만든다. `UTF-16` 코드 유닛 값을 기준으로 순서를 정렬 따라서 Array의 원소가 **숫자**일 경우 sort함수를 이용해서 제대로 정렬하기 위해서 sort 함수 커스터마이징이 필요하다. 2. sort 함수 기본 문법 sort 함수는 콜백함수인 비교함수가 필요하다. 우리는 비교함수로 sort함수를 커스터마이징하는 것이다. **`Array.sort([비교함수])`** sort함수 에서 비교함수(Compare Function) 비교함수는 2개 인자 next, prev를 전달받는다. (next, prev)=>{ ... } 기본적으로 비교함수 반환값에 따라 오름차순/ 내림차순이 정해진다. 반환값 **-1**: 새로운..
-
[oracle] 연습2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 12..
-
[oracle] 연습1
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816..