분류 전체보기 426

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: } 각각의 셀 타입에 따라서 적절한 스트링으로 변환 하..

jQuery AJAX대신 XHR로 파일 다운로드하기

Intro a 링크를 통한 파일 다운로드를 제공 하고 있었는데, 개선이 필요했습니다. 전체 데이터를 poi를 활용해 엑셀 파일을 생성 한 뒤에 반출을 해 주는 과정인데, 데이터가 클 수록 파일을 작성하는데 워낙 시간이 오래 걸리다보니 기다리는동안 사용자 경험이 너무 좋지 않았습니다. 그래서 파일 다운로드 과정을 AJAX를 이용해 비동기로 요청하고, 요청을 기다리는 동안 waitMe 를 이용해 로딩바를 보여주는 식으로 개선을 하기로 했습니다. https://github.com/vadimsva/waitMe AJAX 이를 위해 jQuery AJAX를 활용해 코드를 구현 해 보았습니다. $('#export').on('click', function () { var wait = $(th..

Programming/javascrlpt 2022.08.23 (3)

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

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

Armeria 튜토리얼 따라해보기

Intro Build a reactive microservice at your pace: Armeria는 아주 작고 단순한 형태로부터 시작해 점차 서비스를 키울 수 있게 해줍니다. your go-to microservice framework for any situation: 어떤 상황에서도 마이크로소프트를 만들 수 있는 프레임워크 입니다. gRPC, Thrift, GraphQL 등의 프로토콜도 지원합니다. 최근 학습을 하다보면 비동기와 논블로킹이라는 키워드가 참 많이 보입니다. 부끄럽지만 저는 항상 Java로 동기식 서버만을 작성해와서 잘 모릅니다. 4개월 쯤 전 프로젝트의 스프링부트 버전을 1.x -> 2.x 으로 마이그레이션 하기 위해 그 차이를 학습중에 스프링 5의 WebFlux 라는게 눈에 들어왔..

Programming/Java 2022.08.20

[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

[MacOS] M1 맥북 도커로 ORACLE DB 실행하기

Intro M1 맥북을 구입 한 이후로 약 1년 반동안, 오라클 데이터베이스를 띄우기 위해 참 많은 노력을 했습니다. 원래 MacOS를 Oracle이 정식 지원을 하진 않지만, 그나마도 이전의 맥북에서 사용하던 방법들도 Apple Silicon 에서는 먹히지가 않았습니다. 아키텍처가 바꼈거든요. 많은 고민과 시도 끝에 결국 오라클 클라우드에 DB를 띄워놓고 사용하는 방법 으로 해결을 해 왔는데요, 난이도가 높은건 둘째 치더라도 인터넷이 안되는 환경에서는 이용할 수 없었습니다. 인터넷이 안되면 사실 개발을 못하는게 맞지않나..?! 하지만 이제는 더이상 그럴 필요가 없어졌습니다. 오픈 소스 컨테이너 런타임인 Colima를 사용해 oci-oracle-xe 이미지를 x86/64 환경으로 띄운다면 M1 맥북에서 ..

IT Computer/Mac 2022.08.02 (11)

MacOS 에서 Windows11 설치 USB 만들기

Intro 집에 새로운 노트북이 생겼습니다. 사실 저랑 와이프는 둘다 맥북을 사용하고 있고, 회사에서는 리눅스 (우분투) 환경에서 개발을 하고 있다 보니, 일년에 한번정도 있을 법한 아주 가끔씩 윈도우가 필요할 때는 제법 곤란한 상황에 놓이곤 했습니다. 예전에는 집에 남던 노트북 하나가 있었지만, 약 1년 전부터 우분투 서버를 설치해두고 홈 서버로 운영을 하고있다보니 어쩌다 저희 집은 Windows Free Zone 이 되어 있었습니다. 새로 생긴 노트북에 또 우분투를 올려서 서브 컴퓨터로 쓸지, 우분투 서버를 올려서 여분의 서버로 쓸지 고민했는데 그러기에는 새로 온 컴퓨터의 성능이 너무 좋기 때문에 일단 윈도우를 올려 사용 해 보기로 했습니다. 예전에는 항상 윈도우 설치하는 USB도 필통에 넣고 다녔었..

IT Computer/Mac 2022.07.27

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

[POSTGRES] 전체 테이블, 컬럼 정보 조회

Intro 여러가지 산출물 작업을 해야 하는데, 데이터베이스에 대한 내용들은 이미 워낙 방대하기 때문에 도저히 손으로 작업 할 엄두가 나지 않았습니다. 필요에 의해 쿼리를 작성 했으나 추후 또 필요할 경우가 생겼을 때 시간을 절약 하기 위해, 또한 비슷한 고민을 하고 있는 분들에게 도움이 되었으면 하는 마음에 글로 작성해 남겨두려 합니다. SQL 제가 산출물 작업 하면서 필요한 내용들 위주로 쿼리를 작성 하였기 때문에 필요한 자료가 조금씩 다를 경우에는 일단 실행 해본 후에 쿼리를 약간씩 수정해서 사용 하시면 됩니다. 전체 테이블 주석과 실제 테이블명 조회 테이블에 주석을 달아놓지 않았다면 NULL로 표기됩니다. 평소에 주석을 꼭 달아두어야 나중에 서류 작업 할 때 편합니다. 예시를 들기 위해 엉뚱한 D..

Data/PostgreSQL 2022.07.26

[Java] Optional 올바르게 사용하기

Intro 자바가 8버전으로 넘어오며 추가된 기능들이 굉장히 많이 있습니다. 보통 가장 먼저 언급되는 Lamdba와 Stream API 뿐만 아니라 조금의 차이는 있지만 Joda-Time을 그대로 가져온듯한 날짜와 시간 API, 인터페이스에 추가된 Default 메서드와 static 메서드 등 지금까지 이 기능들 없이 어떻게 코드를 짰을까 싶은 요소들이 굉장히 많습니다. 그중에서도 둘째로 치면 서러워 할 클래스가 있으니 바로 Optional 입니다. Optional java.util.Optional.java 자바 아키텍트인 Brian Goetz는 결과 값이 없음을 명확하게 표현 하려는 의도로 Optional을 추가했다고 합니다. 자바8 이전까지는 null이 그 역할을 해 왔지만, null을 사용할 경우에..

Programming/Java 2022.07.21

[Java] switch 문이 if-else 보다 효율적인 이유

Intro 코드를 작성하다 보면 switch 문으로 작성할지, 혹은 if-else 를 사용할 지 고민될때가 자주 있습니다. 개인적으로는 보통 elseif 가 두개이상 붙게되는 시점부터는 보통 코드의 가독성이나 문맥에 따라 switch 문을 사용 하려 하고 있습니다. if.java void function(String args) { if ("a".equals(args)) { // A logic } else if ("b".equals(args)) { // B logic } else { // C logic } } switch.java void function(String args) { switch (args) { case "a": // A logic break; case "b": // B logic break..

Programming/Java 2022.07.09