-
git history ์ ๋ถ ์์ ๊ณ reset ํ๋ ๋ฐฉ๋ฒ
- git history ๋ฅผ ์ ์์ ์ผ ํ ๊น?
- ์์ฃผ์๋ ์ผ์ ์๋์ง๋ง, git history๋ฅผ ์ ๋ถ ๋ ๋ฆฌ๊ณ reset ํด์ผ ํ ๋๊ฐ ์์ต๋๋ค..
- ์๋ฅผ ๋ค์ด, ์๋ฒ์ ๋น๋ฐ๋ฒํธ๋ ์๋ณตํธํ key, ๊ฐ์ธ์ ๋ณด ๋ฑ ๋ ธ์ถ๋๋ฉด ๋ฏผ๊ฐ์ ๋ณด๋ ํ์ผ๋ฑ์ด git์ ์ฌ๋ผ๊ฐ ๋ฒ๋ ธ๋ค๋ฉด?
- ํด๋น ๋ด์ฉ์ ์ง์ฐ๊ณ ๋ค์ commit & push๋ฅผ ํ์ง๋ง, history๋ฅผ ๋ณด๊ณ ์ด์ commit์ ๋ถ๋ฌ์ค๋ฉด ๊ทธ๋ง์ด๋ฏ๋ก, ํด๊ฒฐ์ฑ ์ด ๋ ์ ์์ง์.
- ์์ history๊น์ง ๋ ๋ ค๋ฒ๋ ค์ ์ด์ ์ ์ค์(๊ผญ ์ค์ํ์๋๋ง reset ํ๋ค๊ณ ํ ์๋ ์์ง๋ง)๋ฅผ ์ด๋ ฅ๊น์ง ์ง์์๋ค.
main ํน์ develop๋ฑ ๋จ๊ฒจ๋์ ๋ธ๋์น์์ (์ฌ๊ธฐ์ main)
- –orphan ์ ๊ธฐ์กด์ปค๋ฐ ์ด๋ ฅ์์ด…์ ์๋ฏธ์
๋๋ค. ์ฆ, ๊ธฐ์กด ์ด๋ ฅ์์ด ์์ํ๋ ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ญ๋๋ค.
git checkout --orphan latest_branch
์๋ก ์ปค๋ฐ
git add . git commit -m "initial commit after reset"๊ธฐ์กด ๋ธ๋์น ๋ ๋ฆฌ๊ณ ์๋ก ๋ง๋ฆ
git branch -D main git branch -m mainmain์ force pushํ๊ณ ๋ถํ์ํ ๋ด์ฉ ์ ๋ฆฌํด์ repo ์ต์ ํ
git push -f origin main git gc --aggressive --prune=all
CreatedMon, 24 Mar 2025 20:18:45 +0900 - git history ๋ฅผ ์ ์์ ์ผ ํ ๊น?
-
Clean Code 1์ฅ
ํด๋ฆฐ ์ฝ๋์ ์กฐ๊ฑด- ๋ด ๋๋ฆ์ ์ ๋ฆฌ
- 1์ฅ์์๋ ์๋ฐ๋ C ์ฐฝ์์๋ฑ ๊ฐ๋ฐ๊ณ์ ๊ฑฐ์ฅ๋ค์ด ์๊ฐํ๋ ์ข์ ์ฝ๋์ ๋ํ ๊ฒฌํด๋ฅผ ๋ชจ์๋์ ๋ถ๋ถ์ ๋๋ค.
- ๋ค์์ ์ด ๋ถ๋ค์ ์๊ฒฌ์์ ๋๋ฆ ๊ณตํต์ ์ธ ๋ถ๋ถ์ ์ถ๋ ค์ ๋ด ๋๋ฆ๋๋ก ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
- ์ฌ์ค์ ์ฑ ์ ์ฒด์ ๋ น์ ์๋ ๋ด์ฉ์ด๊ธฐ๋ ํฉ๋๋ค.
SARAM
-
S : Simple
- ๋ด ์๊ฒฌ : ์ฝ๋๋ ๋จ์ํด์ผ ํฉ๋๋ค. ๋น์ฆ๋์ค ๋ก์ง์ด ์ฝ๋์ ๋ น์๋ค๊ธฐ ์์ํ๋ฉด ํ๋ก์ ํธ ์์ฒด๋ ๋ณต์กํด์ง๋๋ค. ์ฝ๋(ํด๋์ค, ๋ฉ์๋ ์ฐจ์)์ด๋ผ๋ ์ฌํํด์ผ ํฉ๋๋ค.
-
A : Atomic
CreatedSat, 22 Mar 2025 20:16:08 +0900 -
AES ์๋ณตํธํ๋ฅผ ์ํ key์์ฑ ์ฝ๋๋ก ๋ง๋ค๊ธฐ
Contents
AES ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ฌ.
- ์๋ณตํธํ๊ฐ ๊ฐ๋ฅํ ๋ํ์ ์ธ ์๋ฐฉํฅ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
- ์๋ฃ์์ผ๋ก ์ฐพ์๋ณด๋ฉด AES(Advanced Encryption Standard)๋ ๋์นญ ํค ์ํธํ ๋ฐฉ์์ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฏธ๊ตญ ๊ตญ๋ฆฝํ์ค๊ธฐ์ ์ฐ๊ตฌ์(NIST)์ ์ํด 2001๋ ํ์ค์ผ๋ก ์ฑํ๋์์ต๋๋ค. Rijndael ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ๋์ ๋ณด์์ฑ๊ณผ ๋น ๋ฅธ ์ฑ๋ฅ ๋๋ถ์ ๋ค์ํ ๋ณด์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
AES ํน์ง
- ๋์นญ ํค ์ํธํ: ๋์ผํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํ ๋ฐ ๋ณตํธํํฉ๋๋ค.
- ๊ณ ์ ๋ ๋ธ๋ก ํฌ๊ธฐ: AES๋ 128๋นํธ ๋ธ๋ก ํฌ๊ธฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ค์ํ ํค ๊ธธ์ด ์ง์: 128๋นํธ, 192๋นํธ, 256๋นํธ ํค ๊ธธ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ณด์์ฑ: ๊ธฐ์กด์ DES(Data Encryption Standard)๋ณด๋ค ๊ฐ๋ ฅํ ๋ณด์์ฑ์ ์๋ํฉ๋๋ค.
- ๋น ๋ฅธ ์๋: ์ํํธ์จ์ด ๋ฐ ํ๋์จ์ด์์ ํจ์จ์ ์ผ๋ก ๋์ํฉ๋๋ค.
AES ์ํธํ ๊ณผ์
-
AES ์ํธํ๋ ์ฌ๋ฌ ๋ผ์ด๋(Round)์ ์ฐ์ฐ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ์ฌ์ฉ๋๋ ํค ๊ธธ์ด์ ๋ฐ๋ผ ๋ผ์ด๋ ์๊ฐ ๋ฌ๋ผ์ง๋๋ค.
CreatedThu, 20 Mar 2025 16:18:45 +0900 -
Java์์ AES๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด key, iv ๋ฑ ์์ฑํ๋ ์ฝ๋
- ์๊ณ ๋ฆฌ์ฆ์ AES-128, AES-192, AES-256 ์ด๋ค ๊ฑธ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ key, iv์์ฒด์ size๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค
- ๋ณธ ๊ธ์์๋ AES/CBC/PKCS5Padding 256 ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ต๋๋ค.
Java์์ ์๋ณตํธํ์ ์ฌ์ฉํ๊ธฐ ์ํ key, iv ๋ ์ด๋ป๊ฒ ๋ง๋ค๊น?
- ํ์ ์์๋ key, iv๋ฅผ ๋ฐ์ดํฐ ์ ๊ณต ์ธก๊ณผ ์๋น์ธก์์ ์์ชฝ์์ key, iv๋ฅผ ๊ณต์ ํ๋๋ฐ key, iv๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ๋ ๋ค์ํ์ต๋๋ค.
- ๋ณธ ๊ธ์์ ๋ค์ํ ์ผ์ด์ค๋ฅผ ์ฝ๋๋ก ์ฒ๋ฆฌํ ๋ด์ฉ์ ์ ์ด๋ด ๋๋ค.
- ๋์ฒด๋ก key,iv๋ base64ํน์ hex๋ฑ์ผ๋ก encodeํด์ ์ ์ฅํ๊ณ , runtime์ decodeํด์ ์ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
key ๋ง๋ค๊ธฐ ๋ค์ํ ๋ฐฉ๋ฒ
- base64๋ฑ encode ์์ด ๊ทธ๋ฅ ๋ฌธ์์ด๋ก ๋ง๋ค๊ธฐ
public String generateRandomString() { String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+"; SecureRandom random = new SecureRandom(); StringBuilder sb = new StringBuilder(32); for (int i = 0; i < 32; i++) { sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length()))); } return sb.toString(); }- base64๋ java.util ์ ์ฐ๊ธฐ๋ ํ๊ณ apache.commons.codec.binary๋ฑ์ ์ธ ์ ์์ต๋๋ค.
public void keyGenerator() throws NoSuchAlgorithmException { // 1. Secret Key ์์ฑ (AES-256) KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(256); // AES-256 ์ฌ์ฉ SecretKey secretKey = keyGenerator.generateKey(); // 2. IV ์์ฑ (AES CBC ๋ชจ๋์์๋ 16๋ฐ์ดํธ IV ํ์) byte[] iv = new byte[16]; SecureRandom secureRandom = new SecureRandom(); secureRandom.nextBytes(iv); // 3. Base64๋ก ์ธ์ฝ๋ฉํ์ฌ ์ถ๋ ฅ System.out.println("Secret Key (Base64): " + Base64.getEncoder().encodeToString(secretKey.getEncoded())); System.out.println("IV (Base64): " + Base64.getEncoder().encodeToString(iv)); }- base64
public void generateBase64RandomKey() { int AES_KEY_SIZE = 32; //256 bit int IV_SIZE = 16; byte[] secretKeyBytes = new byte[AES_KEY_SIZE]; byte[] ivBytes = new byte[IV_SIZE]; new SecureRandom().nextBytes(secretKeyBytes); new SecureRandom().nextBytes(ivBytes); log.info("secretKeyBytes: {}", Base64.getEncoder().encodeToString(secretKeyBytes)); log.info("ivBytes: {}", Base64.getEncoder().encodeToString(ivBytes)); }- hex
public void generateHexRandomKey() { int AES_KEY_SIZE = 32; //256 bit int IV_SIZE = 16; byte[] secretKeyBytes = new byte[AES_KEY_SIZE]; byte[] ivBytes = new byte[IV_SIZE]; new SecureRandom().nextBytes(secretKeyBytes); new SecureRandom().nextBytes(ivBytes); log.info("secretKeyBytes: {}", bytesToHex(secretKeyBytes)); log.info("ivBytes: {}", bytesToHex(ivBytes)); }- 32byte(256bit) ๋๋ค ๋ฌธ์์ด ๋ง๋ค๊ณ , base64 encode ํ๊ธฐ
public void generateRandomStringAndGenerateKey() { int size = 32; String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()-_=+"; SecureRandom random = new SecureRandom(); StringBuilder sb = new StringBuilder(size); for (int i = 0; i < size; i++) { sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length()))); } String secretKeyBase64 = Base64.getEncoder().encodeToString(sb.toString().getBytes()); String ivBase64 = Base64.getEncoder().encodeToString(sb.substring(0,16).getBytes()); }- 32byte ๋ฌธ์์ด์ ์ฌ์ฉํด์ base64 encode ํ๊ธฐ
public void generateKeyWithString() { String input = "YOUR 32์๋ฆฌ ๋ฌธ์์ด"; String secretKeyBase64 = Base64.getEncoder().encodeToString(input.getBytes()); String ivBase64 = Base64.getEncoder().encodeToString(input.substring(0,16).getBytes()); String decoded = new String(Base64.getDecoder().decode(secretKeyBase64)); }CreatedThu, 20 Mar 2025 16:18:45 +0900 -
๋ด ์ฐ๋ถํฌ ์๋ฒ์ SSL ๋ฌด๋ฃ ์ค์นํ๊ธฐ
- SSL ๋ฐ๊ธ ์ฌ์ดํธ : https://zerossl.com/ ๋ค๋ฅธ ๋ฌด๋ฃ ์ฌ์ดํธ๋ ๋ง์ด ์์ต๋๋ค๋ง ์ฌ๊ธฐ์ ๋ค ๋์ดํ ํ์๋ ์์ ๋ฏ ํฉ๋๋ค..
- ๋ด๊ฐ ์ฐ๋ ๋๋ฉ์ธ ์๋น์ค ์ ์ฒด : whois
SSL ์ค์น ์ ์ฐจ
- ๋ฌด๋ฃ SSL์ ์ ์ฝ์ฌํญ์ ๋ณ๋๋ก ์์๋ณด๊ธฐ๋ก ํ๊ณ
- ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋จผ์ ์ธ์ฆ๊ธฐ๊ด์ผ๋ก ๋ถํฐ ํด๋น ๋๋ฉ์ธ์ ์์ ์ฃผ๊ฐ ๋ง๋์ง ํ์ธ์ ๋ฐ๊ณ ์ธ์ฆ๊ธฐ๊ด์ผ๋ก๋ถํฐ SSL์ธ์ฆ์์ key๋ฅผ ๋ฐ์์ ์๋ฒ์ ์ค์นํ์์ ๊ฒ์ฆ๋ฐ์ผ๋ฉด SSL๋ฐ๊ธ์ ์๋ฃํ๋ค๊ณ ํ ์ ์์ต๋๋ค..
- ์ด๋ฅผ DV(Domain Validation) ์ด๋ผ๊ณ ํ๋๋ฐ, ์๊ท๋ชจ ์ฌ์ดํธ๋ ๊ฐ๋ฐ์๋ฒ์์ ๊ฐ๋ตํ๊ฒ ๋ฌด๋ฃ๋ก ๋ฐ๊ธ๋ฐ์ ์ฌ์ฉ์์ ์ฌ์ฉํฉ๋๋ค.
๋๋ฉ์ธ ์์ ์ฃผ์์ ํ์ธ ๋ฐ๊ธฐ
- ZeroSSL์ ํ์๊ฐ์
- SSL Certificate Setup ์์ ๊ฐ ํญ๋ชฉ ์ฑ์์ค๋๋ค.
- Domains
- Validity : 90-Day Certificate ๋ก ํด์ผ ๋ฌด๋ฃ
- Add-Ons : ์๋ฌด๊ฒ๋ ์ ํํ์ง ์์์ผ ๋ฌด๋ฃ ๊ฐ๋ฅ
- CSR & Contact : Auto-Generate CSR ํ์ฑํ
- Finalize Your Order: Free ์ ํ
CreatedSat, 01 Mar 2025 15:19:58 +0900 -
Restdoc Swagger Ui Sample
์๋ก
-
๊ฐ๋ฐ์์ ํ ์คํธ ์ฝ๋์ ์ค์์ฑ์ ๋ํด์๋ ๋ฐ๋ก ํฌ์คํ ์์ ์ ๋๋ค.
-
๋ฐฑ์๋์์ api ๊ฐ๋ฐ์ ํด๋น api์ ์ฌ์ฉ๋ฒ์ ๋ํ ๋ฌธ์ํ๋ ํ์ ์์ ํ์์ ๋๋ค.
-
๊ฐ์ฅ ๋ฌด์ํ ๋ฐฉ๋ฒ์ผ๋ก๋ confluence๊ฐ ๋์๋ wiki๊ฐ ๋์๋ , ์์ ์ด ๋์๋ api ๊ฐ๋ฐ์ด ์์๋ ๋ง๋ค ์์์ ์ผ๋ก ๋ฌธ์ํํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ api๊ฐ ์์ ๋ ๋๋ง๋ค ๋ฌธ์๋ฅผ ์์ ํด์ค์ผ ํ๋ ๋จ์ ์ด ์์ต๋๋ค. ๊น๋นกํ๊ณ ๋ฌธ์ ์ ๋ฐ์ดํธ๊ฐ ์๋๋ ์ผ์ด์ค๊ฐ ํ์ ์์ ์ผ๋ง๋ ์์ฃผ ๋ฐ์ํ๋ ์ง๋ฅผ ์๊ฐํ๋ฉด ์ ๋ ๋น์ถ.
CreatedSat, 01 Feb 2025 20:18:03 +0900 -