-
AES key์ ๋ํ ๋ณด์์ฑ
- ๋ณธ ํฌ์คํธ๋ AES Key๋ ์ด๋ค ์์ผ๋ก ์์ฑํ๊ณ ๋ณด๊ดํ ๊ฒ์ธ์ง์ ๋ํ ChatGPT์ ์๊ฒฌ?์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ ๋์์ต๋๋ค.
์ง๋ฌธ
- AES/CBC/PKCS5Padding 256 ์ผ๋ก ์๋ณตํํ ๋ secret key๋ฅผ
- ๋ฐ์ด๋๋ฆฌ 32byte๋ฅผ base64 encodeํด์ ์ ์ฅํด๋๊ณ ์๋ณตํธํ์ decodeํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์๋จ์ด ์กฐํฉ 32byte ๊ทธ๋๋ก ์ ์ฅํด๋๊ณ ์ฌ์ฉ
- ์๋จ์ด์ _ ์กฐํฉ 32byte ๋ฅผ base64 encodeํด์ ์ ์ฅ
- ์,์ซ์,ํน์๋ฌธ์ ์กฐํฉ์ ๋๋ค์คํธ๋ง 32byte๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ ์ด๋ค ๋ฐฉ๋ฒ์ด ๋ณด์์ ๊ฐ์ฅ ์์ ํ๊ฐ
๋ต๋ณ
AES/CBC/PKCS5Padding 256 ์ํธํ์์ SecretKey๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ณด์์ ๋งค์ฐ ์ค์ํ ์์์ ๋๋ค. ์ฃผ์ด์ง 4๊ฐ์ง ๋ฐฉ์ ์ค ๋ณด์์ ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ํ๋จํ๋ ค๋ฉด, ๋ค์ ๋ ๊ฐ์ง ๊ธฐ์ค์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค:
CreatedSat, 12 Apr 2025 16:18:45 +0900 -
์๋ฒ ์๋ต ์ง์ฐ์ด๋ Timeout ๊ด๋ จ ์ด์๋ฅผ ์ถ์ ํ๋ ค๋ฉด, ์์ฒญ/์๋ต ์๊ฐ ๋ก๊ทธ๋ฅผ ์ง์ ๋จ๊ธฐ๊ฑฐ๋, Spring์ ์ปค์คํ
Filter๋๋Feign Logger๋ฅผ ํ์ฉํ๋ฉด ์์ฃผ ํจ๊ณผ์ ์ ๋๋ค. ์๋์์ ๋ ๊ฐ์ง ์ผ์ด์ค ๋ชจ๋ ๋ค๋ค๋ณผ๊ฒ์.
โ 1. Feign ์์ฒญ/์๋ต ์๊ฐ ๋ก๊น ํํฐ
๐ง ์์ฒญ ์ ์ ์๊ฐ ์ ์ฅ โ ์๋ต ํ ์์ ์๊ฐ ์ธก์
@Component public class FeignRequestTimingInterceptor implements RequestInterceptor { private static final Logger log = LoggerFactory.getLogger(FeignRequestTimingInterceptor.class); @Override public void apply(RequestTemplate template) { template.header("X-Request-Start-Time", String.valueOf(System.currentTimeMillis())); } }๊ทธ๋ฆฌ๊ณ
ErrorDecoder๋FeignClientExceptionDecoder์์ ์๊ฐ ๋ก๊ทธ ์ถ๋ ฅ:CreatedFri, 11 Apr 2025 18:54:11 +0900 -
@JsonIgnore๋ฅผ ๋ถ์ด๋ฉด ํด๋น ํ๋๋ JSON ๋ณํ ์ ๋ฌด์กฐ๊ฑด ์ ์ธ๋ฉ๋๋ค. ์ฆ, ๊ฐ์ด ์๋ ์๋ ๊ด๊ณ์์ด JSON ๊ฒฐ๊ณผ์ ํ๋ ์์ฒด๊ฐ ํฌํจ๋์ง ์์ต๋๋ค.์์๋ก ๋ณด๋ฉด:
public class User { private String name; @JsonIgnore private String password; // getters/setters }์ ๊ฐ์ฒด๋ฅผ JSON์ผ๋ก ๋ณํํ๋ฉด (์:
name="Alice",password="secret"์ด๋๋ผ๋):{ "name": "Alice" }passwordํ๋๋ ๋ฌด์กฐ๊ฑด ๋น ์ง๋๋ค.
๋ฐ๋ฉด, ๊ฐ์ด ์์ ๋๋ง ํ๋๋ฅผ ์ ์ธํ๊ณ ์ถ๋ค๋ฉด
@JsonInclude๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค:CreatedTue, 08 Apr 2025 17:42:13 +0900 -
Rest API๋ ๋ฌด์์ด๋ฉฐ, RestFul ํ๋ค๋ ๊ฑด ์ด๋ค ์๋ฏธ์ธ๊ฐ?
REST API์ RESTful์ ๊ฐ๋ ์ ์น ๊ฐ๋ฐ์์ ์์ฃผ ๋ฑ์ฅํ์ง๋ง, ์ฒ์ ์ ํ๋ฉด ํท๊ฐ๋ฆด ์ ์์ด์. ์ฝ๊ฒ ํ์ด์ ์ค๋ช ํด๋ณผ๊ฒ์.
๐น REST API๋?
REST๋ “REpresentational State Transfer"์ ์ฝ์์์. 2000๋ ์ ๋ก์ด ํ๋ฉ(Roy Fielding)์ด ๋ ผ๋ฌธ์์ ์ ์ํ ์น ์ํคํ ์ฒ ์คํ์ผ ์ค ํ๋์ฃ .
์ฆ, REST API๋ ์ด REST ์์น์ ๋ฐ๋ผ ์ค๊ณ๋ ์น API๋ฅผ ๋งํด์.
๐น REST์ ํต์ฌ ๊ฐ๋
REST๋ ๋ค์์ 6๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ํด์:
-
ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ
- ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ , ์ฑ)์ ์๋ฒ๋ ์๋ก ๋ถ๋ฆฌ๋์ด ์ญํ ์ ๋๋.
-
๋ฌด์ํ์ฑ (Stateless)
CreatedThu, 03 Apr 2025 18:02:29 +0900 -
-
@Mock๊ณผ@MockBean์ ๋ ๋ค ํ ์คํธ์์ Mock ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ด๋ ธํ ์ด์ ์ด์ง๋ง, ์ฐ์ด๋ ํ๊ฒฝ๊ณผ ์ญํ ์ด ์กฐ๊ธ ๋ฌ๋ผ์. ๊ฐ๋จํ ์ฐจ์ด๋ถํฐ ์์ฝํ๋ฉด:
๐น
@Mock(from Mockito)- Mockito์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์
- **์์ ๋จ์ ํ ์คํธ(Unit Test)**์ ์ฌ์ฉ
- Spring Context์๋ ๋ฌด๊ด
- ํ ์คํธ ํด๋์ค ๋ด์์ ์์กด์ฑ์ Mock์ผ๋ก ์ฃผ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
MockitoAnnotations.openMocks(this)๋๋@ExtendWith(MockitoExtension.class)์ ํจ๊ป ์ฌ์ฉํด์ผ ํจ
์์:
@ExtendWith(MockitoExtension.class) class MyServiceTest { @Mock private MyRepository myRepository; @InjectMocks private MyService myService; @Test void testSomething() { // myRepository๋ mock ๊ฐ์ฒด } }
๐ธ
@MockBean(from Spring Boot)- Spring Boot Test์์ ์ ๊ณตํ๋ ์ด๋ ธํ ์ด์
- ํตํฉ ํ ์คํธ(Integration Test) ์ ์ฌ์ฉ
- Spring ApplicationContext์ ๋ฑ๋ก๋ Bean์ Mock์ผ๋ก ๊ต์ฒด
@SpringBootTest,@WebMvcTest,@DataJpaTest๊ฐ์ Spring ๊ธฐ๋ฐ ํ ์คํธ ํ๊ฒฝ์์ ์ฌ์ฉ
์์:
CreatedThu, 03 Apr 2025 15:57:29 +0900 -
@Mock ๊ณผ @InjectedMock
@Mock๊ณผ@InjectMocks์ ์ฐจ์ด๋ฅผ ์์๋ณผ๊ฒ์. ์ด ๋์ ํจ๊ป ์์ฃผ ์ฐ์ด์ง๋ง ์๋ก ๋ค๋ฅธ ์ญํ ์ ํด์.
๐น
@Mock- Mockito์์ ์ ๊ณต
- Mock ๊ฐ์ฒด๋ฅผ ์์ฑํด์ค
- ๋จ๋ ์ผ๋ก๋ ๊ทธ๋ฅ ๊ฐ์ง ๊ฐ์ฒด์ผ ๋ฟ, ์๋ฌด ๋ฐ๋ ์ฃผ์ ๋์ง ์์
@Mock private MyRepository myRepository; // ๊ฐ์ง ๊ฐ์ฒด ์์ฑ
๐ธ
@InjectMocks- ์ญ์ Mockito์์ ์ ๊ณต
- ํ
์คํธ ๋์ ๊ฐ์ฒด(ํ
์คํธํ ํด๋์ค)๋ฅผ ์์ฑํ๊ณ ,
๊ทธ ์์ ์๋ ์์กด์ฑ ํ๋์@Mock์ผ๋ก ๋ง๋ ๊ฐ์ฒด๋ค์ ์๋์ผ๋ก ์ฃผ์
@InjectMocks private MyService myService; // MyService ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ๋ด๋ถ์ ์๋ MyRepository ๋ฑ์ @Mock ๊ฐ์ฒด๋ฅผ ์ฃผ์
โ ๊ฐ๋จ ์์
@ExtendWith(MockitoExtension.class) class MyServiceTest { @Mock private MyRepository myRepository; @InjectMocks private MyService myService; @Test void testSomething() { // myService๋ ์ค์ ๊ฐ์ฒด // myRepository๋ mock ๊ฐ์ฒด // myService ๋ด๋ถ์์ myRepository๊ฐ ์ฌ์ฉ๋ ๋ mock์ด ์ฃผ์ ๋จ } }
๐ ์ ๋ฆฌํ์๋ฉด:
์ด๋ ธํ ์ด์ ์ญํ @Mock๊ฐ์ง(Mock) ๊ฐ์ฒด ์์ฑ @InjectMocksํ ์คํธ ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , @Mock๊ฐ์ฒด๋ฅผ ๊ทธ ์์ ์ฃผ์์ฆ,
@Mock์ด ๊ฐ์ง ๋ถํ์ ๋ง๋๋ ๊ฑฐ๊ณ ,
@InjectMocks๋ ๊ทธ ๋ถํ์ ์กฐ๋ฆฝํด์ ํ ์คํธ ๋์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฑฐ์์.CreatedThu, 03 Apr 2025 15:57:29 +0900