Hi there 👋

Welcome to my blog

[MyBlog] 게시글에 이미지 삽입하기

Github 블로그와 같은 static 블로그를 운영할 때, 불편한 점 중 한 가지는 이미지를 삽입하는 과정이 번거롭다는 것이다. 먼저, 마크다운에서 이미지를 가져오는 문법에 대해서 알아보자. ![image_name](URL or Path) 이미지의 URL 또는 이미지 파일이 저장되어있는 Path 둘 다 사용할 수 있다. 그러다보니, 보여주고 싶은 이미지를 설정하는 방법 또한 두 가지이다. 외부 저장소에 올려서 URL 가져오기 삽입할 이미지를 외부 저장소에 올린 후, 생성된 URL을 사용하는 것이다. 여기서 외부 저장소는 대부분 Github를 사용한다. 특히, 현재 블로그는 Github 리포지토리를 활용하고 있어서 같은 곳에 저장을 하고 있으면 관리하기가 좋다....

April 20, 2024 · parker1609

2024년 Weekly Log

3월 3주차 2024년 3월 3주차 주간 기록입니다. 처음 작성한 것이다보니, 언제든지 형식은 변경될 수 있습니다. 그리고 3주차 이전에 했던 것들도 이 글에는 작성될 수 있습니다. 개발 “프로세스는 만들 때는 최대한 많은 고민을 통해 공들여야 한다. 프로세스를 실행할 때는 극단적으로 아무 생각없이 돌려도 문제가 없어야 한다.” [책] 구글 엔지니어는 이렇게 일한다. 매일 읽는 책으로 이 책을 선정하였다. 책을 산지는 1년 가까이 된 것으로 기억하는데, 개발을 한지 만 3년이 넘어간 시점에서 어떤 개발자가 될지 고민이 되어 이 책을 읽게 되었다....

April 14, 2024 · parker1609

ChatGPT 활용하기 - Part 2

1편에서는 GPT 모델과 ChatGPT에 대해서 전반적으로 살펴보고, 이를 효율적으로 사용하기 위해 필요한 프롬프트 기법에 대해서 다루었습니다. ChatGPT 4가 나오면서 답변의 퀄리티가 향상된 것은 물론, 흥미롭고 편리한 기능들이 추가되었습니다. ChatGPT 4를 사용하기 위해서는 ChatGPT Plus 구독이 필수적으로 필요합니다. (월 20$) 이번 2편에서는 ChatGPT 3.5와 비교하여 4 버전에서는 어떤 점이 달라졌는지와 추가된 기능, 그리고 이를 활용하는 방법에 대해서 알아보겠습니다. 마지막에는 ChatGPT 5 소식과 ChatGPT 외의 다른 LLM 서비스는 어떤 것이 있는지 간단히 살펴볼 예정입니다....

April 14, 2024 · parker1609

TDD, 클린 코드 with Kotlin 7기 후기

