[Thread] 3. 일반 스레드 vs 스레드풀 (I/O, CPU 성능 비교)
·
개발지식/스레드(Thread)
스레드 vs 스레드풀 (성능 비교)📌 서론이전 1,2탄 포스팅에서 '일반 스레드'와 '스레드풀'을 사용했을 때 I/O, CPU 작업을 진행하면 어떤 성능을 보여줄지 테스트를 진행했다. 테스트를 통해 I/O 작업이 조금 더 스레드풀 설정에 민감하게(성능향상폭) 반응한다는 것을 알게 되었고 CPU작업은 스레드풀 설정에는 민감하지 않지만 제대로 설정하지 않으면 낭비되는 스레드가 많을 것이라는 생각을 하게 되었다.그래서 이번에는 조금 더 상세하게 각 스레드별로 테스트를 진행하고 분석을 해봤다. 이번 내용을 통해 우리가 일반적으로 사용하는 스레드의 성능과 최적화는 어떻게 하는게 좋을지 알아보자.테스트에 사용되는 코드는 하단의 1,2편에 모두 작성되어 있습니다. (전체 소스코드 깃허브도 이전 포스팅에 포함) [T..
[Thread] 2. 스레드풀의 I/O, CPU 성능 비교
·
개발지식/스레드(Thread)
Kotlin(Java)을 사용하여 스레드풀의 성능을 비교해 보자📌 서론지난 포스트에서는 일반적인 스레드 환경의 I/O, CPU 스레드 성능을 비교해 봤다.이번 포스트는 Thread 시리즈의 2번째 포스트로서 만약 스레드풀을 사용한다면 어떤 성능을 보여줄지 테스트해 보고 이전 결과와 비교해 볼 예정이다.이 글을 확실하게 이해하기 위해 이전 포스트를 확인하는 것을 추천한다. 왜냐하면 이전 포스트에서 얻은 결과를 통해 이번 포스트에서 비교하기 때문이다.이전 포스트 (일반 스레드 성능 비교) [Thread] 1. 일반 스레드의 I/O, CPU 성능 비교Kotlin(Java)을 사용하여 일반 스레드의 성능을 비교해 보자📌 서론최근 나는 동시성 제어에 관심이 생겨 관련된 개념을 많이 찾아보고 생각하고 있다. 그..
[Thread] 1. 일반 스레드의 I/O, CPU 성능 비교
·
개발지식/스레드(Thread)
Kotlin(Java)을 사용하여 일반 스레드의 성능을 비교해 보자📌 서론최근 나는 동시성 제어에 관심이 생겨 관련된 개념을 많이 찾아보고 생각하고 있다. 그래서 java의 동시성 제어 List, Map 등을 내부 구현까지 뜯어서 확인해보기도 하고 성능 테스트도 진행했다.이렇게 열심히 테스트를 하다 보면 동시성 제어가 이런 것이구나! 깨달음을 얻게 된다. 근데 나는 궁금한 게 많은 개발자다 보니 테스트를 하며 새로운 것들에 눈을 뜨게 되었다. 특히 locust결과를 보면 알 수 있는 RPS(Requests Per Second)에 대해서 많이 궁금한 점이 생겼다. RPS는 동시성 제어(synchronized, concurrentHashMap)에 따라 lock이 걸리며 결과가 다르게 나타나기도 하지만 스레..
가볍게 알아보는 디자인 패턴 - 퍼사드 패턴(Facade Pattern)
·
개발지식/디자인패턴
퍼사드 패턴에 대해 가볍게 알아보자 1. Facade Pattern이란?1-1. 퍼사드 패턴이란퍼사드(Facade) 패턴은 복잡한 시스템을 쉽게 사용할 수 있도록 도와주는 디자인 패턴이다. 예를 들어, 컴퓨터를 켜면서 하는 일들을 생각해 보자. 전원 버튼을 누르는 것만으로 운영체제가 시작되고, 여러 프로그램이 실행되고, 네트워크에 연결되는 일들이 일어난다. 이 모든 복잡한 과정들을 단 한 번의 버튼 클릭으로 간단하게 처리할 수 있는 것처럼, 퍼사드 패턴은 프로그래밍에서도 비슷한 역할을 한다. 1-2. 퍼사드 패턴의 역할퍼사드 패턴은 복잡한 서브시스템의 기능들을 간단한 인터페이스로 제공함으로써 클라이언트 측 개발자가 내부 로직의 복잡성을 몰라도 되게 한다. 이 패턴은 여러 복잡한 클래스들과의 직접적인 상호..
가볍게 알아보는 디자인 패턴 - 팩토리 메서드 패턴(Factory Method Pattern)
·
개발지식/디자인패턴
팩토리 메서드 패턴에 대해서 알아보자   1. 팩토리 메서드 패턴이란?팩토리 메서드 패턴은 객체 생성을 추상화하고 캡슐화하는 디자인 패턴이다. 스프링에서 이 패턴은 BeanFactory와 ApplicationContext를 통해 구현된다. 객체를 직접 생성하는 대신, 팩토리를 통해 객체를 요청하면, 이 팩토리가 객체 생성의 복잡성을 숨기고 필요한 객체를 제공한다. 1-1. 팩토리 메서드 패턴의 기본 구조  1. 정의팩토리 메서드 패턴은 객체의 생성 과정을 서브 클래스에 위임하는 디자인 패턴이다. 이를 통해 클라이언트 코드는 구체적인 클래스의 인스턴스화 과정을 알 필요 없이, 객체를 생성할 수 있다.  2. 구현 방식이 패턴은 팩토리 메서드를 정의하여, 이 메서드가 객체를 생성하고 반환하는 역할을 한다. ..
가볍게 알아보는 디자인 패턴 - 싱글톤 패턴(Singleton Pattern)
·
개발지식/디자인패턴
스프링에 적용된 싱글톤 패턴에 대해서 간단히 알아보자 1. 싱글톤 패턴의 구조 이해하기 1-1. 스프링 컨테이너 이해하기스프링 컨테이너는 ApplicationContext를 통해 정의된다. 이 컨테이너는 IoC(Inversion of Control) 또는 DI(Dependency Injection) 컨테이너로도 알려져 있다. 주요 역할은 애플리케이션 내의 빈(Bean)들을 인스턴스화, 구성, 관리하는 것이다. 이 과정을 통해 개발자는 객체의 생성과 생명주기에 대해 걱정할 필요 없이 비즈니스 로직에 집중할 수 있다.1-2. IoC 컨테이너 (스프링 컨테이너)의 중요성IoC 컨테이너는 객체의 생성과 의존성 주입을 담당한다. 이는 객체 간의 의존성을 느슨하게 만들어, 코드의 재사용성과 테스트 용이성을 향상시킨..
[SQL] 쿼리 인젝션이란?
·
개발지식/WEB, DB, GIT
이번 시간에는 쿼리 인젝션에 대해서 알아보자 웹 어플리케이션의 보안은 개발 과정에서 가장 중요한 고려사항 중 하나다. 특히, 데이터베이스와 상호작용하는 웹 사이트에서는 SQL 인젝션과 같은 공격이 심각한 위협이 될 수 있다. 이번 글에서는 SQL 인젝션의 개념부터 시작하여, 이러한 공격이 어떻게 이루어지는지, 그리고 이를 효과적으로 방지하기 위한 방법들에 대해 알아보도록 하자. 특히, 나는 Spring Boot를 주로 사용하기에 SpringBoot 환경에서 쿼리 인젝션을 방지하기 위한 실질적인 전략도 약간 다뤄보고자 한다. 1. 쿼리 인젝션의 위험성과 중요성 1-1. 쿼리 인젝션 이란? 쿼리 인젝션은 웹 어플리케이션 데이터베이스의 쿼리에 임의의 SQL 코드를 삽입하여 공격자가 데이터베이스를 조작할 수 있..
Jenkins 깃허브 훅 설정 - GitHub hook trigger for GITScm Polling 설정하기
·
개발지식/WEB, DB, GIT
Jenkins에서 CI/CD를 구축하다 보니 "빌드 유발"에서 GitHub hook trigger for GITScm Polling가 존재했고 이에 이것을 어떻게 설정하는지 설명하고자 한다. 1. Github에서 세팅하기 1-1. Settings 들어가기 Jenkins의 CI/CD에 연결할 repository 상단의 Settings를 클릭해 들어간다. 1-2. Webhooks 들어가기 Settings 좌측의 meun bar에서 Webhooks를 클릭한다. 아래와 같이 페이지가 나올것이다 1-3. Webhooks 설정하기 우측의 "Add webhook" 버튼을 클릭한다. 여기서 Payload URL의 url 수정을 해줘야 한다. 아래와 같은 식으로 적어주자 http://{내 jenkins서버 접속 url}..