본문 바로가기

SPRING

(32)
[SPRING] Transaction과 EventLister_트랜잭션 기본 개념 이벤트기반 API를 만들면서 겪어던 Transaction 이슈/ EventLister & TransasctionalEventLister 사용 등 생각 정리 차원에서 글정리, 스프링 트랜잭션의 내용은 `스프링5 레시피' 책의 내용을 참조 스프링 트랜잭션 관리 트랜잭션 관리는 엔터프라이즈 애플리케이션에서 데이터 무결성과 일관성을 보장하는 데 필수 기법이다. 스프링에서도 프로그램 방식의 트랜잭션 관리 및 선언전 트랜잭션 관리 기능을 지원한다. 트랜잭션이란 쉽게 말해 연속된 여러 액션을 한 단위의 작업으로 뭉뚱그린 것. 트랜잭션의 속성은 ACID(원자성, 일관성, 격리성, 지속성)로 설명할 수 있다. 원자성(Automicity) : 트랜잭션은 연속적인 액션들로 이루어진 원자성 작업이다. 트랜잭션의 액션은..
[SPRING] 생성자 의존성 주입을 권장하는 이유?(Constructor Injection Vs Field Injection) 1. 단일 책임의 원칙 [객체 지향 원칙 설계의 S O L I D] 생성자의 인자가 많을 경우 코드량도 많아지고, 의존관계도 많아져 단일 책임의 원칙에 위배된다. 그래서 Constructor Injection을 사용함으로써 의존관계, 복잡성을 쉽게 알수 있어 리팩토링의 단초를 제공하게 된다. 2. 테스트 용이성 DI 컨테이너에서 관리되는 클래스는 특정 DI 컨테이너에 의존하지 않고 POJO여야 한다. DI 컨테이너를 사용하지 않고도 인스턴스화 할 수 있고, 단위 테스트도 가능하며, 다른 DI 프레임 워크로 전환할 수도 있게 된다. 3. Immutability [불변 객체] Constructor Injection에서는 필드는 final로 선언할 수 있다. 불변 객체가 가능한데 비해 Field Injecti..
[Logback] Logbak으로 로그 남기기 로그 ( Log )로그는 기록을 남기는 것을 의미합니다.구체적으로는 프로그램 개발이나 운영 시 발생하는 문제점을 추적 하거나 운영 상태를 모니터링 하는 정보를 기록하는 것이죠.또한 분석을 통해 통계를 낼 수도 있기 때문에 기록을 남기는 것은 중요하다고 할 수 있습니다. 하지만 로그를 남기면 성능이 나빠진다는 단점이 있는데, 그 보다 로그를 통해 얻는 정보가 훨씬 많기 때문에 필요한 부분에 파일로써 로그를 남기는 것이 중요합니다. Logback스프링에서는 기본적으로 commons.logging 라이브러리 ( Apache의 JCL, Jakarta Commons Logging )을 사용합니다.즉 스프링 개발을 할 때 스프링이 뿜어내는 메시지는 JCL에 의존하여 로그를 남기는 것입니다.실제로 spring-con..
[SPRINGBOOT]Elasicsearch(엘라스틱서치) 연동 =============업무 복습 ============== Elasticsearch와 spring 연동Nov 5, 2017Spring에서 Elasticsearch와 연동해보자. Elasticsearch는 기본적으로 http통신의 RestAPI이기 때문에 스프링에서 제공하는 RestTemplete를 이용해도 된다. 여기서는 Elasticsearch에서 제공하는 라이브러리를 이용해보도록 해보자.1. 엘라스틱서치 라이브러리 설치엘라스틱서치에서 제공하는 RestAPI 에는 공식적으로 두 가지 api가 존재한다.java Low Level REST Clientjava High Level REST Client기본적인 PUT, POST, GET, DELETE 등은 low level 버전으로 충분히 커버가 된다. hi..
[SpringBoot] 스프링부트로 웹서비스 출시(운영 환경 설정 ) - 7[창천향로님 글 배우기] 저번시간까지 배포 환경에 대한 설정을 진행했습니다! 이제는 서비스 중단 없이 배포가 가능한 상태가 되었는데요. 이대로 서비스 하면 될까요? 뭔가 하나 놓친게 있지 않으신가요? 현재는 스프링부트에서 실제 운영 DB의 설정을 갖고 있지 않습니다. 즉, 아직은 프로젝트가 AWS RDS와 연동된 상태가 아닙니다. 그래서 이번 시간엔 스프링부트와 운영 DB 접근 등의 실제 운영환경 설정을 진행하겠습니다. 8-1. 운영 DB 접근 저번 시간에 저희는 운영 YAML (real-application.yml)만 별도로 분리해 EC2 서버에 추가했습니다. 간단하게 생각하면 운영 DB 접속 정보는 real-application.yml에 추가하면 됩니다. 하지만 이렇게 될 경우 set1, set2 설정에 같은 내용을 반복 추..
[SpringBoot] 스프링부트로 웹서비스 출시(Nginx를 활용한 무중단 배포 구축하기 ) - 7[창천향로님 글 배우기] 이번 시간엔 무중단 배포 환경을 구축하겠습니다. (모든 코드는 Github에 있습니다.) 7-1. 이전 시간의 문제점? 이전 시간에 저희는 스프링부트 프로젝트를 Travis CI를 활용하여 배포 자동화 환경을 구축해보았습니다. 이젠 Master 브랜치에 Push만 되면 자동으로 빌드 & 테스트 & 배포가 자동으로 이루어집니다. 하지만! 배포하는 시간 동안은 어플리케이션이 종료가 됩니다. 긴 시간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜놓기 때문에 서비스가 안됩니다. 하지만 최근 웹 서비스들은 대부분 배포하기 위해 서비스를 정지시키는 경우가 없습니다. 어떻게 서비스의 정지 없이 배포를 계속 할 수 있는지 이번 시간에 확인하고 서비스에 적용해보겠습니다. 7-2. 무중단 배포? 예전..
[SpringBoot] 스프링부트로 웹서비스 출시(TravisCI & AWS CodeDeploy로 배포 자동화 구축하기) - 6[창천향로님 글 배우기] 이번 시간엔 배포 자동화 환경을 구축하겠습니다. (모든 코드는 Github에 있습니다.) 6-1. CI? 이전 시간에 저희는 스프링부트 프로젝트를 간단하게나마 EC2에 배포해보았습니다. 스크립트를 개발자가 직접 실행시킴으로써 발생하는 불편을 경험했습니다. 그래서 이번 시간엔 CI 환경을 구축해보려고 합니다. 코드 버전 관리를 하는 VCS 시스템에 PUSH가 되면 자동으로 Test, Build가 수행되고 Build 결과를 운영 서버에 배포까지 자동으로 진행되는 이 과정을 CI (지속적 통합)이라고 합니다. 단순히 CI 툴을 도입했다고 해서 CI를 하고 있는 것은 아닙니다. 마틴 파울러의 블로그를 가보시면 CI에 대해 다음과 같은 4가지 규칙을 이야기합니다. 모든 소스 코드가 살아있고(현재 실행되고) 어느 ..
[SpringBoot] 스프링부트로 웹서비스 출시(EC2에 배포하기) - 5[창천향로님 글 배우기] 기본 베이스 출처 : http://jojoldu.tistory.com/263?category=635883 보충 설명 : 1. .yml 파일의 profiles 이해 : 74번 글 https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html 2. 리눅스: ㄱ. if문 : - http://jink1982.tistory.com/48 ㄴ. 리다이렉션 & 파이프라인 : - http://jdm.kr/blog/74 ㄷ. tail: - https://www.computerhope.com/unix/utail.htm ㄹ. sh 기초 - 명령어을 문자열로 치환($ 사용): -http://developer..