전체 글 164

[CleanCode] 오류 처리

CleanCode - 오류 처리 오류 처리는 프로그래밍에 반드시 필요한 요소 중 하나입니다. 오류가 발생할 가능성은 항상 존재합니다. 그러므로 오류를 없애는 것 만큼 오류를 빠르게 바로 잡는 것이 더 중요합니다. 책에서는 오류 코드보다 예외를 사용하는 것을 권장하고 있습니다. 즉, 쉽게 말해 Try-Catch-Finally 문을 활용하여 예외를 사용하는 것을 추천합니다. 이는 앞서 3장에서도 언급한 내용이었습니다. 그리고 다른 것보다 중요한 내용은 null을 반환하지 마라는 내용입니다. 책에서는 null을 반환하드 코드는 나쁜 코드로 정의하고 있습니다. 이는 일거리를 늘릴 뿐 아니라 호출자에게 문제를 떠넘기는 코드라고 합니다. null을 반환한다면 호출자는 모든 곳에서 null 확인을 해야 합니다. 그래..

CleanCode 2023.11.10

[CleanCode] 객체와 자료 구조

CleanCode - 객체와 자료 구조 책에서 정의하는 객체와 자료 구조의 정의부터 알아보겠습니다. 객체 : 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개한다. 자료구조 : 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다. 객체와 자료구조는 근본적으로 양분됩니다. 아래 2가지 문장이 그 예시인데, 모두 참인 문장입니다. '절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가히기 쉽다.' '절차적인 코드는 새로운 자료구조를 추가하기 어렵다. 객체 지향 코드는 새로운 함수를 추가하기 어렵다.' 객체와 자료구조는 각각 적합한 경우가 있습니다. 새로운 함수가 아니라 새로운 자료 타입이 필요한 경우 -..

CleanCode 2023.11.04

[CleanCode] 형식 맞추기

CleanCode - 형식 맞추기 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 합니다. 코드 형식을 맞추기 위한 규칙을 정하고, 그 규칙을 따라야합니다. (팀이라면 팀 모두가 합의하여 함께 정하자) '코드 형식은 매우 중요하다' 코드 형식은 의사소통의 일환입니다. 그리고 가독성은 앞으로 유지보수하는 코드의 품질에 많은 영향을 끼친다. 책에서 원활한 소통을 장려하는 코드 형식이 몇 가지 있는데, 그 중 4가지만 정리해보겠습니다. 1. 적절한 행 길이를 유지하라. 하나의 파일에 모든 내용을 담는 것 보다 작은 파일로 잘 유지하는 것이 좋습니다. 책의 예제에서는 대다수 프로젝트의 파일이 500줄을 넘지 않고도 큰 프로젝트를 유지할 수 있다는 사실을 말하고 있습니다.. 엄격한 규칙이 아니지만 지키면 좋습니다..

CleanCode 2023.11.04

[CleanCode] 주석

CleanCode - 주석 잘 달린 주석은 그 어떤 정보보다 유용합니다. 하지만 책에서는 주석에 대해 부정적으로 표현하는 것 같습니다. 보통 주석을 아래와 같이 표현합니다. - 경솔하고 근거없는 주석은 코드를 이해하기 더 어렵게 만든다. - 부정확한 주석은 아예 없는 주석보다 훨씬 더 나쁘다. 이렇게 생각하는 이유는 주석은 나쁜 코드를 보완하지 못한다고 생각하기 때문입니다. 일반적으로 주석을 추가하는 이유는 코드 품질이 나쁘기 때문이라고 합니다. 자신이 저지른 안 좋은 코드를 감추기 위해 보통 주석을 단다고 합니다. 그리고 그렇게 주석을 다는 대신 코드를 다시 잘 짜는데 시간을 보내라고 팩트를 말합니다. '주석 대신 코드로 의도를 표현하라. 잘 짜여진 코드와 함수명이면 충분하다.' 책에서 말하는 몇 가지..

CleanCode 2023.10.21

[CleanCode] 함수

CleanCode - 함수 책에서 함수를 만들때 강조하는 몇 가지가 있는데, 그 중에 중요하다고 느낀 것들 4가지를 정리해보겠습니다. 1. 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게 만들어라' 함수를 만드는 둘째 규칙은 '더 작게 만들어라' 함수가 작을수록 좋다는 근거 자료는 제시하기 어렵지만, 책에서는 필자가 경험한 40년 이상의 내용을 바탕으로 무조건 작은 함수가 좋다고 확신한다고 합니다. 엄청 큰 함수보다 작은 함수가 코드의 유지보수 측면에서 이해하기 편하기 때문에, 같은 동작을 한다면 작은 함수가 더 좋다는 말은 어느정도 맞는 말이라고 생각합니다. 2. 한 가지만 해라! 함수는 한 가지를 해야하고, 그 한가지를 잘 해야 한다고 합니다. 책의 예시처럼 하나의 함수가 한 가지를 하는지 세 가지..

