가장 후회하는 블로그 커스터마이징
회고록2024. 11. 14. 08:52가장 후회하는 블로그 커스터마이징

금년 4월 즈음에 다크모드를 대응하여 이미지 색상을 반전하는 기능을 구현하였었는데요.  css를 활용한 다크모드 이미지 자동 대응소개다음 영상을 보시면 무슨 말인지 쉽게 이해할 수 있습니다.아이디어https://github.com/joonas-yoon/boj-extended?tab=readme-ov-file GitHub - joonas-yoon/boj-extended: 백준 온라인 저지(BOJ)를 확장된 기능과 함께ko.puleugo.dev 다크모드를 굉장히 좋아하는 사람 중 하나로써 제 블로그는 다크모드에 최적화된 환경으로 만들고 싶었습니다. 이는 현재 가장 후회하는 블로그 커스터마이징입니다.재앙의 시작뭔가 틀렸다는 것을 느낀 것은 동아리 사이트에 블로그 탭을 구현할 때 였습니다. 크롤링한 게시글의 이..

[계왕권 출시] 당신의 블로그 가치를 44배 향상시켜주는 서비스
계왕권 프로젝트2024. 11. 13. 08:57[계왕권 출시] 당신의 블로그 가치를 44배 향상시켜주는 서비스

당신의 게시글을 가치를 44배 향상시켜주는 서비스초기 기획 글베타버전 개발기공식 문서깃헙 레퍼지토리100% AI, 적용 결과물프로젝트 소개계왕권은 자동화 및 게시글 번역 배포 서비스입니다. 대표적 선진국 9개국의 인구수는 한국의 약 44배이므로, 단순 계산으로 당신의 블로그는 44배 이상의 영향력을 얻을 수 있습니다. 왜 개발하게 되었는가?저는 프로그래밍을 시작한 이후부터 국내 시니어 개발자들의 경험을 얻기 위해 강연, 스터디를 참여하고자 노력했습니다. 그분들의 공통된 조언이자 후회는 프로그래밍에 쏟은 노력을 외국어 학습에 쏟았다면 더 많은 기회를 얻을 수 있었을 것이라는 것이었습니다. 구글, 페이스북 같은 IT 기업의 헤드헌터에게 연락이 오더라도 영어능력의 부재로 인해 기회를 포기하는 경우도 있었으며,..

[계왕권 프로젝트] 베타버전 개발기
계왕권 프로젝트2024. 11. 11. 12:31[계왕권 프로젝트] 베타버전 개발기

길고 험난했던 베타버전 출시꽤나 막혔던 프로젝트였습니다. 새로운 프로젝트를 하는게 오랜만인지라 너무 추상적인 계획만 세우고 작업을 들어가서 구체화 과정에서 멀리 돌아간 작업들이 굉장히 많네요. 대표적인 것들만 정리해보겠습니다. 1. 플랫폼에 의존하는 번역글 Link?처음 생각했던 번역 게시글 업로드 후 본문을 수정하여 JS Injection 방식을 사용한 Link 방식은 문제가 많았습니다.우선, 게시글 본문을 수정해야 하는 문제가 있습니다. 대부분의 블로그 플랫폼(Medium, Dev.to, Qiita, Tistory)의 API는 게시글 수정 기능을 지원하지 않으며 수정기능을 지원한다고 하더라도 JS Injection을 막아둔 경우가 대부분이었습니다. Tistory의 API를 분석하여 Reverse E..

괴물 메서드 리팩터링과 성능개선하기 | 안전하게 리팩터링하기
Node.js2024. 9. 16. 15:34괴물 메서드 리팩터링과 성능개선하기 | 안전하게 리팩터링하기

