오늘
-
Adapter Pattern오늘/Today I.. 2023. 12. 28. 17:59
공부하게 된 계기 프로젝트에서 커스텀 애너테이션을 수정해야 할 일이 생겼다. 전 프로젝트에서 쓰던 것을 그대로 쓰려하였으나, DB 테이블명이 바뀌어서 해당 코드 또한 수정이 불가피하였다. 어떤식으로 수정해야 정상적으로 동작하는지 확신이 들지 않아 여러 블로그를 찾아보고, 튜터님께 질문을 하는 등의 노력 끝에 해결방안을 찾아냈다. 그 과정에서 공부하게 된 것이 바로 어댑터 패턴이기에 TIL로 기록해보고자 한다. Adapt Pattern? 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴. 서로 호환되지 않는 두 클래스를 호환되도록 만들어준다. 소프트웨어 디자인 패턴에서 구조패턴에 속해있다. 종류 1. 클래스에 의한 Adapter (상속 사용) 어댑터 클래스가 실제 클래스를 상속받고, ..
-
23/12/21 레디스를 왜 도커에서 써야해?오늘/Today I.. 2023. 12. 21. 16:28
레디스를 왜 도커에서 써야해?? 레디스 사용방식은 어떤것을 선택해야해? 1. Embedded Redis provided by Spring 2. Install Redis by yourself. 3. Redis in Docker 그중에서 뭐가 좋아? The Best. Redis in Docker 도커는 환경변수로 세팅하기 때문에 레디스 추가가 필요하면 포트만 변경하고 도커를 또 띄우면 된다. The Worst. Embedded Redis provided by Spring 스프링 기본 제공 레디스는 정말 추천하지 않는 방식이다. 레디스를 사용해볼 거라면 레디스에 있는 모든 기능을 사용하는게 좋은데 기본으로 제공하는 레디스는 너무 컴팩트하고 기능이 부족하다. 그냥 H2를 쓰는것과 다를게 없는.. Second W..
-
23/12/20 쿠버네티스가 뭔데 씹덕아오늘/Today I.. 2023. 12. 20. 21:36
쿠버네티스란? 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이며 서비스에 고가용성이 필요할때 사용할 수 있는 도구이다. 컨테이너가 뭐길래? 컨테이너는 VM(가상시스템)과 유사하지만 격리 속성을 완화하여 어플리케이션 간 OS를 공유함. 그래서 컨테이너가 가볍다고 여겨지는 것 VM과 마찬가지로 컨테이너 또한 자체 파일 시스템, CPU점유율, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다. 컨테이너만의 추가적인 이점 VM보다 빠른 이미지 생성과 배포 지속적 개발, 통합, 배포 개발과 운영의 관심사 분리 : 배포시점이 아닌 빌드/릴리즈 시점에 어플리케이션 컨테이너 이미지를 만들기 때문에 어플리..
-
23/12/18 스프링 스케줄러와 크론잡오늘/Today I.. 2023. 12. 18. 20:03
스프링스케줄러 스프링 프레임워크에서 제공하는 스케줄링 기능 장점 1. 스프링 프레임워크에서 기본으로 제공하기 때문에 사용이 쉬움 2. 어플리케이션과 같은 JVM 환경에서 실행하기 때문에 어플리케이션의 데이터에 쉽게 접근가능 단점 1. 하나의 Thread pool만 사용하기 때문에 한 스케줄이 끝나야 다음 스케줄 실행가능 2. 어플리케이션과 함께 실행되기때문에 재시작시 스케줄링도 함께 재시작된다. 그래서 장기적인 스케줄링 작업이 어려울 수 있다. 크론잡 유닉스 계열에서 사용하는 스케줄링 도구 장점 1. 시스템 수준에서 관리하기 때문에 스프링 스케줄러의 단점이었던 어플리케이션에 종속된 문제를 해결하였음. 2. 복잡한 일정 설정이 가능함. 단점 1. 유닉스 계열 시스템에만 사용가능하며 윈도우 등 다른 운영체제..
-
23/12/15 CI/CD오늘/Today I.. 2023. 12. 15. 13:48
CI (Continuous Integration, 지속적 통합) CD (Continuous Delivery, 지속적 배포) CI . 지속적 통합 코드 변경사항을 레포지토리에 지속적으로 업로드하여 통합하는 것. 이 과정에서 발생할 수 있는 오류를 빠르게 수정하는 것이 중요하다. 테스트와 빌드 과정은 반복적이기 때문에 자동화할 수 있다. 그래서 자동화된 단위 테스트, 통합 테스트를 실행하여 변경 사항이 제대로 적용되었는지 확인한다. CI의 장점 1. 자동화된 빌드와 테스트를 통해 빠르게 에러를 잡아낼 수 있다. 2. 커밋을 자주하게 됨으로써 문제의 원인을 쉽게 찾아낼 수 있다. 3. 지속적으로 에러를 찾아내 수정함으로써 코드의 안정성이 높아져, 코드품질이 높아진다. 4. 팀의 모든 개발자가 같은 코드베이스를..
-
23/12/14 스프링에서 static 사용을 지양하는 이유오늘/Today I.. 2023. 12. 14. 17:04
최근 자바책을 펴 볼 기회가 있었다. 그 책에서는 익숙하게 사용하였지만, 스프링에서는 뭔가 위화감이 드는 부분을 발견하였는데 스프링에선 클래스에 static을 쓰지 않는다는 것이다. 생각보다 사소한 변화였기에 왜 이상한지 그동안 알아차리지 못하였는데 그 이유를 적어보고자 한다. static을 지양하는 이유 첫번째. 스프링은 기본적으로 빈을 싱글톤으로 관리한다. 그렇기 때문에 하나만 생성되어 여러곳에서 공유하여 사용하는 것이 일반적인 사용방법인데, static은 인스턴스가 아닌 클래스 수준에서 관리되기 때문에 싱글톤 빈의 생명주기와 맞지 않게 된다. 두번째. 테스트 호환성 문제 static은 실행시점에 초기화된 후 종료시점까지 메모리에 남아있는다. 그래서 테스트 수행 시 한 테스트 케이스에서 static ..
-
23/12/13 Docker란?오늘/Today I.. 2023. 12. 13. 22:35
컨테이너 기반의 오픈소스 가상화 플랫폼 컨테이너란? 소프트웨어와 그 dependency를 하나로 패키징하는 것. 이렇게 패키징한 소프트웨어는 어느 환경에서도 동일하게 실행할 수 있다. 도커의 특징 1. 독립성과 표준화 컨테이너는 독립적으로 실행, 실행에 필요한 모든 요소를 포함하므로 어떤 환경에서도 동일하게 작동 2. 경량성 가상머신은 환경에 OS를 포함시키기 때문에 무겁다. 하지만 도커는 호스트 시스템의 운영체제를 공유하기 때문에 별도의 OS를 포함하지 않아서 훨씬 적은 자원을 사용한다. 3. 이식성 컨테이너는 어느 환경에서도 작동하기 때문에 이식성이 좋다 4. 버전관리 버전관리를 지원함. 5. 확장성 도커를 사용하는 이점 1. 환경 일관성 어떤 환경에서도 동일하게 작동하기 때문에 "저는 되는데 왜 서..
-
23/12/12 JPA와 QueryDSL 의 차이오늘/Today I.. 2023. 12. 13. 00:11
JPA (Java Persistence API) - 자바표준 ORM 기술. - SQL이 아닌 자바코드로 DB CRUD를 처리할 수 있게 도와줌 - 개발자가 SQL을 직접 작성하지 않아도 되어 편리 - DB 간 호환성을 높여줌 - 다만 쿼리에 오류가 있을 경우, 런타임에서만 확인가능 QueryDSL - Type-Safe한 쿼리를 작성할 수 있게 해주는 프레임워크 - 쿼리를 자바코드로 작성하기 때문에 컴파일 시점에 쿼리의 문법 오류를 잡아낼 수 있다. - 동적 쿼리 작성이 용이 - 코드 자동완성 등의 IDE 도움을 받을 수 있다. 선택 JPA는 쿼리작성의 편리성과 DB간 호환성 중요시 적합 QueryDSL은 Type - Safe한 쿼리 작성과 동적쿼리 필요시 적합 그렇지만 JPA로 기본적인 CRUD 연산을 ..