프로그래밍/Spring 19

Netflix Hystrix를 사용한 클라이언트 회복성 전략 개념정리

본 글은 사내 업무에서 발생한 이슈에 대해 복기를 하면서 해당 내용이 잘 정리되어 있는 '스프링마이크로서비스 코딩공작소'의 내용을 정리하면서 실습한 내용의 일부입니다. 서론 모든 시스템, 특히 분산 시스템은 장애를 겪습니다. '회복력'을 갖춘다는 것에 있어서 대부분의 소프트웨어 엔지니어는 완전한 장애만을 고려합니다. 다음과 같은 이유로 이렇게 일부분 (완전한 장애)만을 고려하게 되는데요. 서비스 degradation(저하)는 간헐적으로 발생하고 확산될 수 있음: 사소한 부분에서 시작된 것이 초기에는 일부사용자의 불평이지만 그것이 완전한 장애로 이어질 수 있습니다. 애플리케이션이 대부분 부분적인 저하가 아닌 원격 자원의 완전한 장애를 처리하도록 설계한다: 결과적으로 자원 고갈이 진행되면 호룰하는 클라이언트..

Spring Cloud Config를 활용하여 설정값(properties), 비밀번호 숨겨서 배포하기

Spring Cloud Config Server 구축하기 Spring Cloud Config 를 사용하여 비밀번호나 민감한 key들을 숨겨서 관리하는 방법을 알아보겠습니다. 전체적인 구상도는 다음과 같습니다. 깃허브 private 저장소에 yml 파일을 업로드합니다. 이 yml 파일안에는 민감 정보가 들어있기 때문에 private에 업로드 하였습니다. 그리고 Spring Cloud Config 서버를 만들고 이 서버가 private 저장소에서 파일을 읽어오게 해야합니다. 그렇기 때문에 서버의 공개키를 깃허브 저장소에 등록을 시켜놓아야 합니다. 자세한 내용은 밑에서 보겠습니다. Spring Cloud Server 구축 implementation 'org.springframework.cloud:spring-..

Pivotal Summit 2019 Seoul 참가기

화요일에 Pivotal Summit 2019 Seoul에 다녀왔다. https://connect.pivotal.io/summit_2019_seoul Pivotal Summit 2019 Pivotal Summit 2019 is coming to APJ! Join us for valuable facetime with expert Pivotal speakers and industry thought leaders in both traditional presentation and informal conversations. We'll discuss the latest developments in DevOps, CI/CD, application d connect.pivotal.io 왼쪽부터 폴 자코스키, 나, 마크 ..

REST API 에러 핸들링 best practice - 에러를 어떻게 내려 주어야 할까

이 글은 baeldung의 'Best Practice For Rest API Error Handling'를 번역하고 실습해본 내용입니다. Best Practice For Rest API Error Handling 소개 REST는 stateless(상태가 없는) 아키텍쳐이며 클라이언트가 서버의 자원에 접근하고 조작할 수 있습니다. 일반적으로, REST는 HTTP를 이용하여 클라이언트가 자원을 얻거나 상태를 바꾸는 API를 제공합니다. 이 튜토리얼에서는 REST API 에러에 대해 best practice를 배워봅니다. HTTP 상태 코드 클라이언트가 서버에 HTTP 요청을 보내면, 그리고 서버가 그 요청을 잘 받았다면, 서버는 반드시 클라이언트에게 그 요청이 성공적으로 처리됐는지 아닌지 알려주어야 합니다...

[Spring] @Transactional 롤백은 언제 되는 걸까? - 예외가 발생했는데도 DB 반영이 된다고?

@Transactional 애노테이션 스프링은 @Transactional 애노테이션이 붙은 클래스에 프록시를 생성합니다. 프록시는 트랜잭션 로직을 메서드 앞뒤에 넣어줍니다. 이 글은 @Transactional 의 롤백에 대해서 다룹니다. rollbackFor이라는 것을 써보면서 어디에 어떻게 적용되는지 알아보겠습니다. 책 정보를 저장하는 아주 간단한 코드입니다. 다음은 책을 저장하는 메서드입니다. @Transactional 애노테이션의 rollbackFor 속성에 대해서 RuntimeException.class를 등록했습니다. 이 애노테이션은 스프링에게 런타임 예외가 발생한다면 롤백을 하라고 말합니다. 그렇다면 rollbackFor 속성을 주지 않는다면 어떻게 될까요? 사실은 스프링은 디폴트로 UnChe..

[Spring] Jenkins(젠킨스)를 활용한 스프링부트 앱 간단 배포하기

