개발
-
롤백 이후 git개발/내가보려고 정리! 2020. 12. 22. 20:24
배포 후 서비스에 문제가 발생하게 되면 대부분 롤백을 하게된다. 롤백 이후 문제가 생겼던 부분이 다른 작업자에 의해 다시 배포되는 일을 방지하기 위해 해당 커밋을 'git revert' 하게 되는데, 이슈가 발생한 부분을 수정한 이후 다시 머지하게 되면 직접 수정한 소스코드만 머지가 된다. 오잉? 앞서 리버트를 통해 기존에 머지되었던 코드가 해당 브랜치에서 모두 빠졌기 때문에 해당 작업이 배포되려면 다시 작업한 소스가 해당 브랜치에 머지되어야하는데 적잖히 당황할 수 있다. 리버트 시점 이후에 수정한 부분만 업데이트 처리되어서 그런것 같다. 위 경우 리버트한 커밋을 다시 리버트하면 해당 커밋이 돌아오게 되고 그 후 수정한 소스를 머지하면 해결된다 리버트한것을 다시 리버트 그 리버트한것을 다시 리버트 그 리..
-
트랜잭션의 특성개발/Database 2020. 11. 24. 19:10
트랜잭션의 특성은 일반적으로 ACID라는 약어로 설명된다. 원자성(Atomicity) 트랙잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장 즉, All or Nothing의 작업 단위가 전부 실행되거나 전부 실행되지 않는다는것으로 작업의 일부분만 실행 될 수 없다는 것을 의미 일관성(Consistency) 트랜잭션이 성공적으로 완료되면 일관적인 DB 상태를 유지해야한다는 것을 의미 트랜잭션 이후에도 이전상태와 상태가 동일해야함, 예를 들어 계좌의 금액필드가 0 크거나 같아야 한다는 제약조건이 있다면 종료후에도 이것이 유지되며 유지되지 않는다면 해당 트랜잭션은 중단 격리성(Isolation) 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것을 의미 즉, 트랜잭션끼리는 서로를 ..
-
Spring Rest docs 적용개발/Spring 2020. 11. 19. 11:12
dependencies { testImplementation("org.springframework.restdocs:spring-restdocs-mockmvc") asciidoctor("org.springframework.restdocs:spring-restdocs-asciidoctor") // restdocs asciidoctor의 extension을 사용하기 위한 의존성 추가 }Rest docs를 사용하기 위해서는 위 의존성만 추가하면 된다. 하지만 .adoc 파일을 .html 파일로 바꾸어서 build된 파일의 특정 폴더(static)에 해당 파일 이동시키기 위해 plugin 설정이 필요한데 여기서 꽤 애를 먹었다. 우선 위와 같은 작업을 하기위해서는 asciidoctor.convert plugin이..
-
무중단 배포개발/서버 사이드 2020. 7. 7. 17:17
Rolling Deployment *single point of failure : 단일장애점은 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소 High Availability(고가용성 : 서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질, "절대 고장나지 않음")을 위해 프로덕션 환경은 2대 이사으이 서버로 구성한다. 이런 환경에서 무중단 배포하기 가장 간단한 방법이 바로 Rolling Deployment 이다. 시나리오 1. 서버1을 로드밸런서에서 뺀다. 2. 서버1에 배포한다. 3. 서버1을 다시 로드 밸런서에 넣는다. 4. 서버2를 로드 밸런서에서 뺀다. 5. 서버2에 배포 한다. 6. 서버2를 다시 로드 밸런서에 넣는다..
-
HTTP란?개발/서버 사이드 2020. 6. 29. 01:08
HTTP(Hyper Text Transfer Protocol) HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버 프로토콜이란(보통 웹브라우저인) 수신자 측에 의해 요청이 초기화되는 프로토콜을 의미합니다. 클라이언트와 서버들은 (데이터 스트림과 대조적으로) 개별적인 메시지 교환에 의해 통신합니다. 보통 브라우저인 클라이언트에 의해 전송되는 메시지를 요청(request)이라고 부르며, 그에 대해 서버에서 응답으로 전송되는 메시지를 응답(response)이라고 부릅니다. HTTP는 애플리케이션 계층의 프로토콜로, 신뢰 가능한 전송 프로토콜이라면 이론상으로는 무엇이..
-
docker 명령어 정리개발/내가보려고 정리! 2020. 2. 8. 23:16
docker 정리 image - install 파일과 같음 container - 호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것 명령어 정리 docker images - 사용가능한 이미지 출력 docker ps - 실행중인 컨네이너 출력 /bin/bash - 쉘 docker exec -it {containerName} /bin/bash docker attach docker diff - 부모 이미지와 파생된 컨테이너의 파일 시스템 간의 변경사항 확인 docker commit - 기본 이미지에 설치된것들을 포함한 새로운 이미지 생성 docker rm - 컨테이너 삭제 do..
-
Spring PSA개발/Spring 2020. 2. 2. 15:35
PSA(Portable Service Abstraction) 한마디로 잘 만든 인터페이스 이점 : 다양한 기술스택을 사용or변경 하여도 개발자가 작성한 비즈니스로직은 그대로 유지할 수 있다. PlatformTransactionManager interface 예 : JPA를 사용거나 JDBC를 사용하거나 @Transactional 어노테이션만 작성되어 있으면 이미 작성된 코드의 변경없이 정상 작동한다. PlatformTransactionManager를 implement한 구현체 JpaTransactionManager, DatasourceTracnsactionManager, HibernateTransactionManager 등이 관리해줌 이외에도 CacheManager Spring MVC 등이 PSA이다.
-
Spring AOP개발/Spring 2020. 2. 2. 13:00
AOP(Aspect Oriented Programming) 란? - 업무 로직을 포함하는 기능을 핵심기능 - 핵심 기능을 도와주는 부가적인 기능(로깅, 보안 체크)을 부가기능 이라고 부른다. 이러한 핵심 기능과 부가기능을 나누는 프로그래밍을 AOP라 한다. OOP를 더욱 OOP 스럽게 만들어줌 class A { method a() { AAAA doSometing(); BBBB } } class B { method b() { AAAA doSomething(); BBBB } } 예를 들어 어떠한 핵심기능을 하는 doSomething()를 전후로 AAAA와 BBBB라는 기능이 필요할때의 코드는 위와 같을것이다. 하지만 위에서 중복되는 AAAA와 BBBB는 필요하지만 핵심기능과는 관련없는 기능이다. 이는 코드의..