반응형

자바 변수의 종류

변수는 크게 네 종류로 변수의 선언된 위치에 따라서 클래스변수, 인스턴스변수, 지역변수, 매개변수로 나뉜다.

public class Main {
	public static void main(String[] args) { // 매개변수
    	int num = 0; // 지역변수
    }
}

public class Page {

	private int state = 0; // 인스턴스 변수
    public static int page = 10; // 클래스 변수
    public int get() {
    	return state;
    }
}
변수명 선언위치 설명 저장 메모리
클래스 변수
(class variable)
= static 변수
클래스 영역 클래스 영역에서 타입 앞에 static이 붙는 변
객체를 공유하는 변수로 여러 객체에서 공통으로 사용하고 싶을 때 정의
Method
인스턴스 변수
(instance variable)
클래스 영역에서 static이 아닌 변수
개별적인 저장 공간으로 객체/인스턴스마다 다른 값 저장 가능

* 객체/인스턴스 생성만하고 참조 변수가 없는 경우 가비지 컬렉터에 의해 자동 제거됨
Heap
지역 변수
(local variable)
메서드 영역 메서드 내에서 선언되고 메서드 수행이 끝나면 소멸되는 변수
초기값을 지정한 후 사용할 수 있음
Stack
매개 변수
(parameter)
메서드 호출 시 '전달하는 값'을 가지고 있는 인수
(지역 변수처럼 선언된 곳부터 수행이 끝날 때까지 유효함)

 

자바의 메모리 영역

