전체 글

.
본 글은 로버트 C. 마틴의 클린코드를 읽고 주관적인 생각을 적은 글입니다. 이 책의 4장 주석을 읽어보기 전에는 주석이 꼭 필요할까? 에 대한 저의 답은 "가끔"이었고 읽고 나서도 변하지 않았습니다. 책 설명에서와 같이 잘 짜인 코드라면 코드만 으로도 충분한 설명이 가능할 것 같습니다. 가끔 필요 없는 곳에도 주석을 사용한 적이 있던 적도 있는 것 같고 필요한 곳에 사용하지 않은 적도 있는 것 같습니다. 책의 케이스 중 어느 정도 맞다고 생각하는 케이스만 적어보겠습니다. 1. 코드로 의도를 표현하라! 다음 코드는 주석이 있는 코드와 주석을 없앤 코드입니다. 주석이 있는 코드 // 직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (e..
이번에는 함수에 대해 깨끗한 코드를 작성하는 방법에 대해 몇 가지 예시와 함께 알아보겠습니다. 작게 만들어라 나쁜 코드 아래와 같은 뭔가 결제하고 주문 상태를 변경하고 주문확인 이메일을 전송하는 로직을 가지고 있는 함수가 있습니다. public class PaymentProcessor { public void processPayment(Order order) { // 추상화 되지않은 소스코드 들..! // 결제 처리 // ... 긴 로직 // 주문 상태 업데이트 // ... 긴 로직 // 주문 확인 이메일 전송 // ... 긴 로직 } } 실무를 접하다 보면 많이 보게 되는 코드인데요. 무엇인가 굉장히 길고 늘어뜨려 놓아 개발 툴 한 화면에서도 전부 확인할 수 없는 코드가 되게 됩니다. 읽는 입장에서 해..
본 글은 로버트 C. 마틴의 클린코드를 읽고 주관적인 생각을 적은 글입니다. 책을 읽어보니 코드를 작성할 때 의미 있는 이름이 얼마나 중요한지를 설명해주고 있었습니다. 해당 장을 읽고 중요하다고 생각되는 부분만 몇 가지 간추려봤습니다. 의도가 분명한 이름 나쁜 코드 public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if (x[0] ==4) list1.add(x); return list1; } 해당 코드에서는 의미가 분명하지 않아 소스 코드를 파악하기 어렵습니다. theList 에는 무엇이 들어있는가? theList 에서 0번째 값이 어째서 중요한가? 값 4는 무슨 의미인가? 함수는 반환하는 리스트 list1을 어떻게..
WebClient로 타 API 요청 시 recvAddress(..) failed: Connection reset by peer 오류와 함께 요청이 정상적으로 처리되지 않는 문제가 발생하였습니다. 해당 오류를 처리하기 위해서는 일단 3 way handshake HTTP/1.1에 대한 이해가 필요합니다. 이해를 돕기위해 각각 간략하게 알아보겠습니다. 3 way handshake TCP 통신의 경우 데이터를 주고받기 위해서 handshake 과정이 필요합니다. 1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보냅니다. 2. 서버는 SYN 패킷을 받고 클라이언트의 요청을 수락한다는 ACK와 SYN flag 가 설정된 패킷을 발송하고 클라이언트가 다시 응답하기를 기다립니다. 3. 클라이언트는 서버에게 AC..
ECS 서비스 도중 다음과 같은 에러 메시지와 함께 서비스 중인 ECS 가 시작되지 않았다. failed to launch: exec.d: failed to execute exec.d file at path '/layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/memory-calculator': exit status 1 Calculating JVM memory based on 617764K available memory For more information on this calculation, see https://paketo.io/docs/reference/java-reference/#memory-calculator unable to calculate..
본 글은 Spring 6.0.8 Spring Boot 3.0.6 Spring batch 5.0.1 으로 작성되었습니다. 스프링 배치에 대한 전반적인 지식이 부족하신 분은 스프링 배치 이론을 참고해 주세요. 이 글은 어느 정도 스프링에 익숙한 분들을 위한 글입니다. 본 글에서는 Job, Step 작성 및 실행까지만 다룹니다. 각 소스코드에 대한 설명은 없습니다. 각 메서드 및 소스코드에 대한 설명을 다음 편에서 하나씩 진행하도록 하겠습니다. Spring Initializr에 방문하여 Spring Batch를 추가하고 그 외 필요한 것들을 추가하여 다운로드합니다. 해당 배치에서 접속할 DataSource 설정을 합니다. 스프링 배치 이론에 있는 메타테이블이 생성되어있어야 합니다. 기존 스프링 배치 4.x 버..
Spring Batch 이론에 대해 알아보겠습니다. 이 글은 Spring Boot 3.0.6 Spring Batch 5.0.1 Spring 6.0.8 Java 17 기준으로 작성되었습니다. Spring Batch 4.x 와 Spring Boot 2.x 와는 다른 점이 많으니 해당 버전은 다른 글을 참고해 주세요~! Spring 배치란? Spring Batch는 대용량의 데이터 처리를 위한 오픈소스 배치 프레임워크로, 스프링 프레임워크와 통합되어 사용됩니다. Spring Batch는 성능, 확장성, 안정성, 재시작 기능 등 배치 작업에서 요구되는 다양한 기능들을 제공합니다. 또한, 스프링 프레임워크와 함께 사용되면 스프링의 다양한 기능들과 연동이 가능해져 배치 작업을 보다 효과적으로 구현할 수 있습니다. ..
이 글은 스프링 배치에 대한 기본적인 지식은 알고 있다고 가정한 후 작성되었습니다. 스프링 배치 기본적인 지식에 대한 이해 후 읽어주세요! 회사에서 스프링 배치에 대해 사용할 일이 생겼습니다. 기존 스프링 배치 4.x 버전 하위 버전에 대한 예제는 많으나, 스프링 부트 2.x 버전은 버그수정, 보안 업데이트를 2023년 말까지 지원합니다. 또한, 스프링 부트 3.x 는 Java 17 부터 지원하고 Java EE 대신 Jakarta EE를 사용하여 패키지 명이 전면적으로 수정되었습니다. 때문에 5.x 버전과 스프링 부트 3.x 버전을 선택하였습니다. 스프링 부트 3.x 에서는 스프링 6.x 기반으로 작성되었습니다. 스프링 6.x 에서는 스프링 배치 5.x 를 사용합니다. 기존 스프링 배치와 많은 부분이 달..
Chrome의 Mixed content(믹스콘텐츠)는 웹사이트에서 보안 프로토콜인 HTTPS를 사용하면서도 일부 콘텐츠가 HTTP로 로드되는 경우 발생하는 보안 위협을 나타내는 경고 메시지입니다. 그러나 HTTPS를 사용하는 웹사이트에서 일부 콘텐츠가 여전히 HTTP로 로드되는 경우 이를 Mixed content라고 하며, Chrome은 이를 방지하기 위해 보안 경고 메시지를 표시합니다. Chrome 81 버전 이상부터는 아예 차단합니다. 😔 Chrome에서 Mixcontent 에러를 피하기 위해서는 모든 콘텐츠가 동일한 스키마를 사용해야 합니다. 즉, HTTP로 로드 되는 HTML 페이지의 경우 모든 콘텐츠가 HTTP로 HTTPS 인 경우 모든 콘텐츠가 HTTPS로 동일해야 합니다.
HikariCP와 JPA로 프로젝트를 구성했는데, 갑자기 에러가 발생하였습니다. o.h.engine.jdbc.spi.SqlExceptionHelper : hikari-pool-1 – Connection is not available, request timed out after 30000ms. hikariCP의 옵션 중 connectionTimeout의 default 가 30000ms 인 것을 확인하고 왜 이런 일이 발생했는지 찾기 시작했습니다. hikariCP 의 Pool에 유지시킬 수 있는 connection 개수인 maximumPoolSize의 default는 10입니다. 에러의 발생 원인은 HikariCP 데이터베이스 커넥션 풀에서 커넥션을 가져오려고 시도했지만 사용 가능한 커넥션이 없거나, 요청이..
infitry
디벨뤼팽