2022. 12. 10. 00:53ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/Java
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๋ชฉ์ฐจ
โ[Open Source Project] JitPack์ ๋ด๊ฐ ๋ง๋ Library & Framework ์ฌ๋ฆฌ๊ธฐ
โ
๐ ๋๋ง์ Library & Framework ๊ณต์ ํ๊ธฐ
๐ฝ ๊ฐ์
๐ฆ ์๊ฐ
๊ฐ๋ฐ์์๊ฒ ์์ด ๋ด๊ฐ ๋ง๋ ์ฝ๋๋ฅผ ๋๊ตฐ๊ฐ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๊ต์ฅํ ์ค๋ ๋ ์ผ์ด๊ณ , ๋ฟ๋ฏํ ์ผ์ด ๋ ๊ฒ์ด์์.
Exception์ ํด๊ฒฐํด์ ๊ตฌ๋๋๋ ๋ชจ์ต์ ๋ณด์๋ ๋๋ฌด ํฅ๋ถ๋๊ณ , ์ข์ง๋ง ๋ ๋์๊ฐ ๋ด๊ฐ ๋ง๋ ์ฝ๋๋ฅผ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ค๋ ๊ฒ์ ๋์ฑ ๊ธฐ๋ถ ์ข์ ์ผ์ด ์๋๊น ์๊ฐ๋์.
์ฃผ๋ํ๋์ ๊ธฐ๊น๋๋ ์ฌ๋๋ค Side Project๋ฅผ ์งํํ๋ฉด์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ์ ์๋ Library๋, Framework๋ฅผ ๋ง๋ค์ด์ ๋ฐฐํฌํ์๊ณ ์ฃผ์ฅํ์์ด์.
๊ทธ๋ ๊ฒํด์ ๋๊ตฐ๊ฐ์ ์ํตํ๋ฉด์ ์ง์์ ์ผ๋ก ์ข์ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค๋ฉด ๊ฒ์๋ณด๋ค ๋ ์ฌ๋ฐ๋ ๊ฒ์์ด ๋ ๊ฒ์ด๋ผ ์๊ฐํด์.
์ด๋ฒ ๊ธ์์๋ Jitpack์ ํตํด Library๋ฅผ ๋ง๋ค์ด ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค ํฉ๋๋ค.
JAVA์ Gradle Build Tool์ ์ด์ฉํ๊ณ , Github์ ํตํด์ Library๋ฅผ ๋ฐฐํฌํด ๋ณด๋ คํด์.
์ฐธ๊ณ ๋ก maven central repository์ ์ฌ๋ฆฌ๋ ๋ฐฉ๋ฒ๋ ์๋๋ฐ, ๋๋ฌด ๊น๋ค๋กญ๊ณ ์ด๋ ค์์ ์ข ๋ ํธํ๊ฒ JitPack์ ์ฌ์ฉํด ๋ณด๋ ค๊ณ ํด์.
๐ฆ Project ์ค๋น
์ต์ด ์ฃผ๋ํ๋์ ์์ ๊ฐ์ด Project๋ฅผ ์ค๋นํ์ฌ ์ฃผ์์ด์.
Web ๊ฐ๋ฐ Project๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด Java๋ฅผ ์ด์ฉํ์ฌ ์ฃผ์์ด์.
์ฐธ๊ณ ๋ก ์ฃผ๋ํ๋์ GrupID๋ฅผ github์ ํตํด ๋ฐฐํฌํ ๊ฒ์ด๊ณ , ์กฐ์ง์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์ค์ ํด ์ฃผ์์ด์.
io.github.{์กฐ์ง ํน์ ๊ณ์ ์ด๋ฆ}
apply plugin: 'java'
apply plugin: 'maven-publish'
//plugins {
// id 'java'
//}
group 'io.github.JunyHarang-Open-Source-project'
version '1.0-SNAPSHOT'
sourceCompatibility = 11
targetCompatibility = 11
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
// https://mvnrepository.com/artifact/org.projectlombok/lombok
compileOnly 'org.projectlombok:lombok:1.18.24'
// https://mvnrepository.com/artifact/commons-codec/commons-codec
implementation 'commons-codec:commons-codec:1.15'
testImplementation 'org.assertj:assertj-core:3.21.0'
}
java {
withSourcesJar()
withJavadocJar()
}
publishing {
publications {
maven(MavenPublication) {
from components.java
}
}
}
wrapper {
gradleVersion = "7.5.1"
distributionType = Wrapper.DistributionType.ALL
}
test {
useJUnitPlatform()
}
Build.gradle ๊ฐ์ ๊ฒฝ์ฐ Jitpack ์์ ์ ๋ง์ถฐ์ ์ผ๋ถ ๋ณํ์ ํด ์ฃผ์์ด์.
๐ฝ JitPack
๐ฆ ์ค๋นํ๊ธฐ
JitPack์ JVM Libary Deploy Platform์ผ๋ก ๊น๋ค๋ก์ด ์ธ์ฆ, ์ค์ ์์ด JitPack์ ์ํ๋ Build ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ด๋์ ์ ์๋ Project๋ผ๋ฉด Github ๋ฑ Repository ์กด์ฌ๋ง์ผ๋ก ๋ฐฐํฌํ ์ ์๊ฒ ํด์ฃผ๊ณ ์์ด์.
์ต์ด ์์
ํ๊ธฐ์ ์ ์จ Project Directory ์ต์์ ๊ฒฝ๋ก์ jitpack.yml์ด๋ผ๋ Script๋ฅผ ๋ง๋ค๊ณ , ๋ด๋ถ์ JDK Version์ ๋ช
์ํด ์ฃผ์ด์ผ ํด์.
JitPack์ ๊ธฐ๋ณธ์ ์ผ๋ก Build๋ฅผ jdk 1.8๋ก ์ํํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ค๋ฅธ Version์ ์ฌ์ฉํ๋ค๋ฉด ์์ธ๊ฐ ๋ฐ์ํ์ฌ ๋ฐฐํฌ๊ฐ ์ ์์ ์ผ๋ก ์ด๋ค์ง์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ด์์.
์ด์ Github์ Project๋ฅผ ์ค๋นํด ๋์ด์ผ ํด์.
์ฃผ๋ํ๋์ Project๋ ์ด ๊ณณ์์ ๋ง๋๋ณผ ์ ์๋๋ก ์ค๋นํด ๋๊ฒ์.
๊ทธ๋ฐ ๋ค ์์ ๊ฐ์ด Github Release๋ฅผ ์ํํด ์ค๋๋ค.
๊ทธ๋ฐ ๋ค JitPack(https://jitpack.io)๋ก ์ด๋ํ์ฌ ํด๋น Project Repository ์ฃผ์๋ฅผ ์
๋ ฅํ๊ณ , Look up์ ๋๋ฌ์ค๊ฒ์.
๊ทธ๋ผ ์์ ๊ฐ์ด Github์์ ์ํํ๋ Realese Version์ด ๋์ค๋๊ฑธ ํ์ธํ ์ ์์ด์.
์กฐ๊ธ ๊ธฐ๋ค๋ฆฐ ๋ค Get it Button ์์ ๊ฐ์ด ์ด๋ก์์ผ๋ก ๋์ค๋ฉด ์ ์์ ์ผ๋ก Build๊ฐ ์ํ๋ ๊ฒ์ด์์.
๋ง์ฝ ์คํจํ๋ค๋ฉด Log ์๋ ๋ฌธ์ ๋ชจ์ Button์ด ๋นจ๊ฐ์์ด ๋๊ณ , Status๊ฐ Report๋ก ๋ณํ๊ฒ ๋ ๊ฑฐ์์.
ํด๋น ์์ Log ๋ด์ฉ์ ์ด ๊ณณ์์ ํ์ธํ ์ ์๋๋ก ์ค๋นํด ๋์์ด์.
์ ๊ณผ์ ์ ์ํํ ๋ค ์๋์ ๋์์๋ ๋ด์ฉ๋ค์ ๋ํด build.gradle์ ์
๋ ฅ์ ํด์ฃผ๋ฉด ์ธ๋ถ Project์์ ์ฌ์ฉํ ์ ์๊ฒ ๋์.
๐ฝ ํ์ธํ๊ธฐ
๐ฆ ๋ค๋ฅธ Project์์ ์์กด์ฑ ์ถ๊ฐํด ๋ณด๊ธฐ
์ต์ด ์์ ๊ฐ์ด dependencies{} ์์ allprojects{} ๋ด์ฉ์ ๋ฃ์ด ์ฃผ์์ด์.
๊ทธ๋ฐ ๋ค dependencies์ ์ค์ ์ถ๊ฐํ ์์กด์ฑ ๋ด์ฉ์ ์ถ๊ฐํด ์ค๋๋ค.
dependencies {
...
// Data ์/๋ณตํธํ ์์กด์ฑ ์ถ๊ฐ
implementation 'com.github.JunyHarang-Open-Source-project:Data-Aes-Secret:1.0.0b'
...
}
ํ์ฌ ์์ ๊ฐ์ด Data ์ํธํ Logic์ ๋ํ Class๊ฐ ์๋๊ฑธ ํ์ธํ ์ ์์ด์.
package com.giggalsspeople.itding.common.config.util;
import com.junyharang.datasecret.DataAesSecret;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import static org.springframework.test.util.AssertionErrors.assertEquals;
class DataSecretTest {
@Test
@DisplayName("์ฃผ์ ๋ฐ์ดํฐ AES ์/๋ณตํธํ ํ์ธ")
void majorDataAES128Check() {
String encryptionKeyValue = "์ข์ ์๋น์ค๋ฅผ ๋ง๋ค์ด์! ๐";
String plainText = "์ฐ๋ฆฌ ๊ธฐ๊น๋๋ ์ฌ๋๋ค์ ํ ์ ์๋ค!!";
int[] algorithmLengthArray = {5, 128, 192, 256, 512 , 1024};
String encryptionKey = DataAesSecret.base64Encoder(encryptionKeyValue);
System.out.println("Base64 Encoding encryptionKeyValue : " + encryptionKey);
for (int algorithmLength : algorithmLengthArray) {
if (algorithmLength == 128) {
System.out.println("AES-128 Mode๋ก ์/๋ณตํธํ ์ค์");
} else if (algorithmLength == 192) {
System.out.println("AES-192 Mode๋ก ์/๋ณตํธํ ์ค์");
} else if (algorithmLength == 256) {
System.out.println("AES-256 Mode๋ก ์/๋ณตํธํ ์ค์");
} else {
System.out.println("AES-128 Mode๋ก ์/๋ณตํธํ ์ค์");
}
String encryptionContent = DataAesSecret.aesSecret(algorithmLength, encryptionKey, plainText, 1);
System.out.println("์ํธํ๋ ๋ด์ฉ(Encrypted Value) : " + encryptionContent);
String decryptionBoardContent = DataAesSecret.aesSecret(algorithmLength, encryptionKey, encryptionContent, 2);
System.out.println("๋ณตํธํ๋ ๋ด์ฉ(Decrypted Value) : " + decryptionBoardContent);
assertEquals("์ ์ ์ฒ๋ฆฌ ์๋ฃ", plainText, decryptionBoardContent);
}
}
์์ ๊ฐ์ด Test Code๋ฅผ ๋ง๋ค๊ณ ๋๋ ค ๋ณด๋ฉด
์ ์์ ์ผ๋ก ์คํ๋๋ ๊ฑธ ํ์ธํ ์ ์์ด์.
์ฃผ๋ํ๋์ด ๋ง๋ ์ฃผ์ Data AES ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ ์/๋ณตํธํ Library๊ฐ ํ์ํ์๋ค๋ฉด ์์กด์ฑ์ ์ถ๊ฐํด ์ฃผ์ธ์ ๐
๐ง ์ฐธ๊ณ ์๋ฃ
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
'๊ฐ๋ ์ ๋ฆฌ ์์ ์ค > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Spring AOP; ์คํ๋ง AOP ๊ฐ๋ ์ ๋ฆฌ (0) | 2023.07.15 |
---|---|
[Spring Boot] Discord Bot(๋์ค์ฝ๋ ๋ด) ๋ง๋ค๊ธฐ - JAVA๋ฅผ ์ด์ฉํ API ํธ์ถ (0) | 2023.03.17 |
[JAVA] Object Class (2) | 2022.03.25 |
[JAVA] String Instance / Constant Pool์ด๋? (0) | 2022.03.24 |
[JAVA] getDeclaredFields ํ์ฉํ์ฌ VO ๊ฐ์ฒด์ ํ๋ฒ์ ์ด์ฉํ๊ธฐ (0) | 2022.03.11 |