자바 프로그램을 실행하게되면, JVM은 OS로 부터 메모리를 할당 받고 Method, Stack, Heap 각 세 영역에 맞춰서 할당하게 된다.

 - 메소드 (Method) 영역 : 전역변수와 static 변수를 저장하며, Method 영역은 프로그램의 시작부터 종료까지 메모리에 남아있음

 - 스택 (Stack) 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제. LIFO (Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워짐

 - 힙 (Heap) 영역 : new 키워드로 생성되는 객체 (인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리

 - PC Register : JVM이 실행하고 잇는 현재 위치를 저장하며, 스레드가 생성되면서 생기는 공간

 - Native Method Stack : Java가 아닌 다른 언어로 구성된 메소드 실행이 필요할 때 사용되는 공간

 

자바의 각 메모리 영역이 할당되는 시점?

 - Method : JVM 동작 후 클래스가 로딩 될 때 생성

 - Stack : 메소드가 호출될 때 할당

 - Heap : 런타임시 할당

 

원시 타입 vs 참조 타입의 메모리 영역

원시 타입 : Stack에 값이 그대로 저장되는 타입 / 참조가 없어서, 빠르게 값에 접근 가능

참조 타입 : Stack에 Heap의 어딘가를 가리키는 주소가 저장

 

반응형

'개발새발 > Java' 카테고리의 다른 글

인터페이스 vs 추상클래스  (0) 2024.05.26
반응형

인터페이스 vs 추상클래스 비교

인터페이스 (implements) : 인터페이스에 정의된 메서드를 각 클래스 목적에 맞게 기능을 구현

추상클래스 (extends) : 자신의 기능들을 하위 클래스로 확장

  추상 클래스 인터페이스
사용 키워드 abstract interface
사용 가능 변수 제한 없음 static final (상수)
사용 가능 접근 제어자 제한 없음 (public, private, protected, default) public
사용 가능 메소드 제한 없음 abstract method, default method, static method, private method
상속 키워드 extends implements
다중 상속 가능 여부 불가능 가능 (클래스에 다중 구현, 인터페이스 끼리 다중 상속)
공통점 1. 추상 메소드를 가지고 있어야한다.
2. 인스턴스화 할 수 없다. (new 생성자 사용 x)
3. 인터페이스 혹은 추상 클래스를 상속받아 구현한 구현체의 인스턴스를 사용해야 한다.
4. 인터페이스와 추상클래스를 구현, 상속한 클래스는 추상 메소드를 반드시 구현하여야한다.

 

사용 시기 및 목적

추상클래스 : 상속 관계 시, 부모나 조상클래스를 상속하는데 기능까지 같은 경우 추상클래스 사용

                     (상속, 확장하여 사용)

인터페이스 : 상속 관계 시, 부모나 조상클래스를 상속하는데 다른 기능이 필요할 경우 인터페이스 사용

                     (동일한 사용방법과 동작을 보장하기 위해 사용)

반응형

'개발새발 > Java' 카테고리의 다른 글

Java의 메모리 영역  (0) 2024.05.26
반응형

SQL Injection이란?

웹 애플리케이션과 데이터베이스 간의 연동으로 발생하는 취약점으로, 공격자가 입력 폼에 악의적으로 조작된 쿼리를 삽입하여 데이터베이스 정보를 불법적으로 열람하거나 조작할 수 있는 방식

 

SQL Injection 공격 유형

Error based SQL injection (논리적 에러를 활용한 SQL 인젝션) 

  - 가장 대중적인 기법으로, 인증 우회를 위해 논리적 에러를 유도하는 방식의 공격 기법

-- 정상적인 input
SELECT * FROM user WHERE id = 'id' AND pwd = 'pwd'

-- 비정상적인 input
'OR 1=1 --'

-- 인증 우회를 통한 비정상적 input
SELECT * FROM user WHERE id = '' OR 1=1 --
==> SELECT * FROM user 결과값 도출

 

Union SQL Injection (UNION 명령어를 활용한 SQL 인젝션)

  - 공격자가 추가적인 쿼리를 삽입하여 정보를 획득하는 기법으로, UNION 명령어를 이용하여 여러 쿼리를 합치는 방식을 이용, UNION을 하려는 두 테이블의 컬럼 수와 데이터 형식이 같아야 하므로 ORDER BY 절이나 HAVING을 이용한 오류 메시지를 통해 컬럼의 수를 유추

-- 정상적인 input
SELECT * FROM board WHERE title = 'title' and contents = 'contents'

-- 비정상적인 input
'UNION SELECT id, pwd FORM user --'

-- UNION을 통한 비정상적 input
SELECT * FROM board WHERE title LIKE '' UNION SELECT id, pwd FORM user --

==> SELECT * FROM board 컬럼에 user 정보 합계되서 결과값 도출


Blind SQL Injection (Boolean based SQL)

  - 서버의 반응을 통해 정보를 얻는 SQL 공격 기법으로, 단순히 참과 거짓의 정보한 알 수 있을 때 사용하는 공격 기법. 조건이 참이면 페이지가 정상적으로 출력되고 그렇지 않은 경우 출력되지 않음으로 구분이 가능

-- Boolean 기반 공격 예시
-- 정상적인 input
SELECT * FROM user WHERE id = 'id' and pwd = 'pwd'

-- 비정상적인 input
'abc123' and ASCII(SUBSTR((SELECT name FROM information_schema.tables WHERE table_type='base table' limit 0,1),1,1)) > 100 --'

-- Boolean 통한 비정상적 input
SELECT * FROM user WHERE id = 'abc123' and ASCII(SUBSTR((SELECT name FROM information_schema.tables WHERE table_type='base table' limit 0,1),1,1)) > 100 --

-- Time 기반 공격 예시
-- 정상적인 input
SELECT * FROM user WHERE id = 'id' and pwd = 'pwd'

-- 비정상적인 input
'abc123' OR (LENGTH(DATABASE())=1 AND SLEEP(2)) --

-- Time을 통한 비정상적 input
SELECT * FROM user WHERE id = 'abc123' OR (LENGTH(DATABASE())=1 AND SLEEP(2)) --

 

Stored Procedure based SQL Injection

  - 웹에서 저장 프로시저에 대한 접근 권한을 가짐으로써 정보를 탈취할 수 있는 공격 기법

 

Mass SQL Injection

  - 한 번의 공격으로 다량의 DB를 조작해 큰 피해를 입히는 공격 기법

 

SQL Injection 대응 방안

입력값 검증

  - 사용자의 입력을 받을 때 검증 로직을 추가하여 값이 유효한지 검증하는 방법
     (데이터 길이 제한, 특수문자와 명령어 필터링 등)

 

Prepared Statement 구문 사용

  - 사용자의 입력 값이 데이터베이스의 파라미터로 들어가기 전에 DBMS가 미리 컴파일하여 실행하지 않고 대기. 그 후 사용자의 입력 값을 문자열로 인식하여 공격 쿼리가 들어간다고 하더라도, 단순 문자열로 인식하여 공격을 무효화하는 방법

 

Error Message 노출 금지

  - SQL Injection을 수행하기 위해서는 데이터베이스의 정보가 필요하기 때문에, 오류 발생 시 사용자에게 보여주는 로그를 별도로 작업하여 데이터베이스 정보 유출 방지하여 공격을 무효화 하는 방법

 

웹 방화벽 사용

  - 웹 공격 방어에 특화되어있는 웹 방화벽을 사용하는 방법

반응형

'개발새발 > 기타' 카테고리의 다른 글

코딩 스타일 괄호 및 표기법  (1) 2021.05.27
반응형

에러 메시지

 

Database "C:/Users/kai/test" not found, either pre-create it or allow remote database creation [90149-214] 90149/90149

 

원인

H2 Database를 처음 연동할 시 주로 볼 수 있는 에러이다.

주로 연동 이후 웹 H2 Console로 연결 테스트를 진행할 때 볼 수 있는 에러인데, 해당 에러의 경우 보안 정책상 데이터베이스를 생성할 수 없어서 데이터베이스를 별도로 생성해 주거나, 원격 데이터베이스 생성을 허용해야 한다.

 

해결방법

보안상으로 추천되지 않으니, 직접 데이터베이스를 생성하려면 에러 메시지 상의 위치 C:/User/kai [사용자명]/test [데이터베이스명]로 이동하여서 test.mv.db 파일을 생성하면 해당 문제를 해결할 수 있다.
test의 경우 데이터베이스명이므로, jdbc:h2:~/errortest 같은 경우에는 errortest.mb.db로 데이터베이스 파일을 생성하여야 한다.

데이터베이스를 생성한 뒤, 다시 Test Connection을 실행하면 아래와 같은 성공 메시지를 볼 수 있다.

반응형

'개발새발 > 이슈' 카테고리의 다른 글

Connection NetworkTimeout 에러 (HikariCP)  (2) 2021.06.01
반응형

Spring Boot에서 JS(Javascript) 사용?

자바에서 제공하는 API인 Java Scripting API를 통해서, 자바에서 자바스크립트 함수 호출이 가능하다.

js 파일 및 설정

js를 사용하기 위해선, 우선 해당 스크립트가 적용된 js파일을 적용할 필요가 있다.
resources 하단에 사용할 js 파일을 정리하여 resources/js/aes.js 와 비슷한 형태로 적용하면 된다.
해당 부분은 css, image 파일 또한 동일하게 적용 가능하다.

 

application.yml 설정

local.yml
prod.yml

js 파일을 설치하여, 적용하였으면 해당 부분의 경로를 불러오기 위해 설정을 진행하여야 하는데

local, dev, prod 각 설정에 맞게 절대 경로를 지정하여 사용하면 된다. (build 이후 경로의 차이가 존재)

 

Java Scripting API 사용

JavaScripting API의 ScriptEngine을 통해 스크립트 엔진을 호출하여 aes.js 자바 스크립트 파일을 불러오는 소스이다.
간략하게 decrypt 함수를 호출하는 방식으로, JavaScripting의 인터페이스를 활용하여 작업이 가능하다.

// 스크립트 엔진 호출
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("JavaScript");

// js 파일 호출
URL resourceUrl = this.getClass().getClassLoader().getResource("js/aes.js");
String fileLocation = resourceUrl.getFile();

// evel 메소드를 사용하여 컴파일
try {
	se.eval(new FileReader(fileLocation));
} catch (FileNotFoundException | ScriptException e) {
	e.printStackTrace();
}

String aesKey = "test";
String ob = null;
// 자바스크립트의 함수를 실행하게 해주는 Invocable
Invocable inv = (Invocable) se;

// invokeFunction을 통한 특정 함수 호출
try {
	ob = (String) inv.invokeFunction("decrypt", input, aesKey, 256);
} catch (NoSuchMethodException | ScriptException e) {
	e.printStackTrace();
}

 

반응형

'개발새발 > Spring Boot' 카테고리의 다른 글

Lombok 설치 및 STS 연동  (0) 2021.05.22
Spring Boot 프로젝트 설정 방법  (0) 2021.05.19
반응형

UF (Universal Forwarder) 란 ?
Splunk Enterprise로 데이터를 보내기 위해 로그 등의 데이터를 수집할 서버 설치하는 간소화된 Splunk이다.

리소스 사용량은 3% 내외지만, 데이터 전송량이 늘어날 경우 늘어나며 데이터 전송 속도의 제한이 기본적으로 존재하기 때문에 리소스 사용량을 마냥 신뢰할 수 없다는 것이 함정이다.

 

UF 설치 방법

U/F는 기존 Splunk 설치 파일과 별도의 설치 파일을 해당 OS에 알맞게 Splunk 사이트에서 다운로드하여 설치하면 된다.

https://www.splunk.com/en_us/download/previous-releases/universalforwarder.html

 

universalforwarder

 

www.splunk.com

사이트 주소에 접속하여 파일을 다운로드 한 뒤, 

https://kairuen.tistory.com/9

 

Splunk 설치 및 설정

Splunk란? 스플렁크(Splunk)는 웹 기반 인터페이스를 통해 데이터 수집, 검색, 분석 및 모니터링을 위한 비정형 데이터 분석 솔루션이다. 현업에서는 주로, 보안 혹은 관제를 위한 빅데이터 솔루션으

kairuen.tistory.com

기존 Splunk 설치 방법과 동일하게 설치 및 설정을 진행하면 된다.

 

U/F 설정

기본적으로 U/F에서는 conf 파일을 수정하여, 데이터 수집 및 전달, 속도 제한 등의 설정이 가능하다.

경로는 $SPLUNK_HOME/etc/system/local 으로 들어가서 해당 파일명으로 생성한 뒤 아래 내용을 필요에 맞게 설정하면 된다.

 

outputs.conf (데이터 전송 설정)

[tcpout]

defaultGroup = <target_group> : 인덱스로 보낼 그룹명 지정

[tcpout:<target_group>]

server = [<ip>|<servername>]:<port> : 인덱스로 보낼 IP 및 포트 지정

[tcpout-server://<ip address>:<port>] : 인덱스로 전송

 

inputs.conf (데이터 수집 설정)

[default]

host = <string> : 데이터 전송 시, 호스트명

index = <string> : 데이터 전송 시, 저장할 인덱스

source = <string> : 데이터 전송 시, 소스 설정

sourcetype = <string> : 데이터 전송 시, 소스 타입 설정

[monitor://<path>] : 모니터링할 폴더 및 파일 지정

_TCP_ROUTING = <tcpout_group_name> : 모니터링 후 데이터 전송할 그룹

 

limit.conf (U/F 제한 설정)

[thruput]

maxKBps = <integer> : 데이터 전송 속도 설정 (기본 256 Kbps) - 대부분 빅데이터를 구축하기 위함이므로 설정 변경 필요

 

등의 파일을 기본적으로 설정해주면 된다.

이러한 설정 이외에도 여러 가지 conf가 존재하며 각 설정 하위에도 추가적인 설정은 존재하지만, 기본적인 데이터 전송은 위의 설정만 추가하여도 가능하다.

반응형

'개발새발 > Splunk' 카테고리의 다른 글

Splunk 설치 및 설정  (0) 2021.05.26
반응형

Spring Boot를 작업하다보면, 간혹 해당 에러에 대해서 확인할 수 있다.

별도의 설정을 하지 않는다면, Spring Boot에서는 Hikari가 기본적으로 제공되는데, 해당 기본 세팅이 연결한 DBMS 세팅과 차이가 존재하여, Connection 에러가 뜨는 것이라고 볼 수 있다.

 

java.sql.SQLException: Connection.setNetworkTimeout cannot be called on a closed connection
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getSqlException(ExceptionMapper.java:277) ~[mariadb-java-client-2.4.4.jar!/:na]
        at org.mariadb.jdbc.MariaDbConnection.setNetworkTimeout(MariaDbConnection.java:1700) ~[mariadb-java-client-2.4.4.jar!/:na]
        at net.sf.log4jdbc.sql.jdbcapi.ConnectionSpy.setNetworkTimeout(ConnectionSpy.java:1120) ~[log4jdbc-log4j2-jdbc4.1-1.16.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.setNetworkTimeout(PoolBase.java:556) [HikariCP-3.4.2.jar!/:na]
        at com.zaxxer.hikari.pool.PoolBase.quietlyCloseConnection(PoolBase.java:133) [HikariCP-3.4.2.jar!/:na]
        at com.zaxxer.hikari.pool.HikariPool.lambda$closeConnection$1(HikariPool.java:447) [HikariCP-3.4.2.jar!/:na]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_252]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_252]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_252]

 

우선, 설정을 변경하기 전에 DB에 설정된 값을 확인하여야하는데, 해당 SQL을 통해 확인할 수 있다.

 

SHOW variables LIKE '%time%'

 

 

해당 SQL을 사용시, 아래와 같은 결과 값을 볼 수 있으며 여기서 두 가지의 데이터를 매핑 시키면 된다.

 

DB HikariCP
wait_timeout max-lifetime
connect_timeout connection-timeout
  • max-lifetime : 커넨션의 최대 유지 시간 설정. 사용중인 커넥션은 maxLifetime에 상관없이 제거되지않고, 사용중이지 않을 때만 제거된다. 0으로 설정하면 무한 lifetime이 적용되지만, idle-timeout 설정되어 있는 경우에는 적용되지 않는다. (default: 1800000 (30분))
  • connection-timeout : pool에서 커넥션을 얻어오기전까지 기다리는 최대 시간. 허용가능한 시간을 초과하면 SQLException이 발생하며, 설정가능한 가장 작은 시간은 250ms 이다. (default: 30000 (30초))

해당 데이터의 시간을 확인하고, DB의 경우는 초(seconds) 단위 HikariCP의 경우 밀리세컨드(millisecond) 단위를 사용하기 때문에 변환기를 사용하거나 혹은 계산하여 HikariCP에 설정할 시간을 계산한 뒤에 1~2초 정도 적게 설정하면 된다

계산이 다 끝난 경우에는 properties 파일에 해당 데이터를 입력하면 해당 에러를 해결할 수 있다.

 

spring.datasource.hikari.connection-timeout=58000
spring.datasource.hikari.max-lifetime=580000
반응형
반응형

코딩 스타일

 

코딩에는 각 사람의 습관이나 스타일이 묻어 나오는 경우가 많다. 다만, 혼자 개발하는 경우가 아닌 협업하는 경우 코드의 가독성 등을 위해 변수명, 클래스명, 괄호 등의 스타일을 통일하는 경우가 존재하는데 몇 가지의 스타일의 경우 보편적으로 용어 및 스타일이 정해져 있다.

 

코딩 스타일 (괄호)

 

대표적인 코딩 스타일에는 BSD, K&R, GNU 3가지가 존재한다. 대부분은 언어 혹은 IDE 별로 기본 포맷팅이 정해져 있으나, 개인의 선호에 따라 다르기도 하기 때문에 가볍게 보고 넘어가면 좋을 듯하다.

 

BSD

if (a = b)
{
    return result;
}

비주얼 스튜디오의 기본 포맷팅으로 사용되는 방식이다. GNU와 비슷하지만, 들여 쓰기가 없고 K&R처럼 수평으로 길게 사용 가능하다.

 

K&R

if (a = b) {
    return result;
}

이클립스에서 기본 포맷팅으로 사용되는 방식이다. 자바, 자바스크립트, C++ 등에서 주로 볼 수 있으며, 반복문 등 사용 시에도 코드량이 줄기 때문에 출판되는 개발 책 등에서도 자주 확인할 수 있다. 한눈에 많은 코드를 볼 수 있고, 수평으로 길게 사용 가능하다.

 

GNU

if (a = b) 
    {
        return result;
    }

BSD와 비슷한 방식이지만, 들여 쓰기가 존재하여 수평으로 조금 더 좁게 사용하여야 한다.

 

표기법

 

표기법의 경우 변수, 함수명, 클래스명 등을 작성할 때, 일괄적인 규격을 정하기 위하여 존재하며 괄호 등의 코딩 스타일과 달리 협업할 때는 정해진 규격대로 변수명, 함수명 등을 해당 프로젝트에 정해진 표기 법대로 작성해야 되는 경우가 많다.

 

카멜 표기법 (Camel Case)

첫 문자의 첫 글자는 소문자로 표기하고, 그 이후 연결되는 문자들은 첫 글자를 대문자로 표기한다. 문자의 형태 때문에, 단봉낙타 표기법이라고도 하며, 변수명, 함수명 등에 자주 사용된다.

ex) helloWorld

 

파스칼 표기법 (Pascal Case)

모든 문자의 첫 글자를 대문자로 표기한다. 쌍봉낙타 표기법이라고도하며, 클래스명에 자주 사용된다.

ex) HelloWorld

 