젠킨스를 활용한 스프링부트 앱 배포 젠킨스란? 젠킨스란 소프트웨어 개발 시 지속적 통합 (Continuous Integration) 서비스를 제공하는 툴이다. 젠킨스의 공식 홈페이지를 가보자. 메인화면에 젠킨스의 장점들을 설명하고 있다. 다음은 메인 화면의 장점 내용들을 간단히 번역한 내용이다. 지속적 통합과 전달 확장가능한 자동화 서버에서 젠킨스는 간단한 CI 서버 혹은 지속적 전달을 하는데 쓰인다. 여기서 말하는 지속적 전달이란 프로덕션에 릴리즈하기 위한 코드 변경이 자동으로 준비되는 개발론을 말한다. 현대 애플리케이션의 기반인 지속적 전달은 빌드 단계 이후 모든 코드 변경을 테스트 환경 및 프로덕션 환경에 배포함으로써 지속적 통합을 확장한다. 참고) https://aws.amazon.com/ko/d..

[Spring] RESTful의 HATEOAS 관련 내용 정리 - RESTful 하려면 어떤 조건들이 필요할까?

Hypermedia As The Engine Of Application state 링크에 사용 가능한 URL을 리소스로 전달하여 client가 참고하여 사용할 수 있도록 하는 것 참조문서:https://spring.io/guides/gs/rest-hateoas/ Resource Representation class 만들기 서비스 상호작용을 생각하면서 진행 해보자. 서비스는 GET 요청을 핸들하기 위해 리소스를 /greeting에 노출시킨다. (선택적으로 name 파라미터로 쿼리 스트링을 준다) GET 요청은 200 OK로 "greeting"을 JSON 으로 바디에 내려준다. 그 밖에, 리소스의 상태를 나타내는 JSON은 _links 속성안에 하이퍼미디어 요소들의 리스트가 매우 많다. 가장 기본적인 형태는..

[Spring] Spring Boot 로깅 (Logging) 공식 문서 내용 정리

스프링 Log reference 스프링 부트 공식 문서의 Log 부분을 번역하며 정리해보았다. 26.Logging 스프링 부트는 모든 내부로깅을 Commons Logging을 사용하지만 근본적인 로깅 구현은 남겨두었다. Java Util Logging, Log4J2, Logback은 디폴트 설정들을 제공한다. 각각의 경우 로거는 선택적 파일출력과 함께 콘솔 출력을 사용하도록 사전에 구성이 된다. 디폴트로, Starter를 사용을 한다면 Logback이 기본으로 사용된다. Java Util Logging, Commons Logging, Log4J, Slf4J를 모두 사용하는 의존적 라이브러리가 올바르게 작동하도록 적절한 Logback 라우팅이 포함된다. 자바를 사용하는데 많은 로깅 프레임워크들이 있다. 위..

[Spring] Bcrypt를 이용하여 비밀번호를 암호화하여 저장하는 방법 - 실제 프로젝트 적용기

암호화를 이용하여 원문을 해시화하는 간단한 방법을 찾던 중 Devglan 사이트에서 괜찮은 칼럼을 찾았다. https://www.devglan.com/spring-mvc/storing-hashed-password-database-java 다음 내용은 위 칼럼을 번역한 내용이다. 단순 텍스트에 비밀번호를 저장하는 것은 보안상 매우 취약하다. 이 글에서는 자바를 이용하여 데이터베이스에 해시된 패스워드를 저장하는 방법을 다룬다. 이렇게 한다면 BDA들 조차도 실제 패스워드를 빼내기 불가능하다. 기존의 MD5, SHA-1, SHA-2로 패스워드를 해싱할 수도 있지만 솔트를 치는것은 추가적인 보안을 만들 수 있다. (여기서 솔트를 친다는 말은 원문에 추가적인 문자열을 넣어서 해시를 강화한다고 이해하면 된다) 이 ..

[Spring] Spring Interceptor (인터셉터)와 WebTestClient Session (세션) 테스트 적용기

Spring의 인터셉터 사용과 그것을 테스트하는 WebTestClient에 대해서 다뤄보려고 한다. 특히나 로그인 같은 기능을 구현하는 경우 서버측에서 세션을 생성하게 되는데 그것을 어떻게 하면 간단히 테스트할 수 있는지 알아보자. 먼저 인터셉터가 어떻게 작동하는지 그림을 보자. 인터셉터는 요청을 가로채는 역할을 한다. DispatcherServlet 이전에 가로챌것 처럼 보였지만 사실은 그 이후에 요청을 가로챈다. DispatcherServlet 이전의 요청을 거치는 것은 Filter의 역할로 볼 수 있다. 그리고 중요한 점은 인터셉터는 핸들러 이전을 가로채지만 그 이후도 처리할 수 있다는 점이다. (그림을 보면 핸들러 작업 이후 다시 인터셉터로 들어가는 모습을 볼 수 있다. 잠시 후 코드로 내용을 확..

반응형