[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 단축키` : ..
[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 예제(주사위 게임)코딩을 처음 배울 때 배웠을만한 주사위 게임..
[Java] replaceAll() - 자바 특정 문자 변경 함수
·
JAVA
replaceAll() 문법String newStr = originStr.replaceAll(String regex, String replacement);`regex` : 변경하고 싶은 문자열에 해당하는 정규 표현식(혹은 그냥 문자열)을 넣어주면 된다.`replacement` : 대체할 문자열을 입력하면 된다. `originStr` 문자열에서 `regex`와 일치하는 부분을 모두 `replacement`로 바꿔준다.replaceAll() 예시public class ReplaceAllExample{ public static void main(String[] args){ String str = "나랑드 사이다 우리는 이제 그런 사이다"; str = str.replaceAll("사이다", ..
[Spring Boot 사이드 프로젝트] 4. 정적 리소스(html, css, js) 바로 반영 설정(spring boot devtools)
·
사이드 프로젝트/로또명당
웹디자인을 흔히 1px의 전쟁이라고들 한다.미적인 요소에 있어서 모든 사람은 인간의 영역을 뛰어넘은 매의 눈을 가지기 마련이며, 매우 뛰어난 직감으로 1px의 오차까지 다 잡아내기 때문이다. 디자인은 웹사이트의 첫인상이다. 디자인이 구린 웹사이트는 아무리 기능이 뛰어나도 예선탈락, 서류광탈 할 가능성이 높아지기 때문에 디자인은 정말 중요하다! 물론 디자이너가 아니라면 한계가 있겠지만 본인의 눈에 보이는 구린 요소 정도는 잡고 가야 할 것이다. 그 과정에서 굉장히 많은 수정이 발생하게 되는데, 이때마다 서버를 껐다 켰다 했다가는 소중한 시간이 서버 재기동에 모두 사용되어 버릴 것이다. 소중한 시간을 절약할 수 있도록 해주는 편리한 기능을 잘 사용해보도록 하자. 바로 `Spring boot devtools`..
그레이트현