스네이크 표기법 (Snake Case)

모든 문자의 첫 글자를 소문자로 표기하며, 각 문자들은 언더바(_)로 이어서 사용한다. 변수명, 함수명, 데이터 타입 등에 사용되며, DB에서 자주 사용한다.

ex) hello_world

 

케밥 표기법 (Kebab Case)

하이픈(-)로 단어를 연결하는 표기법이다. 주로 HTML, CSS, URL 등에서 자주 사용되며, 변수나 함수 등에서는 하이픈을 못 쓰게 하는 경우도 존재한다.

ex) hello-world

 

헝가리안 표기법 (Hungarian Notation)

접두어에 자료형을 붙여서 표기하며, 현재는 잘 사용되지 않는다.

ex) strHelloWorld

 

이 외에도 사실 들여 쓰기나 공백, 주석 등 다양한 코딩 스타일이 존재하지만 해당 부분은 각 개인의 스타일에 맞춰서 개발을 진행하거나 혹은 협업 시 해당 규격에 맞춰서 작성을 진행하기 때문에 상황에 맞춰서 작업을 진행하면 크게 문제없이 개발을 진행할 수 있으리라 생각된다.

반응형

'개발새발 > 기타' 카테고리의 다른 글

SQL Injection이란?  (0) 2024.05.24
반응형

