Programming

Programming/Java

[JPA , Hibernate] Add Prefixed Table Name

JPA와 Hibernate를 사용하고 있는 개발자라면 hibernate ddl option에 의해 엔티티 클래스가 데이터베이스에 테이블로 자동으로 생성되는 것을 알고 있을 것이다. 이때 테이블명은 여러 전략에 의해 정해지는데 기본적으로는 엔티티 클래스명을 따르고 소문자에 언더바를 넣는 전략을 선택한다. @Entity public class UserHistory{ @Id @GenerateValue(strategy = GenerationType.IDENTITY) private Long id; // ..... 기타 등등 } 위와 같이 엔티티 클래스를 작성했을 때 특별한 설정이 없었다면, Hibernate는 다음과 같은 이름으로 테이블을 생성한다. CREATE TABLE user_history ( id BIGI..

Programming/Spring

[SpringBoot] Dockerizing a Spring Boot Application

스프링 부트 기반의 어플리케이션을 Docker Container에 올리는 방법을 설명해보겠다. Dockerizing이라는 말은 대상 어플리케이션을 Docker Image로 만들어 Docker에서 Container로 구동 가능한 형태를 만드는 것을 의미한다. 먼저 간단하게 Spring Boot Application을 만들어보자. File -> New Project -> Spring Initializer Next Dependencies -> Web -> Spring Web Click Next 간단하게 hello world를 리턴하는 Controller를 만들어본다. package com.tistory.johnmark.demo; import org.springframework.web.bind.annotatio..

Programming/Java

[Gradle] Gradle 에서 Launch4j Plugin 사용해서 exe 실행파일 만들기

최근 회사에서 개발한 서버 프로그램을 온 프로미스 형태로 납품하는 업무가 자주 생겼고, 기존에 jar파일로 프로그램을 빌드하고, launch4j 프로그램을 통해 직접 한 땀 한 땀 설정해서 exe 파일을 만들었던 것이 너무 불편하고 빡침이 몰려와서(갠 적으로 노가다를 싫어함..) 자동화할 방법이 없나하다가 방법을 찾아서 포스트를 올려본다. 정말 간단한 해결방법이다. 사실 예전부터 있었던 방법인데 내가 아마 늦게 알게된것 같다. 보통 Java 프로젝트를 진행하면 라이브러리 의존성 관리 및 빌드 도구로 maven 또는 gradle을 사용할 것이다. launch4j는 maven이나 gradle에서 모두 적용이 가능하다. 나는 gradle을 사용하고 있기 때문에 gradle을 이용한 방법을 소개한다. 먼저 la..

Programming/Spring

[Spring Boot] Java Servlet Filter for Logging Request Parameter

Java, Tomcat, Spring (Spring Boot) 환경에서 Client가 전송한 Request Body를 로깅하고 싶은 경우가 있다. HttpServletRequest 객체의 Stream은 한번 읽히면 Tomcat 내부적으로 다시 읽지 못하도록 보안적으로 막혀있다. 로깅을 위해 Request 객체의 Stream을 받아 Paramter들을 가지고 특정 로직을 구현하고, Controller 단으로 Requset를 넘기면, Data Biding 모듈이 데이터를 바인딩하지 못하고 has already been called for this request 라는 메시지와 함께 Exception이 난다. 이를 해결하기 위해서 대안은 HttpServletRequestWrapper 클래스를 구현하는 것이다. ..

Programming/Python

[Python-Crawling] 정부 혁신 제안 사이트 크롤링 - 1

패키지 임포트¶ In [26]: # 필요한 도구를 불러온다. # 파이썬에서 사용할 수 있는 엑셀과 유사한 데이터분석 도구 import pandas as pd # 매우 작은 브라우저로 웹사이트의 내용과 정보를 불러올 수 있습니다. import requests # request로 가져온 웹사이트의 html 태그를 파싱하는데 사용합니다. from bs4 import BeautifulSoup as bs # 랜덤숫자를 생성한다. import random import time # 대량 데이터 처리시 진행 상황을 표시합니다. from tqdm import tqdm, trange # 정규표현식 import re 제안 연월 설정¶ In [27]: year_month = 201910 페이지 번호대로 제안 목록을 가져오는 ..

Programming/Server

[ELK] AWS Elastic Load Balancer Log 분석하고 대시보드 만들기[1]

AWS에서 서비스를 운영하고 있는 사람이라면, 또는 AWS Route53에 도메인을 등록하고 Https로 서비스를 하고 있는 사이트를 연동했다면 AWS Elastic Load Balancer를 사용하고 있을 것이고, 보통 다음과 같은 구조로 아키텍처를 구상했을 것이다. 위 구조를 보면 사용자는 Route53에 등록된 도메인으로 서비스에 접근하고(예: https://웨부베벱.com ) Route53에서는 해당 도메인과 연결된 Load Balancer로 요청을 보낸다. Load Balancer에서는 다음과 같이 등록된 리스너 리스트를 보고 요청에 맞는 리스너로 요청을 보내게 된다(참고: 리스너 등록 시 EC2 인스턴스의 Elastic IP를 같이 등록하기 때문에 요청을 전달할 인스턴스를 구분할 수 있다). ..

Programming/Python

[Python-Basic] Class Data Type - 4(Self)

class Foo: def func1(): print("function 1 is called") def func2(self): print(id(self)) print("function 2 is called") def func3(self): print(self.__str__) """ self is instance of class """ foo = Foo() foo.func2() print(id(foo)) Foo.func1() f3 = Foo() print(f3) print(id(f3)) print(Foo.func3(f3)) 실행결과 $ py self.py 3318160 function 2 is called 3318160 function 1 is called 3318424 None

Programming/Python

[Python-Basic] Class Data Type - 4(Namespace)

class Stock: market = "kospi" if(__name__ == '__main__'): # When class is define namespace is generated as class name # All of method and variable info is save in namespace as dictionary print('='*30) print(dir()) print('='*30) print(Stock.__dict__) print('='*30) # Instance is have own namespace s1 = Stock() s2 = Stock() print(dir()) print('='*30) print(id(s1)) print('='*30) print(id(s2)) print(..

JohnMark
'Programming' 카테고리의 글 목록 (7 Page)