목록IT 기술 (29)
King of Stock
본 포스트는 필자가 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..
오늘 맥북에 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..
용량 문제나 개발하는 앱이 특정 기기에만 한정될때 불필요한 시뮬레이터를 삭제할 수가 있습니다.삭제를 하기 위해서는 다음 메뉴로 이동하여 삭제를 할 수 있습니다. 상단 메뉴: Window > Devices and Simulators 왼쪽에 보이는 목록에서 삭제하고자 하는 시뮬레이터를 노려봅니다. 마우스 오른쪽 클릭(트랙패드로는 두 손가락 클릭?) 하면 삭제 메뉴가 보입니다 아래 화면처럼 삭제버튼을 과감히 클릭하면 삭제됩니다. 추가적으로 파일을 삭제하는 방법도 있습니다.위에 내용이랑 추가적으로 파일 삭제하는 방법은 링크로 대체합니다. ㅋhttps://stackoverflow.com/a/30940055 그럼 도움이 되시길...
별거는 아니지만 그래도 혹시 당황하시는 사람들을 위해서 작성합니다. 시뮬레이터를 통해서 앱을 테스트 하고자 할때 아래와 같은 비스무리한 오류가 발생 한다면 시뮬레이터 버젼이 낮아서 나오는 오류로 볼 수 있습니다. 가볍게 시뮬레이터의 버전 업데이트를 수행해주시면 됩니다. CopySwiftLibs /Users/awesome/Library/Developer/Xcode/DerivedData/MyAwesomeApp-hivqjkvpcyksquaztfalzhypnhhn/Build/Products/Debug-iphonesimulator/MyAwesomeApp.app cd /Users/awesome/Desktop/remote_repository/my-awesome-app export CODESIGN_ALLOCATE=/A..
github blog 환경 구성을 하려고 인터넷에 떠도는 내용을 통해 jekyll 설치를 하려고 다음의 command를 이용하여 설치를 진행했다.$ sudo gem install jekyll 실행을 하니 설치는 ruby 버전 몇이 필요하다는 영문 오류 메시지가 보일뿐… 시작부터 뭐(?) 같은 느낌을 가지고 구글링을 시작 역시나 친절한 횽아가 잘 적어주신게 있었다.# 이 명령어 성공후에 터미널을 끄고 다시 실행하여 들어오도록 한다. $ curl -sSL https://get.rvm.io | bash -s stable # 루비 버전들을 열람하는 명령어 # 위에서 오류로 발생했던 require 버전을 찾아야 한다. $ rvm list known # 버전 찾았으면 설치 실행 $ rvm install ruby-2..
iOS 개발중 Realm 으로 사용하는 모델을 변경후 시뮬레이터를 통해서 실행을 했을때 아래와 같은 오류(물론 더 많은 로그가 찍힘)로그가 찍히는 것을 발견할 수 있음. fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors: 기존에 저장된 데이터를 유지하려면 어쩔수 없이 Realm에서 제공하는 마이그레이션을 해줘야 한다.https://realm.io/kr/docs/swift/latest/#migrations 하지만 개발중에 모델을 변경하는 일이 빈번 할 수도 있으니 기존 데이터를 가지고 있을 필요가 없다면 ..
Size Inspector에서 아래의 속성들을 설정할 수 있습니다.헷갈리는 분들은 한번씩 참고 하세요. Priority 속성이 높으면 해당 속성의 우선순위를 높게 설정한 것으로 이해하시면 되요.그런데 이해를 더 쉽게하기 위해서 제일 높을때(또는 제일 낮을때)를 가정하고 설명합니다. Content Hugging PriorityPriority 값이 제일 높으면 가장 나중에 커집니다.Priority 값이 제일 낮으면 가장 먼저 커집니다. Content Compression Resistance PriorityPriority 값이 제일 높으면 가장 나중에 작아집니다.Priority 값이 제일 낮으면 가장 먼저 작아집니다. 그런데 위에 사항과는 약간 다른 내용인데 width constraints 설정을 해놓고 잊어..
SplittableRandom 클래스 병렬 처리와 랜덤 숫자를 추출하는 형태의 로직을 구현할 때에 이용하면 좋을(?) 클래스입니다.java 1.8 부터 나온 이 클래스는 java api에서 다음과 같이 설명하고 있습니다.해석을 제 맘데로 해서... 원문 api doc 읽어보시는걸 강추합니다. A generator of uniform pseudorandom values applicable for use in (among other contexts) isolated parallel computations that may generate subtasks. Class SplittableRandomsupports methods for producing pseudorandom numbers of type int, ..