Splunk란?

 

스플렁크(Splunk)는 웹 기반 인터페이스를 통해 데이터 수집, 검색, 분석 및 모니터링을 위한 비정형 데이터 분석 솔루션이다. 현업에서는 주로, 보안 혹은 관제를 위한 빅데이터 솔루션으로 사용된다. 자체적으로 다양한 앱을 지원하는데 오늘은 기본적인 설치 방법에 대해서 알아보고자 한다.

 

Splunk 사양

 

구분 CPU Memory Disk OS
최소 요구 사항 2+ GHz
6코어 2소켓+
12GB+ RAID 0 or 1+0 64bit

Splunk는 주로 빅데이터를 위한 서버에 구축하기 때문에, 요구하는 최소 사양의 경우는 위와 같다.

 

Tip

 

추가적인 팁으로는 추후 클러스터링 환경을 구축하게 되는 경우 서로 다른 성능의 하드웨어를 붙이게 되는 경우 가장 낮은 성능의 하드웨어에 맞춰서 성능이 평준화되기 때문에, 동일한 성능의 하드웨어로 환경을 구축하는 것이 좋다.

또한, Disk의 RAID 구성의 경우 0 or 1+0를 사용하나, 0의 경우 Mirroring을 하지 않기 때문에, 이후 추가적인 하드웨어 작업을 하는 경우 기타 추가 작업이 필요하여 1+0의 경우 하드웨어만 장착하면 기타 추가 작업 없이 증설이 가능하다.

 

