spring
-
spring boot를 위한 wasspring 2023. 3. 23. 18:06
was 란? web application server servlet,jsp,php등의 동적인 컨텐츠를 반환하기 위한 목적으로 사용한다. 정적 + 동적을 합쳐서 사용하게 끔 만들어진 서버이다. 이제 좀 현실의 이야기로 돌아와 실제적으로 spring, spring boot가 베이스가 외장 was인지, 내장 was인지부터 시작해보자 spring은 기본적으로 외장으로 깔아서 써야한다. 그런데 spring boot는 베이스가 내장이여서 바로 jar로 올려서 사용가능하다. 실제로 내장 톰캣과 외장 톰캣의 성능차이는 없다고 밝히기도 했다. 또한 webflux를 쓰면 nio (비동기 처리를 위한) netty 가 기본이 된다. 여기까지는 내가 아는 부분이다 하지만 다른 선택지도 분명 존재할 것이다. undertow에 대..
-
spring을 이용한 MSA 구축 - spring cloud gateway - 2spring 2023. 3. 19. 22:19
앞에서 게이트웨이에서 하기 좋은게 인증이라고 했다. 사실 다른 서킷브레이커 등등도 있지만 기본적으로 이것 먼저 하게 된다. jwt인증을 위한 글로벌 필터를 만들어 보자. 일단 설정 @Bean fun customRouteLocator(builder : RouteLocatorBuilder): RouteLocator { return builder.routes { route(id = "auth-service") { path("/user/auth/**") .filters { f -> f.filter(authFilterFactory.apply(AuthFilterFactory.Config())) } uri("http://localhost:8080") } route(id = "mall-service") { path("..
-
test 설정 - 1 spring bootspring 2023. 3. 9. 18:05
테스트는 보통 단위 테스트, 통합테스트 두 가지로 나눈다 단위 테스트는 순수 자바의 영역에 가까운 테스트다 주로 조건이 제대로 나오는지 체크할 때가 많았는데 (특히 날짜, 볌위 같은거 체크하면 참 좋다) 그런 영역에서 많이 썼다. 단순하고 빌드가 빨라서 단순하게 테스트 할 시 참 좋다. 통합테스트는 스프링 설정을 연결해서 쓰는것을 통합 테스트라고 한다 나는 보통은 서비스 테스트 + 통합테스트 위주로 많이 했던것 같다 왜냐하면은 서비스를 mocking해서 테스트를 하다가 보면 초창기에 jpa 잘 못쓸 때 영속성 관련한 에러도 못잡을 때도 많았고 웹 특성상 db랑 연결할일이 많은데 결과를 제대로 보고 싶으면 mock하는 수준으로는 체크가 안됬기 때문이다 설명은 여기까지하고 시작은 gradle 설정부터 해보자..
-
spring을 이용한 MSA 구축 - spring cloud gateway - 1spring 2023. 3. 5. 11:12
기술 선정 spring cloud gateway vs zuul 보통 스프링에서 지원하는 몇가지 gateway가 있다. 그 중에서 두 개가 있는데 하나는 zuul, 하나는 spring cloud gateway이다. 둘 중 가장 큰 차이는 하나는 동기 하나는 비동기 방식이다. 비동기 방식이 일단 동기 방식의 정해진 스레드를 처리하는 것이 아니라서 많은 요청 적은 연산의 gateway에 잘 맞겠다 싶었습니다. 그리고 개인적으로 편했던 것은 필터에 자기자신의 서비스도 넣을 수 있던게 편했습니다. java vs kotlin 저는 전 회사에서도 그렇고 지금회사에서도 그렇고 java 만 쓰던 사람입니다. 하지만 webflux를 쓰려고 reactor를 공부하는데 가독성이 ... js의 then then.. 이거보다도 ..
-
스프링 멀티모듈 및 gradle 설정spring 2023. 2. 24. 11:49
기본적으로 스프링 멀티 모듈 구성할 때 가장 베이스로 나누는 것은 3가지라고 생각한다 api 모듈 : RestController를 중심으로 한 api 모듈 view 모듈 : Controller를 중심으로 한 view 모듈 (react와 같은경우 분리해서 없는 경우도 있다) core 모듈 : 핵심 코어 (mysql 등) 을 모은 코어 모듈 주로 아래와 같이 설정하게 된다 project(":jinheung_mall_api") { dependencies { implementation project(':jinheung_mall_core') } } project(":jinheung_mall_view") { dependencies { implementation project(':jinheung_mall_core')..