ํค์ด ํ๋ธ๋ฅด.
์ด ๊ธฐ์ฌ์์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์คํํ๊ธฐ ์ํ ํ์ต ํ๊ฒฝ์ ๋ง๋ ๊ฒฝํ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค. ๊ฐ๊ฐ์ ์๋ก์ด ๋๊ตฌ๋ฅผ ๋ฐฐ์ธ ๋๋ฉด ํญ์ ๋ก์ปฌ ์ปดํจํฐ๋ฟ๋ง ์๋๋ผ ๋ณด๋ค ํ์ค์ ์ธ ์กฐ๊ฑด์์๋ ์๋ํ๊ณ ์ถ์์ต๋๋ค. ๋ฐ๋ผ์ ๋์ค์ ๋ชจ๋ ์ข ๋ฅ์ ํฅ๋ฏธ๋ก์ด ๊ธฐ์ ๋ก "๋ฎ์ผ" ์ ์๋ ๋จ์ํ๋ ๋ง์ดํฌ๋ก ์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ํ๋ก์ ํธ์ ์ฃผ์ ์๊ตฌ ์ฌํญ์ ์ค์ ์์คํ ์ ๋ํ ๊ธฐ๋ฅ์ ๊ทผ์ ์ฑ์ ๋๋ค.
์ฒ์์๋ ํ๋ก์ ํธ ์์ฑ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋์์ต๋๋ค.
-
'๋ฐฑ์๋'(๋ฐฑ์๋) ๋ฐ '๊ฒ์ดํธ์จ์ด'(๊ฒ์ดํธ์จ์ด)์ ๋ ๊ฐ์ง ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์ด๋ฅผ ๋์ปค ์ด๋ฏธ์ง๋ก ์์ถํ๊ณ ํจ๊ป ์๋ํ๋๋ก ์ค์ ํฉ๋๋ค.
ํค์๋: Java 11, Spring Boot, Docker, ์ด๋ฏธ์ง ์ต์ ํ
-
Google Kubernetes Engine์์ Kubernetes ๊ตฌ์ฑ ๋ฐ ์์คํ ๋ฐฐํฌ ๊ฐ๋ฐ ํค์๋: Kubernetes, GKE, ๋ฆฌ์์ค ๊ด๋ฆฌ, ์๋ ํ์ฅ, ๋ณด์ ๋น๋ฐ
-
๋ ๋์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ๋ฅผ ์ํด Helm 3๋ก ์ฐจํธ ๋ง๋ค๊ธฐ
ํ๊ทธ: Helm 3, ์ฐจํธ ๋ฐฐํฌ
-
ํด๋ฌ์คํฐ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํ Jenkins ๋ฐ ํ์ดํ๋ผ์ธ ์ค์
ํค์๋: Jenkins ๊ตฌ์ฑ, ํ๋ฌ๊ทธ์ธ, ๋ณ๋์ ๊ตฌ์ฑ ์ ์ฅ์
๋๋ ๊ฐ ๋จ๊ณ์ ๋ณ๋์ ๊ธฐ์ฌ๋ฅผ ์ธ ๊ณํ์ ๋๋ค.
์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ์ ์ด์ ์ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ ๋จ์ผ ์์คํ ์์ ์๋ํ๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋ชจ๋ ๊ฒ๋ค์ ๋ณดํต ๊ฐ๋ฐ์์ ์ฑ ์ ๋ฐ์ ์์ง๋ง ์ ์ด๋ 20% ์ ๋๋ ์ต์ํด์ง๋ ๊ฒ์ด ์ฌ์ ํ ์ ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค(์์๋ค์ํผ ๊ฒฐ๊ณผ์ 80%๋ฅผ ์ค๋๋ค). ๋ณด์๊ณผ ๊ฐ์ ์ผ๋ถ ๋ฌด์กฐ๊ฑด์ ์ธ ์ค์ํ ์ฃผ์ ๋ ์ด ์์คํ ์ด ๊ฐ์ธ์ ์ธ ์ฉ๋๋ก๋ง ๋ง๋ค์ด์ง๋ ๊ฒ์ ๋ํด ์์ฑ์๊ฐ ๊ฑฐ์ ์ดํดํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด ํ๋ก์ ํธ์์ ์ ์ธ๋ฉ๋๋ค. ์ด๋ค ์๊ฒฌ์ด๋ ๊ฑด์ค์ ์ธ ๋นํ๋ ํ์ํฉ๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค ์์ฑ
์๋น์ค๋ Spring Boot๋ฅผ ์ฌ์ฉํ์ฌ Java 11๋ก ์์ฑ๋์์ต๋๋ค. ์๋น์ค ๊ฐ ์ํธ ์์ฉ์ REST๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋ฉ๋๋ค. ํ๋ก์ ํธ์๋ ์ต์ํ์ ํ
์คํธ๊ฐ ํฌํจ๋ฉ๋๋ค(๋์ค์ Jenkins์์ ํ
์คํธํ ํญ๋ชฉ์ด ์์). ์๋น์ค์ ์์ค ์ฝ๋๋ GitHub์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ ์๋น์ค์ ์ํ๋ฅผ ํ์ธํ ์ ์๋๋ก Spring Actuator๊ฐ ์ข ์ ํญ๋ชฉ์ ์ถ๊ฐ๋์์ต๋๋ค. /actuator/health ์๋ํฌ์ธํธ๋ฅผ ์์ฑํ๊ณ ์๋น์ค๊ฐ ํธ๋ํฝ์ ์๋ฝํ ์ค๋น๊ฐ ๋ ๊ฒฝ์ฐ 200 ์ํ๋ฅผ ๋ฐํํ๊ณ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ 504๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์๋น์ค๊ฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ๋ถ๊ฐํญ๋ ฅ์ ๊ฒฝ์ฐ ๋ถ๋ถ์ ์ผ๋ก ์๋ํ๋ ๊ฒ๋ณด๋ค ์์ ํ ์ฌ์ฉํ ์ ์๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๊ฐ์์ ํ์ธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ์์คํ ์์ Actuator๋ ์ฌ์ฉ์๊ฐ ๋ฌธ์ ์ ๋ํด ์ธ์ฐ๊ธฐ ์ ์ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ ์์๋ ์๋น์ค ์ธ์คํด์ค๋ก ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ค์งํ์ฌ ์๋์ผ๋ก ์ด์ ๋์ํ ์ ์์ต๋๋ค.
๋ฐฑ์๋ ์๋น์ค
๋ฐฑ์๋ ์๋น์ค๋ ์๋ฝ๋ ์์ฒญ ์๋ฅผ ์ธ๊ณ ๋ฐํํฉ๋๋ค.
์ปจํธ๋กค๋ฌ ์ฝ๋:
@RestController
public class RequestsCounterController {
private final AtomicLong counter = new AtomicLong();
@GetMapping("/requests")
public Long getRequestsCount() {
return counter.incrementAndGet();
}
}
์ปจํธ๋กค๋ฌ ํ ์คํธ:
@WebMvcTest(RequestsCounterController.class)
public class RequestsCounterControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void firstRequest_one() throws Exception {
mockMvc.perform(get("/requests"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string("1"));
}
}
์๋น์ค ๊ฒ์ดํธ์จ์ด
๊ฒ์ดํธ์จ์ด๋ ์์ฒญ์ ๋ฐฑ์๋ ์๋น์ค๋ก ์ ๋ฌํ๊ณ ๋ค์ ์ ๋ณด๋ก ๋ณด์ํฉ๋๋ค.
- ๊ฒ์ดํธ์จ์ด ์์ด๋. ์๋ฒ ์๋ต์ผ๋ก ๊ฒ์ดํธ์จ์ด์ ํ ์ธ์คํด์ค๋ฅผ ๋ค๋ฅธ ์ธ์คํด์ค์ ๊ตฌ๋ณํ ์ ์๋๋ก ํ์ํฉ๋๋ค.
- ๋งค์ฐ ์ค์ํ ์ํธ(์ค์ํ ์ฟ ํค์ ์ํธํ ํค ๋ฒํธ) ์ญํ ์ ํ "๋น๋ฐ"
application.properties์ ๊ตฌ์ฑ:
backend.url=http://localhost:8081
instance.id=${random.int}
secret="default-secret"
๋ฐฑ์๋ ์ด๋ํฐ:
@Service
public class BackendAdapter {
private static final String REQUESTS_ENDPOINT = "/requests";
private final RestTemplate restTemplate;
@Value("${backend.url}")
private String backendUrl;
public BackendAdapter(RestTemplateBuilder builder) {
restTemplate = builder.build();
}
public String getRequests() {
ResponseEntity<String> response = restTemplate.getForEntity(
backendUrl + REQUESTS_ENDPOINT, String.class);
return response.getBody();
}
}
์ ์ด ์ฅ์น:
@RestController
@RequiredArgsConstructor
public class EndpointController {
private final BackendAdapter backendAdapter;
@Value("${instance.id}")
private int instanceId;
@Value("${secret}")
private String secret;
@GetMapping("/")
public String getRequestsCount() {
return String.format("Number of requests %s (gateway %d, secret %s)", backendAdapter.getRequests(), instanceId, secret);
}
}
์์ํ๋ค:
๋ฐฑ์๋๋ฅผ ์์ํฉ๋๋ค.
./mvnw package -DskipTests
java -Dserver.port=8081 -jar target/microservices-backend-1.0.0.jar
๊ฒ์ดํธ์จ์ด ์์:
./mvnw package -DskipTests
java -jar target/microservices-gateway-1.0.0.jar
์ฐ๋ฆฌ๋ ๋ค์์ ํ์ธํฉ๋๋ค.
$ curl http://localhost:8080/
Number of requests 1 (gateway 38560358, secret "default-secret")
๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๋ค. ์ฃผ์ ๊น์ ๋
์๋ผ๋ฉด ๊ฒ์ดํธ์จ์ด๋ฅผ ์ฐํํ์ฌ ๋ฐฑ์๋์ ์ง์ ์ก์ธ์คํ๋ ๊ฒ์ ๋ฐฉํดํ๋ ๊ฒ์ ์๋ฌด๊ฒ๋ ์๋ค๋ ์ ์ ์ ์ํ ๊ฒ์
๋๋ค(
๋ํ ๋ ์๋น์ค ๋ชจ๋ ํ๋์ ํ์ผ ์์คํ
์ ๊ณต์ ํ๊ณ ์คํธ๋ฆผ์ ์์ฑํ๋ฉฐ ์ด๋ ์๊ฐ ์๋ก ๊ฐ์ญํ๊ธฐ ์์ํ ์ ์์ต๋๋ค. ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ด ์ข์ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ๋ค๋ฅธ ๋จธ์ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ๊ฑฐ๋(๋์ด ๋ง์ด ๋ค๊ณ ์ด๋ ค์) ๊ฐ์ ๋จธ์ ์ ์ฌ์ฉํ๊ฑฐ๋(๋ฆฌ์์ค ์ง์ฝ์ , ๊ธด ์์ ์๊ฐ) ์ปจํ
์ด๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ์์๋๋ก ์ธ ๋ฒ์งธ ์ต์
์ ์ ํํ๊ณ
๋์ปค
์ฆ, docker๋ ์ ํ๋ฆฌ์ผ์ด์
๋น ํ๋์ฉ ๊ฒฉ๋ฆฌ๋ ์ปจํ
์ด๋๋ฅผ ๋ง๋ญ๋๋ค. docker๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์
๋น๋ ๋ฐ ์คํ ์ง์นจ์ธ Dockerfile์ ์์ฑํด์ผ ํฉ๋๋ค. ๋ค์์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ์ ์
๋ก๋ํ ์ ์์ต๋๋ค(No.
๋์ปค ํ์ผ
์ด๋ฏธ์ง์ ๊ฐ์ฅ ์ค์ํ ํน์ง ์ค ํ๋๋ ํฌ๊ธฐ์ ๋๋ค. ์์ถ ์ด๋ฏธ์ง๋ ์๊ฒฉ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ ๋นจ๋ฆฌ ๋ค์ด๋ก๋๋๊ณ ๊ณต๊ฐ์ ๋ ์ฐจ์งํ๋ฉฐ ์๋น์ค๊ฐ ๋ ๋นจ๋ฆฌ ์์๋ฉ๋๋ค. ๋ชจ๋ ์ด๋ฏธ์ง๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋๋ฉฐ ๊ฐ์ฅ ์ต์ํ์ ์ต์ ์ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ข์ ์ต์ ์ ์ต์ํ์ ํจํค์ง๋ก ๊ตฌ์ฑ๋ ์์ ํ Linux ๋ฐฐํฌํ์ธ Alpine์ ๋๋ค.
๋จผ์ "์ด๋ง์" Dockerfile์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/microservices-gateway-1.0.0.jar"]
์ฌ๊ธฐ์๋ JDK๊ฐ ์ด๋ฏธ ์ค์น๋ Alpine ๊ธฐ๋ฐ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋น๋ํฉ๋๋ค. ADD ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ํ์ฌ src ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๋ฏธ์ง์ ์ถ๊ฐํ๊ณ ์์ (WORKDIR)์ผ๋ก ํ์ํ ๋ค์ ๋น๋๋ฅผ ์์ํฉ๋๋ค. EXPOSE 8080 ๋ช ๋ น์ ์ปจํ ์ด๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํด๋น ํฌํธ 8080์ ์ฌ์ฉํ ๊ฒ์์ ๋์ปค์ ์๋ฆฝ๋๋ค(์ด๋ ๊ฒ ํ๋ฉด ์ธ๋ถ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์คํ ์ ์์ง๋ง ์๋ฅผ ๋ค์ด ๋์ผํ ๋์ปค ๋คํธ์ํฌ์ ๋ค๋ฅธ ์ปจํ ์ด๋์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ).
์๋น์ค๋ฅผ ์ด๋ฏธ์ง๋ก ํจํค์งํ๋ ค๋ฉด ๊ฐ ํ๋ก์ ํธ์ ๋ฃจํธ์์ ๋ช ๋ น์ ์คํํด์ผ ํฉ๋๋ค.
docker image build . -t msvc-backend:1.0.0
๊ฒฐ๊ณผ๋ 456MB ์ด๋ฏธ์ง(๊ธฐ๋ณธ JDK ์ด๋ฏธ์ง๊ฐ 340MB๋ฅผ ์ฐจ์งํจ)์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ํด๋์ค๊ฐ ์๊ฐ๋ฝ์ผ๋ก ์ ์ ์๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ . ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ค๋ฉด:
- ์ฐ๋ฆฌ๋ ๋ค๋จ๊ณ ์กฐ๋ฆฝ์ ์ฌ์ฉํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์๋ ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ , ๋ ๋ฒ์งธ ๋จ๊ณ์์๋ JRE๋ฅผ ์ค์นํ๊ณ , ์ธ ๋ฒ์งธ ๋จ๊ณ์์๋ ๋ชจ๋ ๊นจ๋ํ ์ Alpine ์ด๋ฏธ์ง์ ๋ณต์ฌํฉ๋๋ค. ์ ์ฒด์ ์ผ๋ก ํ์ํ ๊ตฌ์ฑ ์์๋ง ์ต์ข ์ด๋ฏธ์ง์ ํฌํจ๋ฉ๋๋ค.
- Java์ ๋ชจ๋ํ๋ฅผ ์ฌ์ฉํฉ์๋ค. Java 9๋ถํฐ jlink ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๋ชจ๋์์๋ง JRE๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํธ๊ธฐ์ฌ ๋ง์ ๋ถ๋ค์ ์ํด ์ด๋ฏธ์ง ์ถ์ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ์ข์ ๊ธฐ์ฌ๊ฐ ์์ต๋๋ค.
์ต์ข Dockerfile:
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine as builder
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
FROM alpine:3.10.3 as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink
--verbose
--add-modules
java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument
--compress 2 --strip-debug --no-header-files --no-man-pages
--release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE"
--output "$JAVA_MINIMAL"
FROM alpine:3.10.3
LABEL maintainer="Anton Shelenkov [email protected]"
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY --from=builder /src/target/microservices-backend-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
์ด๋ฏธ์ง๋ฅผ ์ฌ์์ฑํ ๊ฒฐ๊ณผ ๋ฌด๊ฒ๊ฐ 6๋ฐฐ ๊ฐ์ํ์ฌ 77MB์ ๋ฌํ์ต๋๋ค. ๋์์ง ์๋ค. ๊ทธ๋ฐ ๋ค์ ๊ธฐ์ฑ ์ด๋ฏธ์ง๋ฅผ ์ด๋ฏธ์ง ๋ ์ง์คํธ๋ฆฌ์ ์ ๋ก๋ํ์ฌ ์ธํฐ๋ท์์ ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
Docker์ ๊ณต๋ ์คํ ์๋น์ค
์ฐ์ , ์ฐ๋ฆฌ์ ์๋น์ค๋ ๋์ผํ ๋คํธ์ํฌ์ ์์ด์ผ ํฉ๋๋ค. ๋์ปค์๋ ์ฌ๋ฌ ์ ํ์ ๋คํธ์ํฌ๊ฐ ์์ผ๋ฉฐ ๊ทธ์ค ๊ฐ์ฅ ์์์ ์ธ ๋ธ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ํธ์คํธ์์ ์คํ๋๋ ์ปจํ ์ด๋๋ฅผ ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ๋ฅผ ์์ฑํฉ๋๋ค.
docker network create msvc-network
๋ค์์ผ๋ก microservices-backend:1.0.0 ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ 'backend'๋ผ๋ ๋ฐฑ์๋ ์ปจํ ์ด๋๋ฅผ ์์ํฉ๋๋ค.
docker run -dit --name backend --network msvc-net microservices-backend:1.0.0
๋ธ๋ฆฌ์ง ๋คํธ์ํฌ๊ฐ ์ด๋ฆ๋ณ๋ก ์ปจํ
์ด๋์ ๋ํ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์๋น์ค ๊ฒ์์ ์ ๊ณตํ๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ฆ, ๋ฐฑ์๋ ์๋น์ค๋ ๋์ปค ๋คํธ์ํฌ ๋ด์์ ๋ค์ ์์น์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒ์ดํธ์จ์ด ์์:
docker run -dit -p 80:8080 --env secret=my-real-secret --env BACKEND_URL=http://backend:8080/ --name gateway --network msvc-net microservices-gateway:1.0.0
์ด ๋ช ๋ น์์ ํธ์คํธ์ ํฌํธ 80์ ์ปจํ ์ด๋์ ํฌํธ 8080์ผ๋ก ์ ๋ฌํ๊ณ ์์์ ๋ํ๋ ๋๋ค. env ์ต์ ์ ์ฌ์ฉํ์ฌ spring์์ ์๋์ผ๋ก ์ฝ์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๊ณ application.properties์์ ์์ฑ์ ์ฌ์ ์ํฉ๋๋ค.
์์ ํ, ์ฐ๋ฆฌ๋ ์ ํ
๊ฒฐ๋ก
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ๊ฐ๋จํ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๋ง๋ค์ด ๋์ปค ์ปจํ ์ด๋์ ํจํค์งํ๊ณ ๋์ผํ ์์คํ ์์ ํจ๊ป ์์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ๊ณผ ์์คํ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
- ์ด์ ํ ๋ด๊ฒฐํจ์ฑ - ๋ชจ๋ ๊ฒ์ด ํ๋์ ์๋ฒ์์ ์๋ํฉ๋๋ค.
- ์ด์ ํ ํ์ฅ์ฑ - ๋ก๋๊ฐ ์ฆ๊ฐํ ๋ ์ถ๊ฐ ์๋น์ค ์ธ์คํด์ค๋ฅผ ์๋์ผ๋ก ๋ฐฐํฌํ๊ณ ๋ก๋ ๊ท ํ์ ์กฐ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์์์ ๋ณต์ก์ฑ - ์ต์ 3๊ฐ์ ๋ช ๋ น๊ณผ ํน์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅํด์ผ ํ์ต๋๋ค(2๊ฐ์ ์๋น์ค์๋ง ํด๋น).
์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Docker Swarm, Nomad, Kubernetes ๋๋ OpenShift์ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์๋ฃจ์
์ด ์์ต๋๋ค. ์ ์ฒด ์์คํ
์ด Java๋ก ์์ฑ๋ ๊ฒฝ์ฐ Spring Cloud(
ะ
์ถ์ฒ : habr.com