Linux 설치 방법

 

리눅스에서 스플렁크를 설치하기 전에 우선, 별도의 계정 생성이 필요하다.

 

 

  • -d : 계정의 홈 디렉토리
  • -s : 사용 shell 지정
  • splunk : 계정명

 

위와 같이 별도의 계정 생성을 하는 이유는 root로 스플렁크를 설치하거나 실행하는 경우 파일 등이 실행 권한 문제로 인해 정상적으로 작동하지 않는 경우가 존재하기 때문에 위와 같이 별도의 계정 생성 이후 해당 계정에서 스플렁크를 설치 및 작동하기 위함이다.

 

계정 생성을 마치면, 리눅스에 대한 별도 환경 설정이 필요하다. 이유는 다음과 같은데, 리눅스 시스템의 경우는 다중 사용자를 염두에 두고 만들어진 시스템이고, 기본적으로 허용되는 리소스 한계가 너무 낮기 때문에 빅데이터 시스템을 구축하기에 문제가 있어서 변경이 필요하다.

 

ulimit

 

file size open files max user processes data segment size
ulimit -f ulimit -n ulimit -u ulimit -d

해당 시스템 명령어를 쳐서 값이 작은 경우에는 해당 시스템 환경에 맞춰서 값을 올려주어야 한다. 변경해야 하는 위치는

