Development 131

[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

[인프콘 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

[POI] 엑셀의 숫자를 소수점으로 파싱하는 문제 해결하기

문제 POI 를 활용해 엑셀파일의 각 셀에 있는 값들을 자바에서 읽어 오는 과정에서 문제가 있었습니다. 기존의 코드는 아래와 같습니다. switch (cell.getCellType()) { case FORMULA: value = cell.getCellFormula(); break; case NUMERIC: value = String.valueOf(cell.getNumericCellValue()); break; case STRING: value = cell.getStringCellValue(); break; case BOOLEAN: value = String.valueOf(cell.getBooleanCellValue()); break; default: } 각각의 셀 타입에 따라서 적절한 스트링으로 변환 하..

AJAX POST 요청시 Status Code: 302 하며 /denied로 리다이렉트 시키는 문제 해결

에러 AJAX 비동기 요청으로 GET 에서는 정상적으로 작동하던 메서드가, POST로만 바꾸면 응답을 302로 보내는 문제가 있었습니다. 아무리 이것 저것 다 체크를 해 보아도 응답이 /denied로 가는 리다이렉트가 됩니다. 그래서 결국 denied(text) 라는 텍스트만 덜렁 뜨는 상황이 발생했습니다. 로그인을 한 상태임에도 스프링 시큐리티가 권한을 체크 하다가 뭔가 잘못되었나 싶어서 .permitAll() 로 변경을 해 보아도 마찬가지였습니다. 원인 스프링 시큐리티의 CSRF(Cross-Site Request Forgery) 설정 때문 입니다. 스프링 시큐리티에서는 csrf 설정이 기본적으로 enabled 되어 있기 때문에 csrf 에 대한 토큰을 받도록 명시되어 있으며 GET 요청이 아닌 요청,..

[Spring Redis] incompatible types for field 해결

문제 Redis 를 스프링 세션 저장소로 사용하며 사용자의 로그인 정보를 저장 하고 있었습니다. 그런데 저장되는 DTO 객체를 조금 수정했더니 SerializationException: Cannot deserialize 라며 에러가 발생하기 시작했습니다. 정확히 방금 변경한 필드가 에러메시지에 정확히 표기되었기 때문에 에러의 원인은 명확 했습니다. 원인 원인은 기존에 Redis에 저장되어 있던 세션 데이터와의 충돌 때문이었습니다. 세션에 이미 저장되어 있는 데이터를 어플리케이션에 불러 오며 다시 역직렬화를 시키는 과정에서, 클래스의 구조가 일치하지 않았기 때문에 에러가 발생 한 것 입니다. 해결 해결 과정이 생각보다 간단하지가 않았는데요. 아래에서 언급될 몇가지 이유가 있었습니다. 차근차근 해결을 해 보..

[IntelliJ IDEA] 메모리 설정 변경으로 Low memory 해결하기

문제 사실 인텔리제이를 사용하다보면 흔히 겪는 일인데, 힙메모리 부족으로 퍼포먼스가 느려진다는 경고가 뜰 때가 있습니다. 불과 얼마 전 까지만 해도 8GB 메모리의 M1 맥북에어를 사용 하고 있었기때문에 메모리를 많이 늘릴 생각보다는 사용중인 웹 브라우저들을 최대한 닫는 등의 방법으로 넘어 갔었는데요 얼마전 큰맘 먹고 넉넉한 메모리의 새로운 맥북을 구입 하였기 때문에 이제는 해결이 가능 해 졌습니다. 다만, 물리적으로 메모리를 늘릴 수 없는 분들이라고 해도 아래 내용을 통해 힙메모리를 변경하고 테스트 해 보셔서 더 할당 가능한 여유범위를 한번 체크 해 보세요. 힙메모리 확인 일단 인텔리제이 아이디어가 사용하고 있는 물리적인 힙 메모리의 크기를 확인 해 보도록 하겠습니다. Shift 키를 두번 누르고 me..

[Java] Unsupported class file major version 61 해결하기

문제 Unsupported class file major version 61 ArchUnit을 통한 아키텍처 테스트를 해 보려는데 Unsupported class file major version 61 에러가 발생했습니다. 원인 class file major version 61은 로드 하려고 시도하고 있는 클래스 파일이 자바 17 혹은 그 이상의 버전에서 컴파일이 되었으며, 자바 17 이상에서만 사용 될 수 있을 때 발생한다고 합니다. 사실 스프링부트 3.0 부터는 요구되는 자바 버전이 17이 될거라는 소식을 듣고, 미리 JDK 17을 사용하며 불편한 상황이 어떤게 있을 지 알아보고, 트러블슈팅이 가능하다면 해보려고 Temurin JDK 17 (AdoptOpenJDK 에서 이전됨) 을 사용하고 있었거든요..

[인프콘] INFCON 2022 를 기다리며

https://infcon.day/ 벌써 일년 2021년 8월 4일에 개발자로서 첫 직장에 출근을 시작했으니 내일이면 드디어 만 1년차 개발자가 됩니다. 1년동안 근무하며 참 많은 일이 있었지만 지금까지도 최대 관심사 중 하나는 개발자로서의 성장 입니다. 회사에서 맡고 있는 프로젝트에 진심으로 임하고, 기능 하나를 추가하더라도 너무 오버스펙으로 넣는거 아니냐는 소리를 들을 정도로 사용자를 우선으로 생각하며 항상 최선을 다하고는 있지만.. 균형있는 영양소의 섭취가 필요하듯 주어진 일 만 해서는 금새 성장에 정체기가 올거라고 생각했습니다. 정말 감사하게도 재직중인 회사에서는, 진행되는 사내 교육 프로그램은 없지만 구성원들의 성장을 적극 장려하기 위해 인프런을 통한 교육을 지원 하고 있습니다. 그 덕에 관심있..

Development/DevLife 2022.08.02

Netdata 를 활용한 시스템 모니터링

Intro https://github.com/netdata/netdata Netdata는 특별한 설정이 필요 없이 실시간 분산 모니터링을 제공해주는 오픈소스 모니터링 도구 입니다. 시스템, 하드웨어, 컨테이너, 어플리케이션들로부터 수천개의 데이터를 실시간으로 수집하며 물리/ 가상 서버 및 컨테이너, 클라우드 환경, IOT 장비등 에서 영구적으로 동작 합니다. 대부분의 Linux 배포판 뿐만 아니라 Kubernetes나 Docker 등의 컨테이너 플랫폼 및 MacOS 등에서도 sudo 권한 없이 설치 할 수 있습니다. Netdata는 아래와 같은 특징들을 가지고 있습니다. 설정이 필요없음 관리가 필요없음 최소한의 Disk I/O 및 메모리 사용. 싱글코어 1% 만의 CPU 점유 빠르고 인터렉티브 한 시각화..

Development/DevOps 2022.07.27

[JPA] No Dialect mapping for JDBC type: 1111

Intro JPA 사용 중 native 쿼리를 사용해야 할 일이 있어 nativeQuery = true 옵션을 걸고 쿼리를 작성 했습니다. 그런데 생소한 에러메시지가 나오며 UUID의 맵핑이 제대로 이루어지지 않았습니다. org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 원인 https://github.com/spring-projects/spring-data-jpa/issues/1796 이미 오래전부터 알려져있었지만 고치지 않기로 결정 된 Hibernate 이슈 라고 합니다. Hibernate 구현체에서는 addScalar를 활용 하길 추천하지만 특정 구현체에 의존하지 않고 Spring Data JPA 를 이용할 경우에는 cas..