728x90 분류 전체보기230 [Spring] @JsonProperty와 @SerializedName 목차 1. Gson과 Jackson Jackson Jackson은 JSON 구조를 처리해주는 라이브러리입니다. json뿐만 아니라 xml도 지원합니다. Gson Gson은 자바에서 json을 파싱하고 생성하기 위해 사용하는 구글에서 개발한 오픈소스입니다. Java Object → Json 문자열, Json 문자열 → Java Object로 변환할 수 있습니다. 2. @JsonProperty 사용하기 POST로 넘어오는 Json 데이터는 스네이크 케이스로 이루어져있는 반면 자바 엔티티는 카멜 케이스로 이루어져있습니다. 이러한 경우 컨트롤러 단에서 Json ↔ 자바 엔티티를 맵핑 시켜주어도 데이터의 key가 달라지는 경우 제대로 값을 받아오지 못 할 수 있습니다. 이를 해결하기 위해 @JsonProperty.. 2023. 8. 19. [Springboot] CircuitBreaker 적용방법(2) - 코드 적용 목차 지난번 CircuitBreaker 적용방법(1)에 이어서 포스팅하겠습니다. 1. CircuitBreaker 코드 적용하기 방법 1) 코드 적용 방식 연동 로직에 직접 CircuitBreaker를 적용하려면 먼저 적용대상 CircuitBreaker를 CircuitBreakerRegistry를 통해 구해야한다. 연동 로직에 CircuitBreaker를 decorate 하도록 직접 코드를 적용한다. 연동 대상 서버 API 호출 공통 로직에 적용 시 모든 API에 동일한 설정 적용이 가능하다. https://resilience4j.readme.io/docs/examples 1) Create a CircuitBreakerRegistry // Create a custom configuration for a C.. 2023. 8. 18. [Springboot] CircuitBreaker 적용방법 (1) - Resilience4j 목차 1. CircuitBreaker 적용 방법 circuitbreaker는 라이브러리를 통해 적용이 가능합니다. circuitbreaker를 제공하는 라이브러리는 아래와 같이 크게 3가지 종류가있습니다. 구분 Resilience4j Netflix Hystrix Sentinal Home https://github.com/resilience4j/resilience4j https://github.com/Netflix/Hystrix https://github.com/alibaba/Sentinel 라이센스 Apache License 2.0 Apache License 2.0 Apache License 2.0 특징 Light Weight, dependency 적음 Java 8 Fuctional Interface로 .. 2023. 8. 18. [JAVA] Fail-Fast 와 Fail-Safe 목차 1. Fail-Fast란 Fail-Fast 는 동작중 오류가 발생하면 바로 오류를 알리고, 작업을 중단하는 것입니다. 즉, 문제가 발생하면 곧바로 실행을 중단하고 최대한 빨리 예외를 던집니다. ArrayList, HashMap 등과 같은 java.util 패키지의 콜렉션에 대한 기본 반복자는 Fail-Fast입니다. Fail-Fast Iterators Iterator의 remove() 메소드 이외의 코드로 기존 Collection이 수정되면 Fail-Fast iterators는 예외가 발생합니다.Collections은 modCount라는 내부 카운터를 유지합니다. Collection에서 항목을 추가하거나 제거 할 때마다 이 카운터가 증가합니다.반복 할 때 각 next() 호출에서 modCount의 .. 2023. 8. 17. [Springboot] CircuitBreaker란 뜻 의미 목차 1. CircuitBreaker란? 말 그대로 누전 차단기 누전 차단기는 전기 회로에서 과부하가 걸리거나 단락으로 인한 피해를 막기 위해 자동으로 회로를 정지시키는 장치 서버에서 외부 API 통신의 장애 전파를 막기 위해 장애를 탐지하면 외부와의 통신을 차단하는 역할 Circuit Breaker가 실행(open)되면 Fail Fast함으로써 외부 서비스에 장애가 나더라도 빠르게 에러를 응답 받고 개발자가 지정한 행위를 리턴받을 수 있다. *fail-fast: 오류가 발생하면 곧바로 오류를 알리고 작업을 중단 장점 연동 서버의 장애로 인해 slow call 발생 시 전체 서버로의 장애 전파 방지 연동 서버 장애 발생 시 call을 차단하여 연동 서버의 장애가 과중되지 않도록 한다. => 장애 발생된 .. 2023. 8. 17. [JAVA] 일급컬렉션 (First Class Collection) 의미 사용방법 일급컬렉션이란? 일급컬렉션이란 Colletion을 Wrapping 하면서 그 외 다른 멤버 변수가 없는 상태를 일급컬렉션이라고 합니다. 일급컬렉션을 적용하여 Wrapping하게 되면 아래와 같은 장점이 있습니다. 비지니스에 종속적인 자료구조 Collection의 불변성 보장 상태와 행위를 한 곳에 관리 이름이 있는 컬렉션 예를들어 아래의 코드를 일급컬렉션을 적용한다면 List carList = new ArrayList(); for (String carName : carArr) { carList.add(new Car(carName)); } public class Cars { // 멤버 변수가 하나밖에 없다는게 중요 private List carList; public Cars(List carList) { t.. 2023. 8. 13. [Springboot] @Scheduled cron 사용하는 방법 @Scheduled 사용하기 @Scheduled 어노테이션을 사용하기 위해서 @EnableScheduling을 추가해주어야한다. @EnableScheduling public class TaskBatchApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(TaskBatchApplication.class); springApplication.addListeners(new ApplicationPidFileWriter()); springApplication.run(args); } } SpringbootApplication 위에 @EnableScheduling 어노.. 2023. 8. 12. [MySQL] TEXT Column cannot set default value text 타입을 가지는 컬럼의 default 값을 설정하려고 할 때 "TEXT Column cannot set default value" 이라는 에러가 발생하여 그 원인을 찾아보았습니다! TEXT 컬럼 default value 설정 CREATE TABLE `test_table` ( `col1` INT(11) NOT NULL AUTO_INCREMENT, `col2` TEXT, `col3` INT(11) DEFAULT NULL, `col4` TINYINT(1) DEFAULT '0', PRIMARY KEY (`col1`) ); 먼저 위와 같은 쿼리로 test_table을 생성합니다. ALTER TABLE `table1` change `col2` `col2` text default ''; col2 컬럼의 디폴트.. 2023. 8. 12. [JAVA] Collections.emptyList() 와 Lists.newArrayList() null을 반환하는 것은 위험하니 빈 empty List를 반환하는게 안전합니다. empty List를 반환하기위해 사용할 수 있는 코드는 아래와 같이 두 가지 선택이있는데요, Collections의 emptyList 와 Lists의 newArrayList는 무슨차이가 있을까요? Collections.emptyList() public static final List emptyList() { return (List) EMPTY_LIST; } Collections.emptyList() 는 static 으로 이미 만들어진 객체입니다. 따라서 cpu와 메모리에 추가 비용이 발생하지 않습니다. Collections.emptyList() 은 final 로 불변 객체를 리턴합니다. 따라서 객체 값을 받아 변경하는 경.. 2023. 8. 11. [Spring] Spring 프로젝트에서 리소스 파일 읽기 (Java8) Springboot에서 File 을 읽어오자 스프링부트에서 자바 코드로 파일을 읽어오기 위해 아래와 같이 코드를 생성했습니다! Path fileName = Path.of("src/main/resources/template/test.txt"); String actual = Files.readString(fileName); 하지만 Path.of 와 Files.readString에서 인텔리제이가 빨간 밑줄을 쳐줬는데요, 자바8에서는 지원하지 않는 메소드여서 오류가 발생했습니다. 그래서 자바8 기준으로 코드를 수정했습니다. Path filePath = Paths.get("src/main/resources/template/test.txt"); List lines = Files.readAllLines(filePat.. 2023. 8. 11. [Spring] 스프링 @MockBean, @SpyBean 배경 스프링과 Junit을 이용해서 테스트 코드를 작성하다 보면 테스트 환경(database, api)을 구현하는 코드까지 작성해야 하고 실제 테스트할 코드보다 환경을 구현하는 코드가 훨씬 더 복잡해지게 됩니다. 이런 문제 영역을 해결하기 위해서 테스트 더블 이라는 것이 나왔고 Java진영에서는 대표적으로 Mockito가 있습니다. Mockito를 사용하다보면 아래 어노테이션을 자주 접하게됩니다. @Mock @MockBean @Spy @SpyBean @InjectMocks SpringBoot 1.4에서 2개의 테스트 어노테이션 @MockBean, @SpyBean 이 추가되었습니다. 두 어노테이션 모두 spring-boot-test에서 제공하는 어노테이션입니다. Spring 에서는 보통 객체생성시 직접 생.. 2023. 3. 12. [Spring] 스프링 캐시 알아보기 (@Cacheable, @CachePut, @CacheEvict) 스프링 캐시 캐시란? 자주 사용되는 데이터를 저장하는 공간을 의미합니다. 자주 사용되는 데이터를 매번 요청 때마다 생성하여 응답하는 것 보다는 생성된 데이터를 저장해놓고 똑같은 요청이 왔을 때 로직을 거치지 않고 데이터를 반환해주는 것이 서버에 리소스 사용을 줄일 수 있으므로 성능을 향상할 수 있습니다. 그렇다면 캐시는 어디에 사용하는 것이 좋을까요? 클라이언트에게 전달되는 값이 동일할 때 빈번하게 호출될 때 한 번 처리할 때 많은 서버 리소스를 요구 할 때 예시로는 공지사항, 조회수, 랭킹 등이 캐시를 많이 적용합니다. 반대로 캐시를 적용하지 말아야하는 경우는 언제일까요? 실시간으로 정확성을 요구하는 경우 빈번하게 데이터 변경이 일어나는 경우 spring-boot-starter에서 제공하는 캐시는 서버.. 2023. 3. 12. [JAVA] CollectionUtils.isEmpty() 사용법 및 예시 객체의 Null 체크와 empty 여부를 동시에 체크하기 위해 어떻게 해야할까요? 지난번에는 String의 white space와 null 체크할 때 사용하는 StringUtils에 대해서 알아보았는데요~ 만약 List 의 empty 여부를 확인하고 싶다면 어떻게 해야하는지 알아보도록 하겠습니다~ ColletionUtils 문자열의 다양한 메소드를 사용하기위해 StringUtils 패키지를 사용했다면 객체에 대한 메소드를 사용하기위해서 CollectionUtils 패키지를 사용합니다. CollectionUtils는 Apache Commons에서 제공하는 클래스로 List의 길이와 null 체크 할 때 주로 사용됩니다. CollectionUtils.isEmpty() List testList = new Ar.. 2023. 2. 12. [JAVA] StringUtils.isBlank()와 StringUtils.isEmpty() 차이 Apache Commons에서 제공하는 패키지중 하나인 StrigUtils 를 사용하여 String의 null 체크, white space(공백) 체크 또는 빈 문자열의 유무를 확인 할 수 있습니다. StringUtils 알아보기 StringUtils는 org.apache.commons.lang.StringUtils 패키지에서 제공하는 클래스입니다. 자바의 String 클래스가 제공하는 문자열 관련 기능을 강화한 클래스인데요 StringUtils의 특징은 아래와 같습니다. - 특징 StringUtils 클래스만으로 거의 대부분의 문자열 처리를 수행 파라미터 값으로 null을 주더라도 NPE (Null Point Exception)을 발생시키지 않음 참고: https://commons.apache.org/.. 2023. 2. 11. [DB] MySQL CharacterSet과 Collation Character Set character set은 텍스트 데이터를 어떤 방식으로 인코딩하여 저장할 것인지를 결정하는 값입니다. 한글 인코딩을 위해 가장 널리 사용되는 인코딩 방식으로는 UTF-8과 EUC-KR이 존재하지만 show character set; 명령어를 통해서 지원하는 인코딩 목록을 확인 할 수 있습니다. Collation Collation은 정해진 character set에 의해 저장된 데이터들이 어떤 방식으로 정렬(order by) 될지를 결정하는 옵션입니다. 물론 직관적인 자료 (int나 date type)에서는 collation의 차이가 크게 의미 없습니다. 하지만 문자열을 정렬하는 방식에서는 차이가 있습니다. A와 가, 또는 A와 a 와 같은 문자열 정렬 방식을 설정하는 것은 설정.. 2022. 11. 12. [금융IT용어] IaaS / PaaS / Saas IaaS (Infrastructure as a Service) 아이아스 또는 이에스라고 부른다. IaaS는 서비스로 제공되는 인프라스트럭처로 개발사에 제공되는 물리적 자원을 가상화한다. 클라우드 인프라스트럭처 서비스는 확장성이 높고 자동화된 컴퓨팅 리소스를 가상화하여 제공하는 것으로 고객에게 서버, 네트워크, OS, 스토리지를 가상화하여 제공하고 관리한다. IaaS의 제공업체는 서버, 하드 드라이브, 네트워킹, 가상화 및 스토리지를 관리하며 고객은 OS, 미들웨어, 애플리케이션 및 데이터와 같은 자원을 관리한다. 장점: 물리적 자원을 제공받기때문에 고정비가 들지 않는다. 물리적 자원에대한 규모 확장/축소가 자유롭다. 요약) 물리적 자원 제공 PaaS (Platform as a Service) Pass (.. 2022. 11. 6. [금융IT용어] CRM / CRV / CoRPA CRM (Customer Relationship Management) 고객 관계 관리. 기업이 고객 관계를 관리해 나가기 위해 필요한 방법론이나 소프트웨어 등을 가리키는 용어이다. 현재의 고객과 잠재 고객에 대한 정보 자료를 정리, 분석해 마케팅 정보로 변환함으로써 고객의 구매 관련 행동을 지수화하고, 이를 바탕으로 마케팅 프로그램을 개발, 실현, 수정하는 고객 중심의 경영 기법을 의미한다. 다시 말해 기업들이 고객들의 성향과 욕구를 미리 파악해 이를 충족시켜 주고 기업들이 목표로 하는 수익이나 광고효과 등 원하는 바를 얻어내는 기법을 말한다. CRM은 단순히 제품을 팔기보다는 ‘고객과 어떤 관계를 형성해나갈 것인가’, ‘고객들이 어떤 것을 원하는가’ 등에 주안점을 둔다. 이런 고객 성향이나 취향을 먼저.. 2022. 11. 5. [k8s] Helm과 Chart 란? (쿠버네티스 패키지 매니저) 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자를 적어주세요. 글의 요약 설명 부분. 150자입니다 Helm Helm이란? 쿠버네티스는 도커 컨테이너를 쉽게 관리하고 배포해주는 일종의 컨테이너 오케스트레이션이라고하였습니다~! Helm은 이러한 쿠버네티스를 파이썬의 pip, Node.js에서 npm의 역할과 같이 쿠버네티스를 패키지로 해서 관리해주는 쿠버네티스 패키지 매니저로 쿠버네티스 클러스터에서 동작하도록 관리합니다. 즉, Helm을 사용하면 클러스터에서 배포할 애플리케이션을 쉽게 설치, 업데이트, 삭제가 가능합니다. Helm 아키텍처.. 2022. 11. 1. [리눅스] 리눅스 명령어 nslookup 사용법 및 예제 리눅스 명령어 중에 도메인 정보를 확인하기 위해서 nslookup 이라는 명령어를 사용한 적이 있습니다. nslookup은 어떤 명령어인지, 언제 사용하는 명령어인지 그리고 어떻게 사용하는지 더 자세히 알아보도록합니다. nslookup 명령어 의미 nslookup 명령어는 네트워크 디버깅을 할 때 자주 사용되는 명령어입니다. DNS 서버에 직접 DNS 쿼리를 하고 그 결과를 출력합니다. 이 명령어를 통해서 DNS 설정이 정상인지, 정상 동작하고 있는지, 네트워크가 의도한대로 정상 설정 되어있는지 등을 확인합니다. 또한 nslookup은 리눅스 명령어지만 macOS 나 window에도 동일한 이름을 가진 명령어가 있스니다. 현재는 nslookup 보다는 비슷한 기능을 지닌 dig 또는 host 명령어를 지.. 2022. 10. 29. [k8s] 컨테이너 실행 명령어 종류 Docker Container를 사용하다보면 명령어를 많이 사용하게됩니다. 보통 docker 명령어를 통해서 이미지를 실행 또는 stop을 할 수 있는데요, 기본적인 명령어 외에 어떤 명령어가 있는지 알아보도록합니다. 도커 컨테이너 (Docker Container) 도커 이미지를 통해서 도커 컨테이너를 생성 할 수 있습니다. 이전에도 설명드렸듯이 컨테이너는 이미지를 실체화한 것으로 이해 할 수 있는데요, 비유를 들자면 이미지 = 붕어빵틀 컨테이너 = 붕어빵 으로 이해할 수 있습니다. 즉 이미지 하나로 여러개의 컨테이너를 생성할 수 있는 것이죠. 자세한 도커 컨테이너 설명은 아래 포스팅을 참고하세요. [k8s] 컨테이너(Container)와 쿠버네티스(Kubernetes) 소개 컨테이너(Container).. 2022. 10. 28. 이전 1 2 3 4 5 ··· 12 다음 728x90