1. libpng warning: iCCP: known incorrect sRGB profile가 뜨는 원인

파이썬 pygame을 활용해서 프로젝트를 진행 중이었는데 갑자기 libpng warning: iCCP: known incorrect sRGB profile 메시지가 떴다. 실행에는 문제가 없었지만 게임이다 보니 frame마다 메시지가 떠서 디버깅하려고 작성한 print문이 보이지 않는 등 불편해서 구글링을 해보니 포토샵으로 이미지 편집을 한 것이 원인이었다. 포토샵에서 이미지 편집을 하면 일반 이미지 파일과 색상 정보를 다르게 저장해서 경고 메시지가 뜨는 것이다.  

 

 

 

2. libpng warning: iCCP: known incorrect sRGB profile 해결하기

포토샵으로 편집했던 이미지파일을 연 후 [편집] - [프로필 할당]을 클릭하고, [이 문서 색상 관리 안 함]을 선택 후 확인 버튼을 누르고 저장하면 된다.

1. 시작하며

이 글은 윈도우 환경에서 Python이 설치되어있고,

AWS RDS가 구축되어 있으며 Oracle과 연동되어있는 상태에서 시작합니다.

이 준비가 되어있지 않으신 분들은 구글링을 통해 먼저 진행해주세요. 

 

 

 

2.  cx_Oracle 설치

cmd창에서 pip install cx_Oracle 명령어를 실행하여 cx_Oracle을 설치합니다.

pip install cx_Oracle

 

 

 

3. Python bit 확인

사용 중인 Python bit를 확인합니다. 아래 코드로 확인할 수 있습니다.

import platform
print(platform.architecture())

 

 

 

4. Oracle Instant Clinet 다운로드

사용하는 Python bit에 맞는 Oracle Instant Clinet를 오른쪽 링크에서 다운로드합니다. (32bit, 64bit)

다운로드받은 zip파일을 압축 해제한 후 원하는 위치로 옮깁니다. 저는 C드라이브로 옮겼습니다.

 

 

 

5. 환경변수 추가

윈도우키를 누르고 "환경 변수"라고 검색해서 [시스템 환경 변수 편집]을 클릭한 후,

시스템 속성창에서 [환경 변수]를 클릭합니다.

 

 

[시스템 변수]에서 [Path]를 클릭 후 [편집]을 클릭합니다.

환경 변수 편집창에서 [새로 만들기]를 클릭 후 4번에서 압축 해제한 폴더의 경로를 추가합니다.

폴더의 경로는 파일 탐색기에서 경로 부분을 클릭하면 복사할 수 있습니다.

 

 

 

6. 재부팅

환경변수를 추가했으니 재부팅합니다.

 

 

 

7. DB 연결 예제

RDS의 사용자 이름, 비밀번호, 호스트 이름, 포트, SID를 확인합니다. sqldeveloper로 확인하면 편합니다.

오른쪽 사진은 예제에 사용할 SAMPLETABLE입니다.

 

 

import cx_Oracle
import os
import pandas as pd # pandas를 사용하지 않을거면 지워도 됩니다.

# 한글 설정
os.putenv('NLS_LANG', '.UTF8')

# DB 연결
connection = cx_Oracle.connect("사용자 이름/비밀번호@호스트이름:포트/SID")
cursor = connection.cursor()

# 쿼리 실행
cursor.execute("insert into SAMPLETABLE(id, name) values ('%d', '%s')" % (3, "테스트삼")) # insert 예제 1
cursor.execute("insert into SAMPLETABLE(id, name) values (:2, :3)", (4, "테스트사")) # insert 예제 2
cursor.execute("insert into SAMPLETABLE(id, name) values (5, '테스트오')") # insert 예제 3
cursor.execute("update SAMPLETABLE set name='사테스트' where id = 4") # update 예제
cursor.execute("delete from sampletable where id = 5") # delete 예제
cursor.execute("select * from SAMPLETABLE") # select 예제
result = cursor.fetchall()
print("실행 결과\n", "-" * 70, "\n", result, "\n\n\n")

# pandas로 확인하기 (pandas를 사용하지 않을거면 아래 세 줄은 지워도 됩니다.)
df = pd.DataFrame(result)
df.columns=[row[0] for row in cursor.description]
print("pandas 실행 결과\n", "-" * 70, "\n", df)

