분류 전체보기 425

[Zsh] Oh My Zsh 자동완성 플러그인 추가 및 단축키 변경하기

Intro Shell Unix Shell은 MacOS나 리눅스 같은 유닉스 계열의 OS에서 Command Line user Interface 를 제공해주는 Command Line Interpreter 입니다. 운영체제에서 쉘 스크립트를 사용하여 시스템의 실행을 제어 하기 위해 사용하는데요. 보통은 내장 Terminal 이나 iTerm 같은 터미널 에뮬레이터를 사용하지만, 보통 서버에서는 Secure Shell (SSH) 을 통해 이루어지기도 합니다. Shell은 대표적으로 Bourne Shell(sh), Bourne Again Shell(bash), C Shell(csh), Z Shell(zsh) 등이 있는데요, 그중 zsh는 sh 를 기반으로 Bash, ksh, tcsh 등의 기능을 포함하여 여러가지 ..

IT Computer/Mac 2022.09.29

[Kotlin] 코틀린에서 Mockito 사용시 final class 문제 해결

Intro 코틀린으로 코드를 작성하다보면 간혹가다가, 자바에서는 별 문제 없던게 의도대로 동작하지 않을 때가 있습니다. 이번에는 테스트 코드를 작성하다가 스터빙을 하려고 하는데 문제가 있었는데요, 아래와같이 테스트를 하려고 했습니다. // When val memberContext = Mockito.mock(MemberContext::class.java) Mockito.`when`(memberContext.member).thenReturn(member) quizService.edit(memberContext, quiz.id!!, quizEditDto) // Then val findById = quizService.findById(quiz.id!!) assertThat(findById.description)..

Programming/Kotlin 2022.09.25

[Kotlin] 코틀린에서 queryDSL 설정하기

Intro 자바에서도 QClass 생성은 처음 하면 꽤나 당황스러운 과정인데, 코틀린은 또 과정이 달랐기에 결과물을 기록으로 남기고자 합니다. 2022년 9월 19일 기준의 최신 라이브러리들에서 잘 작동하고 있는 방법 입니다. 설정 build.gradle.kts plugins { ... kotlin("kapt") version "1.7.10" } dependencies { ... implementation("com.querydsl:querydsl-jpa:5.0.0") kapt("com.querydsl:querydsl-apt:5.0.0:jpa") } 소스코드는 딱 위의 변경 사항만 있었습니다. 의존성 변경 후에 Shift + Command + I 키를 입력 해서 Load Gradle Changes를 해 주..

Programming/Kotlin 2022.09.19

[Spring] @PageableDefault 혹은 @SortDefault 여러 컬럼으로 정렬하기

