Development 143

Leetcode 1년, 드디어 릿코드 티셔츠

릿코드에서는 6,000 릿코드 코인을 모으면 티셔츠를 줍니다. Leetcode 모든 분들이 이미 잘 알고 계신 leetcode.com 에서는 간편하게 코딩 문제를 풀이 해 볼 수 있습니다. 릿코드를 시작하게 된 계기는 단순했습니다. 심심할 때 마다 게임하는 기분으로 프로그래머스에서 코딩 문제풀이를 하곤 했었는데, 지금은 프로그래머스에 제법 새로운 문제가 많이 추가 되었지만 제가 릿코드를 시작한 22년 1월에는 지금처럼 문제가 많지는 않았습니다. 제 실력으로 간단히 풀 수 있는 문제는 거의 다 풀어서, 심심할 때 풀기에는 너무 어려운 문제들만 남아있습니다. 물론 코딩테스트 실력을 늘리려면 무작정 많이 푸는것 보다 분야별로 난이도별로 전략적으로 접근하는편이 좋다고는 하지만, 저는 그냥 잠깐잠깐 심심함을 느낄..

Development/DevLife 2023.02.08 (1)

iPhone 사파리 페이지를 개발자모드 열기

Intro 개발중인 토이프로젝트의 css가 아이폰으로 확인 했을 때, 의도치 않은 모습으로 보였습니다. 버튼 및 input의 텍스트 색상이 자꾸 파랑색으로 표시되는데 개발자 모드로 띄워 놓고 확인을 하고 싶었습니다. macOS 의 Safari로 띄워놓고 같은 사이즈로 줄여도 같은상황이 재현되지 않는걸 보면 iOS Safari의 특징 같았습니다. 사파리 페이지를 테스트 하다 보면 스택오버플로에서 흔히들 말하는 Safari is new IE 라는 말에 뭔가 수긍되는 경우도 종종 있긴 합니다. iPhone Safari 디버그 iPhone 에서 Web Inspector 켜기 설정 > Safari > Advanced > Web Inspector 순서로 들어가서 설정을 켜 줍니다. 이후 이제 맥북에서 Safari를..

[Java] Counting Sort 밤하늘의 Perl

Intro 알고리즘 문제를 풀 때 매우 많은 상황에서 주어진 데이터를 정렬해야 할 경우가 생깁니다. 기본적으로 길이 N의 배열에서 특정 수를 찾는다면, 일반적인 탐색으로는 N번의 비교가 필요하지만, 정렬이 된 데이터라면 log(N) 번의 비교만에 찾아 낼 수 있는 강력한 binary Search를 사용 할 수 있습니다. 프로그래밍을 처음 공부하거나 자료구조를 공부 할 때 기본적인 정렬 알고리즘을 여러가지 배우게 되는데요. 흔히 기본적으로 접하게 되는 정렬 알고리즘을 살펴 보면.. O(n²)인 정렬 알고리즘 버블 정렬 선택 정렬 삽입 정렬 O(n log n)인 정렬 알고리즘 병합 정렬 힙 정렬 퀵 정렬 정도가 있습니다. 자바에서 정렬의 경우에는 기본적으로 DualPivotQuicksort로 구현이 되어 있..

[일간에러] Different lower_case_table_names settings for server ('2') and data dictionary ('0').

문제 신년을 맞아 처음으로 올리는 일간 에러. 토요일 아침부터 참으로 통곡이 절로 나는 에러를 메시지를 맞이해 정말 기쁘다. 문제 상황은 간단한데, 기존에 토이프로젝트로 운영하던 서버의 데이터베이스를 복제하는 과정에서 위의 에러가 발생했다. 지금부터 에러가 발생하게 된 경위를 간단하게 브리핑 해 보겠다. 상황 기존에 토이프로젝트로 진행하던 프로젝트의 데이터베이스가, 운영서버의 DB를 개발환경에서도 바로 붙어서 테스트 및 반영까지 하던 상황. 지금까지는 개발서버나 운영서버나 어차피 개발환경이라는게 마찬가지였지만 모두 가족들이긴 해도 활발이 사용해주는 사용자들도 있고 거기에 사용자들이 사용하며 쌓은 데이터베이스를 나도 소중히 다루어야한다는 책임감이 생기며 개발환경과의 분리가 필요하다고 생각이 듬. 처음에 D..

[IntelliJ IDEA] 파일 생성시 라이센스 정보 자동으로 입력하기

Intro 정책상 모든 코드에 라이센스 정보를 입력 해야 하는데, 이게 여간 귀찮은 일이 아닙니다. 심지어 종종 까먹고 빼먹는 일도 있기 때문에 한번씩 모든 코드를 검사해서 일괄적으로 등록 하곤 했었는데 아에 파일 생성시 자동으로 입력 되도록 등록을 해 보려고 합니다. How to 다행히도, 인텔리제이에서 제공하는 File and Code Template 기능을 활용 하면 어렵지 않게 설정이 가능합니다. Setting > Editor > File and Code Template 로 들어갑니다. 그러면 위와 같은 화면이 나오는데, 가장 먼저 상단의 Scheme을 선택해서 File template이 적용될 스코프를 선택 합니다. Default: 전체 어플리케이션에 설정합니다. 현재 사용하는 인텔리제이를 통해..