# commit
connection.commit()

# close
cursor.close()
connection.close()

예제 코드와 실행결과입니다.

insert 예제 1, 2, 3을 보면 다양한 방법으로 변수를 입력할 수 있다는 것을 알 수 있습니다. 

 

 

 

8. 참고한 사이트

https://medium.com/@praneeth.jm/connecting-to-an-oracle-rds-instance-from-python-b532b1d7b7ea

1. DroidEdit 어플 다운로드하기

무료 버전도 있지만 Git기능을 사용하려면 유료버전을 구매해야 합니다.

(참고로 설정 관련 포스팅을 하기 위해 어플을 삭제했더니 바로 환불이 됐습니다.

몇 시간 이내에 삭제해야 바로 환불을 해주는지는 모르겠지만 2,641원이 아까우신 분들은 시도해보세요...

그래도 이 포스팅을 보고 있다면 개발자일 텐데 커피 한잔 값으로 어플 개발자님께 감사를 전하는 것을 추천합니다!)

 

 

2. 언어 설정하기

화살표가 그려진 버튼을 누른 후 'Force Syntax...'을 눌러 원하는 언어로 설정합니다.

자체 컴파일 기능은 없으니 Syntax highlighting 옵션을 설정해준다고 생각하면 됩니다.

 

 

3. Extra Keys 설정하기

...버튼을 누른 후 Extra Keys에 체크하면, 오른쪽 사진처럼 tab, {} 등 핸드폰 키보드로 사용하기 힘든 키들이 추가됩니다.

이제 코딩할 준비를 마쳤으니 원하는 코드를 작성합니다.

 

 

4. Git 연동하기

...버튼을 누른 후 Settings...에 들어가서 Remote Files를 누르고, Add Repository를 누릅니다.

 

 

Repository Name, Repository URL, Username, Password를 입력한 후 Clone합니다.

Repository URL은 오른쪽 사진처럼 깃허브 해당 저장소에서 확인할 수 있고,

Username, Password에는 깃허브 아이디, 비밀번호를 입력하면 됩니다.

 

 

5. 저장하기

맨 왼쪽 저장버튼을 눌러 'Save'를 선택 후 아까 연동한 Git 저장소를 선택 후,

파일명을 입력하고 'Create'버튼을 누릅니다.

 

 

6. Commit 하기

화살표 버튼을 누른 후 'Git...'버튼을 누르고, 'Commit...'버튼을 누릅니다.

commit message와 commit할 파일들을 선택한 후 Commit버튼을 누릅니다.

 

 

7. Push 하기

화살표 버튼을 누른 후 이번에는 'Push'를 눌러 Push합니다. 

 

 

github를 통해 확인해보면 컴퓨터로 했을 때와 동일한 결과를 확인할 수 있습니다.

 

 

8. 마치며

새해를 맞이하여 1일 1커밋을 실천해보려고 하는데 당장 다음 주에 2박 3일 일정이 있어서

시작하자마자 실패할 위기에 처해서 검색 후 알아낸 방법입니다.

핸드폰으로 코딩하는 게 너무 불편해서 차라리 노트북을 들고 가는 게 낫겠다는 생각이 들기도 하고,

집 컴퓨터를 켜놓고 핸드폰으로 팀뷰어를 이용해서 원격으로 하는 방법이 더 편하겠다는 생각도 듭니다.

이외에도 가장 간단한 방법으로는 커밋 조작하는 방법이 있다고 합니다...

1. 시작하며

이 포스팅은 간단한 git 사용법에 대해서만 다루고 있습니다.

저는 C언어를 공부하면서 푼 연습문제나 알고리즘 문제들을 저장할 목적으로 사용하고 있으며,

협업을 하고 있지 않기 때문에 혼자서 add, commit, push하는 과정만 포스팅하겠습니다.

더 많은 기능 사용법을 원하시는 분들은 구글링을 추천드립니다!

 

 

2. Git 설치하기

 

Git - Downloads

Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific

git-scm.com

위의 링크를 통해 git을 설치합니다.

 

 

3. 깃허브 Repository 만들기

깃허브에 로그인한 후 오른쪽 위에 있는 +버튼을 누르고 'New repository'를 선택합니다.