Next step에서 진행하는 ‘TDD, 클린 코드 with Kotlin 7기’ 강의를 들은지 벌써 2달이 지났다. 후기를 작성을 빨리 하고 싶었지만, 업무를 병행하면서 미션을 모두 진행했다는 뿌듯함에 너무 오랫동안 미루게 되었다. 이제야 부랴부랴 작성해본다… (강의 링크: https://edu.nextstep.camp/c/Z9QeJlCi/) 코틀린은 백엔드 개발쪽에서도 자바와 비교하여 대체할만한 언어로 몇 년간 화두에 올랐었습니다. 그래서 계속 관심을 갖고는 있었지만 딱히 공부를 하지는 않았었습니다. 첫 째는 자바도 충분히 빠르게 발전하고 있었다고 생각하였고, 다니고 있던 회사에서도 코틀린은 거의 사용하지 않아서 동기부여가 되지 않았었습니다....

January 28, 2024 · parker1609

ChatGPT 활용하기 - Part 1

ChatGPT는 현재 어떤 분야에 있는 사람이든 한 번쯤은 들어보거나 직접 사용해보았을 것입니다. 요즘은 AI라고 하면 가장 먼저 떠올릴 만큼 대명사로 자리잡은 것으로 보입니다. 그만큼 AI에 대해서 사람들이 이제는 피부로 느껴질 만큼 일상생활에 영향을 주고 있습니다. 저 역시 작년부터 꾸준히 사용해오고 있는 사용자로서, 무엇보다 놀라운 점은 ChatGPT가 저의 개발 스타일에도 큰 변화를 준 것입니다. 써보신 분들이라면 공감할 수 있겠지만, 구글링한다거나 스택 오버플로우에 접속하는 시간이 매우 적어졌습니다. 내가 원하는 것을 말로 표현하면, (심지어 추상적으로 간단히만 표현해도) 그에 맞게 적절히 정리해주고 답변을 주기 때문에 시간이 많이 단축되고 효율적이었습니다....

January 18, 2024 · parker1609

2023년 마무리

개발 스터디 2월 ~ 5월: [사내 스터디] 인프런 강의 - 토비의 스프링 부트 - 이해와 원리 4월 ~ 8월: [Over-10 스터디] 책 - 이벤트 기반 마이크로서비스 구축 7월 ~ 11월: [사내 스터디] 인프런 강의 - 카프카 완벽 가이드 - 코어편 10월: [Monday9PM] 글 작성 및 발표 - 소프트웨어 테스트 12월: [Monday9PM] 글 작성 및 발표 - 객체를 다루는 다양한 방식 (with Java) 작성 글 2월 Hugo 블로그 생성 과정 (theme PaperMod) Java 11 vs Java 17 자바 웹 기술 역사 5월 [Kafka] 101 - 카프카에 대한 소개와 주요 설정 Spring Boot에서 카프카 사용하기 8월 MyBatis 필드 및 파라미터 매핑 (with....

January 1, 2024 · parker1609

객체를 다루는 다양한 방식 (with Java)

이번글에서는 객체지향언어, 특히 자바에서 객체를 다루는 다양한 방식에 대해서 알아봅니다. 1. Object References 객체(Object)를 생성해서 사용하려면, 언어에서는 필연적으로 변수에 객체를 담아야합니다. 이 변수에 담기는 것은 객체를 참조(Reference)하는 주소값입니다. 이를 Object Reference라고 부르고, 객체를 다루는 언어에서 객체를 사용하는 방법입니다. 간단한 영화 예제를 살펴보겠습니다. // Movie Object public class Movie { private String title; private String directorName; private int runningTime; // 생성자 생략 } // Object Reference Movie movie = new Movie("오펜하이머", "크리스토퍼 놀란", 180); 생성한 Movie 객체는 메모리 어딘가에 저장이 될 것이고, movie 변수는 이 저장된 메모리의 시작 주소값을 할당받습니다....

December 11, 2023 · parker1609

소프트웨어 테스트

소프트웨어를 개발하면서 테스트에 대한 중요성은 많이 알려져있습니다. 테스트는 크게 수동 테스트와 자동화된 테스트 두 가지로 나뉩니다. 수동 테스트는 말그대로 손으로 직접 테스트를 하는 것으로 기능을 직접 실행하여 테스트합니다. 이는 테스트 환경을 설정하거나 테스트 과정을 직접 따라하는 과정의 시간이 오래 걸리고, 같은 테스트를 반복하기가 어렵습니다. 그리고 사람의 눈으로 확인하는 것이기 때문에 실수할 확률이 높아 신뢰도가 떨어집니다. 반면에 자동화된 테스트는 일련의 스크립트를 작성하여 이 스크립트를 실행하는 것만으로 테스트가 완료됩니다. 스크립트를 잘 작성해야하는 어려움이 있지만, 한 번 작성한 테스트는 실행 한 번으로 모든 테스트를 할 수 있고 쉽게 반복할 수 있습니다....

October 30, 2023 · parker1609

Kubernetes 이슈 및 해결 방법 모음

Ingress에서 URL Path를 통한 라우팅 문제 상황 아래 상황은 실제로 발생한 이슈가 아닌, 이해를 돕기 위해 만든 가상의 상황입니다. parker-movie 앱에서 영화의 정보를 조회할 수 있는 GET /movies/{movieId} API가 존재한다. 그런데, movieId 100번은 너무 유명한 영화라 조회 빈도가 높았고 부하가 심해졌다. 이를 해결하는 다양한 방식이 있겠지만, 여기서는 쿠버네티스 환경에서 pod 중 movieId 100번을 위한 pod을 따로 사용하고 싶었다. 이를 위해서 Ingress에서 URL Path를 통한 라우팅을 사용할 수 있다. 적용 apiVersion: apps/v1 kind: Deployment metadata: name: parker-movie-normal-app labels: app: parker-movie-normal-app spec: selector: matchLabels: app: parker-movie-normal-app replicas: 2 template: metadata: labels: app: parker-movie-normal-app spec: containers: - name: parker-movie image: parker-movie:latest imagePullPolicy: Always ports: - containerPort: 8081 env: - name: SPRING_PROFILES_ACTIVE value: real --- apiVersion: apps/v1 kind: Deployment metadata: name: parker-movie-100-app labels: app: parker-movie-100-app spec: selector: matchLabels: app: parker-movie-100-app replicas: 2 template: metadata: labels: app: parker-movie-100-app spec: containers: - name: parker-movie image: parker-movie:latest imagePullPolicy: Always ports: - containerPort: 8081 env: - name: SPRING_PROFILES_ACTIVE value: real --- apiVersion: v1 kind: Service metadata: labels: app: parker-movie-normal-svc name: parker-movie-normal-svc spec: ports: - port: 80 protocol: TCP targetPort: 8081 selector: app: parker-movie-normal-app type: ClusterIP --- apiVersion: v1 kind: Service metadata: labels: app: parker-movie-100-svc name: parker-movie-100-svc spec: ports: - port: 80 protocol: TCP targetPort: 8081 selector: app: parker-movie-100-app type: ClusterIP --- apiVersion: networking....

October 15, 2023 · parker1609

Postgresql 이슈 및 해결 방법 모음

버전에 따른 파티션 테이블 인덱싱, 버전 10 VS 버전 11 Postgresql은 파티션 테이블을 생성하는 과정에서 헤더(부모) 테이블을 정의하는데 여기에 인덱스 정보를 선언할 수 있다. Postgresql 버전 10까지는 헤더 테이블로 생성한 하위 파티션 테이블에는 부모 테이블에 적용한 인덱스가 생성되지 않았다. 하지만 버전 11부터는 부모 테이블에 적용된 인덱스가 생성된 하위 테이블에도 똑같이 적용이 됩니다. 여러 환경에서 같은 파티션 테이블을 사용하면서 같은 쿼리를 동작시켰는데 속도가 전혀 다르다면, 일단 실행계획을 살펴보자. 그 결과 어떤 환경은 인덱스가 적용되고, 다른 환경은 인덱스가 적용되지 않는다면 Postgresql 버전을 의심해보자....

October 15, 2023 · parker1609