발표 영상 소개안녕하세요. 왁타버스 게임즈의 백엔드 팀의 임채성입니다. 이번 글에서는 저희 팀의 오랜 과제였던 '구글 스프레드시트 동기화 메서드'의 리팩터링 과정과 성능 개선 방법을 공유하려고 합니다. 왁타버스 게임즈와 백엔드 팀의 역할먼저 왁타버스 게임즈가 어떤 서비스인지 설명드리고 개발팀에서 달성해야하는 목표를 설명드리겠습니다. 저희 서비스는 유튜버 우왁굳의 메타버스 컨텐츠인 왁타버스의 팬 게임 ⋅ 어플리케이션 플랫폼입니다.팬 게임과 랭킹 그리고 도전과제 등 다양한 기능스프레드 시트로 어드민 페이지로 사용하기 때문에 DB와 데이터 일관성 제공24시간 무중단 운영팬 게임⋅어플리케이션의 랭킹과 다운로드 수 및 조회수 통계 제공이러한 특성들을 고려했을 때 저희팀은 B2B와 디지털 플랫폼 비즈니스로 서류작업..

[리뷰] 자바스크립트 + 리액트 디자인 패턴
도서 리뷰2024. 8. 29. 17:23[리뷰] 자바스크립트 + 리액트 디자인 패턴

이 책은 자바스크립트 디자인 패턴을 심도 있게 탐구하며, 실무에서의 적용 방법을 상세히 다루고 있다. 목차를 보면, 디자인 패턴의 역사적 배경부터 시작하여, 자바스크립트 환경에서의 구체적인 구현 방법과 최신 트렌드까지 체계적으로 설명하고 있음을 알 수 있다.초반부는 디자인 패턴의 개념과 역사적 배경을 다루며 독자에게 기본적인 이해를 돕고 있다. 디자인 패턴의 정의와 일상생활에서의 활용 사례를 통해 독자는 이론을 실무에 어떻게 적용할지 생각해볼 수 있다. 특히, 패턴성 검증과 프로토 패턴을 논의하면서 패턴의 진정한 의미를 강조하는 점이 인상적이다.중반부로 넘어가면서, 구체적인 패턴의 구조와 작성 방법을 설명하며 실용적인 지식을 전달한다. 자바스크립트의 안티 패턴을 소개하고, 최신 자바스크립트 문법과 기능과..

KAIST GDSC 해커톤 참여, 발표 회고
회고록2024. 8. 26. 15:29KAIST GDSC 해커톤 참여, 발표 회고

참여 계기재밌어보였다. 새로운 사람들을 사귀고 대화좀 하고 싶었다. 준비하면서첫 해커톤 참여라 원활한 협업을 위해 보일러 플레이트 코드를 준비하려고 했다. 그러면서 '이상적인 개발자의 해커톤 준비 방법'이라는 글도 쓰고, 이전 주는 거의 해커톤 준비에만 투자했다.사람들이 낯을 많이 가렸다. 소통을 위한 디스코드는 개최 일주 전부터 만들어졌는데 아무도 자기소개를 포함한 채팅 치지 않았다. 그래서 분위기를 띄우고 싶어서 자기소개를 길게 써봤다.해커톤 운영경험이 있다보니 열심히 준비하셨을 GDSC 운영진분들을 생각해서 굳이굳이 더 말눈광스럽게 작성한 것도 있다..팀 매칭팀 매칭은 GDSC 운영진에서 매칭해준다. 랜덤이지만 참가자 모두 좋은 분들이라 재미있었음.우리 팀은백엔드가 셋이었다. 나, 민주님, 윤정님..

당신의 블로그, 계왕권을 쓸 수 있다.
계왕권 프로젝트2024. 8. 19. 21:59당신의 블로그, 계왕권을 쓸 수 있다.