Repository name을 입력하고, 공개(Public)로 할지 비공개(Private)로 할지 선택 후 Create repository를 클릭합니다.

 

 

4. gitconfig 설정 하기

윈도우 버튼을 누른 후 'Git Bash'를 검색해서 실행합니다.

 

 

위의 명령어를 입력하여 commit에 사용할 name과 email을 설정합니다.

 

 

5. 초기 설정과 Push하기

저장하고 싶은 파일들이 있는 폴더를 열고 오른쪽 클릭 후 'Git Bash Here'을 클릭합니다.

 

 

git init 명령어를 입력하여 현재 폴더를 로컬 저장소로 설정합니다.

 

 

git status 명령어를 입력하여 현재 상태를 확인합니다.

 

 

git add [파일명 or 폴더명] 명령어를 입력하여 추가합니다.

저는 .c로 끝나는 모든 파일을 추가하고 싶어서 *.c를 입력했습니다.

참고로 git add . 을 입력하면 현재 폴더에 있는 모든 파일들을 추가합니다.

또, 현재 이 폴더에는 aaa.c, abc.c, bbb.c라는 세 개의 c파일이 있는데

이때 git add b를 입력한 후 tab키를 누르면 bb.c가 자동으로 입력되어 git add bbb.c 명령어가 완성됩니다.

a로 시작하는 파일은 2개가 있으므로 이런 경우에는 한 글자 더 입력한 후 tab키를 누르면 자동완성이 됩니다.

 

 

git commit -m [message] 명령어를 이용하여 commit합니다.

 

 

git remote add origin [repository 주소] 명령어를 이용하여 github repository와 연동합니다.

repository 주소는 깃허브 repository 페이지에서 확인할 수 있습니다. 빨간 박스 버튼을 누르면 복사가 됩니다.

Git Bash에서는 Shift+Insert가 붙여넣기 단축키이고, 오른쪽 클릭 후 Paste를 클릭해도 됩니다.

 

 

git push origin master 명령어를 이용하여 원격 저장소에 push합니다.

 

 

이 과정까지 마친 후 깃허브 repository 페이지에 들어가 보면 push된 것을 확인할 수 있습니다.

 

 

6. 초기 설정 이후 Push 하기

git status 명령어를 이용하여 현재 상태를 확인합니다.

add할 파일명을 알고 있거나, add ., add *.c 명령어를 사용할 거면 생략해도 됩니다.

 

 

git add [파일명 or 폴더명]
git commit -m "message"
git push origin master 명령어를 차례로 입력합니다.

아까와 동일한 과정이지만 해당 폴더가 원격 저장소와 연결되어 있기 때문에

앞으로는 add, commit, push 명령어만 입력하면 됩니다.

1. 예제 설명

sampleDiv의 width를 다양한 방법으로 구해서 Console에 출력하는 예제입니다.

 

 

2. HTML, CSS 코드

<div id="sampleDiv">
	margin: 10px; </br>
	border: 20px; </br>
	padding: 30px; </br>
	width: 140px; </br>
	height: 150px;
</div>
#sampleDiv{
	margin: 10px;
	border: 20px solid orange;
	padding: 30px;
	width: 140px;
	height: 150px;
	background-color: yellow;
}

 

 

3. JavaScript, jQuery 코드와 결과

  var div = document.querySelector("#sampleDiv");
  
  //offsetWidth = width + padding*2 + border*2 = 240
  console.log("offsetWidth : " + div.offsetWidth);

  //$().width() = width = 140
  console.log("$().width() : " + $(div).width());

  //$().innerWidth() = width + padding*2 = 200
  console.log("$().innerWidth() : " + $(div).innerWidth());

  //$().outerWidth() = width + padding*2 + border*2 = 240
  console.log("$().outerWidth() : " + $(div).outerWidth());

  //$().outerWidth(true) = width + padding*2 + border*2 + margin*2 = 260
  console.log("$().outerWidth(true) : " + $(div).outerWidth(true));

margin과 padding을 표현하기 위해서 회색 선을 추가했습니다.

제이쿼리를 사용하면 width를 다양하게 구할 수 있음을 알 수 있습니다.

width를 height로 바꾸면 높이도 다양하게 구할 수 있습니다.

 

 

