[Kubernetes] 배포를 시작하기 전에 반드시 알아야 할 것들
·
Kubernetes
CI/CD 파이프라인을 구성할 때 고려해야 하는 요소빌드/배포 방식의 차이각각의 파이프라인을 만들고 각각 실행하는 방식 (필요시 트리거를 통해 자동 배포 가능)장점: 담당자가 다른 경우 업무 분장 및 관리 책임 면에서 효율적이다.하나의 구성 안에 파이프라인이 자동으로 연결되는 방식장점: 하나의 파이프라인으로 구성되어 수정이 필요하더라도 한 군데에서 관리할 수 있다.배포 시 ArgoCD를 사용하는 경우 배포와 인프라 환경의 관계배포 1 : 인프라 N장점: ArgoCD를 하나만 관리하게 되어 편의성이 향상된다.단점: 개발 환경 때문에 장애가 발생하면 운영 환경에도 배포를 할 수가 없다.배포 1 : 인프라 1장점: 개발 환경의 장애 시 운영 환경에 영향이 없다.단점: ArgoCD를 이중으로 관리해야 한다.CI..
AWS S3 + CloudFront로 SPA 배포하기 (React, Vue)
·
Setting
개요AWS 클라우드 비용 절감 작업을 진행하면서,잘 사용하지 않을 정적 리소스는 S3에 올리는 방향으로 결정했다. 따라서 SPA(Single Page Application)로 이루어진 프론트 배포도 S3로 진행하고자 했는데,간단한 작업이지만 잘못 정리된 포스팅들이 많았어서 절차를 직접 정리하고자 한다. S3먼저 AWS 콘솔에서 S3에 진입하여 버킷 만들기 버튼을 눌러서 버킷을 생성하자.버킷 이름 : 아무렇게나 생성해도 무방하다.객체 소유권 : ACL 비활성화모든 퍼블릭 액세스 차단 : 체크 (추후 CloudFront에서 버킷에 접근할 수 있는 권한을 설정하기 때문에 불필요)버킷 버전 관리 : 필요에 따라 설정이렇게 구성한 뒤 버킷을 생성하자.작성 시점 기준으로 버킷 이름만 작성한 뒤 모두 기본값으로 두고..
AWS CloudFront에서 쿼리 스트링을 포함한 도메인 리다이렉트 구성하기
·
Setting
개요AWS의 도메인 리다이렉트 예제를 찾아보면 S3의 Bucket을 활용한 리다이렉트 방법이 가장 많이 나오는데,이는 아래와 같은 단점들이 있다.S3 Bucket을 관리해야 하여 관리포인트가 늘어난다.Query Parameter의 유지가 불가능하다.1번은 큰 문제가 아닐 수 있지만,2번과 같인 Query Parameter를 상황에 따라 유지해야 하는 경우에는 사용이 불가능했다. 따라서 Query Parameter도 같이 포함하여 리다이렉트 할 수 있도록 하는 방법을 찾아보았고,이를 기록하게 되었다.아래 절차는 Route 53에 기존 도메인이 등록되어 있는 상태에서 진행해야 한다. CloudFront FunctionsS3를 활용하여 도메인 리다이렉트를 구성한다고 하더라도,기존 도메인의 HTTPS를 대응하기..
항해 플러스 백엔드 7기 수료 후기
·
항해플러스
개요2024년 12월부터 2025년 2월까지,약 3개월 간 스파르타의 항해 플러스 과정에 참여했다. 참여하게 된 이유부터 수료까지경험했던 여러 일들과 후기를 기록한다. 참여하게 된 이유4개월 간 했던 이너써클 과정이 11월에 끝나고, 약간 붕 뜨는 느낌이 있었다.열심히 달려오던 과정이 끝나니 어떤 걸 더 공부해야 할지 갈피를 못 잡고 있었다. 이너써클 과정은 팀 프로젝트 중심이었기 때문에 이제는 좀 더 기술적으로 성장하고 싶은 욕구가 있었다.그때, 우연히 회사 동료분이 항해 플러스를 고민 중이라고 알려주었다.사실 이전에도 항해 플러스를 고민하긴 했었는데, 당시에는 크게 와닿지 않았어서 보류했었다. 이번에 다시 관심을 갖고 보니 커리큘럼이 내가 관심 있는 방향으로 변경되어 있었고,과정 자체가 개인 과제로 ..
2024년 회고
·
일상
현재2024년이 끝났다. (이미 오래전에)2023년 회고 때도 미루다가 1월 5일에 겨우 작성했었는데,2024년 회고는 그보다 한 달이나 더 지난 2월에서야 작성한다.그만큼 정신없이 바쁘게 살고 있다. 새해 첫 곡은 데이식스의 HAPPY를 들었다. 지금의 나지금의 나는 이직한 회사를 다니며 열심히 일하고 있고,항해플러스 과정과 여러 스터디 및 외부 활동을 병행하고 있다. 이번 달까지가 개인적으로 상당히 바쁠 기간이어서,평일에는 제일 중요하게 생각하던 잠도 줄여가면서 열심히 살고 있다. 작년에는작년에는 3년 넘게 다니던 첫 회사를 그만두고, 처음으로 이직을 시도했다.그리고 목표했던 대외활동 및 다양한 경험을 위해 재직자 부트캠프인 이너써클에도 참여했고,성장하기 위해 이것저것 참여하고 공부하며 정말 열심히 ..
패스트캠퍼스 Inner Circle 후기 (시작부터 수료까지)
·
일상
개요2024년 7월부터 11월까지,약 4개월 간 패스트캠퍼스의 Inner Circle이라는 직장인 부트캠프에 참여했다. 참여하게 된 이유부터 수료 후 지금까지해당 과정에서 경험했던 일들과 후기를 기록한다. 참여하게 된 이유나는 대학생 시절 개발 지식이 전무함에도 학교 연계형 인턴으로 전 회사에 입사했다.회사에서 실무부터 경험하게 되다 보니 연차가 쌓이며 일은 잘하게 되었지만,개발 지식이나 다양한 환경에서의 경험은 많이 부족하다는 것을 뼈저리게 느꼈다. 특히 이직 과정에서 나의 부족함을 정말 많이 깨달았고,다양한 경험을 통해 성장하고 싶은 욕구가 강했다. 그러던 중 SNS에서 Inner Circle 과정의 광고를 접했는데,퇴근 이후 시간 비대면, 국비지원으로 무료로 들을 수 있는 걸 보고 관심이 갔다. 자..
[항해플러스 세미나] 실무에서 유용한 Exception 처리
·
Java & Spring
아래 모든 내용은 현재 스프링 부트 최신 버전인 3.4.1을 기반으로 작성되었고, 버전에 따라 달라질 수 있습니다. 목차공통 Exception을 처리해야 하는 이유Controller 예외 처리@Repository 어노테이션결론 공통 Exception을 처리해야 하는 이유우리는 기본적으로 Spring 프레임워크를 사용하고 있고, 상당히 많은 예외 케이스나 구현에 대해 도움을 받고 있다.API에서 사용자가 연락처를 포맷에 맞지 않게 입력한다거나, 잘못된 ID로 조회하려고 하는 등의 경우 사용자가 알 수 있도록 응답을 보내줘야 한다.Exception을 제대로 처리해주지 않으면 API를 사용하는 개발자뿐만 아니라 사용자까지 원인을 모르고 알 수 없는 오류로만 보이는 문제가 있기 때문에, Exception을 신경..
[JAVA] assert 잘 사용하기 (with Spring Assert)
·
Java & Spring
개요코드를 작성하다 보면 기본적으로 가정하고 있는 조건들이 있다.그런 조건들은 알고리즘을 파악하거나 주석을 읽으면서 확인할 수 있지만,Assertion을 사용하여 보다 명시적으로 나타낼 수 있다. Java에서 기본적으로 제공하는 assert 문법을 알아보고,이를 Spring에서는 어떻게 사용해야 하는지,또한 Spring의 Assert 클래스와는 어떻게 다른지 알아보자. Java의 assertjava의 assert 문법은 기본적으로 아래와 같이 사용한다.// assert [조건식];assert 1 == 2;// assert [조건식] : [실패 메시지];assert 1 == 2 : "유효성 검사에 실패했습니다.";조건식 결과가 true이면 정상적인 흐름, false이면 잘못된 경우임을 나타낸다. 하지만, ..
[사내 세미나] Spring Batch 도입하기
·
Java & Spring
개요이 글은 사내에서 Spring Batch에 대한 세미나를 진행하기 위한 강의 자료로 작성되었습니다.Spring Batch 도입에 필요한 프로세스를 빠르게 익힐 수 있는 내용으로 구성되어 있지만,사내 환경에 따른 의존성이나 공개되지 않은 자료가 있을 수 있는 점 참고 부탁드립니다 :) 소개배치 처리가 무엇인가요?AWS 클라우드 컴퓨팅 개념 허브의 배치 처리에 대한 문서의 내용에서는 아래와 같이 설명한다.배치 처리란 무엇인가요?배치 처리는 컴퓨터가 주기적으로 대량의 반복적인 데이터 작업을 완료하기 위해 사용하는 방식입니다. 백업, 필터링 및 정렬과 같은 특정 데이터 처리 태스크는 계산 집약적이며 개별 데이터 트랜잭션에서 실행하기에 비효율적일 수 있습니다. 대신 데이터 시스템은 대개 하루가 끝날 때나 야간..
인프콘 2024 후기
·
일상
개요인프콘이 올해도 열린다는 소식을 듣고, 신청이 열리자마자 빠르게 참여 신청을 접수했다.올해 가장 가고 싶었던 콘퍼런스였던 만큼 여기저기 인프콘 티켓을 준다는 곳에 이벤트 참여도 했다.(물론 다 떨어졌지만..) 인프콘 참가자 발표 당일,간절히 원하면 들어준다는 말이 정말이었던 건지,2시가 되자마자 참가자 선정 알림톡을 받고 정말 기뻤다. 주변 회사 동료들에게 자랑도 하고, 평일에 열리는 만큼 곧바로 회사에 휴가 신청을 냈다.(주변 동료들은 다 떨어졌다는데, 정말 운이 좋았다.) 제대로 된 콘퍼런스는 거의 처음 가보는 데다,평소 좋아하던 재민님, 토비 님, 조영호 님의 세션이 준비되어 있다고 해서 더더욱 기대를 가졌다. 인프콘 당일당일에 사람이 많아 줄을 설 수도 있다는 이야기를 듣고,1시간 일찍 도착할..
대형 면허 도전기 (+ 불합격에 익숙해지기)
·
일상
다니던 회사를 퇴사하고 버킷 리스트 중 하나였던 대형 면허 취득에 도전했다. 대형 면허 시험은 버스를 운전하여 기능 시험을 통과하면 합격이다.독학으로 시험을 보게 되면 실전 경험이 없는 만큼 몇 번의 불합격은 기본적으로 따라온다. 나름 운전 경력도 꽤 있고 운전병 출신으로 수동 차량 운전에도 익숙하기 때문에,독학으로 합격할 때까지 시험을 계속 보며 도전하기로 마음먹었다.(운전학원은 비용이 너무 비싸다..) 첫 번째 시험버스 운전이 처음인 만큼 감을 잡는 것을 최우선으로 생각했다. 출발 및 정차, 언덕 등반은 수동 차량에 익숙했던 만큼 무난하게 통과했다.첫 코스에 진입해서 외운 공식대로 시도했는데,바퀴 탈선으로 여러 번 감점되어 불합격하고 끝났다. 두 번째 시험마찬가지로 감을 잡는 데 집중했다. 첫 코스에..
FK(외래 키)에 대한 개인적인 생각
·
Work
개요 백엔드 개발자라면 RDB(관계형 데이터베이스)를 사용해보지 않은 사람은 없을 것이다. 나도 제대로 된 실무를 접한 순간부터 지금까지 만든 모든 서비스에서 RDB를 사용한다. 처음에는 아무 생각 없이 DB 툴의 도움을 받아 연관되는 경우 항상 FK(외래 키)를 설정했고, 3년이 지난 지금까지도 웬만한 경우에는 FK를 설정하는 것을 선호하는 편이다. 어느 정도 경력이 있는 백엔드 개발자라면 공감할 것 같은데, FK를 설정하는 것에 대해 치를 떠는 개발자들이 정말 많다. 그럼에도 불구하고 나는 위에 말했듯 FK를 설정하는 걸 선호하는 편인데, 마침 스프링의 대가이신 토비 님께서 정곡을 찌르는 글을 남겨주셨다. 이런 좋은 글을 보고, 또한 이 글의 댓글에서의 좋은 토론을 보면서, 기존에 다른 분들과 생각을..
2023년 회고
·
일상
현재 2023년이 끝났다. 2024년이 되자마자 2023년 회고를 쓰기로 다짐했었는데, 쌓인 피로와 바쁘다는 핑계로 미루고 미루다 며칠이 지난 지금에서야 부랴부랴 작성한다. 새해부터 미루고 시작하다니.. 아주 한 해의 시작이 상쾌하다. 새해 들은 첫 곡 대로 한 해가 흘러간다는 속설이 있다. 그렇게 되길 바라며 재작년에는 HOT의 행복, 작년에는 우주소녀의 이루리라는 노래를 들었다. 올해에는 동생과 같이 뭘 들을까 고민하다가 곡 하나를 선정했다. 처음부터 끝까지 곡이 내레이션으로 좋은 말이 꾹 눌러 담겨 있다. 썸네일만 봐도 재밌어서 한 해를 웃으면서 시작할 수 있던 것도 좋았던 것 같다. 올 한 해에는 더욱더 성공하길 바라며.. 지금의 나 내가 운영하는 서비스는 연간 사업이다 보니 해가 바뀌면 사업이 ..
[Spring] eventListener, transactionalEventListener 예외 및 트랜잭션 전파 총정리
·
Java & Spring
개요 Spring Boot에서 eventListener를 사용하는 경우가 종종 있는데, eventListener와 transactionalEventListener의 차이, transactionalEventListener의 phase 속성에 따라 동작 방식이 다 다르다. 따라서 이번 기회에 eventListener의 동작 방식과 트랜잭션과 엮이면 어떻게 동작하는지에 대해 정리해 보려고 한다. 문제 이번 포스팅에서는 위에서 기술한 각각의 방식에 따라 아래의 문제를 테스트한다. eventListener에서 예외가 발생하면 예외가 service로 전파될까? service의 @Transactional이 eventListener로 전파되고 커밋될까? 기본적으로 알아야 할 내용 아래는 eventListener와 @T..
덴티아이 서식 일괄 다운로드 변천사
·
Work
들어가기 전에 아래는 Spring Boot + Vue.js 환경에서 이루어진 내용입니다. 개요 필자는 2021년부터 덴티아이라는 서비스를 3년간 운영해오고 있다. 덴티아이는 나라에서 지원하는 학생들의 치과주치의 사업을 전산화하는 시스템이다. 사업은 연 단위로 진행되고, 각 기관에서는 작성된 서식들을 특정한 기간(?) 동안 보관해야 한다고 한다. 따라서 덴티아이에는 작성된 서식들을 PDF로 변환한 후 기관별로 연말에 일괄적으로 다운로드할 수 있는 기능이 있다. 이러한 일괄 다운로드 기능의 구현 방식에 대해 변화한 과정을 소개한다. 서식 다운로드 및 인쇄 덴티아이에는 학생의 서식을 실시간으로 다운로드하거나 인쇄할 수 있는 기능이 있다. 이 기능은 작성된 서식을 보는 페이지에서 해당 화면 자체를 프론트에서 직..
HSTS 설정으로 HTTPS 강제 적용하기
·
Setting
개요 업무 중 하나의 시스템에서 GS인증을 적용해야 했는데, 인증을 받기 위해서는 그 서비스의 기본 도메인에 HSTS를 적용하고 크롬의 HSTS Preload List에 등록해야 했고, 그에 따라 서브 도메인들에도 필연적으로 HTTPS를 적용해야 했다. 대응을 위해 여러 설정 및 적용을 해보며 HSTS 및 도메인에 대한 전반적인 내용을 기록한다. 해당 포스팅은 https 리다이렉트에 대한 기초적인 지식이 필요합니다. https 리다이렉트 관련한 내용은 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/http-https-리다이렉트 http를 https로 리다이렉트하는 여러가지 방법 개요 웹 사이트를 개발하고 도메인을 연동할 때 실제 사용자가 접속하는 페이지..
[JAVA] LocalDate로 한국식 월 주차 구하기
·
Java & Spring
들어가기 전에 만약 Calendar 클래스를 사용하고 계신다면 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/JAVA-Calendar-한국식-월-주차-구하기 [JAVA] Calendar로 한국식 월 주차 구하기 들어가기 전에 만약 LocalDate 클래스를 사용하고 계신다면 아래 포스팅을 참고해 주세요 :) https://hojun-dev.tistory.com/entry/JAVA-LocalDate-한국식-월-주차-구하기 [JAVA] LocalDate로 한국식 월 주차 구하기 들 hojun-dev.tistory.com 개요 매주 보고서 데이터를 엑셀로 출력하여 전달해야 하는 시스템을 만드는 등 특정 날짜가 몇 월의 몇 주차인지 계산해야 하는 경우가 있다...
회사 이사 후 하루 루틴 기록
·
일상
오랜만에 올리는 일상 글. 블로그 타이틀이 개발 일상이지만 개발 블로그에 간간히 일상을 올리는 게 생각보다 쉽지 않다. 개발 포스팅 사이에 일상이 하나씩 껴있는게 이질감이 들기도 하고 뭔가 낯간지럽다. 아무튼 회사도 이사하고 내 생활에도 변화가 꽤 많이 생겨서 기록하기 좋은 타이밍인 것 같다. 이전 사무실에서는 수면실이 마련되어 있어 주 3회 회사에서 자면서 밤 시간에 자리에서 일이나 공부를 했었다. 다들 불쌍하게 여겼지만 나는 오히려 힘든 출퇴근도 안하고 시간을 아껴서 공부를 할 수 있어 좋았다. 다만 집에 잘 들어가지 않으니 집 근처에 헬스장을 등록하는 게 아깝게 느껴져 운동을 잘 안하게 되었다. 이사가 결정되고 나니 이사를 하고 내 하루 루틴이 파악이 되면 운동과 영어공부를 하루 일과 사이사이에 계..
Bitbucket SSH 설정하기
·
Setting
개요 좋은 기회로 맥북을 새로 장만하여 개발 환경을 세팅하면서 기존에 리포지토리를 관리하고 사용하던 Bitbucket의 SSH 설정을 정리하고자 한다. 설정 일단 터미널에서 Bitbucket에서 지원하는 암호화 알고리즘으로 된 ssh key를 생성한다. 우리는 ed25519 암호화 알고리즘으로 생성해 보자. passphrase를 입력하라고 하는 부분에서는 아무 입력 없이 엔터를 치고 넘어가면 된다. windows의 경우 git을 설치하면 git bash로 터미널을 이용할 수 있다. ssh-keygen -t ed25519 -b 256 키 생성이 완료되면 사용자 디렉토리에 .ssh 폴더가 생성되고, 폴더 내에 id_ed25519 파일과 id_ed25519.pub 파일이 생성되었을 것이다. 여기서 .pub가 ..
현생 사는 예비 개발자 이야기
·
일상
세상에는 열심히 사는 사람들이 참 많다. 백엔드 개발자로서 업무를 하다 보니 인력을 충원하기 위해 이력서를 검토할 일이 많이 생기는데, 신입 개발자의 이력서를 보다 보면 정말 다양한 이력들이 존재해서 새삼 놀라웠다. 리포터 일을 하던 사람, 군대 부사관이었던 사람, 큰 수술을 마치며 삶에 대한 고민을 하다가 개발자가 되기로 한 사람 등등.. 개발자는 수요가 많고 연봉이 높은 직업이라는 인식이 강해서 국비지원이나 부트캠프 광고도 정말 많이 하고 수강생들도 정말 많다. 개인적으로 개발자는 계속 코드만 보고 머리를 써야 하는 직업이기 때문에 일이 잘 맞지 않으면 오래 버티지 못할 거라고 생각하는데, 취업 시장 상황 때문에 개발 학원에 다니고 개발자가 되려는 사람이 많아지는 현실이 조금은 안타깝다. 나와 가까운..
주소 검색 결과로 위도 및 경도 좌푯값 구하기
·
Javascript
들어가기 전에맨 아래 '마치며' 섹션에 주소 검색 기능을 통해 바로 위도 및 경도를 확인할 수 있는 사이트를 만들어 링크를 걸어두었습니다.필요하신 분은 아래 링크로 들어가서 자유롭게 이용해 주세요 :) 개요개발을 하다 보면 지도를 만들고 주소를 지도에 표현해야 할 일이 자주 생긴다.그러기 위해서는 주소 정보를 통해 위도 및 경도를 구해서 그 값들을 통해 지도 라이브러리와 연동을 해야 한다. 구하고자 하는 주소가 우편번호 서비스에서 가져오는 등 명확한 주소일 때에는 문제가 되지 않겠지만,명확하지 않은 주소인 경우 위도 및 경도를 제대로 구할 수 없는 경우가 발생할 수 있다. 필자도 프로젝트에 참여하는 각 기관의 명단을 시스템에 업로드할 때,명단 내의 주소가 오타가 있거나 광역 자치단체명을 생략하는 등 주소..
개발 블로그 시작
·
일상
시작 회사 내에서 개발자 동료들과 같이 협업을 할 때, 각자 공부한 지식들을 공유하면서 업무를 진행해야 하는 경우가 많이 생기는데, 그럴 때마다 동료들이 자신의 개발 블로그 포스팅을 공유하는 경우가 잦았다. 또한 나도 개인적으로 공부한 내용이나 얻은 지식들을 notion으로만 정리하는 데에 불편함을 많이 느끼고 있었고, 공유하기에도 어려움이 많았다. 그러한 이유로 큰맘 먹고 개발 블로그를 시작하게 되었다. 플랫폼 고민 개발자가 아닌 나의 지인들은 일상 공유하는 플랫폼으로 naver를 주로 사용하는데, 개발자인 나로서는 구글에서 잘 검색이 되지 않고, 개발 관련 내용을 정리하기에 한계가 크다는 점 등 단점이 너무 명확하기 때문에 후보군에도 들지 못했다. 나의 기준에 개발 관련 내용을 잘 정리할 수 있고 대..