Intro 컨트롤러를 통해 페이지 정보를 받고, 서비스 레이어 및 Persistence Layer를 통해 여러개의 데이터를 조회 할 때 종종 @Pageable Default 어노테이션을 사용합니다. 예를 들어 컨트롤러에서 @PageDefault를 아래와 같이 설정 하면 Kotlin @GetMapping fun findAll(@PageableDefault(sort = ["id"]) pageable: Pageable): ApiResponse { return ApiResponse.ok(quizService.findAll(pageable).map { quiz -> QuizDto.of(quiz) }) } Java @GetMapping public ApiResponse findAll(@PageableDefault(..

[MacOS] The application can't be opened. 게이트키퍼 해제

Intro 인터넷에서 다운로드 받은 어플리케이션을 설치 할 때 마다 자주 겪는 문제가 있습니다. 바로 The application can't be opened 인데요. 보통은 간단하게 해결 되지만 그렇지 않은 경우도 있기 때문에 한번 다루어 볼 까 합니다. 보통은 동시에 위와 같은 경고가 뜨게 되는데요. Apple이 악의적인 프로그램인지를 체크 할 수가 없으니 맥북이 스스로 방어를 해 내는 것 입니다. 일반적인 소프트웨어들을 다운받아서 사용할 때는 왠만해서는 볼 일이 없지만, 개발자용 베타 프로그램등을 사용 하다 보면 종종 볼 수 있습니다. 저도 이번에 사용하던 Mac Mouse Fix 가 새로운 3.0.0 BETA 버전이 나왔길래 테스트 해 보려고 하다보니 해당 문제에 봉착 했습니다. 해결 Op..

IT Computer/Mac 2022.09.17

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

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

Development/Git 2022.09.15

[Spring] mockMvc 스프링 시큐리티와 연동하기. @AuthenticationPrincipal 파라미터 전달 해결

Intro mockMvc를 통해 api 테스트를 진행 하는데, 스프링 시큐리티를 연동 하기 전에는 괜찮았는데 연동을 한 후에 테스트가 제법 까다로웠습니다. 일단 단순 로그인 여부만 체크하는 부분은 간단하게 넘어갈 수 있었는데, @AuthenticationPrincipal 어노테이션을 걸고 파라미터로 컨트롤러에서 로그인 정보를 받아오는 부분까지 테스트 하려니 쉽지 않았습니다. 제가 코틀린으로 토이 프로젝트를 하고 있다보니 코드는 코틀린이 대다수지만 사실 자바와 차이가 없기 때문에 자바로 진행하고 계신 분들도 같은 맥락으로 문제 해결을 하실 수 있으며, 마지막에는 자바 코드도 조금 첨부 해 두었습니다. MockMvc NoSecurity 일단 처음으로, 따로 시큐리티 인증 과정이 없는 api의 mockMvc ..

[Kotlin] 코틀린에서 Validation 이 안될때 해결방법

문제 create를 위한 DTO를 생성 해서 자바에서 사용했던 것 처럼 validation을 해 보려 했는데 밸리데이션이 전혀 먹히지가 않았습니다. QuizCreateDto.kt data class QuizCreateDto( @NotBlank val description: String, @NotBlank val answer: String, @NotBlank val explanation: String, val examples: Array ) { override fun equals(other: Any?): Boolean { if (this === other) return true if (other !is QuizCreateDto) return false if (description != other.descr..

Programming/Kotlin 2022.09.07

[Spring Boot JPA] P6Spy 활용해 쿼리 로그 확인하기

Intro 스프링부트와 JPA로 프로젝트를 진행하다 보면 실제 쿼리가 어떻게 나갈지 눈으로 확인을 하고 싶을 때가 참 많습니다. JPA가 참 편하긴 한데 개발자가 직접 쿼리를 작성하지 않았다 보니 실제로 어떤 쿼리가 나갈지는 눈으로 확인 하기 전까지는 정확히 알기 힘들고, 가끔씩은 의외의 쿼리가 나가는걸 보고 놀라기도 합니다. 제 기준에 쿼리를 꼭 확인해야 할 상황이 크게 두가지 정도가 있었는데요 의도한대로 작동하지 않아서 쿼리가 의심될 때 N+1 문제가 발생하고 있는지 확인이 필요할 때 그러다보니 항상 테스트 설정에서는 쿼리가 전부 출력되게 설정 해두고 테스트 코드들을 실행 시키고 있습니다. 확실히 쿼리가 눈으로 확인이 되면 마음의 안정이 좀 오는 것 같아요. 쿼리 로그를 확인하는 방법을 단계별로 개선..

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

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

Development/DevLife 2022.08.27

[인프콘 2022후기] 10만 connection 그까이꺼, Armeria 서버 한 대면 끝!

전체적인 INFCON2022에 대한 후기는 INFCON 2022 후기 글을 참고 해 주세요. 개인 코멘트 얼마전에 Armeria 튜토리얼 따라해보기 를 해보면서 까지 준비 할 만큼 기대를 많이 했습니다. 심지어 40명 선착순 신청으로만 참여 할 수 있는 핸드온 세션 이기 때문에 목요일 오후 4시 30분 땡 되자 마자 바로 신청을 했고 그 덕에 참여 할 수 있었습니다. 매번 동기 서버만 작성 해 보았기에 비동기 서버가 어떤 원리로 동작하는지 그리고 어떻게 구현하는지 궁금 했는데 오랜만에 화면을 보며 코드를 따라 치는 경험도 할 수 있었고, 영상으로만 보던 Armeria 팀원분들을 뵐 수 있어 좋았습니다. 정말 재밌었고 참여하길 잘했단 생각이 듭니다. 발표는 민우님이 해 주셨고, 익훈님과 한남님도 함께 자리..

Development/DevLife 2022.08.27

[인프콘 2022후기] 나 홀로 시골 개발자의 성장 전략

전체적인 INFCON2022에 대한 후기는 INFCON 2022 후기 글을 참고 해 주세요. 개인 코멘트 얄팍한 코딩사전 채널을 운영하는 고현민님의 발표 입니다. 개인적으로 현민님의 영상들을 너무 좋아하고, 특히 최근에도 graphQL 영상을 재밌게 봤습니다. 중간에 오타가 있는 부분이 있어 이메일을 드리니 바로 수정도 해 주시고 피드백에 대한 대응도 너무 좋으셔서 인상적이었던 기억이 있습니다. 머나먼 오지의 개발자 자기소개 : 프리랜서, 지식공유자. 요즘에는 제법 큰 다음 강의를 준비 중 포항의 스타트업에서 커리어 시작, 주변에 동종업계 종사자도 없고 컨퍼런스에 참여할 기회도 없고 사수도 없는 고독한 나홀로 개발자. Struts 1 버전을 쓰는 구식 개발 스택과 구식 업무방식. 개발자 문화의 부재로 인..

Development/DevLife 2022.08.27

[인프콘 2022후기] 인프런 아키텍처의 과거와 현재, 그리고 미래

전체적인 INFCON2022에 대한 후기는 INFCON 2022 후기 글을 참고 해 주세요. 개인 코멘트 인프랩의 CTO를 맡고 계신 향로님의 발표 입니다. 오프닝에서는 인프랩의 CTO 로서 스피킹을 했다면, 이번에는 한명의 개발자로서 말씀을 해 주셨는데요, 지난 몇 년간 인프랩이 성장해나가는 과정 속에서 쌓였던 기술 부채와 고민들, 그리고 그걸 해결해 나가는 과정에 대해 재밌게 이야기를 풀어 주셨습니다. 우아한형제들에서 자바,스프링으로 개발을 하다가 Node.js 로 개발을 하고 있는 인프랩에 CTO로 이직을 했다 보니 주변에서 JVM 기반으로 싹 갈아 엎을 거 아니냐는 이야기를 정말 많이 들으셨을 텐데 지금껏 정말 많은 고민이 있었고, 지금도 많은 고민을 해 나가는 과정이라는 걸 느낄 수 있었습니다...

Development/DevLife 2022.08.27

[인프콘 2022후기] 실리콘밸리로 떠나는 비전공자 개발자의 지난 4년 회고

전체적인 INFCON2022에 대한 후기는 INFCON 2022 후기 글을 참고 해 주세요. 개인 코멘트 체대 출신 개발자의 회고라는 글로 잘 알려진 Pixelic 한정수님의 발표 입니다. 대학에서 체육을 전공하고, 무역회사 경험을 통해 온라인 무역회사도 창업 해 보고 그 과정에서 개발에 흥미를 느껴 국비지원 교육을 받으며 개발자의 길을 걷게 된 이야기에 대해 해 주셨습니다. 개발자가 되기까지의 과정에 대해서는 정수님의 인프런 강의 혹은 블로그에서 확인 하실 수 있습니다. 이번 발표에서는 개발자가 된 후 4년의 이야기에 대해서 말씀 해 주셨는데요 사실 처음 취업을 할 때 부터 누군가에게 이런 이야기를 듣기를 간절히 원해 왔지만 좀처럼 기회가 없었습니다. 처음 취업할때는 주변에 개발자는 없고 이런 이야기는..

Development/DevLife 2022.08.27

INFCON 2022후기 [인프콘]

Intro 기다리고 기다리던 인프콘을 다녀왔습니다. 컨퍼런스 참여를 위해 연차를 내야 했고, 제법은 먼 거리를 다녀 왔지만 너무나도 즐거운 경험이었습니다. 참석을 원했음도 추첨 인원의 한계로 인해서 참여할 수 없었던 많은 분들이 있는걸 알기에 제가 참여했던 세션들에 대해 참여 후기를 남겨보려 합니다. 함께 참여했던 분들은 그 여운을 만끽할 수 있고, 참석하지 못했던 분들도 현장을 간접적으로나마 경험할 수 있는 글이 되었으면 합니다. 찾아가는길 대전에서 가다 보니 SRT 열차를 이용했습니다. 수서역이 COEX 에서 멀지 않아 시간은 오래 걸리지 않습니다. 인프콘 2022는 강남구 삼성동 COEX 그랜드볼룸에서 열렸습니다. 사실 지방에 살다보니 잘 몰라서.. 마냥 코엑스에 가면 쉽게 찾겠거니 했었는데, 막상..

Development/DevLife 2022.08.27