6. 전체 코드

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Credit Card Network Detector</title>
    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <style>
    #sampleDiv{
        margin: 10px;
        border: 20px solid orange;
        padding: 30px;
        width: 140px;
        height: 150px;
        background-color: yellow;
    }
    </style>
  </head>
  <body>
    <div id="sampleDiv">
        margin: 10px; </br>
        border: 20px; </br>
        padding: 30px; </br>
        width: 140px; </br>
        height: 150px;
    </div>
  </body>

  <script>
  var div = document.querySelector("#sampleDiv");

  //offsetWidth = width + padding*2 + border*2 = 240
  console.log("offsetWidth : " + div.offsetWidth);

  //$().width() = width = 140
  console.log("$().width() : " + $(div).width());

  //$().innerWidth() = width + padding*2 = 200
  console.log("$().innerWidth() : " + $(div).innerWidth());

  //$().outerWidth() = width + padding*2 + border*2 = 240
  console.log("$().outerWidth() : " + $(div).outerWidth());

  //$().outerWidth(true) = width + padding*2 + border*2 + margin*2 = 260
  console.log("$().outerWidth(true) : " + $(div).outerWidth(true));
  </script>

</html>

1. highlight.js 적용하기

먼저 검색을 통해 highlight.js를 적용해주세요.

 

 

2. highlights-line-numbers.min.js 적용하기

<!-- Line Number 적용 -->
<script src="//cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.7.0/highlightjs-line-numbers.min.js"></script>
<script>hljs.initLineNumbersOnLoad();</script>

블로그 관리 - 꾸미기 - 스킨 편집 - html 편집 - HTML에 위의 코드를 추가합니다.

 

 

3. CSS 적용하기

/* Line Number CSS */
/* for block of numbers */
.hljs-ln-numbers {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;

    text-align: center;
    color: #ccc;
    border-right: 1px solid #CCC;
    vertical-align: top;
    padding-right: 5px;

    /* your custom style here */
}

/* for block of code */
.hljs-ln-code {
    padding-left: 10px;
}

블로그 관리 - 꾸미기 - 스킨 편집 - html 편집 - CSS에 위의 코드를 추가합니다.

 

 

4. 결과

이 부분은 블로그 스킨, highlight.js의 스타일에 따라 조금씩 다를 것 같습니다.

저는 Square 스킨, github-gist 스타일을 사용하고 있는데,

라인 넘버 width가 통일되지 않고, 코드 왼쪽에 여백이 적용되지 않는 문제가 있어서 커스텀했습니다.

 

 

5. 커스텀 하기

/* Line Number CSS */
/* for block of numbers */
.hljs-ln-numbers {
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;

	text-align: center;
	color: #ccc;
	border-right: 1px solid #CCC;
	vertical-align: top;
	width: 25px;
}

/* your custom style here */
.hljs-ln td.hljs-ln-code {
	padding-left: 5px;
}

3. CSS 적용하기에서 붙여 넣기 했던 코드를 위의 코드로 바꿔줍니다.

 

 

6. 커스텀 결과

커스텀한 결과 라인 넘버 width와 코드 왼쪽 여백이 수정된 것을 볼 수 있습니다.

꼭 저와 동일한 width와 여백을 설정할 필요는 없습니다.

라인 넘버 width를 바꾸고 싶으면 5. 커스텀 하기 코드 15번 라인의 width값을 바꾸면 되고,

코드 왼쪽 여백을 바꾸고 싶으면 5. 커스텀 하기 코드 20번 라인의 padding-left값을 바꾸면 됩니다.

 

 

7. 참고 자료

 

wcoder/highlightjs-line-numbers.js

Line numbering plugin for Highlight.js . Contribute to wcoder/highlightjs-line-numbers.js development by creating an account on GitHub.

github.com

 

1. JavaScript에서의 this

JavaScript에서 함수의 this키워드는 다른 언어와 조금 다르게 동작합니다.
일반 함수의 this는 함수를 호출한 방법이 결정합니다. (동적 스코프 = Dynamic scope)
ES5에서 함수를 어떻게 호출했는지 상관하지 않고 this값을 설정할 수 있는 bind 메서드가 도입됐습니다.
ES6에서는 this 바인딩을 제공하지 않는 화살표 함수를 추가됐습니다.