CleanCode 2023.10.12

[CleanCode] 의미있는 이름

CleanCode - 의미있는 이름 책에서 가장 중요하게 말하고 있는 내용을 한 문장으로 요약하면 다음과 같습니다. 의도를 분명히 밝혀라 의도가 분명하게 이름을 지으라 말하기는 쉽다. 하지만 가장 어려운 것은 이름을 짓는 것이고, 의도가 분명하게 이름을 짓는것은 정말 중요하다. 프로그래머에게 가장 어려운 일이 이름 짓기라는 조사도 있습니다. 아래와 같이 간단한 예제를 보겠습니다. int d; // 날짜, day 이 변수 d는 아무 의미도 없습니다. 경과 시간이나 날짜라는 의미를 위해서는 아래와 같이 측정하려는 값과 단위를 표현하는 이름이 필요합니다. int fileAgeInDays; int daysSinceCreation; 의도가 있는 이름을 사용 해야하는 이유에 대한 코드 예시를 추가로 보겠습니다. 아..

CleanCode 2023.10.01

SpringBoot 3.0의 AOT (Ahead of Time Compilation)

Spring Boot 3.0이 정식 출시됨에 따라 GraalVM 기반의 Spring Native image를 통한 AOT를 공식 지원하게 되었습니다. - AOT란? Java의 컴파일 방법 중 하나로 프로그램이 실행되기 전에, 코드를 기계어로 컴파일하는 방식입니다. 즉 런타임 전에 컴파일을 진행하므로, 빠른 실행이 가능하다는 장점이 있습니다. 장점은 3가지 정도 언급을 하고 있습니다. - Less Spring infrastructure to execute at runtime - Fewer conditions to evaluate at runtime - Less reflection, since programmatic bean registration is used 요약하자면 적은 리소스로 빠르게 실행이 가능하..

Spring 2023.04.12

[AWS] Amazon Kinesis Data Firehose (3) - JAVA 연동

지난 AWS 콘솔에서 Firehose 설정을 마치고, 이번에는 실제 Java에서 연동하는 방법에 대해 간단히 예제를 정리해보겠습니다. 먼저 가장 처음 해야 할 일은 aws sdk를 설정해야 합니다. implementation 'software.amazon.awssdk:firehose:2.18.16' build.gradle에 추가해주고, 별도의 라이브러리 설정은 필요하지 않습니다. 그리고 다음으로는 kinesis 연결을 하고 데이터를 추가하는 함수를 구현해야 합니다. 여기서는 awsCredentials을 위한 key가 필요하니 먼저 준비해주시면 됩니다. 연결 예제 코드는 아래와 같습니다. public String putRecordRequest(String recordValue, String streamNa..

AWS 2023.01.17

[AWS] Amazon Kinesis Data Firehose (2) - Stream 생성

이번 포스트에서는 스트림 생성에 대해서 간략히 정리해보겠습니다. 그리고 코드에서 직접 데이터를 수집하는 예제를 진행해보겠습니다. 먼저 Kinesis Data Firehose (KDF) 작동방식은 아래 그림과 같습니다. 일단 첫 번째로는 소스 및 대상 선택을 해야합니다. 소스는 Amazon Kinesis Data Streams과 Direct PUT 중에 선택할 수 있습니다. 저희는 코드에서 직접 데이터를 수집하는 예제를 진행해보려고 하고 있으니, Direct PUT을 선택하였습니다. 그리고 수집된 데이터는 S3에 저장을 할 예정이므로, 대상에는 Amazon S3를 선택했습니다. 이어서 스트림 이름과 변형 및 변환에 대해 설정하게 되는데, 따로 변형 및 변환은 필요하지 않아 활성화 체크를 하지 않았습니다. ..

AWS 2023.01.13

[AWS] Amazon Kinesis Data Firehose (1) - 개념 정리

Amazon Kinesis Data Firehose에 대한 개념과 활용 예시에 대해 정리해보고자 합니다. AWS에 정의된 내용에 따르면, Amazon Kinesis Data Firehose는 스트리밍 데이터를 안정적으로 캡처하고 전환하여 데이터 레이크, 데이터 스토어, 분석 서비스에 전달하는 추출, 전환, 적재(ETL) 서비스입니다. 보다 이해하기 쉽게 아래 그림을 보면 좋을 것 같습니다. 여러 Input Data를 받아 바로 스트리밍으로 처리할 수도 있고, AWS Lambd와 함께 활용하여 데이터를 변환 후 처리할 수 도 있습니다. 그리고 해당 데이터들은 S3, Redshift 등 AWS Serveice로 보내서 처리되며, 해당 데이터를 활용하여 최종 Output이 나오게 됩니다. 몇 가지 활용 예시가..

AWS 2023.01.04