๋ชฉ๋ก๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (454)
Bibi's DevLog ๐ค๐
[210626] [JPA] QueryDSL ์ฌ์ฉํ๊ธฐ JPA ์ฌ์ฉ ์, @Query์ JPQL ๋์ ๋ฉ์๋๋ก SQL๋ฌธ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ ๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์ ํ์ธ ๊ฐ๋ฅ build.gradle ์์กด์ฑ ์ถ๊ฐ plugins { id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } ... dependencies { implementation 'com.querydsl:querydsl-jpa' implementation 'com.querydsl:querydsl-apt' // ์๋๋ ์๋ค๋ฉด ์ถ๊ฐ (lombok์ ์ ํ) implementation 'org.springframework.boot:spring-boot-starter-dat..
ํ๋ก๊ทธ๋๋จธ์ค Lv1 - ์์ฐ์ ๋ค์ง์ด ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ class Solution { public int[] solution(long n) { String nStr = Long.toString(n); String[] nStrArr = nStr.split(""); int length = nStr.length(); int[] answer = new int[length]; for (int i = 0; i < length; i++) { answer[i] = Integer.parseInt(nStrArr[length-i-1]); } return answer; } }ํผ์์๋ ์ ํด๋๋์? : ๋ฌด์ํ ๊ตฌ๊ธ๋ง ๋์ โญ ๋งํ ๋ถ๋ถ : ํจ์จ์ฑ์ ์ํด ๋ต์ ๋ฃ์ด์ง ์ซ์๋ ๋นผ์ผ ํ ๊ฒ ๊ฐ์๋ฐ ์ด๋ป๊ฒ ๋นผ์ง? ๋์๋ฆฌ * 10์ ๋ฐฐ์ ..
์ธํ ๋ฆฌ์ ์ด๋ฅผ ์ฌ์ฉํด private DB์ ํฐ๋๋ง์ผ๋ก ์ ์ํ๊ธฐ public ์ธ์คํด์ค๋ฅผ ํตํด private ์ธ์คํด์ค๋ก ์ ์ํ๊ธฐ-ํค ํฌ์๋ฉ ํด๋น ๋งํฌ์์ ์ ๋ฆฌํ ์์ ์ ์ธํ ๋ฆฌ์ ์ด์์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ค๋น๋ฌผ : DB๊ฐ ์ค์น๋ private ์ธ์คํด์ค, public์ธ์คํด์ค, ๋ ์ธ์คํด์ค์ ๊ฐ ํคํ์ผ(.pem) ์ธํ ๋ฆฌ์ ์ด ํ๋ฉด ๋งจ ์ค๋ฅธ์ชฝ ํด๋ฐ์ [Database] ์ ํ - [+] ํด๋ฆญ [Datasource]์์ ์์ ์ DB๋ฅผ ์ ํ ์ค๊ฐ ํ๋ฉด์์ General์ด ์๋ SSH/SSL ํด๋ฆญ User SSH tunnel์ ์ฒดํฌ ํ ์ค๋ฅธ์ชฝ [...] ํด๋ฆญ Host์ public ์ธ์คํด์ค์ public IP์ฃผ์ ์ ๋ ฅ User name์ public์ธ์คํด์ค์ ์ฌ์ฉ์ ์ด๋ฆ ์ ๋ ฅ (์ธ์คํด์ค - [์ฐ๊ฒฐ] - EC2์ธ์คํด์ค ์ฐ๊ฒฐ ์ ์..
๋ฐฐํฌ ์๋ฒ์ ํ๊ฒฝ๋ณ์ ์ค์ ํ๊ธฐ ์ธํ ๋ฆฌ์ ์ด์์ ๋ฑ๋กํด ๋์ ํ๊ฒฝ๋ณ์๋ฅผ ๋ฐฐํฌ ์๋ฒ์๋ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. https://www.serverlab.ca/tutorials/linux/administration-linux/how-to-set-environment-variables-in-linux/ ์ "Persisting Environment Variables for a User" ํญ๋ชฉ์ ๋ฐ๋ผํ๋ค. vi ~/.bash_profile ํด๋น ํ์ผ์ ํ๊ฒฝ๋ณ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ค์ (์๋๋ ๊ทธ ์์) export BASE_IP=public์๋ฒip์ฃผ์ export USERNAME=์์ด๋ export PASSWORD=๋น๋ฐ๋ฒํธ export JASYPT_PASSWORD=์ํฌ๋ฆฟํค source ~/.bash_profile ๋ช ๋ น์ด๋ก ํด..
VPC ๋ฐ ์๋ธ๋ท ์์ฑ (private์ธ์คํด์ค์ public์ธ์คํด์ค ๋ถ๋ฆฌ ์์ฑํ๊ธฐ) ์ถ์ฒ : ์ฐ๋์ ํ๊ธฐ๋ ธํธ & ๊ฐ๋ฅด์นจ ๐โ๏ธ VPC๋? ์ ๊ธ์ ๋จผ์ ์ฝ์ด๋ณด๊ณ ์์ํ์. VPC : virtual private cloud ๊ฐ์ ์ฌ์ค๋ง(์ฌ์ค๋คํธ์ํฌ). VPC ์ ๋ง๋๋๊ฐ? ์๋น์ค์ ๊ฐ๋ฐ๋ง์ ๋ถ๋ฆฌํ๋ ๋ฑ '๋ง ๋ถ๋ฆฌ'๋ฅผ ์ํด VPC๋ฅผ ์์ฑํ๋ค. ๊ธฐ๋ฅ์ ๋ฐ๋ผ VPC๋ฅผ ํตํด ๋คํธ์ํฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ณด์์, ๊ด๋ฆฌ์ ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋ฐ/ํ๋ก๋์ /๋ฒ ํํ ์คํธ/์๋น์ค ... ๋ฑ ํ๊ฒฝ์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ผ ํ๋ฏ๋ก VPC๋ฅผ ์ฌ์ฉํ๋ค. VPC์ IPv4 CIDR๋ ์ฌ์คIP์ด๋ฏ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฐ๋ IP์ ๊ฒน์น์ง ์๋๋ค. ํ์ง๋ง reserved ip(private address space)๋ฅผ ํผ..
jasypt (์๋ฐ ํค ์ํธํ ๋ฐฉ์) ์ถ์ฒ : ์ฐ๋๊ฐ ๊ณต์ ํด์ฃผ์ ํ๊ธฐ๋ ธํธ๐โ๏ธ Jasypt Java Simplified Encryption ์๋ฐ ์ฝ๋ ์ํธํ ์๋น์ค ์ ๊ณต DB ํจ์ค์๋, OAuth Client Secret ๋ฑ ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ์ํธํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. Jasypt ์ฌ์ฉํ๊ธฐ 1. ์์กด์ฑ ์ถ๊ฐ build.gradle ์ ์๋ ์ฝ๋ ์ถ๊ฐ compile 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3'2. ๋น๋ฐ๋ฒํธ ์ํธํ https://www.devglan.com/online-tools/jasypt-online-encryption-decryption ์์ ์ํธํํ๊ณ ์ถ์ ์ฝ๋์ ์ํธํ๋ฅผ ์งํ [Jasypt Online Encry..
์ค์ ๋ถ๋ฅ๋๋ก application-๋ถ๋ฅ.properties ํ์ผ์ resourceํจํค์ง์ ์ถ๊ฐํ๊ณ ๊ด๋ จ ์ค์ ์ ํด๋น ํ์ผ๋ก ๋ถ๋ฆฌํ๋ค. ์๋ ์ฝ๋๋ฅผ ์๋ application.propertiesํ์ผ์ ์ถ๊ฐํ๋ค. spring.profiles.include=๋ถ๋ฅ๋ช 1,๋ถ๋ฅ๋ช 2,๋ถ๋ฅ๋ช 3์๋ฅผ ๋ค์ด ๊ธฐ์กด application.properties ์ ํ๊บผ๋ฒ์ ๋ค์ด ์๋ jwt, oauth ์ค์ ๋ค์ ๋ถ๋ฆฌํ๊ณ ์ถ์ ๋ jwt, oauth ์ค์ ๋ค์ ๊ฐ๊ฐ application-jwt.properties, application-oauth.properties ์ผ๋ก ๋ถ๋ฆฌ ๊ธฐ์กด application.properties์ spring.profiles.include=jwt,oauth ์ถ๊ฐ
IPv4 CIDR ์ฝ๋ ๋ฒ(ip์ฃผ์ ์ฝ๋ ๋ฒ) 0.0.0.0/0 IP์ฃผ์๋ 32๋นํธ๋ก ๋์ด ์๋ค. (0.0.0.0 ~ 255.255.255.255) (= ์ด์ง์๋ก ํํํ๋ฉด 11111111.11111111.11111111.11111111์ด๊ธฐ ๋๋ฌธ์ 32๋นํธ๋ผ๊ณ ํ๋ค.) / ์ผ์ชฝ์ ์ซ์ 4 ์๋ฆฌ์ 1 ์ซ์๊ฐ ๊ฐ๊ฐ 8๋นํธ๋ฅผ ์๋ฏธํจ (2์ 3์น) ๊ฐ ์๋ฆฌ๋ 0๋ถํฐ 255๊น์ง์ ์ซ์(256๊ฐ = 2์ 8์น. ๊ทธ๋์ 8๋นํธ)๋ฅผ ๊ฐ์ง ์ ์๋ค. / ์ดํ์ ์ซ์ (์ต๋ 32 = 8๋นํธ * 4) = prefix. ์ฌ์ฉํ IP ์ฃผ์์์ ์ผ์ชฝ๋ถํฐ n๊ฐ์ ๊ณ ์ ๋ฒ์๋ฅผ ์ค์ ํ ์ ์๋ค ์๋ฅผ ๋ค์ด /16์ด๋ผ๋ฉด '์ด์ง์ ๊ธฐ์ค' ์ผ์ชฝ์์ 16๊ฐ์ ์ซ์๋ค์ ๊ณ ์ ํ๊ฒ ๋ค๋ ๋ป์ด๋ค. (11111111.11111111.๊ฐ๋ณ.๊ฐ..