`알파 버전 개발중 GitHub - puleugo/kablog: Automated Translation Development Post Distribution ApplicationAutomated Translation Development Post Distribution Application - puleugo/kabloggithub.com계왕권이 뭔데..최근 취업 불황으로 인해 국내 개발자들의 평균 스펙이 향상되었습니다. 그러나 해외 블로그의 기술적 난이도는 국내보다 낮습니다. 예시로 일본의 대표적 기술 블로그 플랫폼인 Qiita 인기 게시글을 보면 이를 확인할 수 있습니다. (08/19 기준)【완전판】 이것 1개로 React의 기본을 마스터할 수 있다! 초보자 튜토리얼!【AWS 컨테이너 입문】간단한 Py..

개발자의 이상적인 해커톤 준비 방법
How to.2024. 8. 19. 21:32개발자의 이상적인 해커톤 준비 방법

서론KAIST GDSC에서 개최하는 스파클링톤에 참여하게 되었다. 모교에서 해커톤을 2회 주최한 경험은 있어도 100% 참여자로써의 해커톤 경험은 처음이라 많은 기대를 하고 있다. 해커톤 개최 경험자로써 개발자의 이상적인 준비를 이야기해보고자 한다.협업에 관한 내용도 개발 실력보다도 아주아주 중요하지만 개발 이야기만 해도 할 말이 많기 때문에 이번 글에서는 생략하겠다. 해커톤 참여자는 이래야 한다.해커톤은 스펙보다는 재미, 협업 능력 향상, 무료 피자와 콜라를 목표로 하는 것이 옳다. 번뜩이는 아이디어를 빨리 구현해야 하는데 대용량 트래픽, 확장성 같은 경험을 채우고 싶어서 해커톤에 참여하는 것이라면 그다지 좋은 팀원으로 평가되지는 않을 것이다.그렇다면 어떤 개발자가 좋은 해커톤 팀원일까? 의존하지 않아..

[번역] 방금 당신이 작성한 코드는 도메인 로직인가? | What is domain logic?
How to.2024. 8. 12. 12:00[번역] 방금 당신이 작성한 코드는 도메인 로직인가? | What is domain logic?

서론원문: What is domain logic? | Vladimir Khorikov 도메인 로직 vs 비즈니스 로직?우리는 코드를 작성하기 전에 두가지를 생각합니다. 해결하고자 하는 문제와 해결 방안입니다. 여기서 실생활에서 해결하고자 하는 문제가 바로 도메인(a.k.a. Problem Domain, Core Domain)이며 해결방안을 비즈니스 로직(a.k.a. Domain Logic, Business Rule, Domain Knowledge)이라고 부릅니다.알고보면 쉽지만 찾아보지 않으면 대화조차 안되는 내용이라 학생 입장에는 슬프다. 결론은 도메인 로직과 비즈니스 로직은 동의어이며 위와 같은 의미라는 것만 알면 된다. 도메인 로직하지만 문제 해결방안(이후 도메인로직)만이 코드에 있으면 너무 좋겠..

How to.2024. 8. 11. 12:00티스토리에 마진 넣는법

서론티스토리는 기본적으로 css에 포함된 마진을 무시합니다. 그래서 대부분의 블로거들이 줄바꿈을 광클떄려놔서 가독성이 떨어집니다. 본 글에서는 마진 제거 css인 tt_article_useless_p_margin 속성을 제거하려고합니다. 문제 분석대충 네트워크 및 동작 흐름 보면 이렇습니다.게시글 API 호출 (text/html)useLessPMargin.css API 호출tistory에서 보내줄 html과 css를 로드 완료CSSOM 마운트DOM 마운트 방법jQeury를 사용하여 DOM 마운트 시 CSSOM을 통해 최종적으로 추가된 tt_article_useless_p_margin 클래스를 제거하였습니다.

만개의 테스트를 작성하지 마라.
How to.2024. 8. 10. 12:00만개의 테스트를 작성하지 마라.

서론어떤 코드가 유닛 테스트를 작성할 가치가 있는 코드인지 판별하는 방법에 대해 이야기합니다.(어그로 죄송합니다.) 가치있는 테스트란?단순히 테스트가 많이 작성되어 있는 것이 결코 좋은게 아닙니다. 여러분이 만약 프라모델을 조립한다고 가정했을 때, 핵심만 잘 정리된 설명서와 별로 중요하지 않은 내용이 포함되어 있는 설명서 중 어떤 문서가 읽기 편하신가요? 아마도 무조건 전자일겁니다.테스트 또한 문서이기에 핵심만 명확하게 작성되어 있는 것이 훨씬 좋습니다. 테스트의 가치란?그렇다면 우리가 테스트의 우선순위가 떨어지는 코드에는 무엇이 있을까요? 첫번째로 너무 간단한 로직들도 있을거에요. 굳이 문서를 읽지 않아도 이해할 수 있으니까요. 두번째로는 의존객체가 많은 객체들은 테스트하기에 너무 어려울거에요. 실제..

[Node.js] 트랜잭션을 활용한 테스트 격리 환경 구현하기 (1/2) | 솔루션 찾기
트러블 슈팅2024. 7. 31. 18:49[Node.js] 트랜잭션을 활용한 테스트 격리 환경 구현하기 (1/2) | 솔루션 찾기

서론1부는 이론편, 2부는 실습편입니다.트랜잭션을 통해 테스트 격리성을 가져가고 싶었습니다.단, TypeORM에는 세션을 관리해주지 않아, 하나의 테스트만 실행해도 여러개의 세션이 연결됩니다.위 제약사항에 대한 접근방식 + 해결방법을 공유하겠습니다. 트랜잭션으로 테스트 격리성을 확보한다는게 무슨말이야?각 테스트 간의 영향을 끼치지 않도록 하는 테스트 방법입니다. 크게 두가지 전략이 있습니다.트랜잭션 전략: 테스트 시작과 끝에 트랜잭션을 시작하고 롤백하는 전략클린업 전략: 테스트 종료 후 DB의 모든 행을 제거하는 전략 둘다 처음 들어본다면 향로님의 재미있는 글이 있으니 추천드립니다. (테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각, 향로, 2023. 11. 26.)befor..

번역2024. 7. 29. 12:00[번역] Mocks Aren't Stubs | Classicist vs Mockist

서론Classicist와 Mockist 방식의 테스트 방식, 사고방식의 차이가 정리된 글입니다.본 글은 대표적인 Classicist TDDer인 martinfowler의 'Mocks Aren't Stubs(2007)'의 글을 기반으로 두고 있습니다.본문의 예제는 TypeScript(with Jest)의 스타일로 코드를 작성했습니다. 원문은 Java(with JUnit)로 되어있으니 읽기 편하신 예제로 읽으시면 됩니다. 기본적인 테스트 살펴보기Order(주문), WareHouse(창고) 객체를 사용하는 주문 시스템 예제입니다.Order를 테스트하는 코드입니다.하지만 order.fill 메서드를 테스트하려면 WareHouse의 인스턴스를 필요로 합니다.기존 테스트 방식(Classicist)과 Mock 객체를..

도서 리뷰2024. 7. 28. 18:39[리뷰] 보고 혁명, 현직 팀장들이 검증하는 실무 보고서 작성법

취업을 준비하는 백엔드 개발자 학생으로서, '보고혁명'을 읽고 느낀 점을 공유하고자 합니다.이 책은 직장인들을 대상으로 보고서 작성의 모든 것을 다루고 있어, 업무에서 보고서 작성이 얼마나 중요한지 감을 잡게되었습니다.보고서 작성은 직급에 상관없이 모두에게 어려운 과제입니다. 어떤 내용을 어떻게 써야 할지 막막할 때가 많기 때문에요. '보고혁명'은 이런 어려움을 해결하는 데 큰 도움을 줍니다.  책의 도입부는 보고서 작성의 중요성을 강조하며 시작합니다. 필자분은 경력직 팀장이 설명하는 보고서의 역할과 실제 현장에서의 사용 사례는 매우 직관적으로 이해되었습니다. 보고서가 단순한 문서 작성이 아닌, 주요 의사결정의 근거가 되는 중요한 도구임을 알게 되었습니다. 특히, 책에서 제시하는 'B2WHEN' 방법은..

[리뷰] 데브옵스 엔지니어를 위한 실전 관찰 가능성 엔지니어링
도서 리뷰2024. 6. 25. 17:36[리뷰] 데브옵스 엔지니어를 위한 실전 관찰 가능성 엔지니어링

"한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다." 이 책은 관찰 가능성(observability) 엔지니어링을 주제로 하여, 단순한 모니터링과의 차이점을 심도 있게 탐구한다. 저자는 어떻게 관찰 가능성이 기술적 문제를 해결하고 시스템 이해를 증진시키는 데 중요한 역할을 하는지를 설명합니다. 특히 데이터독(Datadog)과 같은 도구를 사용하여 마이크로서비스와 분산 시스템을 효율적으로 모니터링하는 방법에 대해 설명하면서, 단순한 메트릭스로는 파악하기 어려운 복잡한 문제들을 어떻게 쉽게 발견하고 해결할 수 있는지를 보여준다.이 책은 데브옵스 엔지니어 뿐만 아니라 백엔드 엔지니어에게도 유용하다. 저자는 이미 구축된 솔루션을 사용하는 것을 권장하지만, Pinpoint와 같은 강력한 무료 툴을 사용..

[번역] 개발자 중심 성능 테스트 선언문
번역2024. 6. 23. 16:29[번역] 개발자 중심 성능 테스트 선언문

소개https://k6.io/our-beliefsgrafana사의 성능 테스트 툴인 k6의 공식문서에 포함되어 있는 내용입니다. 성능 테스트에 관심이 있는 개발자 / 학생분들이 읽기 좋은 내용입니다.저는 자료 번역을 할 때 직역하지 않습니다. 필요해 보이는 내용은 추가하고 불필요하다고 생각되는 내용은 지웁니다. 원래 글을 그대로 읽고 싶으시면 원문을 읽으시는 것을 추천합니다.  간단한 테스트가 테스트를 안하는것보단 낫다.성능 테스트는 실제 클라이언트의 행동과 환경을 유사하게 모방하는 것이 좋습니다. 하지만 그것보다 중요한 것은 테스트를 수행하는 것입니다. 80:20 규칙은 상위 20%의 작업만으로 80%의 가치를 얻을 수 있으며 간단한 테스트를 통해 개선하는 것이 아예 안 하는 것보다 훨씬 좋다는 것을 ..

가만히 있어도 주변에서 칭찬해주는 챌린지: 도파민 디톡스 후기
회고록2024. 6. 15. 14:30가만히 있어도 주변에서 칭찬해주는 챌린지: 도파민 디톡스 후기

도파민 디톡스란도파민 디톡스(dopamine detox)는 현대사회에 흔한 도파민을 쉽게 수급할 수 있는 매개체를 소비하지 않음으로써 본업에서의 집중력, 행복감 등을 향상하는 챌린지입니다. 제가 고교시절 시도했던 게임 끊기(익명 커뮤니티에 올렸던 게시글, 게시판 내 최고 조회수)와 같은 행위를 요즘에는 도파민 디톡스라는 단어로 불리며 인기가 있는 것 같습니다. 최근 뉴스에서 초·중등학생에게 유튜브, 쇼츠 등이 문제라고 이야기하고 있습니다. 쇼츠가 건강하지는 않다는 의견에는 동의하지만 제 또래 세대만 해도 어릴 떄부터 유튜브를 접하며 자랐기에 옛날부터 문제라면 문제였는데 이제 와서 뉴스에서 떠드는게 공감이 안됩니다. 이 글에서는 7일간 도파민 디톡스를 했으며 그동안 든 생각에 대해 정리했습니다. 시작하게 ..

[TypeScript] TypeORM 커스텀 함수 구현하기
Node.js2024. 6. 6. 12:13[TypeScript] TypeORM 커스텀 함수 구현하기

도입본 케이스는 ORM레벨의 에러 때문에 작성되었기에, ORM에 직접 메서드를 추가하는 접근방식을 사용했습니다.만약 Data Access Layer에 Customized Method를 추가하고 싶으시다면 TypeORM 레퍼지토리를 참조하는 클래스를 구현하세요. TypeORM 커스텀함수가 필요하게 되어 구현하게됐다. 처한 상황은 다음과 같다.발생 환경: MySQL, Mac발생 조건: upsert method를 사용하고 충돌 조건을 PK가 아닌 Key를 사용함결과: upsert signature은 Upsert를 시도한 객체를 반환하는데 ORM에서 객체를 찾지 못해 TypeORM 에러 발생#10909번 이슈 때문에 이를 해결하기 위해 TypeORM에 함수 하나를 추가해보려고 한다. 코드//custom-orm-..

그냥 하기 (명량한 염세주의)
생각 정리2024. 5. 18. 04:43그냥 하기 (명량한 염세주의)

인생 사는 마인드에 관한 이야기이다. 우선, 나는 철학에 대한 지식이 없다. 단순히 내 사고 방식과 유사하고 내가 옳은 사고방식이라고 생각하는 것에 대한 정리다.내가 옳다고 생각하는 것은 명량한 염세주의다. (버틀란드 러셀 왈) 염세주의는 뭐고 명량한 염세주의는 무엇인가? 우선 염세주의에 대해 설명하겠다.염세주의는 비관주의라고도 말한다. 세계는 원래 불합리하며 비애로 가득찬 곳으로 당신이 느끼는 행복이나 희열도 덧없는 일시적인 것에 불과하다고 보는 마인드다. 그렇다면 세상은 불합리할까?아니 세상은 합리적이다. 그림이 좋아 미대 입시를 준비하고 있는 친동생은 하기 싫어하는 내신공부와 입시미술을 반드시 공부해야한다. 그렇지 않으면 다른 학생들보다 더 안좋은 환경에서 공부하게 될 것이기 때문이다. 이런 불합리..

[Nest.js] HTTP query에 따라 Service가 동적으로 할당되어야 한다.
트러블 슈팅2024. 5. 7. 17:33[Nest.js] HTTP query에 따라 Service가 동적으로 할당되어야 한다.

프로젝트 소개 및 요구사항 waktaverse games라는 약 30개의 팬게임과 협업하는 게임 포럼/배포 서비스입니다. 왁타버스 게임즈 | Waktaverse GamesWaktaverse Games를 통해 왁물원의 게임을 한곳에서 즐겨보세요!waktaverse.games 본 웹 사이트에는 2가지 클라이언트가 존재합니다.웹 브라우저(react)팬게임 개발자용 클라이언트(electron)각 클라이언트마다 고유의 refresh 토큰을 가지고 있어서 메서드 내부에서 처리해줘야 하는 중복 로직이 많았습니다.그래서 이번 글에서는 다음과 같은 작업을 수행해보겠습니다.클라이언트가 더 추가되도 코드의 변경이 일어나지 않도록 개선request query에 따라 service가 동적으로 할당되도록 개선  Service 동..

How to.2024. 4. 22. 18:10css를 활용한 다크모드 이미지 자동 대응

소개다음 영상을 보시면 무슨 말인지 쉽게 이해할 수 있습니다.아이디어https://github.com/joonas-yoon/boj-extended?tab=readme-ov-file GitHub - joonas-yoon/boj-extended: 백준 온라인 저지(BOJ)를 확장된 기능과 함께 사용해보세요. 기능 요청백준 온라인 저지(BOJ)를 확장된 기능과 함께 사용해보세요. 기능 요청과 버그 제보는 언제나 환영합니다. - joonas-yoon/boj-extendedgithub.com 코드아래 코드는 본인이 사용하고 있는 블로그 스킨에 맞게 수정해서 사용하세요.저는 berry skin v4를 사용하고 있어서 다음과 같은 코드로 작성했습니다./* 기본 이미지 색상 */img { filter: none;..

머신러닝과 딥러닝의 차이
etc2024. 4. 21. 20:23머신러닝과 딥러닝의 차이

도입 역사 흐름대로 알려줌. 독자가 단순히 외우는 것보다 배경을 알아가면서 이해하기 위함. 전통적인 프로그래밍 vs 머신러닝 프로그래밍: 개발자가 문제를 해결하기 위해 알고리즘 구현 머신러닝: AI가 스스로 학습하며 문제 해결 알고리즘 직접 구현 def 프로그래밍_처리방식(algorithm: Algorithm, data: Data) -> Answers: // ...Algorithm return answers; def 머신러닝의_처리방식(data: Data, answers: Answers) -> Algorithms: // ... Data, Answers return algorithms; 그렇다면 어떤 경우에 각 두 전략이 적합한가? 프로그래밍: 수식화/도식화하기 쉬운 경우 머신러닝: 수식화/도식화하기 어려..

Node.js2024. 4. 21. 18:03[Typescript] builder 패턴 남용 금지

자바 계열에서 넘어오신 분들이 builder 패턴을 통해 인스턴스 생성 전략을 무분별하게 사용하는 경우가 있습니다. 만약, 인자가 많아 빌더패턴을 적용해야한다는 이유는 TypeScript에서는 적절한 이유가 되지 못합니다. TypeScript에서 named parameter 가능하기 때문에 인자가 많다는 이유로는 builder 패턴을 사용할 필요가 없습니다. 코드interface UserProps { nickname: string; email: string; role: UserRoleEnum; deletedAt: Date | null;}export class User extends Entity { private constructor(props: UserProps, id?: UserID) { super(..

[DDD] 도메인 엔티티, Domain Entity
DDD2024. 4. 17. 07:35[DDD] 도메인 엔티티, Domain Entity

도입 대기업들이 DDD를 지향하는 이유는 비즈니스가 만나는 필연적인 복잡성 때문입니다. Gitlab, Netlify 등의 서비스만 봐도 우리가 공부할 때 접하는 CRUD 프로젝트와는 비교되지 않는 비즈니스 로직의 복잡성이 존재합니다. 비즈니스 로직의 복잡성을 관리하기 위한 접근 방식이 바로 객체지향 프로그래밍 개념을 사용하여 객체 간 복잡한 동작을 모델링 하는 것 입니다. 자세히 설명하면 특정 영역에서 어떤 행위가 가능한지 불가능 한지를 모방하는 것입니다. (e.g. 계좌에 잔고가 있다면 인출할 수 있지만 잔고가 없다면 인출할 수 없음.) Domain-Driven은 도메인을 모델링하는 데 사용할 수 있는 아티팩트를 도입합니다: 이제 본 아티팩트 중 하나인 엔티티에 대해 이야기해보겠습니다. DDD에서 En..

DDD2024. 4. 16. 01:45[DDD] 값 객체, Value Object

엔티티 식별 우리는 특정 모델의 여러 인스턴스들을 각자 구분할 수 있을 때 엔티티를 통해 도메인 개념을 모델링합니다. 식별자가 존재하는지의 여부로 '값 객체'인지 '엔티티'인지 구분할 수 있습니다. 다음 예시를 보겠습니다: 우리가 흔히 말하는 User는 엔티티입니다. 왜냐하면 User의 인스턴스는 고유한 식별자(ID)를 가지고 있으며 ID를 통해 다른 각자 다른 User라는 것을 알 수 있기 때문에 User를 엔티티라고 부릅니다. 여기서 사용하는 고유한 식별자 방식은 UUID나 auto-increment 방식입니다. 값 객체(Value Object) VO에서 두 인스턴스의 구조가 같다면 같은 값 객체라고 볼 수 있습니다. 구조적 동일성(Structural Equality) 구조적 동일성은 두 객체가 동일..

[PostgreSQL] 내가 enum을 쓰지 않는 이유
Node.js2024. 4. 14. 18:57[PostgreSQL] 내가 enum을 쓰지 않는 이유

이 글은 연산 속도에 관해 이야기하지 않습니다. 단순히 확장성과 용량에 대해서만 이야기합니다. 도입 유저의 권한이라는 요소를 열거형으로 관리할 지 고민하였습니다. 본 글에서는 선택적인 요소를 어떻게 처리하는 것이 좋을지 고민해본 내용을 정리해보려고 합니다. 본문 상세한 설명은 후술. 비교 표: 방식 설명 저장 용량 SMALL INT 저장 용량이 가장 작음, 애플리케이션이 문자열과 매핑해주는 방식 2byte ENUM 확장이 일어나면 DDL이 변경되는 방식, 확실한 무결성 4byte * 가짓수 n = 4n VARCHAR 저장 용량이 큰 방식 (문자열 매핑은 필요없음) 4byte * 길이 n = 4n 별도 테이블 확장에 가장 열려있음. 저장 용량을 가장 많이 차지하는 방식 가장 큼 열거 요소로 enum을 선택..

PostgreSQL Check란? Check를 사용하지 말아야하는 이유
Node.js2024. 4. 11. 21:03PostgreSQL Check란? Check를 사용하지 말아야하는 이유

PostgreSQL에는 Check란? SQL 레벨에서 지원하는 제약조건입니다. (PostgreSQL만 지원하는 것이 아님.) 데이터 insert 요청 시 PostgreSQL DBMS가 값 검증을 수행해주는 제약조건입니다. 다음과 같이 사용할 수 있습니다: CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0) -- 가격 컬럼에 항상 양수만 들어갈 수 있도록 검증 ); Check를 사용하면 이점 애플리케이션에서 값에 대한 검증을 하지 않아도 됨. 서버 코드가 굉장히 간단해짐. 반대로 존재하는 큰 단점 DBMS 마이그레이션 시 검증 기능의 유실됨. 특정 DBMS에 의존하게 됨. (MySQL 8.0.16 이하버..

[개발자 셋업 공유] 집에서 누워서 코딩하기
How to.2024. 4. 8. 03:32[개발자 셋업 공유] 집에서 누워서 코딩하기

마지막 업데이트: 2024.04.08쿠팡 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있습니다. 도입최근 집에 저만의 코딩 환경을 구축하여서 이를 글로 한번 남겨보려고 합니다. 혹시나 개인 코딩 환경 세팅에 관심이 있으시다면 참고해보시는 것도 추천드리며 세팅에 진심이신분이 계시면 댓글로 공유해주시면 감사하겠습니다. 개요가벼운 M1 PRO 사용침대 위 노트북을 둘 수 있는 노트북 거치대눈뽕 방지용 블루라이트, Dark Reader를 활용위와 같은 이유로 키보드 라이트 끔팔에 피쏠릴까봐 블루투스 키보드를 활용마우스 제로를 위해 vim 설정 애용. (ide, chrome은 vim만으로 사용)위와 같은 이유로 github 등 환경에서 명령어 지향목 건강을 위한 라텍스 베게상세한 설명이 들어갈 수 있는 것..

How to.2024. 3. 14. 17:36티스토리 특정 게시글 광고 제거하는 법

다음 css 코드를 광고 제거하고자 하는 게시글의 html 수정을 통해 삽입하면 됩니다. 참고로 html 재수정을 하더라도 태그는 볼 수 없으니 본 글을 북마크 해두시는 것을 추천드립니다. 코드 원리 revenue_unit_wrap, adsbygoogle 클래스가 달려있는 광고를 display: none을 통해 제거합니다. adsbygoogle 클래스의 경우 인라인 스타일을 이용하여 display 옵션을 주었기 때문에 css 최상위 우선순위 important을 주었습니다. 적용 예시 광고 제거 된 글: 5년차 네이버 면접관이 말하는 함께하고 싶은 개발자 광고가 있는 글: [한빛미디어 서평단] 헤드퍼스트 자바 - 자바로 여는 무한한 객체지향 세계

생각 정리2024. 3. 14. 17:045년차 네이버 면접관이 말하는 함께하고 싶은 개발자

수익창출하지 않은 글입니다. 문제 시 삭제하겠습니다. 질문 내용: https://youtu.be/3aokY48UZkk 면접관 소개 스타트업 인턴 1.5년차 네이버 5년 근무(3년 정직원, 1.5년 팀장) 면접관으로 활동 인터뷰 질문 면접관 경험 상 좋아하는 개발자의 특징은? 이런 사람은 뽑고싶다: 엔지니어랑 긱(Geek)한 사람. 대부분 이런 사람들이 실력이 좋기 때문에 스타트업에서 바로 일할 수 있어서 좋음. 원 질문 대기업의 경우, 신입은 키워서 쓴다. -> 코딩테스트, CS공부 이런 사람과는 같이 일하기 싫다: 신입인데 가술 스택이 k8s, Redis, Kafka, MSA, 아키텍처 등인데 질문 했을 때 제대로 답을 하지 못하는 사람, 겉멋이 많이 들었다고 생각되어 신뢰할 수 없음. 많은 기술을 사..

image