본문 바로가기
728x90

스터디101

[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.
[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.
[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.
[네트워크] DMZ(Demilitarized Zone) 의미와 뜻 네트워크에서 내부망과 외부망에대해서 이야기할 때가 있습니다. 이때 DMZ라는 용어도 함께 언급되는데요 DMZ란 한국어로 직역하면 비무장지대로 아군과 적군 어느쪽이든 무장을 하지 않은 상태를 의미합니다. 그렇다면 네트워크에서 말하는 DMZ는 어떤 의미를 가질까요? 간단하게 DMZ가 가지는 의미부터 어떤 용도로 사용되는지까지 알아봅시다. DMZ란? DMZ란 Demilitarized Zone의 약자로 내부/외부망의 중간 지점을 의미합니다. 내부/외부 네트워크 사이에 중간지점에 위치하여 침입 차단 시스템 등으로 접근 제한을 수행하지만 외부에서 DMZ로의 직접 접근은 가능합니다. 배경 왜 DMZ라는 것을 만들어 사용하게되었을까요? 그 배경에대해서 알아봅시다. 컴퓨팅과 네트워크를 사용하는 기관들은 보안 목적으로 L.. 2022. 10. 27.
[k8s] 쿠버네티스 오브젝트(Kubernetes Objects) 종류 쿠버네티스 오브젝트(Kubernetes Objects)란? 쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트입니다. 쿠버네티스는 클러스터의 상태를 나타내기 위해 이 오브젝트를 이용합니다. 어떤 컨테이너화된 애플리케이션이 동작중인지, 어느 노드에서 동작 중인지 그 애플리케이션이 이용할 수 있는 리소스 그 애플리케이션이 어떻게 동작할지에대한 정책 (재시작, 업그레이드 등) 애플리케이션 개발자는 오브젝트를 생성/변경/삭제하여 쿠버네티스 시스템에 내 애플리케이션이 어떻게 표현될지 전달합니다. 이를 원하는 상태(desired state)라고 합니다. 대부분의 정보를 .yaml 파일로 kubectl (커맨드 라인 인터페이스)에 제공합니다. kubectl은 api 요청이 이루어질 때 json 형태로.. 2022. 10. 19.
[k8s] 컨테이너 오케스트레이션 (Container orchestration) 컨테이너 오케스트레이션이란? 컨테이너 오케스트레이션은 복잡한 컨테이너 환경을 효과적으로 관리하기위한 도구입니다. 편리한 도커 컨테이너가 나타나면서 많은 곳에 적용되고있습니다. 그러나 관리하는 서버 컨테이너 수가 점점 증가하면서 관리가 힘들다는 문제가 생겼습니다. 그래서 등장한 것이 컨테이너 오케스트레이션입니다. 우리가 많이 들어본 쿠버네티스는 컨테이너 오케스트레이션 툴의 한 종류이며 엄청난 인기로 사실상 표준으로 사용되고있습니다~! 👉함께보면 좋은 게시글 [k8s] 컨테이너(Container)와 쿠버네티스(Kubernetes) 소개 컨테이너(Container) 컨테이너는 어떤 환경에서나 실행하기 위해 필요한 모든 요소를 포함하는 소프트웨어 패키지이다. 이러한 방식으로 운영체제를 가상화여 프라이빗 퍼블릭 .. 2022. 10. 10.
728x90