/etc/security/limits.conf 이다.

 

위와 같은 설정이 마무리되었으면, https://www.splunk.com/en_us/download/previous-releases.html 해당 페이지에서 Splunk 인스톨러를 받을 수 있다.

리눅스의 경우 rpm / tgz / deb 세 가지 파일이 존재하는데, 각각 아래의 명령어로 설치하면 된다.

 

rpm deb tgz
rpm -ivh splunk-8.1.4-Linux-x86-64.rpm deb -i splunk-8.1.4-Linux-x86-64.deb tar xzvf splunk-8.1.4-Linux-x86-64.tgz

 

Splunk 초기 실행

 

위와 같은 명령어로 Splunk를 설치하는 경우 실행 및 편리성을 위해 부팅 시 자동 실행 되게 설정이 가능하다.

  • /opt/splunk/bin/splunk start --accept-license

명령어를 통해, splunk를 최초 실행해주고, 아래와 같은 명령어를 통해 부팅 시 자동 실행을 켜준다.

  • root 계정 : /opt/splunk/bin/splunk enable boot-start
  • splunk 계정 : /opt/splunk/bin/splunk enable boot-start -user splunk

한 시스템에 2개 이상의 splunk를 실행하는 경우에는 마지막 실행한 자동 실행 명령만 init.d에 등록되며, 2개 이상 부팅 시 자동 실행을 키려면 별도의 쉘 작성이 필요하다.

 

