분류 전체보기(89)
-
코루틴
코루틴은 스레드보다 더 낮은 오버헤드로 비동기 작업을 수행하는데 사용된다. 협력형 멀티 태스킹인데 쓰레드를 여러개 쓰는 것이 아니라 쓰레드 한개로 동시성 프로그래밍을 지원하는 것이다. 멀티 태스킹의 일종의 시분할 방식으로 여러 task가 하나의 CPU를 나눠쓰는 방식인데 운영체제의 개입 없이 각 task가 독점적으로 CPU를 사용하고 사용이 끝나면 자발적으로 양보하는 방식입니다. 락이 필요 없다 옵저버 패턴이랑 비슷하지만서도 다른 점은 , 쓰레드 하나로 동시성 프로그래밍을 한다. (비슷한 부분, 어싱크, 논블라킹) 이것이 가능한 이유!! 그전에 보통 우리가 사용하는 코드 실행 방식을 얘기하자면 ! main 스레드가 plusOne()이라는 메소드를 호출하면 main routine에서 벚어나 Sub rout..
2023.02.12 -
옵저버패턴
옵저버 패턴 : 어떤 객체의 상태가 변할 때 그와 연관된 객체들에게 알림을 보내는 디자인 패턴 1.폴링 방식 LotteMart에 상품(value)가 현재 비어있다. 이 상품입고는 5초후에 입고가 될 예정이다. package hello.hellospring.ex08polling; public class LotteMart { //상품 private String value = null; public String getValue(){ return value; } //상품 입고 public void received(){ try { for (int i =0; i 여기서 단점 ! 손님1과 손님2는 해당 상품을 너무나도 사고 싶고 이 상품을 살려고하는 사람들이 많다면 손님1과 손님2는 해당 상품이 언제들어오는지 알지도..
2023.02.12 -
싱글턴 패턴 사용이유
싱글턴 패턴은? 인스턴스가 하나만 만들어져야 하고 이 인스턴스로 글로벌하게 접근 할 수 있는 방법이다. 싱글턴 패턴을 사용하는 이유 메모리 낭비: 인스턴스를 객체 new생성시 마다 만들게 된다면 많은 메모리가 소모된다 , 그렇기에 객체를 static하게 한개만 생성해서 스레드들이 사용할수있게 한다. -> 싱글톤 패턴은 스프링에서 빈을 싱글톤 패턴을 이용해서 관리합니다. 빈은 스프링 컨테이너에 의해서 생성이 되고 관리되는데 이때 스프링 컨테이너 ( 레지스토리) 가 싱글턴으로 관리합니다. 빈에 등록된 인스턴스는 다른 곳에서 호출을 하여도 객체가 여러개 생성이 되는 것이 아니라 하나의 객체만을 가지고 접근을 합니다. 궁금증? 그렇다면 커넥션 한개를 가지고 다른 클래스에서 호출을 하는가 생각 할수 있지만 그게 ..
2023.02.12 -
SOLID
-단일책임 원칙 "어떤 클래스를 변경해야 하는 이유는 오직 하나 뿐이여야 한다" ex) 남자 사람이라는 클래스에 안에 많은 메소드들이 있다 ( 남자친구, 아들,군인, 직장인) 등 그 메서드들을 다 때려 박아서 구현을하게 될시 한 책임의 변경에서 다른 책임의 변경으로 의 연쇄 작용이 발생한다. 그러므로 한책임만을 가져서 이러한 연쇄 작용으로 부터 자유로울 수 있게 된다 . 이는 곧 유지보수성에 좋다는 것을 의미한다. -개방폐쇄 원칙(OCP) "자신은 확장에는 열려 있고 주변 변화에는 닫혀 있어야 한다" ex)자동차는 타이어를 필요로 한다. 타이어 종류는 아메리칸 타이어 , 코리아 타이어가 있다 근데 이둘은 타이어로서 역할은 같지만 사용하는 방식이 약간씩 조금 차이가 있다면 자동차는 타이어종류를 바꿀때 마다..
2023.02.12 -
AspectJ vs Dynamic Proxy
AOP를 공부하던중 문득 스프링의 AOP와 AOP를 구현한 자바객체에 대해서 어떤 차이점이 있는지 궁금해졌다. AOP 란? 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 모듈화 하겠다는의미이다. AOP구현 방법 우선 AOP를 구현 할수 있는 방법은 다양하게 있다. AspectJ -컴파일 J.java -> J.class라고 컴파일 할 시점에 해당하는 Aspect를 끼워 넣어주는 방법 이있다. -클래스 로드시 J,class를 클래스 로더가 클래스에 올릴때 그대 aop를 적용시킨다. (여기서 의문이 어노테이션을 이용해서 그냥 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야 하는지 알려주기 위한 추가 정보로 사용하는지 아니면 리플랙션을 사용하는 것인지 리플랙션을 사용하게..
2023.02.12 -
ngrinder통한 서버 부하 테스트
42억 동기화 :) :: window에서 nGrinder 설치 및 실행 (tistory.com) window에서 nGrinder 설치 및 실행윈도우에서 nGrinder 를 사용해보자 java 기반이라 java를 설치해야 한다. 꼭 어떤버전을 사용해야 한다는 내용은 찾아보기 귀찮고 집에 1.8버전이 설치되어 있기 때문에 그냥 진행을 하였다. 울집은darozzang.tistory.com TPS (Transaction Per Second) :초당 처리량 높을수록 좋다. -> 여기서 내가 간과한 부분이 있다.jmx로 모니터링 할때는 동일한 환경에서 진행이 되어야 정확한 지표를 확인할 수 가 있다. 백그라운드가 달라지면 의미가 없다. 동일한 조건에서 백그라운드가 달라져도 같은 지표를 확인 할수 있게 하기 위해..
2023.01.29