728x90

전체 글 288

컨테이너 환경에서 Gradle

일반적으로 Gradle이 Maven보다 빌드 속도가 빠르다고 알려져 있지만 컨테이너 환경에서는 Gradle 이 큰 힘을 발휘하진 못하는 것 같다. Gradle 이 빠른 이유는 자체적으로 백그라운드 데몬이 수행되고 캐싱기능이 사용되기 때문인데 stateless 한 컨테이너 환경의 특성상 이게 재사용될 수가 없는 구조이다. groovy 문법을 사용해서 스크립트가 간소화되고 가독성이 좋아진다는 장점도 있지만 이건 기본적으로 groovy 문법에 익숙 상태에서나 의미가 있는 것인데 빌드하나 하겠다고 새로운 문법을 배울 사람은 많지 않다. 그냥 대충 이렇게 돌아가는구나 파악하고 사용하는 것이 대부분이고 그럴일이 거의 없겠지만 추가로 빌드 스크립트가 필요한 경우에는 대부분의 구글링을 통해서 습득하고 있을거라 예상된다..

Base/CI, CD 2021.05.26

Nexus와 Maven Central

maven에는 중앙저장소와 원격저장소라는 개념이 있다. 큰 의미로 보면 중앙저장소도 원격저장소의 중 하나인데 일반적으로 중앙저장소라고 하면 maven central 로 불리며 https://repo.maven.apache.org/maven2 를 의미하고 원격저장소라고 하면 각 조직에서 자체적으로 구축하는 Nexus 등을 의미한다. Nexus 는 일반적으로 인터넷망에 접속하지 못하는 망분리환경에서 내부적으로 의존성들을 관리하기 위해 사용된다. 물론 굳이 망분리 환경이 아니더라도 매번 외부망에서 의존성을 끌어오지 않고 내부망 Nexus를 proxy(cache)로 사용함으로써 좀 더 빠르게 의존성을 다운로드 할 수 있으며 조직 내부에서만 사용하는 의존성을 배포해서 여러팀간 공유하는 목적으로도 활용된다. mav..

Base/CI, CD 2021.05.21

maven 인코딩 설정

maven 에도 인코딩 설정이 필요하다. 예를 들어 maven-compiler-plugin 과 maven-resources-plugin 같은 것들이다. 한글을 사용한다면 UTF-8을 지정하면 될 것이고 아래와 같이 하면 된다. maven-compiler-plugin 2.0.2 1.8 1.8 UTF-8 maven-resources-plugin 2.2 UTF-8 그런데 이렇게 플러그인 마다 수동으로 정의하는 것보다 아래와 같이 project.build.sourceEncoding 를 설정하는 것이 낫다. ... UTF-8 ... 이는 전역적으로 설정되어 모든 플러그인의 디폴트 값으로 적용된다. 예를 들어 메이븐 공식 메뉴얼을 보면 maven-resources-plugin 인코딩의 Default 값이 ${pro..

Base/CI, CD 2021.05.18

gradle 에서 maven optional, provided 설정하기

일단 optional, provided 의 의미를 정확히 알고 넘어갈 필요가 있다. 매번 헷갈린다... 일단 사용은 아래와 같이 하면 된다. org.apache.tomcat tomcat-dbcp true provided optional true 설정이든 scope provided 설정이든 해당 의존성을 어떠한 과정에서 제외한다는 것은 동일한데 분명한 차이가 있다. optional true 에 대해 먼저 설명하면 기본적으로 A.jar 안에 junit 의존성이 포함되어 있고 어떠한 프로젝트에서 A.jar 의존성을 추가했다면 해당 프로젝트에서는 별도로 추가히지 않아도 junit 의존성이 추가된다. 의존성이 상속된다고 볼 수 있다. 그런데 A.jar 안에서 junit 의존성 정의시 위와 같이 optional t..

Base/CI, CD 2021.05.05

SpringBoot Redis Cluster Lettuce 설정

공식 홈페이지에 Redis Cluster 기준 client 설정이 있긴한데 Jedis 기반이라 Lettuce 설정을 기록해둔다. 1. application.yml 설정 참고로 구조는 꼭 아래와 같이 할필요는 없다. 그냥 본인이 편한대로 하면 된다. config 클래스에서 그대로 불러오기만 하면 된다. spring: redis: cluster: nodes: localhost:6370,localhost:6371,localhost:6372 2. Config 설정 @Configuration //@EnableRedisRepositories//없어도 잘 돌아가는듯? 스프링부트 자동설정에 포함되어 있음. public class RedisConfig { //@Value("${spring.redis.host}") //p..

Backend/Spring+Boot 2021.05.04

SpringBoot embedded Redis Cluster

SpringBoot 환경에서 embedded Redis 를 구성하는 방법은 많이 나와있다. 그런데 그 방법 대부분이 Single instance 방식이고 나는 실제로 서비스시에는 Redis Cluster 를 사용할거라 embedded Redis도 Cluster로 구성하고 싶었다. 서칭과 여러 시행착오 끝에 jitpack.io/p/tarossi/embedded-redis 여기를 참고해서 구성을 성공할 수 있었다. 1. 의존성 추가(Gradle 기준) dependencies { implementation 'com.github.tarossi:embedded-redis:1.5.2' } 2. embedded Redis Bean 설정 @Profile({"local", "test"}) @Component public..

Backend/Spring+Boot 2021.05.04

spring cloud config 비활성화

spring-cloud-starter-config 의존성이 포함되어 있다면 구성파일(application.yml 등)에 아래와 같이 config-server 설정이 import 되어 있어야 한다.(springboot 2.4 기준) 그렇지 않으면 구동시 에러가 발생한다. spring: config: import: configserver:http://test-config-server.test.com 하지만 local 에서 개발 시에는 config-server 를 설정해서 사용하는 것이 오히려 번거롭기 때문에 이를 비활성화 할 필요가 있다. 아래와 같이 하면 된다. spring: cloud: config: enabled: false 그리고 spring-cloud-bus 를 사용하기 위해 spring-cloud..

Backend/Spring+Boot 2021.05.04

Request 정보 Logging 하기

개발서버에서는 Request 정보를 모두 로그를 찍어놓는 것이 테스트나 분석에 도움이 된다. 매번 log.info 로 찍거나 aop 를 구현하는 것도 방법이지만 Spring에서 제공하는 필터를 활용하는 것은 좋은 방법이다. CommonsRequestLoggingFilter 가 바로 그것인데 아래와 같이 셋팅하면 된다. 1. 필터등록 @Configuration public class WebMvcConfig { @Bean public CommonsRequestLoggingFilter commonsRequestLoggingFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeClient..

Backend/Spring+Boot 2021.05.04

크로스 도메인 이슈

Javascript 는 동일 출처 정책(Same Origin Policy) 라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안 문제로 간주하고 이를 차단한다. 요즘은 마이크로서비스 구조에서는 javascript 단에서도 타 서비스의 api를 호출해야 하는 경우가 많기 때문에 이에 대한 처리가 반드시 필요하며 이를 CORS(Cross-Origin Resource Sharing) 라 한다. 서버가 Spring 환경이라면 아래와 같이 Filter를 등록하는 것만으로 CORS 처리를 할 수 있다. 간단하게 원리를 설명하면 실제요청전 예비요청(Preflight request)을 통해 허용가능한 도메인, 메소드 등을 응답하고 이를 통해 통신을 하는 방식이다. @Component @Order(Ordered.H..

Backend/Spring+Boot 2021.04.29
728x90