Windows 설치 방법

 

Windows 서버의 경우는 더 쉽게 설치할 수 있다.

https://www.splunk.com/en_us/download/previous-releases.html 에서 msi 파일을 다운로드한 뒤, 해당 파일을 실행시켜주면 설치할 수 있다.

 

 

 

 

 

기본적인 설치 경로 변경, 설치 계정 설정, 관리자 아이디 비밀번호 생성 등의 설정을 마치면 정상적으로 설치를 완료할 수 있다.

 

Tip

 

윈도우에서 설치하는 경우 스플렁크를 윈도우 서비스로 등록되어 제어판 - 관리도구 - 서비스에서 실행, 중지, 자동 실행 설정이 가능하다. (Splunkd Service)

Splunk를 초기 실행할 때는 윈도우에서 관리자 모드로 실행하여 권한 문제가 없도록 하는 것이 안정적이다.

 

Splunk 실행

 

모든 설치를 마친 이후에는 http:localhost:8000 으로 접속하여, 웹 인터페이스에 접속할 수 있다.

Splunk는 웹 기반 인터페이스이기 때문에, 기본적인 모니터링 등의 작업은 웹에서 진행할 수 있으며, Splunk 실행 시, 권장하는 브라우저는 Chrome 이다.

반응형

'개발새발 > Splunk' 카테고리의 다른 글

