728x90
728x90
[NestJS] 코드 리팩토링하기 - 응집도를 높이고 의존성을 명확하게
트러블슈팅2024. 1. 21. 21:59[NestJS] 코드 리팩토링하기 - 응집도를 높이고 의존성을 명확하게

서론 요즘 좋은 코드 라는 키워드에 대해 특히 변경과 재사용이 용이한, 높은 응집도와 낮은 결합 관계 에 대해 많이 생각하고 있다. 특히 기존 레거시를 모두다 걷어내기에는 시간적으로 애로사항이 있어 틈틈이 관련된 프로젝트에 들어갈 때, 해당 로직에 대한 레거시들을 최대한 바꾸려고 노력하고 있다. [네이버클라우드 개발자 스토리] 좋은 코드란 무엇일까?🤔 #클린코드 이야기 📍 “좋은 코드를 짜야 한다”​ medium.com 특히, 상품의 리뷰를 불러오는 함수를 수정해야 하는 일이 최근에 있었는데, 상품군 7~8개의 하위 상품에 대한 리뷰를 모두 다른 함수에서 불러오는 것을 보고 경악을 금치 못했다. (급한 사항이라 판단되어 우선 프로덕션에 수정해서 반영한 뒤 구조를 수정하였다..) 나도 최근에 신규 프로젝트..

새 프로젝트에 임하는 초년 개발자의 마음가짐(?)
프로젝트2024. 1. 10. 17:43새 프로젝트에 임하는 초년 개발자의 마음가짐(?)

서론 입사한지 이제 4개월 남짓.. 드디어 개발 한 사이클을 돌릴 수 있는 사내 전사 시스템의 완전개편 !! 에 대한 새삥 프로젝트를 시작하게 되었다. 서버 / 파이프라인 구축부터 하나하나 다 직접 해볼 수 있는 값진 기회가 될 것 같다. 오래된 기존 서비스 코드는 컨벤션도 딱히 없고, 앞 번 개발자의 스타일에 따라 이리저리 막 작성되어 있어서 특히 어느 순간부터 단순 쿼리문을 사용하는 게 편했던건지 DB Access를 단순 쿼리로만 작성해놔서 쿼리빌더로 짬날 때 마다 변경하는 수고로움을 요구했다.. 목표 업무를 하면서, 항상 새 프로젝트를 시작하면 반드시 수행하려고 했던 것들을 정리해놨었다. 1. 프로젝트 컨벤션 문서화하기 2. 사소한 것도 문서화하기 3. 프로젝트 구조에 대한 고민 녹여내기 4. 로깅..

[NestJS] TypeORM 0.3 버전의 CustomRepository 생성, Repository패턴 적용하기
트러블슈팅2024. 1. 5. 10:48[NestJS] TypeORM 0.3 버전의 CustomRepository 생성, Repository패턴 적용하기

