본문 바로가기

전체 글245

일주일의 휴식과 새로운 취미 개시 퇴사 후 입사 전 일주일의 휴식 기간이 주어졌다.무엇을 하고 쉬어야 할까 하다, 주변 지인들 권유에 무계획으로 2박 3일 제주도 여행을 다녀 왔다.차가 없어서 불편했지만, 새롭게 만난 인연들을 통해 차도 얻어타가면서 뜻하지 않게 재밌게 구경하고 먹고 쉬었다.세상이 정말 좁다고 느낀게, 고등학교 친구를 아는 인연을 만났다는 것이다. 참 세상 좁고 신기했다.여행에 큰 감흥은 없어하는 성격이지만, 이번에는 짧게라도 다녀오길 잘했다는 생각이 든다.(면허 이번 년도 안에 무조건 따야겠다.) 주짓수도 시작했다.첫 회사 동일 직군 개발자 형과 지속적으로 연락하며 지내는데, 그 회사 다닐 때부터 항상 주짓수를 같이 하자고 권유했었다😅이직도 했겠다 저번 주 부터 시작했는데, 새롭게 운동을 배워보는 건 살면서 처음이다... 2024. 8. 19.
[DB] 옵티마이저 (1) Mysql 서버로 요청한 쿼리는 최적으로 실행 되기 위해 최적의 실행 계획을 수립하는 작업이 필요.대부분의 DBMS 에서는 옵티마이저가 이런 기능을 담당한다.Explain 명령으로 쿼리의 실행 계획 확인 가능. Mysql 에서는 비용 기반 최적화 (Cost-based optimizer, CBO) 를 사용한다. 기본 데이터 처리풀 테이블 스캔 조건- 테이블 레코드 건수가 작아, 인덱스를 택하기 보다 풀 테이블 스캔 하는 편이 더 빠른 경우- where 절이나 on 절에 인덱스를 이용할 수 있는 적절한 조건이 없을 경우- 인덱스 레인지 스캔을 사용할 수 있는 쿼리더라도, 옵티마이저가 판단한 조건 일치 레코드 건수가 많은 경우 위와 같은 조건에서 Mysql 옵티마이저는 풀 테이블 스캔을 시도한다.풀 테이블 스.. 2024. 8. 11.
원하는 것을 실현시켜 보고자. 구하라. 그러면 받을 것이다. 찾아라. 그러면 찾을 것이다. 문을 두드려라. 그러면 열릴 것이다. 누구든지 구하는 사람은 받을 것이며 찾는 사람은 찾을 것이요 두드리는 사람에게는 열릴 것이니. 마태복음 7장 7~8절 말씀이다.작성하고자 하는 글의 적절한 요약 인용구여서, 인용해보았다. 퇴근 후, 씻기 전 잠시 휴식을 취하고자 유튜브 시청 중 문득 이런 생각이 들었다.그리고, 최근 내가 시청해왔던 유튜브 목록을 살펴보았다. 내가 무엇을 위주로 시청해왔지? 어제는 빅테크 기업의 개발 관련 세미나 발표 및 공유 영상 위주로 시청했다.오늘은 운동 유튜버의 브이로그 및 치팅 데이 영상을 시청했다. 어제는 빅테크 기업의 기술적 고민과 해결책을 보며, 나도 그런 기술을 경험하고 싶다는 욕망이 생겼다.오늘은 운동 유튜.. 2024. 8. 1.
누적 방문 3만명 달성 소회 작년 8월 즈음 2만 명 달성, 1년이 채 안 되어서 벌써 방문자 수 3만 명이다. 방문자 수 오르는 속도가 붙는 것 같기도? ㅎㅎ 1년 전 난 어떤 생각을 하고 있었을까? 열심히 코딩 중이었구나 ㅋㅋㅋㅋㅋ 😅😅 시간도 참 빠르다. 1년이 벌써 넘었으니 말이다. 그땐 항상 새벽까지 야근하면서, 개발에 몰입했었는데 말이지. 그 당시 마일스톤도 참 짧기도 했다. 주말 상관없이 항상 새벽 1, 2시 야근 후 귀가, 집 가서 자고 바로 출근의 반복. 그래도 보람찼다. 온전히 나만의 서비스를 개발하기 때문이었다. DB 구조 설계, 애플리케이션 개발, 배포 환경 구성까지 다 했으니 말이다. 옆에서 도움 주신 시니어 개발자분들께도 참 감사드린다. 이 회사에서 참 많이도 배웠다. 인프라 구성, 배포 환경 모니터링, 각.. 2024. 7. 27.
No more free! 세상에 공짜는 없다.세상은 나에게 빚 진게 없다. 살아오면서 항상 느꼈던 것은 원하는 것을 공짜로 바랄 수 없다는 사실이다.대가든 가치든, 무엇이든 지불해야 내가 원하는 것을 얻을 수 있다. 원하는 것을 쟁취하는 것은 세상과의 거래이다.무엇인가를 얻고자 한다면, 그에 상응하는 가치를 먼저 제공해야 한다.그래야, 비로소 공정한 거래가 성립된다.불공정 거래는 세상에서 성립되지 않는다. 여기서 말하는 가치는 꼭 물질적인 것만을 의미하지 않는다.비물질적, 즉 손에 잡히지 않는 무형의 가치도 각기 다른 상황에 처한 개인마다 충족시키고자 하는 욕구가 있을 것이다.그와 동등한 가치로 거래를 한다면, 충분히 공정한 거래가 이루어질 수 있다. 물질을 다루는 시장,무형의 지식을 다루는 교육,감정과 본능 그리고 무의식을 채.. 2024. 7. 17.
[DB] 인덱스 간략 정리 [1] 인덱스랜덤 & 순차 IO디스크 헤더를 1번, 여러번 옮기느냐? 즉, 디스크의 성능은 디스크 헤더 위치 이동 없이 얼마나 많은 데이터를 한 번에 기록하느냐에 따라 결정Mysql 는 그룹 커밋, 바이너리 로그 버퍼, InnoDB 로그 버퍼 등의 기능으로 개선결국 랜덤 IO 를 줄이는 것이 쿼리를 개선하는 것을 의미정의ArrayList 와 SortedList 의 차이를 아는가?순차적으로 저장 or 정렬하여 저장빠르게 적재 or 느리지만 정렬하여 적재인덱스를 적용한다는 것은 쓰기 성능을 어느 정도 포기하고, 읽기 성능을 택하겠다.B-Tree 에서 인덱스 키 추가 및 삭제 시보통의 경우, 레코드 추가 비용 1 가정 시 인덱스 추가 비용을 1.5 로 예측하는 편.인덱스 키 삭제와 변경의 경우, InnoDB 엔진에 .. 2024. 6. 29.
[DB] 트랜잭션과 락 간략 정리 트랜잭션트랜잭션은 애플리케이션 개발 입장에서, 고민해야 할 문제를 풀어주는 필수적인 DBMS 의 기능.트랜잭션 사용 시 주의사항DBMS 의 커넥션과 동일하게 꼭 필요한 최소의 코드에만 적용하는 것이 좋다. 트랜잭션의 범위를 최소화하라는 의미. 각 단위프로그램이 커넥션을 소유하는 시간이 길어질 수록 사용 가능한 여유 커넥션의 개수는 줄어든다. 메일 전송이나, 파일 전송 작업 등, 네트워크를 통해 원격 서버와 통신하는 작업은 트랜잭션 내에서 제거하라. 웹 서버뿐 아니라 DBMS 서버까지 위험한 상황 발생 저장 데이터의 단순 조회의 경우도 트랜잭션에 포함할 필요가 없다.락레코드 락레코드 자체만을 잠그는 것 InnoDB 스토리지 엔진은 레코드 자체가 아니라, 인덱스의 레코드를 잠근다. 인덱스가 없을 경우, 내부.. 2024. 6. 27.
청소 평소 청소를 자주 한다.난 더럽고 어지러운 것을 보기 힘들어하는 성격이기도 하고, 무엇보다 정리가 안 된 공간 자체가 싫기 때문이다. 오늘 오랜만에 꼼꼼하게 청소를 진행했다.재택근무를 2일 연속했다 보니, 집에 있는 시간이 많아져서 한번 크게 정리하고자 마음을 먹었다. 바닥부터 먼지를 쓸고, 물티슈로 얼룩을 닦아내었다.관리를 안 하면 금방 먼지가 쌓이는 창틀도 닦아주었다.주방에 인덕션 부분을 꼼꼼히 닦았고, 개수대도 닦아주었다.상대적으로 잘 닦지 않던 책상도 물건을 다 들어내고, 먼지를 닦았다.화장실도 락스를 이용하여 깨끗이 정리를 했다. 디테일한 부분까지 청소를 하다 보니,극도로 미니멀리즘을 추구하는 나의 공간 내에도 방치된 물건들이 눈에 띄었다.필요가 없어졌기에 과감히 모두 정리했다.홀가분하다. 이전.. 2024. 6. 6.
Spring Cloud OpenFeign 더 잘 사용해보기 마이크로 서비스에서,Spring Boot 를 이용하여 애플리케이션을 개발할 때면,외부 API 를 호출해야 하는 상황이 존재한다. Spring 프레임워크가 지원하는 여러 가지 Http Client 가 있다. RestTemplate 의 경우 Blocking 방식으로 Http 요청을 진행할 수 있다.하나의 요청을 위해, 코드를 작성하려면,재사용성을 고려한다 할때, 작디 작은 컴포넌트로 추상화를 많이 진행하여 번거로운 코드를 작성해야 한다는 점이 있었다.무엇보다 어떠한 요청을 하는지 한눈에 들어오지 않았다. WebClient 의 경우, Non-Blocking 방식으로 Http 요청을 진행할 수 있다.물론 Blocking call 도 가능하다.빌더 패턴을 활용한 방식으로, RestTemplate 보다는 가독성이 .. 2024. 5. 11.
Chatter 언젠가부터 음악을 잘 듣지 않기 시작했다. 항상 흐르는 선율에 취하던, 음악의 근원을 안 뒤, 감탄하던 순간 그리고 싶었다. 녹이고 싶었다. 순간의 느낌, 감정, 감각을 표현하고 싶었다. 나에게 음악은 소음이 되었다. 이제는 바라보아야 된다고. 언제나처럼 상주할 수는 없을 거라고. --- 이제 음악에 대해 크게 흥미를 잃었다. 애플에게 감사한다. "노이즈 캔슬링"이라는 기능을 탑재한 이어폰을 출시해 주어서. "에어팟 프로"를 세상에 처음 공개한 광고처럼, 이어폰을 착용하는 순간, 세상에 대한 노이즈를 차단하는 것. 나에게 이어폰을 착용하는 이유는, 그런 기능을 이용하는 것뿐이다. 최근 업무하며 노이즈 캔슬링을 곁들인 빗소리, 장작 타는 ASMR을 습관적으로 청취한다. 백색 소음, 뭔가 하는 과학적 이유를.. 2024. 5. 6.
MapStruct! JPA Entity 매핑 간 주의해서 사용하자 최근 비상 결제 모드를 개발 및 배포하며, 참으로 어이 없는 작은 코딩 관련 이슈로 인해 데이터에 이상이 있었다. 바로, MapStruct 얘 때문인데.. 한번 나열해보겠다. (항상 생각하는 거지만, 코드 단 한줄의 파급효과가 엄청 나다.) MapStruct 란?Java Bean 유형 간 매핑 구현을 도와주는 코드 생성기컴파일 타임에 코드 생성 및 런타임에서 안정성 보장순수 Java code 를 호출하므로 다른 매핑 라이브러리보다 속도가 빠르다. (Reflection 을 사용하지 않기 때문)Annotation Processor 를 이용하여 매핑 방식에 편리함을 제공 사용 예시JAVA@Mapper public interface UserMapper { UserMapper INSTANCE = Mappers.g.. 2024. 3. 24.
Spring Boot 애플리케이션 k8s 환경에서 WarmUp 적용하기 이 글을 작성하는 이유 현재 회사에서는 EKS 기반 k8s 환경에서 spring boot 를 포함 각종 프레임워크 애플리케이션을 운영 중이다. 기존 모노리스 Django Rest Framework 에서 점진적으로 도메인 분리를 Spring Boot 를 이용한 Micro Service Application 으로 진행 중인데, 내가 맡은 결제 도메인 관련 애플리케이션도 마찬가지이다. (Kotlin 기반 Spring Boot App) 문제는, 결제가 주문 및 유관 DB 와 너무 강하게 얽혀 있어서 바라보아야 하는 테이블이 많다는 점이고, 이것은 곧 배포 직후 속도에 커다란 영향을 끼쳤다. JVM 은 컴파일 된 .class 파일을 필요 시 클래스 로딩을 통해 사용하며, 기본적으로 인터프리터 방식을 사용하므로 J.. 2024. 3. 17.
프로세스와 스레드 정리 01_프로세스의 개요 프로세스의 개념 프로그램 저장장치에 저장 된 정적 상태 프로세스 실행 중인 프로그램 하나의 작업 단위 실행을 위해 메모리에 올라온 동적 상태 요사 모형에의 비유 일괄 작업 방식 한 번에 하나만 작업 처리 작업 효율이 떨어진다. 시분할 방식 여러 개의 작업에선 일괄 작업 방식이 비효율적이다. 시간을 적당히 배분하여 CPU 1개가 여러 프로세스를 동시 처리 예상 치 못한 상황 처리 작업을 마무리 하지 못한 상황에서 다른 작업을 처리하는 상황 발생 프로그램 -> 프로세스 전환 프로세스가 될 때 프로그램은 메모리에 올라 온다. 이 때, 작업 지시서인 프로세스 제어 블럭 이 만들어진다. 프로세스를 처리하는데 필요한 다양한 정보가 들어 있다. 프로그램이 프로세스가 되었다는 것은 프로세스 제어 .. 2024. 3. 3.
[회고] 2023년을 마치며 어느덧 2023 년의 마지막이다. 2023년 1월 1일, 이사를 마치고 맞은 첫새벽, 다음 날 시작하는 백엔드 개발자의 인생을 앞두고, 다짐했었다. 최고의 개발자가 되어보자고! 그 목표가 변함없이 이어진 한 해가 되었을까? 한 해의 타임 라인 1 ~ 5월 3D 기반 SASS 서비스를 개발하고자 하는 스타트업에 근무했다. 메타 버스 서비스와 3D 조립 설명서 관련 서비스를 진행 중이라 하여, 나의 가슴을 두근거리게 했던 첫 회사이다. 3D 개발에 대한 배경 지식과, 극초기 스타트업의 비즈니스 모델링 관련해서 배운 점들이 많았다. 더 좋은 상황과 기회가 찾아와 이직을 했지만, 나의 첫 회사인 만큼 항상 마음속에 담아두고 있게 된다. 심지어 이 회사에 맞춰 자취를 시작했기 때문에, 오다가다 회사 건물을 마주칠.. 2023. 12. 30.
마이크로서비스 아키텍처 구축 CH.5 마이크로서비스의 통신 구현 5.1 이상적인 기술을 찾아서 여러 서비스가 얽힌 만큼 하위 호환성을 쉽게 해야 함. 명시적인 인터페이스를 사용해야 명시적 스키마를 사용하면, 노출하는 인터페이스가 명시적임을 보장한다. 가능성을 열어 두되, API를 기술 중립적으로 유지하자 “마이크로서비스를 구현하는 데 사용될 기술스택을 강요하는 통합기술은 피해야 한다” ⇒ 이해가 안됨. 내부 구현 및 세부 사항을 은닉하라 내부 구현 사항을 알게 되면 결합도가 증가함 내부 구현 사항 변경 시, 소비자도 변경을 해야하게 됨. → 기술 부채 증가 5.2 기술 선택 RPC (Remote Procedure Call) 원격 서비스를 로컬에서 호출한다. 같은 네트워크 상에서만 가능 클라이어느 측 코드를 쉽게 생성 가능하므로, 메서드 호출하듯이 사용 가능한 것이 가.. 2023. 12. 16.
반응형