개발
ThreadPoolExecutor 동작 원리
1. ThreadPoolExecutor란Java에서 스레드풀을 관리하는 주요 클래스로,대량의 작업을 효율적으로 처리하기 위해 미리 생성된 스레드풀을 활용할 수 있도록 설계되었다.여러개의 작업을 병렬로 실행할 때 성능을 최적화하고, 스레드 생성과 제거를 관리하여 리소스 사용을 최적화하는 역할을 한다. 2. 생성자(주요 매개변수)public ThreadPoolExecutor( int corePoolSize, //코어 스레드 개수 int maximumPoolSize, //최대 스레드 개수 long keepAliveTime, //유휴 스레드 유지 시간 ..

JPA의 delete 메서드 비교(delete, deleteAll, deleteAllInBatch)
JPA delete 메서드를 살펴보던 중, 생각보다 많은 종류가 있다는 걸 알게 되었다. 이 중에서 어떤 메서드를 선택해야 할지 고민이 필요하여 이를 정리해본다. 1. JPA의 delete 메서드 종류1-1. 기본 개별 삭제 메서드특정 엔티티 하나를 삭제하는 메서드void delete(T entity); 1-2. 컬렉션 삭제 메서드fun deleteAll() // 저장된 모든 데이터를 삭제fun deleteAll(entities: Iterable) // 특정 목록 삭제fun deleteAllById(ids: Iterable) // 특정 ID 목록 삭제deleteAll()은 테이블에 있는 전체 데이터를 삭제하는 것이므로 매우 조심해서 사용할 것!내부적으로 find 메서드를 호출하여 엔티티들을 영속성 컨텍스..
Terraform의 init/plan/apply
Terraform 이란? 하시코프에서 오픈소스로 개발 중인 인프라스트럭처 도구 IaC 도구라고도 하는데, 여기서 IaC란 Infrastructure as Code의 약자로 코드를 통해 인프라를 구축/운영할 수 있도록 만들어주는 도구라고 합니다. https://btcd.tistory.com/20 테라폼(Terraform)이란? - 개념, 장점, 관리툴 ※ 목차 ▶ IAC 가상화 기술의 발전 Iac 란 Iac 종류 ▶ Terraform Terraform 개념 Terraform 장점 Terraform 구성 사용관리 툴 들어가기전에.. IT산업에 종사하면서 도구의 사용법을 익히는 것도 중요하지만, 그 btcd.tistory.com Terraform init/plan/apply 회사에서 테라폼을 사용하고 있는데,..

JsonParseException: Unrecognized token : was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 'false') - String과 JsonString을 구분합시다.
Dgs Graphql 의 DgsDataFetchingEvniroment로 "type"이라는 필드명의 Enum 타입인 쿼리 인자를 받아오던 중이었다. Any 타입으로 들어오게 되며 이를 String 타입으로 형변환 시키려고 했다. val type = environment.parseRequest("type", String::class.java) 위의 parseRequest메소드 내부에는 아래 로직을 구현시켜 놓았다. ObjectMapper를 이용하였고 type 필드가 String 타입에 속하는것을 사전에 디버깅하여 확인했기 때문에 아래 로직을 탈 것이라고 생각했다. val mapper = getObjectMapper(strategy) return when (this) { is String -> mapper...
GraphQL 라이브러리 비교(kickstart/netflix-dgs/graphql-kotlin)
GraphQL이란 페이스북에서 만든 API용 쿼리 언어 sql과 graphql의 차이점 sql: 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적, 쿼리를 주로 벡엔드 시스템에서 작성하고 호출 grpahql: 웹 클라이언트가 서버로부터 데이터를 효율적으로 가져오는 것이 목적, 쿼리를 주로 클라이언트 시스템에서 작성하고 호출 특징 쿼리언어이다 보니 스키마 작성이 필요하다. (클라이언트와 서버간 스펙 정의) Restful API에서 발생하는 under-fetching, over-fetching 이슈를 해결할 수 있다. Java 진영의 GraphQL Library Java/Kotlin 진영에서 사용 가능한 GraphQL 라이브러리는 여러가지가 있다.(Spring For GraphQL, Mic..

Spring Boot 배포 WAR 에서 JAR 로 변경하기 (Spring Boot Embedded Tomcat 사용하기)
Spring Boot Embedded Tomcat Spring Boot 프로젝트를 WAR 파일로 빌드하면 Tomcat과 같은 외장 WAS에 배포해야 실행이 가능하다. 그런데 Spring Boot에는 내부적으로 Tomcat이나 Undertow와 같은 서버가 내장되어 있어, 애플리케이션을 JAR 파일로 빌드하고 실행하는 것만으로도 웹 애플리케이션을 서비스할 수 있다. Spring Boot 배포 방법 WAR에서 JAR로 변경하기 기존에 WAR 파일로 빌드되던 Spring Boot 프로젝트를 JAR 파일로 빌드되도록 변경하려고 한다. 1. WAR 플러그인 및 의존 구성 제거 기존에 WAR 파일로 빌드하는 프로젝트였다면 Java 플러그인의 디폴트인 JAR 파일 생성을 비활성화시키고 WAR 테스크를 기본 동작으로 ..