UF (Universal Forwarder) 설치 및 conf 설정  (0) 2021.06.08
반응형

Lombok이란?

Getter/Setter/ToString과 같은 매서드를 자동으로 생성/연결해주는 자바 라이브러리로 사용 시 코드량을 줄이는데 도움을 받을 수 있다.

 

설치 방법

홈페이지에 접속하여, 원하는 버전을 선택한 이후 Maven 탭의 dependency 내용을 복사하여, pom.xml에 입력하면 된다.

https://mvnrepository.com/artifact/org.projectlombok/lombok 

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

위와 같은 형태로, 보통은 버전 정보만 본인이 사용하려고 하는 버전으로 입력해주면 된다.

 

Lombok은 @Data 어노테이션을 사용하여 getter, setter 생성자를 자동으로 생성할 수 있지만, 별도의 jar 파일을 다운로드하지 않으면 어노테이션은 사용할 수 있으나 생성자가 생성되지 않는 것을 확인할 수 있다. 

package com.land.domain;

import java.sql.Date;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Member {
	private Long idx;
	private String userId;
	private Date regDate;
	private Date modDate;
}

 

해당 문제를 해결하기 위하여, 별도의 jar 파일을 다운로드하여 설정하여야한다.

 

두 가지 방법이 존재하는데, 

  • https://projectlombok.org/all-versions 에서 원하는 버전을 다운로드하여서 jar 파일을 사용하거나,
  • Maven을 이용해 다운로드한 경우 maven repository 내 lombok 디렉토리에 jar 파일을 찾는다. (사용자\사용자명\.m2\repository\org\projectlombok\lombok\버전)

위와 같이 jar 파일을 다운로드하면, cmd (명령 프롬프트)를 실행하여 jar 파일을 실행시킨다.

 

Specify location을 클릭하여, STS(eclipse) 실행 파일을 선택한 뒤에, Install / Update를 누르면 정상적으로 lombok을 설치할 수 있다.

 

 

정상적으로 설치되는 경우, @Data 어노테이션을 설정하면, Outline에 정상적으로 getter 및 setter 등이 생성되는 것을 확인할 수 있다.

 

 

에러 해결

위와 같이 설정을 하는 경우 대부분 lombok 라이브러리를 정상적으로 사용할 수 있으나, 사용이 되지 않는 경우 STS가 설치된 폴더로 들어가서 SpringToolSuite4.ini 파일을 실행하여 -vmargs 아래 위치에 설정을 추가하면, 정상적으로 라이브러리를 사용할 수 있다.

 

-javaagent:lombok.jar
-Xbootclasspath/a:lombok.jar

 

혹은 아래와 같이, lombok.jar 파일의 위치를 직접 지정하여 설정하는 것도 가능하다.

 

-javaagent:C:\DEV\sts-4.5.1.RELEASE\lombok.jar

 

반응형

'개발새발 > Spring Boot' 카테고리의 다른 글

Spring Boot에서 JS 사용 및 설정  (0) 2022.09.23
Spring Boot 프로젝트 설정 방법  (0) 2021.05.19

+ Recent posts