본문 바로가기
  • Where there is a will there is a way.

개발85

싱글톤 패턴의 한계와 스프링 싱글톤 우리가 알고있는 싱글톤 패턴은 다음과 같다. package com.company; public class SingleTonInstance { private static SingleTonInstance INSTANCE; // 스프링은 기본적으로 synchronized public synchronized static SingleTonInstance getINSTANCE() { if(INSTANCE == null){ INSTANCE = new SingleTonInstance(); } return INSTANCE; } } 1. private 생성자를 갖고 있기 때문에 상속할 수 없다. 객체지향의 장점인 상속과 이를 이용한 다형성을 적용할 수 없다. 기술적인 서비스만 제공하면 상관없겠지만, 애플리케이션의 로직을 .. 2020. 2. 9.
스프링 application context 빈 ( Bean ) 스프링에서 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈 이라고 부른다. 빈팩토리 ( Bean Factory ) 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 부른다. 애플리케이션 컨텍스트 ( Application Context ) 빈 팩토리보다는 이를 좀 더 확장한 개념이다. 애플리케이션 컨텍스트는 IoC 방식을 따라 만들어진 일종의 빈 팩토리라고 생각하면 된다. 빈 팩토리라고 말할 때는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞춘 것이고, 애플리케이션 컨텍스트라고 말할 때는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이라는 의미가 좀 더 부각된다고 보면 된다. 애플리케이.. 2020. 2. 8.
도커 컨테이너 자원 할당 제한 컨테이너를 생성하는 run, create 명령어에서 컨테이너의 자원 할당량을 조정하도록 옵션을 입력할 수 있다. 아무런 옵션을 입력하지 않으면 컨테이너는 호스트의 자원을 제한 없이 쓸 수 있게 설정되므로 제품 단계의 컨테이너를 고려한다면 컨테이너의 자원 할당을 제한해 호스트와 다른 컨테이너의 동작을 방해하지 않게 설정하는 것이 좋다. 컨테이너의 자원 할당 옵션을 설정하지 않은면 호스트의 자원을 전부 점유해 컨테이너들뿐 아니라 호스트 자체의 동작이 멈출 수도 있다. 현재 컨테이너에 설정된 자원 제한을 확인하는 가장 쉬운 방법은 docker inspect 명령어를 입력하는 것이다. docker inspect a6dba55d667f [ { "Id": "a6dba55d667f2b618cf62ed2131b9050.. 2020. 2. 1.
도커 컨테이너 로깅 컨테이너 내부에서 어떤 일이 일어나는지 아는 것은 디버깅뿐만 아니라 운영 측면에서도 중요하다. 특히 쿠버네티스나 랜처 도커스왐등의 devops tool 에서 컨테이너 로깅은 굉장히 유용하게 사용된다. 애플리케이션 레벨에서 로그가 기록되도록 개발해 별도의 로깅 서비스를 쓸 수도 있지만 도커는 컨테이너의 표준 출력 과 에러 로그를 별도의 메타데이터 파일로 저장하며 이를 확인하는 명령어를 제공한다. 보통 도커의 로그를 확인할땐 다음과 같은 명령어를 작성한다. docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 25ed5cb9492d redis:5.0.3 "docker-entrypoint.s…" 3 months ago Up 36 hours 0.0.0.. 2020. 2. 1.
spring 에서 pageable custom 구현 spring 에서 pageable custom 구현 spring 에서 jpa page 를 사용하면 편리하겠지만 가끔씩은 필요한 요구조건에 맞춰 내가 직접 pagenation 을 해야할 일이 생긴다. 간단하게 list 와 pageable 을 컨트롤러 layer 에서 받았을때 사용할 수 있는 custom pageable 을 작성해보았다. private Page makePageFromGoodsIds(List goodsIds, Pageable pageable) { int start = (int) pageable.getOffset(); int end = Math.min((start + pageable.getPageSize()), goodsIds.size()); return new PageImpl(goodsIds... 2019. 12. 19.
java 복잡한 Comparator 예제 comparator 를 사용할때 가끔은 복잡한 정렬이 필요할 때가 있다.. 항상 쓸때마다 헷갈림으로 남겨놓습니다.. @Test public void test() { List test = Lists.newArrayList(9, 10, 5, 4, 6, 7, 7, 8, 8, 9); Comparator sortList = Comparator.comparingInt(o -> o); Collections.sort(test, sortList); System.out.println(test); } @Test public void test_복잡한정렬조건() { List areaSortTests = new ArrayList(); areaSortTests.add(new AreaSortTest(0, 10, LocalDateTi.. 2019. 12. 19.