무료 SSL 인증서 발급받아 HTTPS 적용하기

Intro 보통 토이프로젝트를 개발 하면 사람마다 다르겠지만 보통은 아래와 같은 순서로 조금씩 발전하게 됩니다. 로컬에 프로젝트를 띄워봅니다. 가장 기본적인 첫 단계 입니다. 각자의 컴퓨터에서 친구들과 같이 개발하기 위해 외부 DB를 연동 합니다. AWS RDS가 가장 쉽지만 잘못하면 비용이 무지막지하게 청구 될 수 있으니 보통 안쓰는 컴퓨터를 서버로 사용하곤 합니다만 방화벽 및 포트포워딩과의 전쟁이 처음 펼쳐집니다. 2단계 치고는 꽤 매콤한 편 입니다. 개발한 프로젝트를 계속 띄워 놓고 싶습니다. 어디서든 접근할 수 있었으면 해서 띄워둡니다. DB서버 띄워놓는 것 처럼 안쓰는 윈도우 PC에 IDE나 외장 톰캣 혹은 스프링 부트를 jar 파일로 바로 띄워놓고 24시간 컴퓨터를 켜 둡니다. 2단계에서 방화..

Development/DevOps 2022.12.14

Cannot find a (Map) Key deserializer for type 해결

문제 Cannot find a (Map) Key deserializer for type [simple type, com.example.GroupView] Map의 키를 단순 String이 아닌 클래스로 했더니 Jackson의 역직렬화 중 에러 발생 키로 사용하는 코드는 아래와 같이 간단한 DTO 객체 public class GroupView { public GroupView(String uuid, String name, String alias) { this.uuid = uuid; this.name = name; this.alias = alias; } private final String uuid; private final String name; private final String alias; } 원인 ..

[인텔리제이] 한글이 들어간 파일 모두 찾기

Intro 프로젝트에서 국제화 작업을 진행이 대부분 마무리되어, 이제는 모든 뷰단에서 완전하게 하드코딩된 한글 메시지가 제거가 되었는지 확인이 필요 했습니다. 눈에 보이는 페이지를 하나 씩 일일이 찾아서 변경을 했지만, 거의 완료가 되고 나서도 특정 이벤트에만 등장하는 숨겨진 텍스트들이 꽤나 있었습니다. 이때는 정규식 표현을 활용하여 손쉽게 모든 파일에서 한글이 입력된 부분만 찾아낼 수 있습니다. 한글 찾기 파일에서 찾기 Shift 키를 연속으로 두 번 누르고 Find in Files 를 검색 하시면, 단축키를 찾아 낼 수 있습니다. Linux / Windows 에서는 Ctrl+Shift+F 키 이며, Mac 에서는 Ctrl 키 대신 커맨드 키가 들어갑니다. 해당 단축키를 입력 해 보면 위에 보이는 것과..

[도커 방화벽 설정] 엘라스틱서치 특정 IP 클라이언트 접속만 허용하기

Intro 국비학원 최종 프로젝트때 잘 알지도 못하면서 검색 엔진을 도입 했었습니다. 물론 지금도 검색엔진에 대해 잘 모르다보니, 회사에서 진행중인 프로젝트에서 검색엔진을 활용하는 기능을 추가 할때면 SolrJ API를 이리저리 뒤져가며 낑낑대며 간신히 병목이 생기지 않을 정도만 하고 있습니다. 잘 알지도 못하는 검색엔진 도입의 대가는 실로 커서, 장점이라면 그때 당시 도와줄 사람이 없어 처음으로 공식 문서들을 뒤져가며 스스로 무언가를 바닥부터 만들어 내며 맨땅에서도 뿌리를 내릴 수 있는 야생성을 기르고 어떻게든 하면 된다는 자신감을 얻었습니다. 반면 단점도 만만치 않은데 일단 국비학원을 졸업한지 1년 4개월쯤 지난 지금도 그때 당시의 프로젝트를 여전히 띄워 두고 있습니다. 처음엔 집에 남는 노트북으로 ..

Development/DevOps 2022.10.29

부트스트랩 기본 폰트 --bs-body-font-family 변경하기

