Loading...
2020. 4. 21. 12:18

[Spring boot] 환경 설정의 동작 원리와 애플리케이션 환경 나누기

Spring boot 프로젝트를 생성하고 난 후, Embedded Tomcat을 이용해 쉽게 애플리케이션을 시작해보고, 테스트할 수 있는 것 까지는 좋은 것이긴 한데, Embedded Tomcat에 대한 포트 주소 등의 설정은 어떻게 하는 것일까? Property 기존의 Spring에서는 모든 설정을 XML 파일로 사용했다면, Spring boot에서는 Embedded Tomcat, Application 설정 관련 및 기타 정적인 값을 키 값 형식으로 관리합니다. Spring boot 프로젝트를 생성하면, 자동 만들어지는 application.properties는 이러한 설정을 해주는 파일입니다. 현재 애플리케이션을 실행하면 8080 포트로 설정되지만, 이 포트 주소를 바꾸고 싶다면, 아래와 같이 설정을..

2020. 4. 21. 10:59

[Spring boot] 다양한 어노테이션을 활용한 HTTP API 구현

지난 포스트에서 IntelliJ IDEA를 이용하여 Spring boot 프로젝트를 만드는 시간에 대해 알아봤습니다. 확실히 기존의 Spring에 비하여 프로젝트 생성 절차가 간단하고, 개발 환경 설정도 까다롭지 않은 모습이었습니다. 이번 포스트에서는 그에 이어서 간단한 HTTP API를 구현하는 시간을 가져보도록 하겠습니다. Hello World 가장 먼저 애플리케이션이 제대로 실행되는지 테스트하는 방법은 어떤 문구를 출력해보는 방법이 가장 좋겠죠? REST API에서 파라미터도 받지 않고, 가장 간단한 메소드로 사용할 수 있는 GET 메소드를 이용해 Hello World를 출력해보도록 하겠습니다. package xyz.neonkid.blogexample import org.springframework..

2020. 4. 21. 10:33

[Spring boot] IntelliJ IDEA를 이용한 Spring boot 프로젝트 시작

기존의 Java 언어를 이용해서 웹 개발을 위해서는 Tomcat, Jetty 등과 같은 Servlet Container를 설치하고, 프로젝트 내에 환경을 구성해야 했고, 대표적인 Java Application Framework인 Spring 역시 개발 환경 설정이 만만치 않다는 이유로 Java 언어를 잘 사용하는 분이 아닌 분들은 대부분 웹 개발을 위해 비교적 개발 환경 설정이 쉬운 Node.js의 Express나 Python의 Django 등을 많이 사용하죠. Spring boot Spring boot는 이러한 Spring의 개발 환경 설정의 어려움과 부담을 덜어주기 위해 개발 환경 설정을 최소화 하고, 개발자가 비즈니스 로직에 집중할 수 있도록 도와줍니다. 먼저 Spring boot의 특징부터 간단히..

2020. 4. 6. 13:41

[Algorithm] - 2019 Kakao Winter internship Coding test 문제 풀이

