Development(67)
-
IntelliJ 자바 프로젝트에 VM 옵션 추가하기
IntelliJ 자바 프로젝트에 VM 옵션을 추가하는 방법은 정말 쉽다.. 해당 메뉴가 숨어있을뿐.. 1. 상단 Run Config에서 [Edit Configurations...] 옵션 클릭 2. 우측 Build and run 항목에서 "Modify options" 클릭 3. 메뉴에서 Add VM options 선택 4. 새로 입력칸이 생긴 곳에 VM 옵션을 넣는다.
2023.09.22 -
ADsP 독학 공부법과 첫트 합격 수기
일단 비전공자이나 저는 관련업계에 있고, 다만 일반 프로그래머라서 데이터는 깊게는 모르는 상태였습니다.. 데이터는 어떻게 추출해야하고 어떤 이론을 가지고 접근해야하는가에 대한 학업차 이론집 2권을 샀습니다. 짬짬이 공부를 했고 하루에 2시간~4시간 정도 투자했고, 전 늘그렇듯 자격증자체가 목적이 아니라 그 분야의 최소한의 기초는 알아야 그때부터 시작이라는 생각으로 속독위주로 공부했습니다. 그래서 ADsP 합격을 위해 했던 공부법을 정리하면 다음과 같습니다. 이론집을 속독 > 나만의 요약집 만들기 > 기출을 통해 요약집 보완 > 다른 이론집 속독 > 요약집 보완 > 불안한 문제만 3개년치를 하루에 한번씩 독파 1,2주차 - e북 이론집을 아이패드에 켜놓고 분할화면으로 굿노트에서 요약재정리. 총 130여장으..
2023.06.09 -
[파이썬] 가장 많이 사용하는 줌렌즈 초점거리는? 통계를 내보니..
사진을 취미로 하면서 아주 오랜 고질병으로 유명한 병이 있습니다. 바로 렌즈병인데요.. 단렌즈를 샀다가 줌렌즈를 샀다가 다시 단렌즈로 돌아가고 그러는 무한 반복의 현상입니다ㅎ 저도 단렌즈와 줌렌즈(28-75mm)를 사용하다가 좀더 레인지가 긴 줌렌즈로 통합해서 이제는 끝났겠거니했는데.. 이런.. 그런데.. 맛을 알면 그 맛을 잊지 못한다고 하던가요. 저도 또다시 단렌즈 병(?)이 도져버렸습닏.. 그러던 차에 과연 단렌즈를 사야한다면 어느 초점거리의 단렌즈로 살 것인가. 정말 내가 35mm 50mm 85mm 이런 여러 렌즈들 중에 어느 초점거리를 가장 즐겨찍었나를 통계를 내보고 싶었습니다. 본업이 개발자이다보니 일일히 사진파일을 열어서 기록할 수도 없는 노릇이고해서 이참에 파이썬으로 하나 만들어서 확인해보..
2023.04.30 -
[SwiftUI] ObservedObject 의 배신
올 한해 방송 준비도 미흡했고 장기적 플랜으로 학습을 단단히 하고서 방송을 해야겠다는 생각으로 잠을 줄여가면서 회사일을 하면서 개인사를 돌보며 학습겸 1인 프로젝트를 시작했다. [ 도입한 주요 기술 스펙 ] SpringBoot 언어 Kotlin ORM JPA 보안 Secure 와 JWT 기반 DB MariaDB SwiftUI WAS가 AWS인지 아닌지, 도커를 쓰는지 아닌지 (어차피...도커도 서서히 사향길에 접어들고 있다) 신기술인지 아닌지 그건 개발에 있어 중요하다고 생각하지 않는 편이다. 거대한 서비스를 어떻게 파트를 나누고 구성할 지, 어디부터 설계를 해나갈지를 스스로 고민하고 어떻게 스타트를 끊고 진행을 해나갈지, 그리고 그걸 정말 "혼자서" 다 해낼 수 있는지가 제일 중요하다고 생각한다. 그래..
2022.07.12 -
[Docker] 맥OS에 도커 설치 (mac docker install) - 맥에 우분투 설치 (1)
지난해까지 주력 모바일 앱개발자에서, 이제는 본격적으로 서버 사이드 개발과 아키텍쳐링으로 업무를 전환하는 시점에서 본격적으로 시도하는 서버사이드 개발의 첫 관문, 도커를 소개하고자 한다. 도커란? (위가 도커 이미지인데.. 고래위에 컨테이터를 적재했다고 동물학대라고는 안했으면 좋겠다...ㅜ) 나도 처음 서버개발을 시작했던 2011년도 즈음 겪었고, 이후에도 간간히 어깨너머로 봐온 상황이 있다. 개발회사에서 "서버 사이드 개발"을 하다보면 아마도 한번쯤은 아래와 같은 경험을 해보았을 것이다. (안해봤다면 좋은(?)회사~) 신이난다 신이나 흥이난다 흥이나 로컬 환경에서 코딩을 신명나게 하고나서 서버에 결과물을 처음으로 배포를 해야하는데, 아...그러고보니 나는 윈도우 PC인데 서버OS는 리눅스네.. (또는 ..
2021.02.02 -
안드로이드 마켓 배포를 편하게 해보자 "google publisher api v3"
안드로이드 앱 개발의 최종단계라고 할 수 있는 구글 플레이 배포. 앱이 1, 2개인 경우는 상관이 크게 없을지 모르나, 관리하고 있는 앱이 10개 이상을 넘어가기 시작하면 사용자 배포 이슈가 있을때마다 일일히 google play consoel 에 접속해서 앱을 배포하는 것이 얼마나 귀찮은 일인지는 현업을 뛰어보면 알 수 있다. 이때 구글에서 제공하는 "google publisher api v3" 를 사용하면 소스 단에서 바로 빌드하여 바로 업로드, 배포까지 논스톱으로 진행할 수 있다. 배포와 관련해서는 fastlane 이라는 스크립트 대체제가 있으나, 자바나 파이썬에 익숙하고 심플하게 관리할 운영툴을 만들고 싶다면 "google publisher api" 가 좋은 방법일 수 있다. 우선 공식 샘플 소스..
2021.01.24 -
자바 검색엔진 "아파치 루씬(lucene) 8.7.0" 적용기 - 2/2
1편 - kplog.tistory.com/285 지난 시간에 1개의 파일을 읽어서 해당 파일의 특정 단어의 위치에 대한 검색을 빠르게 하는 방법으로 "아파치 루씬" 도입을 고려했다. 테스트를 거듭한 결과, 역시 아파치 루씬의 단어 검색에 성공을 했고, 그 속도에 놀라게 되었다. 역시 코딩은 집에서 편하게 쉬는 시간(?)에 해야 해결이 잘되는 것 같은 것은 진리인가.. 우선 아파치 루씬을 구현하기 위한 큰 구조는 다음과 같다. *. 사전 필요 작업 (라이브러리 의존성 추가) implementation group: 'org.apache.lucene', name: 'lucene-core', version: '8.7.0' implementation group: 'org.apache.lucene', name: '..
2021.01.22 -
자바 검색엔진 "아파치 루씬(lucene) 8.7.0" 적용기 - 1/2
아파치 루씬은 보통 여러 파일을 인덱싱하여 해당 파일을 빠르게 찾는 용도의 레퍼런스가 많이 나와있으나, 현재 도전중인 것은 파일 1개안의 텍스트들을 행단위로 인덱싱하고 빠르게 찾기 위해 시도중이다. 허나 아래의 코드로 했을 경우, 단어를 찾지 못하고 있다. try { File file = new File("인덱스가생길디렉토리명칭.index"); Directory dir = FSDirectory.open(Paths.get(file.toURI())); Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig iwc = new IndexWriterConfig(analyzer); iwc.setOpenMode(IndexWriterConfig.OpenMode.C..
2021.01.20 -
파이썬 env: python\r: No such file or directory 오류
파이썬 실행시 env: python\r: No such file or directory 오류가 발생할때에는 vi로 해당 py 파일을 열어서 다음과 같이 명령모드로 실행 후 강제 저장, 종료한다 :set ff=unix :wq!
2021.01.17 -
iOS fastlane 기본 사용법
Xcode가 아닌 command 창에서 빌드 등을 자동화하는 fastlane 이라는 프로그램의 기본적인 빌드 명령어는 다음과 같다. (*. fastlane 은 안드로이드도 지원합니다 ) $bundle exec fastlane gym --workspace 프로젝트파일명(~.xcworkspace) --scheme 타겟명칭 --configuration Release --export_method export방법 --output_directory export위치 [ iOS의 fastlane 기본적인 설치 문서 ] - docs.fastlane.tools/getting-started/ios/setup/ *. 참고할만한 사이트 (1) 젠킨스와 fastlane 결합 : thebugcode.github.io/ios-con..
2021.01.15 -
유용하게 쓰이는 vi 명령어
실무에서 사용할때마다 정리하는 중입니다. *. vi 모드별 스크린샷 [ 이동모드 ] 1. shift 와 : 을 누르면 > 명령모드 2. a 를 누르면 > 현재커서 다음기준 편집모드 [ 편집모드(직접작성) ] 1. ESC 한번 > 이동모드 [ 명령모드(치환 등) ] 1. ESC 한번 또는 빠르게 두번 > 이동모드 ^, $ 등은 정규표현식의 첫, 끝과 같은 의미인듯.. ( ^x 문자열이 x로 시작한다. / x$ 문자열이 x로 끝난다.. ) 저장하고 종료 명령모드 :wq 이동모드 ZZ (ZQ는 저장안하고 종료) 문서 가장끝으로 가기 :$ 특정 - 현재라인을 복사해서 그 다음줄에 붙여넣기 (복사할 라인에서 명령모드로 변경후) :t. *. 현재라인에 특정라인을 복사할 경우 (10번라인 > 현재라인) :10t. 전..
2021.01.15 -
[자바] 멀티쓰레드 병렬처리 - stream 방식 ExecutorService, Future 방식
(1) ExecutorService, Future, callable 자바 1.5 버전의 ExecutorService와 callable를 사용한 예시 newSingleThreadExecutor로 하였는데 newFixedThreadPool(숫자) 방식으로 하면 쓰레드 개수를 지정할 수 있다. ExecutorService executorService = Executors.newSingleThreadExecutor(); Set callables = new HashSet(); //리스트, 맵등 반복문으로 작업할 콜렉션 for(String key : map.keySet()) { callables.add(() -> { //원하는 동작 수행 return "result"; }); } //callables 들이 병렬처리된..
2020.11.24 -
[git] Xcode pbxproj merge conflict 해결방법
xcode의 최상위 프로젝트 관리 패키지인 .pbxproj의 경우 git 병합시 어떻게 병합할 것인가에 대해 난감한 경우가 많다. 혼자 작업을 하더라도 브랜치를 별도로 분기하여 병합할때 해당 패키지가 충돌이 나는 경우, 병합관련 사항을 기재한 .gitattributes 파일을 git에 추가하면 해결이 가능하다. $ vi .gitattributes 해당 파일에 *.pbxproj binary merge=union 내용을 추가후 저장.
2020.11.19 -
아이폰12 safe area 변경사항
아이폰 12 와 아이폰 12 미니 버전의 safe area 가 변경 사항이 있다고 하여 원글을 찾아보았습니다만, 스토리보드 상에서 영역을 잡고 해당 영역의 contant를 건드리지 않았던 경우에는 크게 문제될 것은 없을 것 같고, 코딩으로 상단 영역을 44 등과 같이 다이나믹하게 고정 숫자로 잡는 방법으로 UI를 구성했다면 아이폰 12는 47, 아이폰 12 미니는 44 로 분기를 하셔야할 것 같습니다. 자세한 사항 : useyourloaf.com/blog/iphone-12-screen-sizes/
2020.10.29 -
iOS14 사진 앨범 권한 이슈 "PHPhotoLibrary"
ios14의 경우 사진 권한을 앱별로, 그리고 앱안에서도 "선택한 사진, 전체사진, 거부" 등으로 제어할 수 있게 되었는데 현재 개발 테스트간 파악한 바로는 이게 기능상의 맹점이 보인다. 사진 권한을 분명히, "선택한 사진" 또는 "거부"로 하였음에도 전체 사진을 불러올수 있는 상황이다. PHPhotoLibrary 의 authorizationStatus 을 통해 아래 변수 코멘트 처럼 권한상태(PHAuthorizationStatus)를 확인할 수 있는데, PHAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application PHAuthorizationStatusRestricted, /..
2020.10.21 -
(20년09월 최신기준) androidx 프로젝트에 필요한 기본 dependencies - gradle
2020.09.16 일자 기준, stable 버전의 안드로이드 스튜디오로 최신 프로젝트를 생성시, 다음과 같이 모듈단의 build.gradle 의 의존성 버전들을 설정하면 개발 학습을 하실때 필요한 최소한의 기본적인 것들은 충돌없이 사용이 가능합니다. implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.1' implementation 'androidx.navigation:navigation-fragment:2.1.0' implementation '..
2020.09.16 -
스프링 부트 : Restful API 서버 만들기 "TDD 단위테스트 추가" - 2 of ?
TDD의 기본적 지향점, 유용함, 편리함 그런 것들은 일단 논외로 하겠습니다.. 테스트 케이스를 만드는 방법은 다음과 같이 진행합니다. (1) 스프링부트 프로젝트의 main 패키지와 같은 레벨 Depth에 test 이하 패키지 생성 (2) 프로젝트의 build.gradle 수정 (3) 인텔리제이의 설정 변경 (4) 테스트 코드를 작성하여 빌드 (1) 스프링부트 프로젝트의 main 패키지와 같은 레벨 Depth에 test 이하 패키지를 만든다. (2) 프로젝트의 build.gradle 수정 1) dependencies 내용 추가 dependencies { //아래 내용 추가 testCompile group: 'junit', name: 'junit', version: '4.12' testImplementat..
2020.07.10 -
안드로이드 스튜디오 유용한 단축키
코드 자동정렬 블럭을 지정한 뒤, 'Ctrl + Alt + L' (mac : ⌘ + option(alt) + L)
2020.06.14 -
스프링 부트 : Restful API 서버 만들기 - 1 of ?
잘 알지는 못하지만 .. 스프링 부트를 공부해서 포스팅을 남겨본다.... 기본적인 셋팅 등이나 설계를 검색하느라 아까운 시간을 허비할 수 있으니.. 스프링 부트의 경우 스프링과 비교하여 아주 심플하게 API 서버 프로젝트를 만들 수 있다. 다만.. 당연한 이야기일 수 있으나 아래와 같은 상황에 따라 프로젝트의 양이나 복잡도가 달라진다고 할 수 있다. 1. 원천 데이터의 형태 : RDBMS, NoSQL, Hadoop 등 : 어떠한 곳에서 원천 데이터에서 정보를 가져와서 클라이언트에 보내줄지를 정해야 한다. 2. 캐시 데이터 사용 여부 : 클라이언트의 정보 요청을 받을때마다 계속 원천데이터를 새롭게 읽어들일 것인지, 그렇게 계속 Read하여 실시간으로 최신정보를 리턴할 필요가 없는지 (예를 들어 1시간 주기..
2020.05.15 -
인텔리제이(intelliJ) maven project / Gradle project jar 배포
인텔리J 2020.1월 버전 기준 인텔리j에서 jar를 배포하는 것은 프로젝트 구성 방식이 maven 인지 gradle 인지에 따라 달라진다. *. jar란? JAR는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷 - https://ko.wikipedia.org/wiki/JAR_(파일_포맷) (1) [ Maven Project 에서 jar 배포 ] [ 스프링 부트 maven Project 에서 jar 배포를 할때에는 아래 작업부터 선 진행함 ] 1) pom.xml 수정 1. properties 항목 확인하여 추가 수정 *. jar 실행시 실행되는 첫 클래스 지정 :..
2020.05.11 -
아파치 카프카(Kafka) : 스프링부트 환경 구축 - 3 of 3
스프링과 스프링부트의 큰 차이점 구분 스프링 스프링부트 bean xml로 관리 자바 클래스로 관리 목적 둘다 비슷 둘다 비슷 스프링 부트로 프로젝트를 구성하면 스프링에 비해 잡다한 구성이 사라지기도 하고 (심플해짐) 카프카의 경우 MVC 패턴등의 뷰가 꼭 필요한 프로젝트 구성이 아니기에 부트를 쓰는 것이 적합하다고 본다.. 특히 서버 시작도 스프링부트 매우빠르고 가볍다. 스프링 설정의 고통을 느껴본자는 스프링부트의 매력에 빠질수밖에 없다. 그래서 카프카 프로젝트의 큰 구성은 [구성] 1. 어플리케이션 클래스 2. 카프카 설정 클래스 (이걸 따로 설정파일로 빼고 하는 방식 (별도 yml 등이나 프로퍼티 파일로 분리)이 유동적으로 대응하기 편함..) 3. 프로듀서, 컨슈머 클래스 4. 각종 클래스를 auto..
2020.05.08