화살표 함수에서 this는 항상 상위 스코프의 this를 가리킵니다. (정적 스코프 = Lexical scope = Static scope)

 

 

2. 일반 함수의 this

var person = {
  age: 27,
  getAge: function() {
    console.log(this); //{age: 27, getAge: ƒ}
    setTimeout(function() {
    	console.log(this); //Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
    }, 1000)
  }
}

person.getAge();

6번 라인의 this도 person을 가리킬 것 같지만 콜백 함수 내부의 this는 전역 객체 Window를 가리킵니다.

 

 

3. 일반 함수의 bind

var person = {
  age: 27,
  getAge: function() {
    console.log(this); //{age: 27, getAge: ƒ}
    setTimeout(function() {
    	console.log(this); //{age: 27, getAge: ƒ}
    }.bind(this), 1000)
  }
}

person.getAge();

6번 라인의 this가 person을 가리키게 하려면 7번 라인에서 this를 바인드시켜야 합니다.

이때 바인드 되는 this는 setTimeout함수 밖에 있으므로 4번 라인의 this와 동일합니다.

 

 

4. 화살표 함수의 this

var person = {
  age: 27,
  getAge: () => {
    console.log(this); //Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
    setTimeout(() => {
    	console.log(this); //Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}
    }, 1000)
  }
}

person.getAge();

화살표 함수에서는 this 바인딩을 제공하지 않으므로

4번 라인의 this와 6번 라인의 this가 모두 전역 객체 Window를 가리킵니다.

 

var person = {
  age: 27,
  getAge: function() {
    console.log(this); //{age: 27, getAge: ƒ}
    setTimeout(() => {
    	console.log(this); //{age: 27, getAge: ƒ}
    }, 1000)
  }
}

person.getAge();

화살표 함수의 this는 항상 상위 스코프의 this를 가리키므로 6번 라인의 this는 4번 라인의 this와 동일합니다.

 

 

5. 참고 자료

 

this

JavaScript에서 함수의 this 키워드는 다른 언어와 조금 다르게 동작합니다. 또한 엄격 모드와 비엄격 모드에서도 일부 차이가 있습니다.

developer.mozilla.org

 

Function.prototype.bind()

bind() 메서드는 새로운 함수를 생성합니다. bind() 가 호출된 함수의 this 키워드를 주어진 값으로 설정하고, 새로운 함수의 인수(argument) 앞에 지정한 인수 시퀀스가 사용됩니다.

developer.mozilla.org

 

화살표 함수

화살표 함수 표현(arrow function expression)은 function 표현에 비해 구문이 짧고  자신의 this, arguments, super 또는 new.target을 바인딩 하지 않습니다. 화살표 함수는 항상 익명입니다. 이  함수 표현은 메소드 함수가 아닌 곳에 가장 적합합니다. 그래서 생성자로서 사용할 수 없습니다.

developer.mozilla.org

 

1. Ajax란?

Asynchronous JavaScript and XML의 약자로, 페이지 새로고침 없이 JavaScript로 서버에 정보를 요청해서 받은 후 일부만 로드할 수 있게 하는 기법이다.

 

 

2. 예제 설명

XMLHttpRequest Ajax 버튼을 클릭하면, XMLHttpRequest을 이용해서 데이터를 주고받고,

jQuery Ajax 버튼을 클릭하면, jQuery의 $.ajax()를 이용해서 데이터를 주고받는 예제입니다.

서버 쪽은 Spring의 @RestController를 사용했습니다.

 

 

3. HTML 코드

<h3>XMLHttpRequest/jQuery Ajax</h3>
<button id="btnXMLHttpRequest">XMLHttpRequest Ajax</button>
<button id="btnjQuery">jQuery Ajax</button>
<div id="divAjax" style="width: 250px; height: 50px; margin-top: 5px; border: 1px solid black"></div>

예제의 결과를 확인하기 위한 간단한 HTML 코드입니다.

 

 

4-1. XMLHttpRequest 코드