2년 전부터 계속, 시간이 날 때마다(그 시간이 얼마 되지 않지만..) 틈틈이 알고리즘 문제 풀이를 계속 이어가고 있었습니다. 다양한 문제들을 보았고, 어려운 문제, 생각이 날 것 같으면서도 뇌정지가 오는 문제, 쉽게 풀만한 문제들 다양한 문제들이 존재하였습니다. 그러던 중, 작년 겨울에 재미삼아 카카오 코딩 테스트 문제를 풀게 되었습니다. 문제 난이도는 생각한 것보다는 조금 어려운 수준에 해당했으며 어차피 코딩 테스트에서 좋은 성적을 거두지 못했더라도 차후에 문제 풀이 해설이 올라오기 때문에 가벼운 마음으로 시험에 임했습니다. 하지만 몇 달이 지나도 해당 코딩테스트에 대한 문제 풀이 해설은 보이지 않았고, 그 해설을 최근에서야 발견하게 되었습니다. (그것도 Google 검색이 친절하게 이것이 있다는 걸..

2020. 3. 28. 20:31

[Spring Cloud] - 7. Hystrix를 이용한 Circuit Breaker (기본편)

지난 포스트에 이어서 Spring Cloud에서 Circuit Breaker를 구현할 수 있는 첫 번째 파트를 들어가보도록 하겠습니다. Hystrix Hystrix는 Spring Cloud 스택에서 제공하는 Circuit Breaker 중 하나입니다. Netflix에서 개발했으며 현재는 Spring Cloud의 표준 Circuit Breaker로 자리 잡고 있죠. 기본적으로 Hystrix는 위와 같은 형태로 동작합니다. 브라우저 혹은 모바일에서 어떤 API 요청이 들어왔을 경우, 해당 서비스의 엔드포인트가 호출되는데, 이 때 서비스에 오류가 발생했거나 응답이 없을 경우, 이후 이용자에게 장애가 전파되지 않고, 미리 정의된 오류를 브라우저 혹은 모바일에서 전송하게 되어 오류 전파를 막아주게 됩니다. 그러면..

2020. 3. 11. 19:01

[MSA] - 4. Circuit Breaker를 이용한 장애 처리

MSA에 대해서 우리는 각 API 서버를 분리하여 용도별로 인스턴스를 나누고, 앞단에서 Gateway를 사용해 클라이언트가 원하는 서비스를 주고, 로드 밸런싱 등의 작업이 들어갈 경우, Service Discovery를 통하여 원하는 서비스를 동적으로 찾아주는 방법까지 알았습니다. 그런데, 이렇게 서비스를 분리함으로써 한 인스턴스가 모든 서비스를 감당하는 부분이 완화되는 등의 장점이 생겼지만, 만약 서비스에 장애가 발생한다면 그 장애는 어떻게 처리할 수 있을까요? 서비스가 분리되어 있는 상태에서 클라이언트의 잘못된 입력 값 등으로 생기는 오류는 논리적인 오류입니다. 따라서 이런 오류는 Exception 등의 처리를 통해서 클라이언트에게 오류를 알려주고, 이를 처리하는 방식으로 진행할 수 있습니다. 하지만..

2020. 2. 8. 22:31

[Spring Cloud] - 6. Eureka를 이용한 서비스 검색

MSA로 설계된 웹 애플리케이션은 그 인스턴스가 서비스별로 나누어져 있고, 만약 이를 로드 밸런싱을 이용해 여러 서비스를 분산 처리하게 된다면, 서로 다른 인스턴스가 여러 개 생기게 되며, 그렇게 되면 API 요청마다 적절한 인스턴스의 Endpoint를 매겨줘야 합니다. Service Discovery는 이러한 문제를 해결하고자, Server-Client 방식과 유사한 Self-Registration Pattern을 이용해 자신의 서비스를 중앙의 Registry에 등록하고, 이를 요청할 때마다 알맞는 Endpoint를 매칭해준다는 것을 알았습니다. Eureka Spring Cloud 스택에서 이러한 역할을 하는 대표적인 모듈로 Eureka가 있습니다. Eureka는 Netflix OSS 중 하나로 Spr..

2020. 1. 27. 13:08

[MSA] - 3. 필요한 서비스를 찾아주는 Service Discovery

안녕하세요. 다들 구정 연휴 잘 보내고 계신가요? 구정 언휴긴 하지만, 저에게는 길게 느껴지는 연휴인지라, 오늘도 이렇게 끄적여 봅니다. 오늘은 Service Discovery에 대한 이야기를 다뤄보도록 할게요. 서비스 디스커버리는 지난 API Gateway에서도 잠시 다뤘던 내용이지만 서비스가 분리되어 있는 MSA에서 각 서비스가 다음에 불러야할 서비스가 어디에 있는지를 찾아주는 검색 기능입니다. What is Service Discovery ? 쉬운 설명을 위해 Wi-Fi를 예로 들어보겠습니다. 우리는 스마트폰이나 태블릿 PC, 노트북에서 인터넷을 사용하기 위해 Wi-Fi에 연결해야 합니다. 원래라면, 직접 SSID를 입력해야만 하죠. 하지만 AP 검색 기능을 제공하기 때문에 우리는 이렇게 디바이스에..

2020. 1. 22. 17:53

[Spring Cloud] - 5. Zuul Gateway를 이용한 Filtering

이번 포스트에서는 Routing에 이어서 Zuul Gateway를 이용한 Filtering에 대해서 이야기해보도록 하겠습니다. Filtering Spring Boot에서 필터링을 사용하는 경우는 PreFilter와 같은 엔드포인트의 보안 등에서 사용됩니다. 이 필터링을 이용하기 위해서는 Spring Security에서 제공하는 JWT 등의 보안 수단을 사용하여 인증을 받고, 엔드포인트에 접근하는 방식이죠. Zuul Gateway에서도 엔드포인트의 보안을 적용할 수 있는 필터링 기능을 제공합니다. 위 아키텍처는 Zuul Gateway의 코어를 그린 아키텍처입니다. Zuul Servlet을 통해 들어오는 요청을 Routing 하게 되는데요. 그리고, 그 밑단에는 ZuulFilter Runner가 있어서 엔드..

2020. 1. 17. 18:55

[Spring Cloud] - 4. Zuul Gateway를 이용한 Routing

지난 MSA 포스트에 이어, 이번 포스트에서는 Spring Cloud에서 API Gateway를 구현해보겠습니다. https://blog.neonkid.xyz/205 [MSA] - 2. API Gateway가 필요한 이유 안녕하세요. 이번 글은 MSA에 대한 글을 이어서 API Gateway에 대한 이야기를 하고자 합니다. 지난 MSA 글에서는 MSA를 왜 써야하는지, 어떨 때 필요하고, 무슨 장단점이 있는지를 간략하게 설명해보는 아주 쉬운.. blog.neonkid.xyz 혹시 지난 글을 읽어보시지 못했다면, 위 링크를 통해서 API Gateway가 MSA에서 왜 필요한지, 알아보시고 가신다면, 이 포스트를 이해하는 데 도움이 될 것이라고 생각합니다. Gateway for Spring Cloud Spr..