목록분류 전체보기 (37)
King of Stock
본 포스트는 로컬 환경에서 쿠버네티스 클러스터를 만드는 kind 도구를 사용하는 방법에 대한 포스트이다. 더 간단한 minikube도 있는데, 굳이 kind를 소개하는 이유로는 더 쿠버네티스 같이 구성할 수 있고 여러 쿠버네티스 버전을 설치할 수 있고 사용자가 좀 더 숙달이 되면 테스트 환경을 자동으로 만들어서 사용자가 개발한 operator를 테스트 해보는 등에 작업을 할 수 있다. 요구사항 리눅스 환경 도커 설치 - kind는 도커 환경에서 클러스터를 만들고 있다. kind v0.20.0 - 아래 설치 과정부터 설명하고 있다. kubectl 환경준비 이제부터 필자의 환경에 kind를 설치하고 kind를 통해서 쿠버네티스 클러스터 환경을 만들어보겠다. kind 바이너리 설치 공식 문서에서는 크게 3가지..
본 포스트는 필자가 GCP 환경에 생성한 VM 인스턴스에(Debian OS) 한글이 깨지는 현상을 확인하고 한글 로케일 설정을 진행한 과정을 기록했다. 작성된 본 포스트는 이것을 읽는 사람을 고려하지 않았기 때문에 생소한 용어나 혹은 단어가 사용될 수 있다. OS 정보 본 포스트의 작업은 Debian Linux 환경에서 진행했고, 관련 OS 정보는 아래 예시와 같이 파일의 내용을 출력하여 확인할 수 있다. cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="..
파이썬에서 열거형 클래스를 상속받아서 직렬화까지 동작하게 하는 간단한 방법 아래 예시는 필자가 개발중인 프로그램의 일부로 문자열을 값으로 가지는 맴버로 사용자 정의 열거형 클래스이다. from enum import Enum class StockStateType(str, Enum): """종목 상태 유형 키움 GetMasterStockState(QString) 조회 결과에서 파싱 결과의 열거형이며 증거금은 조회 결과는 제외 상태의 종류에는 거래정지, 관리종목, 감리종목, 투자유의종목, 담보대출, 액면분할, 신용가능 """ STOP = "거래정지" """거래정지""" GOVERNMENT = "관리종목" """관리종목""" SUPERVISION = "감리종목" """감리종목""" ATTENTION = "투자유..
사전 환경 로컬 환경에 SQL 서버 설치 NuGet 패키지 관리자를 통한 EntityFramework 설치(6.4.4) 적절한 IDE(필자는 visual studio 2019 community) 프로젝트 설정 app.config 아래 설정은 필자의 winform 프로젝트에 app.config 파일에 EntityFramework 설정과 관련된 일부분이다. name 부분은 코드에서 사용해야 하는 명칭이고, connectionString 부분은 기존에 SQL Server 연결에 사용하는 문자열이다. 위에는 2개의 설정이 있으며, 하나는 테스트 케이스에 사용하고 다른 하나는 애플리케이션 기동에 사용한다. SmartkukContext.cs app.config 파일에 설정한 내용을 기준으로 데이터베이스에 연결을 하..
VSCode 확장 프로그램 중 diff 처리를 하는 2개의 프로그램 Diff Tool: 파일 저장 없이 우클릭으로 비교할 문자열 내용을 선택해서 바로 비교 Partial Diff: 부분 비교를 할 수 있음 https://marketplace.visualstudio.com/items?itemName=jinsihou.diff-tool Diff Tool - Visual Studio Marketplace Extension for Visual Studio Code - Take a diff of 2 files marketplace.visualstudio.com https://marketplace.visualstudio.com/items?itemName=ryu1kn.partial-diff Partial Diff - ..
DNS 서버 환경설정 본 문서에서는 같은 네트워크(subnet)에서 특정 dns 서버를 지정한 호스트들이 사용할 우분투 DNS 서버 설정을 가이드 한다. 현재 설정된 DNS 서버의 정보는 아래와 같다. 참고로 이 서버는 윈도우 워크스테이션 하위에 VMware workstation(VMware Workstation Pro 다운로드) 가상화를 통해서 설치된 서버이다 서버 IP 주소: 192.168.100.3 DNS 서버 호스트 이름: ns1.kuk.lab 호스트 OS: Ubuntu 18.04 server(Download Ubuntu Server) 호스트 관리자 계정: dns DNS 구성에 사용한 패키지: bind9 DNS 서버 호스트 변경 DNS 서버의 호스트 이름을 다음의 명령어를 통해서 의미 있는 이름으..
shell script에서 문자열을 비교할때 주로 사용하는 단순한 형태가 if문을 이용하는 것이다. 그런데 가끔 문자열에 이상한 문자(여기서 예를 드는 것은 \r)가 문자열 내부에 들어가 있어서 내가 원하는 비교를 할 수가 없는 상황이 발생하기도 한다. 본 글에서는 위에서 언급한 상황에서 디버깅을 어떻게 하는지에 대해서 간단하게 글을 써보고자 한다. 내가 겪은 일을 기반으로 하나의 예를 들어보겠다. 최근에 인터넷에 있는 특정 파일을 백그라운드 프로세스 상태로 다운로드를 처리하고 shell script 처리 과정에서 이 백그라운드 처리가 완료가 되었는지 기다리고 다음 shell script 로직을 진행하려고 코드를 구현 했었다. 백그라운드 다운로드 처리가 완료 되었는지 검증하는 로직에서 다음과 같이 상태 ..
StatefulSet pod anti affinity 옵션 적용시 주의사항 일반적으로 애플리케이션에 볼륨이 할당되고 계속 유지되며 동작해야 하는 애플리케이션들이 있다. 예를 들면 Elasticsearch 같은 오픈소스가 대표적인 예이다. 볼륨(상태)을 할당한 애플리케이션 Pod을 적용할때는 주로 StatefulSet을 사용한다. StatefulSet은 애플리케이션 Pod을 쿠버네티스 클러스터 환경에 적용시 PersistentVolume 리소스를 강하게 참조하는 특징이 있다. 고가용성을 위한 StatefulSet 적용 고가용성을 유지하기 위해서 클러스터 환경에 애플리케이션의 Pod을 적용시 Affinity and anti-affinity에서 언급하는 형태로 적용을 많이 한다.(물론 수평확장을 하지 않는다면..
Pet 프로젝트에 RestController를 통합 테스트 하기 위해 기존에는 주로 MockMvc 사용해서 구현을 많이 했었다. 테스트와 관련된 내용을 좀 찾아보고자 spring-boot test 문서를 보던중 Testing with a running server 발견하고 테스트 해보니 MockMvc로 하는거보다 편해서 앞으로 이걸 사용하려고 결정했다. 먼저 기존에 했던 방식의 테스트 코드를 보면 다음과 같다. 내가 느끼기에는 너무 길다. // ... 중략 ... MvcResult mvcResult = this.mockMvc.perform(get("/greet")) .andDo(print()).andExpect(status().isOk()) .andExpect(jsonPath("$.message").va..
Pet 프로젝트에 swagger를 적용하기 위해서 관련 설정을 검색(구글링)하여 한국 블로그 내용을 기준으로 적용을 해보았다. 애플리케이션을 기동하고 http://localhost:8080/swagger-ui.html 접속하니... 위와 같이 잘(?) 만들어진 에러 페이지가 응답으로 왔다. 로그를 보니 No mapping for GET /swagger-ui.html WARN 레벨의 로그가 아래와 같이 발생했다. 2019-07-06 12:44:47.556 INFO 2272 --- [)-192.168.100.4] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2019-07..
jpa auditing 이 프로젝트는 JPA Auditing 설정하고 테스트 하는 내용을 작성한 프로젝트이다. 사전조건 Git이 설치된 환경 Gradle ( Gradle wrapper가 프로젝트에 있기 때문에 옵션 ) java IDE ( 옵션 ) lombok JPA Auditing 테스트를 하기 위해서 @SpringBootTest 어노테이션을 사용할 것을 권고한다. 그리고 프로젝트는 Gradle 멀티 모듈로 구성되어 있고 본 프로젝트는 루트 프로젝트의 서브 프로젝트이기 때문에 해당 부분에 대해서만 설명한다. 설정 build.gradle JPA 사용하기 위해서 spring-boot-starter-data-jpa 종속성으로 추가했다. dependencies { implementation 'org.sp..
postgresql create database on mac 맥북에 설치된 postgresql에 접속하여 db 생성 $ psql psql (11.2) Type "help" for help. kuk=# create database my-db ENCODING 'utf-8'; CREATE DATABASE
어제 밤부터 인텔리J를 구입하여 신나게 설정(Heap, 인코딩 등등등)을 하고 이것 저것 셋팅후 오늘 퇴근하고 코딩 놀이를 하려고 인텔리J를 실행했는데, 아무런 메시지 없이 켜지지 않았다. 터미널에서 직접 실행을 해봤더니 다음과 같은 메시지가 나와서 문제를 해결 할 수 있었다.(역시나 과도한 Heap 설정으로) 일단 터미널에서 실행하려면 IntelliJ 설치 경로를 찾아가야 하니 아래 스크린샷과 같이 애플리케이션으로 이동 아래 스크린샷처럼 MacOS 경로를 클릭하고 복사를 한번 한다. 그리고 터미널을 실행하고 cd 붙여넣기 해주면 아래 처럼 경로까지 주욱 붙여진다. $ Applications cd /Applications/IntelliJ\ IDEA.app/Contents/MacOS $ ll total 2..
쿠버네티스를 사용하면서 이런 저런 오브젝트를 설치하게 되는데 간혹 네임스페이스 삭제가 되지 않는 문제가 발생할 때가 있다. 나 같은 경우에는 cert-manager가 그랬었다. $ kubectl delete NAMESPACE # 이 커맨드가 한참 걸리고 Ctrl + c 해서 빠져나와야 한다면 상태나 삭제 결과를 확인하기 위해 아래와 같이 보게 될 것이고 상태는 Terminating에 나이는 많을(?) 것이다. $ kubectl get namespace NAME STATUS AGE long_running Terminating 11d default Active 1d kube-system Active 1d kube-public Active 1d 이러한 문제가 발생하면 다음과 같은 커맨드를 사용하여 삭제하도록 ..
사전 조건 현재 로컬환경에 maven 설치 설치가 되었는지 아래처럼 버전확인 커맨드나 아니면 그냥 mvn 커맨드를 실행해보면 설치가 되었으면 output이 나오면 설치된 것으로 봐도 무방해 보인다. 아래는 본인 환경(macOS)에서 확인해본 출력 결과는 아래와 같다. $ mvn --version Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T03:41:47+09:00) Maven home: /usr/local/Cellar/maven/3.6.0/libexec Java version: 1.8.0_111, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachin..
스프링 부트 애플리케이션에 보안 하나 적용 하기가 이리 어려워서야;;; 뭔가 한번 읽으면 머리에 쏙 저장 되는 버튼이 있었으면 좋겠다는 생각이 드는 하루였다... 에러, 영어, 빌드툴, 새로운 기술 등의 홍수에서 진도가 너무 안 나간다. 아니다 진도는 나간다 ㅋㅋㅋ
스프링부트의 자동설정시 사용 가능한 일부 조건 어노테이션에 대한 의미 @ConditionalOnBean: 특정 BEAN CLASS나 이름이 Bean Factory에 포함되면 진행 @ConditionalOnClass: 특정 CLASS가 경로에 있으면 진행 @ConditionalOnCloudPlatform: 특정 클라우드 플랫폼(enum CloudPlatform) 환경이면 진행 @ConditionalOnExpression: SpEL에 의존하는 조건이면 진행 @ConditionalOnJava: JVM 버전이 일치하면 진행 @ConditionalOnJndi: JNDI를 사용할 수 있고 특정 위치에 있으면 진행 @ConditionalOnMissingBean: 특정 BEAN CLASS나 이름이 Bean Factor..
대한민국 개조론... 책의 제목이 굉장히 무시무시 했다... 제목만 보고 '아 유시민 작가가 굉장히(?) 진보적인 생각을 책에 담았구나' 라고 생각이 들었다. 확실히 독자 입장에서 이해하기 쉬운 문장을 쓰는 작가답게 3일 가량의 퇴근길 2시간 정도를 할애하여 다 읽었다. 책에는 유시민 작가의 보건복지부 장관 시절의 경험에 대해서 주로 다루고 있다. 마지막 목차가 에필로그인데 이 책에 대해서 압축하여 설명이 되고 있다. 그 일부를 소개하면 이렇다. "대한민국 개조론"은 대한민국의 국가발전전략에 관한 책입니다. 세계화와 양극화, 지식정보화라는 문명사적 변화와 저출산 고령화에 슬기롭게 대처해 위기를 기회로 반전시키기 위해서는, 대한민국을 사회투자국가로 개조해야 한다는 것이 제 주장의 핵심입니다. 책을 다 읽은..
취미를 독서로 정했다. 몇 개월(대략 6~7개월) 지나고 계속 책 읽는 습관을 들여서 어느 정도 책 읽는 재미와 습관이 되었다. 현재 16권의 책을 읽으니 아무래도 다음에 읽어야 하는 책에 대한 목록을 정리해야 앞으로 잘 독서 할 수 있겠다 싶어서 정리 To read - 후불제 민주주의(유시민) - 나의 한국현대사(유시민) - 국가란 무엇인가(유시민) - 유시민의 경제학 카페(유시민) - Effective Java 3rd (Joshua Bloch) - Spring Microservices IN ACTION (John Carnell) To buy - 침묵의 봄(레이첼 카슨) - 토지(박경리) - 코스모스(칼 세이건) - 원더플 사이언스 (나탈리 앤지어, no ridibooks) - 사이먼 싱의 빅뱅 (사이..
연말인데 휴가가 2일 밖에 없어서 친구들과의 여행이 불발이 되고... 그래서 연차 휴가 2일을 어떻게 보낼까 고민한 끝에... 내가 선택한 것은 호캉스... 나는 담배를 피기 때문에 서울에서 객실내 흡연이 가능한 호텔을 검색 해보았다. 다양한 호텔들이 있었는데, 조식도 먹을만 하다는 후기를 읽은거 같아 과감히 예약~ 이런 저런 후기들이 있었는데, 그 중에 호텔 프론트에 직원이 친절하지 않다는 후기를 읽었는데, 그런거 같지 않았다. 남자분이셨는데, (나도 남자...) 뭔가 잘 정돈된 사무직 직원 같은 느낌에 친절도 하셨다 ㅋㅋ 처음에 호텔을 들어서면 로비가 다소 어두운 분위기에 마음이 가라앉는 느낌도 들었다. 별건 아닌듯 나 홀로 호캉스니 큰 룸도 필요가 없고... 목적 자체도 독서나 개인 프로젝트 그리고..
오늘 맥북에 iMovie 설치를 하고자 앱 스토어를 실행 했는데 아래와 같은 화면이 나오면서 동작을 하지 않았다. 이런 메세지(위에 캡쳐)가 보이면서 재시동, apple id 재로그인 등을 하여도 앱 스토어가 동작하지 않아 인터넷 검색을 해보니 다음과 같은 방법이 있었다. 메세지(환경을 영어로 사용하고 있어서 영문 메세지입니다) Cannot Connect to the StoreAn Internet connection is required. 해결책이 있었던 링크: https://support.apple.com/ko-kr/HT201400#computer 여러 가지 해결책 중에 제가 해결했던 방법은 아래의 방법이었습니다. Mac 또는 PC의 경우iTunes Store에서 -45054 오류가 표시되는 경우 수행..
한글 배열을 정렬해야 하는 상황이 있어서 정렬 함수를 만들고자 코드를 짜던 중에 있는 함수 sort()가 어찌 처리를 하는지 궁금하여 한번 돌려봤습니다.아래는 코드입니다. 위에 코드를 돌려보면 아래와 같이 결과가 나옵니다. 그런데 마음에 안드는 결과가 나와버렸습니다. 그냥 매개변수 없이 돌리나, 방향을 바꿔서 돌리나 정렬은 첫 글자 초성 기준으로만 하는 것으로 보여지네요. 자동문, 장동건, 장동민 글자에서 내림차순은 장동민, 장동건, 자동문 순서로 오름차순은 자동문, 장동건, 장동민 순서로 나와야 하는데 말이죠.이렇게 정렬이 되는 것은 원하지 않으니 함수를 만들어 봅니다. 한글끼리 비교시 Character 배열로 변환을 해서 인덱스별로 각각 비교를 하고 비교하는 문자가 동일할때 다음 인덱스 비교를 하도록..
사용자 기기의 특정 연락처를 보여주고자 할때에 이용하는 CNContactViewController 사용하다가 오류가 발생했던 상황에 대해 공유합니다~ 일단은 CNContactViewController 클래스 일부 번역(Documentation) [원문]The CNContactViewController class implements the view to display a contact. CNContactViewController can display a new contact, unknown contact, or existing contact. You must use one of the designated initializers from init(forNewContact:), init(forUnknownCo..
Swift 접근 제한자 명칭 허용 범위 접근 & 수정 비고 private ~ 클래스 접근 fileprivate ~ 클래스 + 파일 접근 Swift 3.0 이상 internal ~ 같은 모듈(프로젝트) 접근 접근 제한자를 명시하지 않으면 기본값 public ~ 모듈 외부 접근 open ~ 모듈 외부 접근 & 수정 Swift 3.0 이상
Edit Scheme > Run > Arguments 이동 아래와 같이 -FIRDebugDisabled 추가 후 실행
Alamofire를 사용하여 API를 만들어 놓고 테스트를 하는 소스 공유합니다. 비동기 요청이기 때문에 응답을 기다리는 형태가 되어야하고 애플에서 제공되는 클래스와 함수를 이용합니다. 아래는 소스... 도움이 되길...
iOS 개발을 많이 하신 분은 과감히 안 보셔도 됩니다. 먼저 문제가 되었던 상황 및 로직은 다음과 같았습니다. [대략적인 로직] 1.UITableView content는 Dynamic Prototypes(Prototype Cells: 2) 으로 설정이 되어있음 2.위에 설정된 2개의 cell 중에서 한 개는 사용자의 입력을 받는 UITextField를 포함한 Cell(InputCell 이라고 통칭) 이고 다른 한 개는 Label만 있는 Cell(SelectableCell 이라고 통칭) 3.평시에는 InputCell 4개만 보여지고, 첫번째 입력란에 값을 넣으면 텍스트를 기반하여 데이터를 조회후 1번 인덱스부터 조회결과를 SelectableCell로 채워넣는 형태의 로직 4.사용자 편의를 위해 키보드에 ..
UITableView 함수인 endUpdates() 호출할 때에 다음과 같은 오류가 발생하는 경우가 있다. 오류메시지: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (14) must be equal to the number of rows contained in that section before the update (14), plus or minus the number of row..