Intro 부트스트랩을 사용 하고 있는데, 전체적으로 기본 폰트를 변경 하려고 하니 --bs-body-font-family가 적용 되어 있어서 변경하는데 까다로운 상황이 있었습니다. 물론 css를 덮어 쓰며 !important; 를 붙이는 방법이 있기는 하지만 애초에 important 는 css 작성 시 권장되지 않는 방법이기도 하고, 그렇게 한번 해 버리면 하위 요소들의 세부적인 폰트 설정이 어려워집니다. 이 문제 상황을 해결 해 보도록 하겠습니다. bootstrap.min.css 인 경우와 scss 인 경우 모두 해결 방법을 작성 해 두었습니다. 문제상황 main.ts import { createApp } from "vue"; import { createPinia } from "pinia"; impo..

[iRods] 데이터 오브젝트가 포함된 리소스 삭제하기 CAT_RESOURCE_NOT_EMPTY

iRods Resource 관련 명령어 iadmin 명령어를 사용하기 위해서는 iRods 호스트 (혹은 컨테이너) 에 접근해 iinit 을 먼저 실시 해 주어야 합니다. 모든 iadmin 명령은 한번의 iadmin 후에 iadmin> 상태에서 입력 가능. 보다 자세한 iRods 명령어는 https://docs.irods.org/ 를 참고. mkresc 리소스 생성. Valut 경로는 반드시 마운트가 이루어져 있어야 합니다. 사용방법 iadmin mkresc 이름 타입 [호스트:Path] [ContextString] 예시 # compound 부모 리소스 생성 iadmin mkresc compex compound '' auto_repl=on # replication 부모 리소스 생성 iadmi..

[Java Mail] Could not convert socket to TLS; 문제 해결

문제 서버에서 javax email을 활용해 구글 이메일을 전송 할 때 아래와 같은 에러가 발생 했습니다. org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Could not convert socket to TLS; nested exception is: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate). Failed messages: javax.mail.MessagingE..

BorgBackup 을 이용한 파일 백업

BorgBackup BorgBackup(이하 Borg)은 중복을 제거해주는 오픈소스 백업 프로그램 입니다 Borg의 기본 목표는 효율적이고 안전한 데이터 백업의 제공인데요, 데이터 중복 제거 기술을 활용해 Borg가 오직 변경된 데이터만 저장하도록 하고 있기 때문에 데일리 백업에 아주 적합하다고 합니다. 주요 특징 중복제거로 인한 효율적인 저장 공간 사용 각각의 파일을 다양한 청크로 쪼개고, 이전에 추가된 적이 없는 청크만이 리포지터리에 추가됩니다. 청크는 id hash 값이 같으면 중복으로 간주되는데, id hash를 에는 (hmac-)sha256 와 같은 암호학적으로 강력한 hash 나 MAC 기능이 사용된다고 합니다. 빠른 백업속도 데이터 암호화 데이터 압축: 모든 데이터는 아래의 다양한 압축 옵션..

Development/DevOps 2022.10.04

[Git] 특정 코드 변경 사항 검색하기

Intro Pebble Template 에는 Macro라는 기능이 있습니다. 특정 콘텐츠 블록을 재 사용 가능한 함수처럼 만들어 주는 건데, 이전에 코드를 수정하다 보니 macro를 통째로 날려버렸는지 사용하는 부분만 남아있고 선언된 부분이 없어서 코드가 깨져 있는 부분을 발견했습니다. facet() 이라는 이름의 매크로인데, 어디에 선언되어 있었는지를 정확히 알지 못해서 커밋 히스토리를 찾아내는데 어려움을 겪고 있었습니다. Git 로그에서 파일 변경 내용 중 특정 키워드를 검색하는 방법에 대해서 알아보겠습니다. Git grep 단순 git grep 을 활용하면 해당 검색 조건이 포함된 파일들을 찾아 줍니다. 예를 들어 아래와 같이 입력 하면 git grep shane shane 이라는 텍스트가 들어간 ..

Development/Git 2022.09.15

[인프콘 2022후기] 어느 날 고민 많은 주니어 개발자가 찾아왔다

전체적인 INFCON2022에 대한 후기는 INFCON 2022 후기 글을 참고 해 주세요. 개인 코멘트 사실상 이 컨퍼런스를 기다리며 가장 설렜던 영한님의 발표입니다. 저는 영한님의 인프런 강의를 단 하나도 빠지지 않고 전부 들었을 만큼 스프링과 JPA를 학습하는데 절대적으로 많은 도움을 받았습니다. 개발바닥에서의 시골 청년 개발왕 되다 시리즈를 통해 전혀 생각할 수도 없었던 지난 이야기도 들을 수 있었고 매번 강의 마지막의 다음으로.. 세션을 통해서도 좋은 이야기를 들을 기회가 몇번씩 있었습니다. 강의평이나 질문 답변의 댓글들을 보면서도 선한 영향력을 본받고 싶다는 생각을 참 많이 했는데 그 이야기를 직접 들을 수 있는 기회였고 정말 좋았습니다. 나의 개발자 커리어 이야기 어릴적 게임 폐인 -> 게임..

Development/DevLife 2022.08.27