[Java] IPinfo API 사용해 IP 위치 조회 기능 구현하기
·
JAVA
1. 들어가며국가별, 지역별 방문자 통계 기능을 만들기 위해 이것저것을 조사하던 중 `GeoLite2`를 사용해 테스트를 진행한 결과 무료로 사용하기 좋으나 위치가 정확하지 않고 업데이트가 번거롭다는 진실을 마주했다. GeoLite2를 테스트해 본 이전 글https://greathyeon.tistory.com/56 [Java] GeoLite2 사용해 IP 위치 조회 기능 구현하기1. 들어가며방문자 통계 기능을 만들어야 하는데 국가별, 지역별 접속자 통계를 구현해 달라는 요청이 있었다.무료인 것을 찾다 보니 GeoLite2라는 게 나오길래 한 번 테스트 삼아 이용해 봤다.GeoLigreathyeon.tistory.com다른 대안으로 IPinfo api를 사용해 IP위치 조회 기능을 구현해 보자. 2. 준비..
[Java] GeoLite2 사용해 IP 위치 조회 기능 구현하기
·
JAVA
1. 들어가며방문자 통계 기능을 만들어야 하는데 국가별, 지역별 접속자 통계를 구현해 달라는 요청이 있었다.무료인 것을 찾다 보니 GeoLite2라는 게 나오길래 한 번 테스트 삼아 이용해 봤다.GeoLite2 Free API와 DB파일을 다운 받아서 사용하는 2가지 방법을 발견했다.api의 경우 하루 1000건의 제한이 있지만, DB파일은 무제한으로 이용이 가능하다고 해서 DB파일을 이용하는 방법을 사용해 봤다.스프링 부트 환경에서 테스트를 진행했다. 2. MaxMind 접속 후 mmdb 파일 다운로드귀찮지만 회원가입이 필요하다. 까다로운 것이 없으니 필요하다면 가입해야겠다.가입 후 로그인하게 되면 위 스크린샷의 화면이 보이게 되는데 왼쪽메뉴의 GeoIP2 / GeoLite2 하단의 Download F..
[Spring Boot] 쿠키와 Thymeleaf를 사용한 다국어 처리
·
Spring
1. 들어가며회사에서 다국어 처리 기능을 구현했습니다.회사에서 사용한 `스프링 레거시 + JSP`를 그대로 정리할까 하다가 스프링 부트는 어떻게 다른지 궁금해서 `스프링 부트 + thymeleaf` 로 다국어 처리 하는 방법을 정리하며 간단한 기능을 구현해 보겠습니다. 2. LocaleConfig.javapackage greathyeon.com.springstudy.config;import org.springframework.context.MessageSource;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframewor..
[Java] 자바로 엑셀 다루기 - Apache POI 라이브러리 사용법
·
JAVA
1. Apache POI란?Apache POI(Poor Obfuscation Implementation)는 자바에서 MS Office 문서(Excel, Word, PowerPoint 등)를 읽고 쓸 수  있게 해주는 라이브러리다. 컴퓨터 앞에 앉아서 일하는 사람들중에 엑셀을 사용하지 않는 사람이 있을까?나는 어디서 일하든 엑셀을 사용하지 못하면 일의 난이도가 굉장히 상승했었다.개발자가 되면 엑셀을 사용하지 않을줄 알았지만 오히려 엑셀이라는 프로그램의 짜임새에 감탄하며 더 잘 사용하게 되었다. 특히 데이터를 다룰 때 많이 사용하게 된다. 코딩을 할 수 있다면 그런 excel을 더 효율적으로 활용할 수 있으며, excel과 관련된 기능을 만들 수도 있으니 굉장히 유용한 라이브러리라 할 수 있겠다. 2. Ap..
[Java] JVM(Java Virtual Machine)은 무엇이며 왜 좋은가?
·
JAVA
1. JVM이란?자바 공부를 시작하면 가장 먼저 왜 자바를 사용하는지를 배우게 된다.그것은 결국 자바의 장점이 무엇인가를 배운다는 것인데, 그곳에서 항상 JVM을 만나게 된다.JVM(Java Virtual Machine)을 우리말로 직역하면 자바 가상 기계 되겠다. 왜 이런 것이 필요할까?여러 이유가 있겠지만 근본적으로는 우리가 사용하는 언어를 컴퓨터가 이해할 수 없기 때문이다.컴퓨터는 0과1밖에 모르는 바보이지만 우리의 언어는 상당히 고급지고 복잡하기 때문에 서로 간의 적절한 합의가 필요한데, 그것이 바로 프로그래밍언어인 것이다. 그러면 JAVA를 작성해서 던져주면 바로 이해할 수 있느냐 하면 또 그것도 아니다.운영체제가 자바 프로그램을 바로 실행할 수 없기 때문이다.자바는 완전한 기계어가 아닌, 중간..
[Java] diamond operator is not supported 에러
·
JAVA
IntelliJ로 프로젝트를 새로 세팅하다가 오류가 발생했고, 해결과정을 기록했습니다. 1. 에러내용java: diamond operator is not supported in -source 1.5(use -source 7 or higher to enable diamond operator) 다이아몬드 연산자()가 Java 7 이상에서 지원되는데, 현재 java 1.5로 되어있으니 더 높은 버전이 필요하다는 오류였습니다. 기본값에서 변경해주지 않아 발생하는 것으로 보입니다.확인해야 할 곳이 여러곳이라 전부 확인해봐야 합니다. 2. 해결2-1 Project Structure - Project Settings - ProjectFile > Project Structure > Project `mac 단축키` : ..
SQLD 합격 후기 - 제59회(2024년11월16일)
·
자격증
24년 마지막 SQLD 시험 합격 후기를 기록하겠다. 1. 이거 왜 땀?자격증을 따고 싶었다. 불안했기 때문이다. 뭐라도 해야겠어서 이것저것 하기는 했는데, 공부한 게 티가 안 났다.공부라는 게 잠깐 한다고 해서 티가 나고 그런 게 아니라는 것을 알고는 있었지만, 나는 성취감이 느끼고 싶었다. 그래서 결과가 확실하게 남는 무언가를 하고 싶었고, 그게 자격증 취득이었다. 자격증도 종류가 참 많았는데, 당장 실무와 연관성이 있는 것을 찾다 보니 선택하게 된 것이 SQLD였다. 2. 도움이 되었나?사실 이 자격증을 따기 전에 했던 고민 중에 가장 큰 고민은 이거 따면 뭐가 좋은 거지 같은 생각이었다.기껏 시간들이고 돈 들여서 땄는데 쓸모없으면 그것만큼 허탈한 게 어디 있을까? 사실 그렇게 따기 힘든 자격증이..
[Java] Math.random()의 취약성과 시큐어 코딩
·
JAVA
현재 진행 중인 프로젝트에서 `Sparrow`를 사용해 웹 취약점 진단을 실시했다.Math.random() 사용이 지적을 받았다. 왜 Math.random()이 보안에 취약한지 정리해 보자. 1.Math.random()1.1 Math.random()의 정의`Math.random()`은 `java.lang.Math` 클래스의 정적(static) 메서드로, `0.0 이상 1.0 미만`의 범위에서 균등하게 분포된 난수를 생성하여 반환한다. 1.2 Math.random()의 특징1) 반환 타입 : `double`2) 특징 : 생성되는 값은 `균등 분포(uniform distribution)`를 따르기 때문에 모든 값이 동일한 확률로 생성된다. 1.3 예제(주사위 게임)코딩을 처음 배울 때 배웠을만한 주사위 게임..
[시큐어 코딩]innerHTML의 취약성과 XSS 공격 - 자바스크립트(Java Script)
·
JavaScript
현재 진행 중인 프로젝트에서 `Sparrow`를 사용해 웹 취약점 진단을 실시했고, `innerHTML`을 사용한 코드들이 다량 발견되어 수정 조치했다. 단순히 코드를 고치는 것에서 더 나아가 같은 실수를 반복하지 않기 위해 왜 고쳐야 했는지를 기록해보도록 하겠다. 1.innerHTML1.1 innerHTML 이란MDN에서는 `innerHTML`을 이렇게 정의한다.`Element.innerHTML`Element속성(property) `innerHTML`은 요소(element) 내에 포함된 HTML 또는 XML 마크업을 가져오거나 설정합니다. 잘 와닿지 않는다. 예시로 만든 코드를 보도록 하자.텍스트를 이용해 동적으로 테이블을 생성하는 코드이다. 1.2 innerHTML 예시 코드 (텍스트를 사용해 동적 ..
그레이트현