728x90

Base 58

동기/비동기, 블로킹/논블로킹, 동시성/병렬성

Spring 환경에서 역사가 깊고 가장 흔하게 사용되는 @Async 를 생각해보자. 우리는 이를 통해 논블로킹/비동기 로직을 만들 수 있다. 사실 비동기라는 표현이 대중적으로 사용되지만 논블로킹이라는 표현도 적지 않게 사용된다. 일반적으로 블로킹==동기, 논블로킹==비동기 공식은 성립하지만 용어가 다른만큼 각각이 의미하는 바도 다르므로 이를 정확하게 이해하고 넘어갈 필요가 있다. 일반적으로 어떠한 test_1(), test_2(), test_3() 이라는 메소드를 순차적으로 호출하면 직전 메소드의 실행이 종료된 뒤에야 다음 메소드가 실행되고 이를 블로킹 방식이라 한다. 하지만 @Async를 사용하면 별도의 스레드에서 작업을 처리하기 때문에 직전 메소드의 종료와 무관하게 곧바로 다음 메소드가 실행되도록 할..

Base/개념정리 2021.07.08

CDN

Contents Delivery Network의 줄임말로 콘텐츠 전송 네크워크를 의미한다. 대용량 또는 사용자의 잦은 요청이 있는 컨텐츠들을 엑세스 하려는 곳에서 지리적으로 더 가까운 Cache 서버에 분산 배치하여 응답속도를 높히고 컨텐츠의 전송 중 발생하는 트래픽 집중 & 병목현상 및 데이터 손실을 해결하기 위해 등장한 컨텐츠 전송 기술이다. 참고: https://ijbgo.tistory.com/32

Base/OS, Network 2021.06.11

NAS

Network Access Storage 의 줄임말로 컴퓨터에 직접 연결하지 않고 LAN으로 연결해서 네트워크를 통해 데이터를 주고 받을 수 있는 저장소이다. 일반적인 서버 처럼 CPU와 메인보드가 있고 그곳에 하드디스크를 연결해서 사용하면 된다. 일반적인 데스크탑에서의 Window 같은 NAS 전용 운영체제도 존재한다. 즉, NAS는 하드웨어+소프트웨어의 조합이라고 볼 수 있고 그냥 하나의 서버 이해하는게 맞다. 클라우드 서비스와 유사하나 NAS는 개인이 용도에 따라 맞춤형으로 구축할 수 있다. NAS 서버는 네트워크상에서 고유한 IP 주소를 가진 단일 노드로 된다. 일반적으로 Lunix에서는 NFS 같은 프로토콜로 이더넷 연결을 통해 엑세스할 수 있고 인터넷 기반 파일 엑세스를 위한 http나 ftp..

Base/OS, Network 2021.06.11

Jenkins Master/Slave 연동

SSH 방식 https://wiki.kicco.com/pages/viewpage.action?pageId=9732396 JNLP 방식 https://wiki.kicco.com/pages/viewpage.action?pageId=9732892 실제 Jenkins가 설치된 서버를 Master라 칭하고 이곳에서 모든 CI/CD를 담당할 경우 부하가 심해질 수 있으므로 Master에서는 전체적인 Job에 대한 관리만 하고 실제 CI/CD는 별도 Slave 서버에서 수행되도록 부하분산 처리를 할 수 있다. 이때 Slave 서버는 일반적으로 실제 서비스가 배포되어야 할 서버가 된다. 이 경우 Master 와 Slave 연동이 필요하게 되고 일반적으로 SSH 방식을 많이 사용하고 Master 에서 Slave 로 접근..

Base/CI, CD 2021.06.05

Jenkins Kubernetes Plagin 구성시 주의사항

Jenkins Kubernetes Plagin 는 전통적인 마스터/슬레이브 구조 중 슬레이브를 Kubernetes Pod으로 구성하는 방식이다. 이는 일회성 컨테이너로 사용되고 잡 수행이 완료되면 자동으로 종료된다. 즉, 아래와 같은 구조가 된다. 구성 방법은 서칭하면 많이 나오니 생략하고 여기에서는 트러블 슈팅에 대해 이야기 하려고 한다. 일단 슬레이브는 무조건 k8s 컨테이너로 생성되어야 하기 때문에 이를 위한 쿠버네티스 클러스터가 필요하고 마스터는 해당 클러스터에 구축해도 되고 별도 클러스터에 구축해도 되고 아예 별도로 PM환경에 구축해도 된다. 여기에서 마스터를 슬레이브와 동일한 클러스터에 구성한다면 별도의 트러블을 경험하지 못하고 쉽게 구축할 수 있을 것이다. 다른 클러스터에 구축하거나 별도 P..

Base/CI, CD 2021.06.05

컨테이너 환경에서 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
728x90