0.2 버전 사내 서비스의 TypeORM버전은 0.2버전대를 사용중이다. 0.2버전대에서는 @EntityRepository 데커레이터를 지원하여, Repository를 커스텀화하여 리파지토리 클래스를 생성할 수 있었고, 이에 따라 Service와 Repository레이어를 분리하여 결합도를 낮출 수 있었다. @Injectable() export class RsvcenterService { constructor( @InjectRepository(CustomRsvRepository) private readonly customRsvRepo: CustomRsvRepository, //DB 관련 로직 예외처리 Provider private readonly customEm: CustomEntityManager, )..

1년차 백엔드 개발자의 회고록 / 2023년을 되돌아보며..
회고,후기2024. 1. 1. 21:401년차 백엔드 개발자의 회고록 / 2023년을 되돌아보며..

두서없이 쓰는 본인의 개발 입문 1년( + 1개월) 기념 (실무 3개월차) 1년을 되돌아보며 작성하는 장황한 글이다. 왜 개발자를 선택했는가? 나는 작년 11월. 국비지원 백엔드 개발자 양성과정 교육을 통해 개발자로 입문했다. [K-Digital] 비전공자의 국비지원 백엔드 개발자 양성 과정 수강 후기 (구트 아카데미 자바학원 / 221 본 포스팅은 95년생 비전공인 학원 수강생의 개인적인 후기입니다. 학원 관련 정보 요약 1. 수업시간 09:30 ~ 18:20 / 점심시간 13:30 ~ 14:20 2. 근처 5분거리 내외 괜찮은 점심거리는 많지만 엄청난 맛집 mag1c.tistory.com 조금 더 거슬러 올라가 내가 개발자가 되어야겠다 라고 생각한 이유는 요약하면 다음과 같다. 1. 이전 업계에서의 ..

제 4회 Kakao Tech Meet 후기
회고,후기2023. 12. 26. 09:42제 4회 Kakao Tech Meet 후기

후기 느낀점을 처음 쓰는 이유는 컨퍼런스의 섹션 내용들을 내 것으로 만들지 못했기 때문에 앞단에다 작성한다. 참여한 것으로도 충분한 동기부여를 또 받았지만, 고품질(?)의 컨퍼런스를 온전히 내 것으로 받아들이지 못해 아쉬웠다. 1. 신기술이 나오면 항상 관심을 가지고 지켜보고 사용하는구나 2. 해당 진영에서 새로운 버전이 출시되면 레거시들에 적용을 시키는구나 컨퍼런스를 듣고 사내 개발환경에 대해 생각해보게 되었다. Nest에 적응하기 위해 진행한 토이프로젝트의 버전과 사내 버전의 차이가 좀 많이 나는 것 같다. Nest는 7버전을 사용중이며, TypeORM도 0.2버전대를 사용중이다. 반면에 토이 프로젝트는, Nest CLI로 설치를 하여 진행했기 때문에 Nest 10버전, TypeORM 0.3버전대를 ..

[쿼리튜닝 - 1] 신입 개발자의 간단한 사내 조회 쿼리의 쿼리튜닝 여정.
공부방2023. 12. 15. 19:27[쿼리튜닝 - 1] 신입 개발자의 간단한 사내 조회 쿼리의 쿼리튜닝 여정.

발단계속해서 짧은 주기로 프로젝트를 쏟아내고 있던 와중에 DB연산이 많은 작업을 수행하는 경우가 생겼다.개발 단계에서 API 자체를 돌리는 과정에서도 1~2000ms가 되어 걱정하고 있던 과정에QA를 진행했더니 난리가났다.이상하게 이에 대해 아무도 피드백을 해 주지 않았다.  들쭉날쭉한 건 요청이 한번에 서버로 몰릴 때로 인식을 하겠다지만,30건 정도밖에 안되는 데이터를 연산하는데 말이 안된다고 생각했고, 작업에 들어갔다.  원인 파악하기 원인을 파악하기 위해, 어쩔 수 없이 로직의 각 구간별로 로깅을 시도했다.  연산 처리속도는 빨랐는데, 애초에 데이터를 그렇게 많이 들고나오지 않기 때문이다.연산은 간략히 설명하자면 다음과 같다 데이터를 row형태로 가져나오는데, PK가 일치할 경우, 같은 문의에 상품..

Devfest Songdo 2023 후기 (GDG 인천, 송도)
회고,후기2023. 12. 12. 09:33Devfest Songdo 2023 후기 (GDG 인천, 송도)

총 950명 정도가 참여했었던 내 개발자 인생 첫 컨퍼런스인 Devfest 참여 후기를스피킹 내용을 듣고 개인 관점에서의 느낀점을 써내려가려고 한다. 티켓을 제공해주셔서 다시한번 감사의 인사를 드리며,대면으로 감사인사를 드리지 못해 정말 죄송합니다. 혹여 포스팅에 컨퍼런스와 관련되어 문제되는 부분이 있으면 수정해서 반영하도록 하겠습니다.    서론  1년차 백엔드 개발자의 회고록두서없이 쓰는 본인의 개발 입문 1년( + 1개월) 기념 (실무 3개월차) 1년을 되돌아보며 작성하는 장황한 글이다. 왜 개발자를 선택했는가? 나는 작년 11월. 국비지원 백엔드 개발자 양성과정 교육을mag1c.tistory.com 1년을 되돌아보는 회고록을 올린지 얼마 되지 않아 한 댓글이 달렸다.데브 페스트에 참여하신다면 인사..

[TypeORM / QueryBuilder] Relation with property path confirms in entity was not found
트러블슈팅2023. 12. 8. 11:51[TypeORM / QueryBuilder] Relation with property path confirms in entity was not found

최근 레거시 코드 중 DB 관련 로직들을 거의 대부분 쿼리빌더로 변경하는 작업을 완료하고, 검수중에 있다. 그 과정에서 발생한 에러들을 하나하나 정리하여 남기려고 한다. 에러 메세지 원인 관계 매핑이 정확하지 않아서 발생했다. 나의 경우는 아래 이유 때문에 발생했는데, TypeORM의 쿼리빌더를 사용하는 과정에서, 커스텀 리파지토리를 생성하여, 해당 리파지토리에서 두 테이블을 조인해서 사용했는데, 처음 INNER JOIN을 시도한 테이블에서, enterprise라는 엔터티에 대한 정의를 내리지 않았기 때문에 발생했다. 해당 엔터티를 살펴보면, export class EasyBookWhichEntEntity { @PrimaryGeneratedColumn({ type: 'int', name: 'no' }) ..

728x90
728x90
image