본문 바로가기

전체 글246

마이크로서비스 아키텍처 구축 CH.5 마이크로서비스의 통신 구현 5.1 이상적인 기술을 찾아서 여러 서비스가 얽힌 만큼 하위 호환성을 쉽게 해야 함. 명시적인 인터페이스를 사용해야 명시적 스키마를 사용하면, 노출하는 인터페이스가 명시적임을 보장한다. 가능성을 열어 두되, API를 기술 중립적으로 유지하자 “마이크로서비스를 구현하는 데 사용될 기술스택을 강요하는 통합기술은 피해야 한다” ⇒ 이해가 안됨. 내부 구현 및 세부 사항을 은닉하라 내부 구현 사항을 알게 되면 결합도가 증가함 내부 구현 사항 변경 시, 소비자도 변경을 해야하게 됨. → 기술 부채 증가 5.2 기술 선택 RPC (Remote Procedure Call) 원격 서비스를 로컬에서 호출한다. 같은 네트워크 상에서만 가능 클라이어느 측 코드를 쉽게 생성 가능하므로, 메서드 호출하듯이 사용 가능한 것이 가.. 2023. 12. 16.
Mark until December 그렇게 살아가다 보니 어느새 연말이다. 곧 2024년이다. 세월이란 건 순식간이구나. 백엔드 개발 공부를 시작한 지 얼마 되지 않은 것 같은데, 어느새 1년 경력을 앞두고 있다. 어느새. 첫 독립을 시작한 2022년 12월 31일, 첫 커리어를 시작하는 나는, 어떤 야망을 품고 있었을까. 1년이 지난 지금, 나는 동일한 야망을 품고 있을까? 애매한 것은 항상 싫다. 평범한 건 더더욱 싫다. 삶은 경쟁이기에, 최고가 되고 싶다. 적어도 내가 속한 무리 내에서는 누구보다 많이 아는 것이 나의 start line이다. 늘 기준을 높게 세워야 한다. 그래야만 한다. 회사에 들어오고 나서, 정말 많은 것을 배우고 있다. 코드 레벨에서의 지식부터, 애플리케이션 아키텍처, 인프라 및 네트워크 구조, DevOps 등등.. 2023. 12. 10.
[회고] 택스리펀 (세금 환급) 서비스 개발을 마치며 시작하며, 회고를 거진 1달 뒤에야 쓴다. 개발은 진작에 끝났었지만.. 최근에 너무 정신이 없었어서 이제서야 회고를 한번 작성해보려 한다. 내가 이 회사에 처음 맡은 피쳐 (feature) 가 전문 통신을 위한 Socket 개발이었다. TRS 서버와는 API 통신이 아니라 전문 통신을 하고 있어서, 이를 위한 라이브러리 서칭 및 개발을 했어야 했다. 전문 통신은 한번도 안해봤어서 막막했지만, 다행히 기존 소스가 있어 참고해가며 개발을 했었고, 결국 전문 소켓 개발 및 전문과의 객체 매핑에 성공했다. 중간에 대시보드 프로젝트를 들어가게 되었고, 마무리 후 인수인계 드린 뒤, TRS 개발은 약 한 달 뒤에 본격적으로 시작됐다. 결론부터 말하자면, 매우 나이스한 서비스 개발을 했다고 생각한다. 개발 과정에서,.. 2023. 11. 4.
마이크로서비스 아키텍처 구축 CH.4 마이크로서비스 통신 방식 4.1.1 성능 프로세스 내 호출 기본 컴파일러와 런타임은 호출에 있어서 전체 호스트 최적화를 수행 가능 프로세스 간 호출 패킷을 전송하기 때문에 최적화가 불가 프로세스 내 호출에 비해 오버헤드가 클 것으로 예상되지만, 확실히 측정 가능 데이터 센터 안에서 단일 패킷 왕복 시간 측정 API 호출은 다시 API 설계는 신중해야 한다. 프로세스 내부 호출 이를 테면, 매개변수 전달 시 포인터를 전달 전달 시 데이터를 복사하려고 더 많은 메모리 할당이 필요 없음 프로세스 간 호출 (네트워크) 데이터 전송을 위해 특정 형태로 직렬화 및 역직렬화 수행 페이로드 크기에 대해 주의해야 데이터 송수신양을 최대한 줄이기 파일 시스템으로 내려 파일 위치에 대한 참조 대신 전달 추상화, But 내부 사정을 충분히 고려하자 .. 2023. 11. 4.
물경력에 대한 고찰 최근 개발 관련 유튜브를 보다가, 물경력 관련 컨텐츠들을 많이 시청하게 되었다. 주로 SI 출신 개발자 분들이 많이 나오셨고, 의외로 규모가 있는 서비스 회사 출신 개발자 분들도 있었다. 대부분 자신의 경력에 대해 회의감을 가졌고, 커리어가 끊긴다는 두려움을 안고 계시는 분들이었다. 이제 신입이라 와닿는 토픽은 아니지만, 이 토픽에 대해서 다시 한번 생각해보게 되었다. 경력, 나 또한 쌓이는 경력에 대해 매분 매초 신중히 생각하는 편이다. 다양한 경험을 쌓는 것도 물론 중요하지만, 내가 정한 웹 백엔드 개발자로의 성장에 있어 앞을 가로 막는 상황은 항상 돌아가려 했던 것 같다. 지금 회사로 이직한 이유도 마찬가지다. DB, Http 기술보다는 파일처리나 AI Fine tuning 들을 주로 했었고, 배우.. 2023. 10. 9.
누적 방문 수 2만명 달성~! 개발 블로그 시작한지 2년 좀 안 되었다. 2021년 겨울 정도에 시작했으니 말이다. 벌써 (아니 이제야..) 2만명 달성이라니.. 조회 수는 참 늘리기가 쉽지 않구나.. 양질의 글을 써보도록 노력하자. 요새 뭐하고 지내니? 회사에서 열심히 코딩 중이다. 서비스 개발 마일스톤이 상당히 짧은 감이 없지 않지만, 짧다고 느끼는 것도 결국 내 실력 부족이란 생각도 든다. 이전에는 CRUD 에 진절머리 나서, 웬만한 건 정말 클린하고 빠르게 코드를 작성할 수 있다고 생각했었다. 더 큰 규모의 서비스 개발을 하는 회사에 오니, 이런? 큰 오산이었다.. 개발 속도 VS 퀄리티 이전과 같이 지금도 변함 없는 생각이지만, 퀄리티는 개발자의 기본 역량이라고 생각한다. 역량을 끌어올리는 것은 오로지 본인의 몫이며, 2가지.. 2023. 8. 27.
[빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 6 - Redis Cluster 시스템 & 로그 모니터링 6.1 복제 & 분산 시스템 개요 자원 공유 서버 자원 제한적, 과부하 시 다른 서버 자원 활용으로 효율성 증가 성능 향상 과부하 발생 시 로드 밸런싱을 통해 자원 분배 가능 안정성 복제 서버로 장애 대체하여 작동 데이터 참조 가능해 위험 분산 가능 Redis: 마스터-슬레이브, 마스터-슬레이브-센티널, 파티션 클러스터로 복제, 분산처리 가능 Partition 유형 범위 파티션 (Range Partition) Key-Value를 서버에 분산 저장 서버 대수 결정에 따라 저장 위치 결정 서버에 저장할 데이터 양 불균형 문제 발생 가능 해시 파티션 (Hash Partition) Hash 알고리즘으로 데이터 분산 저장 Partition 구현 방법 Client Side Partitioning 사용자가 데이터 분.. 2023. 8. 20.
[빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 5 - Redis 아키텍처 5.1 Redis 아키텍처 1. 메모리 영역 Resident Area 사용자의 작업이 먼저 저장되는 영역 실제 작업 수행 공간 "WorkingSet" 영역으로도 표현 Data Structure 상태 정보 저장을 위한 메모리 공간 Redis Server 운영 및 모니터링에 필요 2. 파일 영역 AOF 파일 중요한 데이터 지속 저장 스냅샷 데이터 DUMP 파일 소량 데이터 일시적 저장 3. 프로세스 영역 Server Process Redis 인스턴스 관리 및 사용자 작업 수행 4개의 멀티 쓰레드로 구성 Main thread, Sub thread 1(BIO-Close-File), Sub thread 2(BIO-AOF-Resync), Sub thread 3(BIO-Lazy-Free) Client Process .. 2023. 8. 20.
[빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 4 - Redis Data Modeling 4.1 키-밸류(Key-Value) 데이터 모델링 개념 4.1.1 용어 설명 테이블(Table): 관계형 DB에서 데이터를 저장하는 논리적 구조를 테이블(table)이라고 표현하는 것처럼 Key-Value DB에서도 테이블(Table)이라고 함. 필드(Field) 또는 엘리먼트(Element): 하나의 테이블을 구성하고 있는 요소들을 관계형 DB에서는 컬럼(column)이라고 하는데 Key-Value DB에서는 필드(Field) 또는 엘리먼트(Element)라고 말함. Key-Value DB에서는 하나의 Key와 하나 이상의 필드 또는 엘리먼트로 구성됨. Key-Value DB에서는 제약 조건 기능이 제공되지 않지만, HyperLogLogs 데이터 속성을 통해 원하는 조건의 데이터를 저장, 관리할 수 있.. 2023. 8. 20.
[빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 3 - 트랜잭션 제어 & 사용자 관리 3.1 Isolation & Lock 모든 NoSQL 제품이 트랜잭션을 제어하지는 않지만, Redis는 트랜잭션 제어 가능. Redis는 Read Commited 타입의 트랜잭션 제어도 가능함. Redis 4.0 버전에서 Data Sets 락 매커니즘 제공. 3.2 CAS (Check and Set) CAS는 데이터 일관성 공유를 위한 기술로 동시 처리 시 충돌을 피함. Watch 명령어를 사용하여 충돌 감지 가능. 3.3 commit & rollback EXEC: 변경한 데이터 최종 저장에 사용. DISCARD: 변경한 데이터 최종 저장하지 않고 취소. 3.4 Index 유형 및 생성 Redis는 Primary Key Index와 Secondary Key Index를 제공. Exact Match와 Ra.. 2023. 8. 20.
[빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 2 - Redis 설치 및 데이터 처리 Redis의 주요 특징 Redis는 NoSQL 데이터베이스로 분류되며 Key-Value 형태로 데이터를 관리합니다. Key-Value DB인 동시에 In-Memory 데이터 처리와 저장 기술을 제공하므로 빠른 Read/Write 성능을 가지고 있습니다. 다양한 데이터 유형을 지원하며 String, Set, Sorted Set, Hash, List, HyperLogLogs 등을 저장할 수 있습니다. 메모리 상의 데이터를 Dump 파일과 AOF(Append Of File) 방식으로 디스크에 저장할 수 있습니다. Master/Slave Replication을 통해 데이터의 분산 복제를 지원하며 Query Off Loading을 통해 Master는 Read/Write 작업, Slave는 Read 작업을 수행할 .. 2023. 8. 20.
JPA 집계함수 sum 은 long 을 반환한다. 최근 대량의 데이터들을 집계하여 조회하는 API 프로젝트를 진행 중에, Spring Data JPA 와 Querydsl 을 이용하여 쿼리를 작성하고 있었다. 오늘, sum 집계 함수 때문에, java object 로 매핑이 안되는 문제가 있었는데, 그 이유와 해결과정을 설명해보겠다. 기존 쿼리 @Query( """ select new service.dto.PaymentTotalSumDTO( sum(sub.totalAmount) as totalAmount, sum(sub.discount) as discount, sum(sub.usedPoint) as usedPoint ) from (select tpd.totalAmount as totalAmount, tpd.discount as discount, tpd.u.. 2023. 7. 26.
[빅데이터 저장 및 분석을 위한 NoSQL & Redis] Chapter 1 - NOSQL 개념 Chapter1 - NOSQL 개념 NOSQL Not Only SQL 기존 SQL 뿐만 아니라, SQL 이 할 수 없는 영역의 기술도 제공하는 대체, 보완 기술 장점 클라우드 컴퓨팅 환경에 적합하다. RDBMS 에 비해 비용 및 성능 지연 문제에 적합 구축 단계에 비용 발생이 덜하다. 유연한 데이터 모델 RDBMS 는 데이터 베이스를 설계하기 위해 필요한 선수 개념들이 많다. 비정형 구조인 컬렉션, 테이블, 노드는 구체적이고 까다롭지 않기 때문에, 설계하기 쉽다. 빅데이터 처리에 효과적 RDBMS 보다 빅데이터 처리에 효과적이다. 빅데이터 처리에 대응하기 위해 나온 데이터베이스이기 때문. NOSQL 종류와 선정 기준 순차적으로 조건을 만족하며 선정 기준을 세분화한다. 1. 초당 5만건 이상의 데이터가 발.. 2023. 7. 23.
여유를 가진다는 것 여유를 가진다는 것. 그건 참 배부른 고민이라 생각했다. 스스로 정한 목표를 이루기 전 준비와, 이루는 중에 누리는 여유는 감히 누리지 못할 사치라 생각했었기 때문이다. 난 여유롭지 않은 사람이다. 해야만 하는 일을 명확히 깨달은 날 이후로, 몇 분, 몇 초 하나하나 쪼개며 아낄 수 있을 시간을 최대한 아꼈다. (얼마나 급하면 걸음 속도가 빠른 것에 대해 핀잔을 많이 받았다..ㅋㅋㅋㅋ) 사회생활을 시작하며, 여유로운 분들을 많이 보아왔다. 대게 나이가 30대 이상인 분들이 대다수인데. 분명 나는 말과 행동이 느린 사람들을 답답하다 생각했는데, 한 차원 더 높이 올라와 보니, 반대였다. 충분히 생각하고, 행동하는 사람들은 무게감이 있다. 심리적인 요인인건가? 그러한 분들을 대할 때, 나 또한 템포를 맞추게.. 2023. 7. 22.
세상에 무엇을 줄 수 있을까? 너에게 무엇을 줄 수 있을까? 사회생활을 하면서 give 행위에 대한 생각이 많이 들었다. 난 정이 많아, 사람에게 한 없이 관대하게 대한다. 내가 손해를 보더라도 무엇이든 주고 싶다. 주변 사람에게 이로움을 가져다 주는 내 '공유' 라는 가치관은, 그 것을 그 사람이 필요로 하는 상황에서 그 가치가 발현되는 것만 같다. 하지만, 그 발현 정도가 내 이상과 현실에서 차이가 크다. 이미 알고 있겠구나, 이미 이런 것 까지 생각을 마쳤겠거니 하고. 단순하게 생각할 필요가 있다 내 머릿 속에 피어나는 수 많은 예측과 생각보다 대다수의 사람들과 세상은 마치 로봇처럼, input output 에만 치중한 행위를 하는 것만 같다. 그렇기에, 나의 머리에서 번뜩이던 생각, 혹은 내가 알게 된 지식 및 경험 충분히 공.. 2023. 7. 12.
반응형