var btn = document.querySelector("#btnXMLHttpRequest");
btn.addEventListener('click', function(){
	
	var oReq = new XMLHttpRequest();
	oReq.addEventListener("load", function () {
		var data = JSON.parse(oReq.responseText);
		var div = document.querySelector("#divAjax");
		div.innerHTML = data.result;			

	});
	oReq.open("GET", "<%=request.getContextPath()%>/ajax?type=XMLHttpRequest");
	oReq.send();
	
});

XMLHttpRequest를 이용해서 /ajax에 type=XMLHttpRequest 파라미터를 GET방식으로 보낸 후, 받은 데이터를 divAjax에 표시합니다.

 

 

4-2. $.ajax() 코드

$("#btnjQuery").click(function(){

	$.ajax({
		url : "<%=request.getContextPath()%>/ajax",
		data : "type=jQuery",
		type : "GET",
		success : function(data){
			$("#divAjax").html(data.result);
		}
	});
	
});

$.ajax()를 이용해서 /ajax에 type=jQuery 파라미터를 GET방식으로 보낸 후, 받은 데이터를 divAjax에 표시합니다.

4-1과 4-2의 코드는 같은 기능을 다른 방법을 이용해서 구현한 것입니다.

 

 

5. Controller 코드

@RestController
public class SampleController {
		
	@GetMapping(path="/ajax")
	public Map<String, Object> ajax(@RequestParam(name="type") String type){
		Map<String, Object> map = new HashMap<>();
		String result = type + " Ajax 요청 성공!";
		map.put("result", result);
		return map;
	}

}

파라미터로 받은 type 값 뒤에 " Ajax 요청 성공!"을 더해서 리턴합니다.

 

 

6. 전체 코드

sample.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ajax</title>
<script src="<%=request.getContextPath() %>/js/jquery-3.3.1.js"></script>
</head>
<body>

<h3>XMLHttpRequest/jQuery Ajax</h3>
&nbsp;<button id="btnXMLHttpRequest">XMLHttpRequest Ajax</button>&nbsp;
<button id="btnjQuery">jQuery Ajax</button>
<div id="divAjax" style="width: 250px; height: 50px; margin-top: 5px; border: 1px solid black"></div>

<script>
/* XMLHttpRequest를 이용한 Ajax */
var btn = document.querySelector("#btnXMLHttpRequest");
btn.addEventListener('click', function(){
	
	var oReq = new XMLHttpRequest();
	oReq.addEventListener("load", function () {
		var data = JSON.parse(oReq.responseText);
		var div = document.querySelector("#divAjax");
		div.innerHTML = data.result;			

	});
	oReq.open("GET", "<%=request.getContextPath()%>/ajax?type=XMLHttpRequest");
	oReq.send();
	
});

/* jQuery를 이용한 Ajax */
$("#btnjQuery").click(function(){

	$.ajax({
		url : "<%=request.getContextPath()%>/ajax",
		data : "type=jQuery",
		type : "GET",
		success : function(data){
			$("#divAjax").html(data.result);
		}
	});
	
});
</script>

</body>
</html>

 

SampleController.java

package sample.controller;

import java.util.HashMap;
import java.util.Map;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SampleController {
		
	@GetMapping(path="/ajax")
	public Map<String, Object> ajax(@RequestParam(name="type") String type){
		Map<String, Object> map = new HashMap<>();
		String result = type + " Ajax 요청 성공!";
		map.put("result", result);
		return map;
	}

}

1. properties 파일을 사용하는 이유

실제 서비스 개발을 할 때는 개발용 DB, 테스트용 DB, 서비스용 DB 등이 따로 나눠져있어서 Java 코드는 수정하지 않고,
application.properties와 같은 파일만 바꿔서 사용하는 방식으로 각 환경에 필요한 패키지를 빌드한다.
또, Github 등에 코드를 공개할 때 비밀번호처럼 공개되면 안되는 정보들을 properties 파일에 정리한 후
.gitignore를 통해 제외하면 안전하게 관리할 수 있다.

 

 

2. application.properties 파일 생성 (src/main/resources/application.properties)

spring.datasource.username=username
spring.datasource.password=password

 

 

3. SampleConfig.java 생성

@Configuration
@PropertySource("classpath:application.properties")
public class SampleConfig { 
    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;
}

@PropertySource에 경로를 입력해주면 @Value 어노테이션을 이용해서 해당 properties 파일에 있는 값을 사용할 수 있다.

+ Recent posts