금년 4월 즈음에 다크모드를 대응하여 이미지 색상을 반전하는 기능을 구현하였었는데요. css를 활용한 다크모드 이미지 자동 대응소개다음 영상을 보시면 무슨 말인지 쉽게 이해할 수 있습니다.아이디어https://github.com/joonas-yoon/boj-extended?tab=readme-ov-file GitHub - joonas-yoon/boj-extended: 백준 온라인 저지(BOJ)를 확장된 기능과 함께ko.puleugo.dev 다크모드를 굉장히 좋아하는 사람 중 하나로써 제 블로그는 다크모드에 최적화된 환경으로 만들고 싶었습니다. 이는 현재 가장 후회하는 블로그 커스터마이징입니다.재앙의 시작뭔가 틀렸다는 것을 느낀 것은 동아리 사이트에 블로그 탭을 구현할 때 였습니다. 크롤링한 게시글의 이..
당신의 게시글을 가치를 44배 향상시켜주는 서비스초기 기획 글베타버전 개발기공식 문서깃헙 레퍼지토리100% AI, 적용 결과물프로젝트 소개계왕권은 자동화 및 게시글 번역 배포 서비스입니다. 대표적 선진국 9개국의 인구수는 한국의 약 44배이므로, 단순 계산으로 당신의 블로그는 44배 이상의 영향력을 얻을 수 있습니다. 왜 개발하게 되었는가?저는 프로그래밍을 시작한 이후부터 국내 시니어 개발자들의 경험을 얻기 위해 강연, 스터디를 참여하고자 노력했습니다. 그분들의 공통된 조언이자 후회는 프로그래밍에 쏟은 노력을 외국어 학습에 쏟았다면 더 많은 기회를 얻을 수 있었을 것이라는 것이었습니다. 구글, 페이스북 같은 IT 기업의 헤드헌터에게 연락이 오더라도 영어능력의 부재로 인해 기회를 포기하는 경우도 있었으며,..
길고 험난했던 베타버전 출시꽤나 막혔던 프로젝트였습니다. 새로운 프로젝트를 하는게 오랜만인지라 너무 추상적인 계획만 세우고 작업을 들어가서 구체화 과정에서 멀리 돌아간 작업들이 굉장히 많네요. 대표적인 것들만 정리해보겠습니다. 1. 플랫폼에 의존하는 번역글 Link?처음 생각했던 번역 게시글 업로드 후 본문을 수정하여 JS Injection 방식을 사용한 Link 방식은 문제가 많았습니다.우선, 게시글 본문을 수정해야 하는 문제가 있습니다. 대부분의 블로그 플랫폼(Medium, Dev.to, Qiita, Tistory)의 API는 게시글 수정 기능을 지원하지 않으며 수정기능을 지원한다고 하더라도 JS Injection을 막아둔 경우가 대부분이었습니다. Tistory의 API를 분석하여 Reverse E..
발표 영상 소개안녕하세요. 왁타버스 게임즈의 백엔드 팀의 임채성입니다. 이번 글에서는 저희 팀의 오랜 과제였던 '구글 스프레드시트 동기화 메서드'의 리팩터링 과정과 성능 개선 방법을 공유하려고 합니다. 왁타버스 게임즈와 백엔드 팀의 역할먼저 왁타버스 게임즈가 어떤 서비스인지 설명드리고 개발팀에서 달성해야하는 목표를 설명드리겠습니다. 저희 서비스는 유튜버 우왁굳의 메타버스 컨텐츠인 왁타버스의 팬 게임 ⋅ 어플리케이션 플랫폼입니다.팬 게임과 랭킹 그리고 도전과제 등 다양한 기능스프레드 시트로 어드민 페이지로 사용하기 때문에 DB와 데이터 일관성 제공24시간 무중단 운영팬 게임⋅어플리케이션의 랭킹과 다운로드 수 및 조회수 통계 제공이러한 특성들을 고려했을 때 저희팀은 B2B와 디지털 플랫폼 비즈니스로 서류작업..
이 책은 자바스크립트 디자인 패턴을 심도 있게 탐구하며, 실무에서의 적용 방법을 상세히 다루고 있다. 목차를 보면, 디자인 패턴의 역사적 배경부터 시작하여, 자바스크립트 환경에서의 구체적인 구현 방법과 최신 트렌드까지 체계적으로 설명하고 있음을 알 수 있다.초반부는 디자인 패턴의 개념과 역사적 배경을 다루며 독자에게 기본적인 이해를 돕고 있다. 디자인 패턴의 정의와 일상생활에서의 활용 사례를 통해 독자는 이론을 실무에 어떻게 적용할지 생각해볼 수 있다. 특히, 패턴성 검증과 프로토 패턴을 논의하면서 패턴의 진정한 의미를 강조하는 점이 인상적이다.중반부로 넘어가면서, 구체적인 패턴의 구조와 작성 방법을 설명하며 실용적인 지식을 전달한다. 자바스크립트의 안티 패턴을 소개하고, 최신 자바스크립트 문법과 기능과..
참여 계기재밌어보였다. 새로운 사람들을 사귀고 대화좀 하고 싶었다. 준비하면서첫 해커톤 참여라 원활한 협업을 위해 보일러 플레이트 코드를 준비하려고 했다. 그러면서 '이상적인 개발자의 해커톤 준비 방법'이라는 글도 쓰고, 이전 주는 거의 해커톤 준비에만 투자했다.사람들이 낯을 많이 가렸다. 소통을 위한 디스코드는 개최 일주 전부터 만들어졌는데 아무도 자기소개를 포함한 채팅 치지 않았다. 그래서 분위기를 띄우고 싶어서 자기소개를 길게 써봤다.해커톤 운영경험이 있다보니 열심히 준비하셨을 GDSC 운영진분들을 생각해서 굳이굳이 더 말눈광스럽게 작성한 것도 있다..팀 매칭팀 매칭은 GDSC 운영진에서 매칭해준다. 랜덤이지만 참가자 모두 좋은 분들이라 재미있었음.우리 팀은백엔드가 셋이었다. 나, 민주님, 윤정님..
`알파 버전 개발중 GitHub - puleugo/kablog: Automated Translation Development Post Distribution ApplicationAutomated Translation Development Post Distribution Application - puleugo/kabloggithub.com계왕권이 뭔데..최근 취업 불황으로 인해 국내 개발자들의 평균 스펙이 향상되었습니다. 그러나 해외 블로그의 기술적 난이도는 국내보다 낮습니다. 예시로 일본의 대표적 기술 블로그 플랫폼인 Qiita 인기 게시글을 보면 이를 확인할 수 있습니다. (08/19 기준)【완전판】 이것 1개로 React의 기본을 마스터할 수 있다! 초보자 튜토리얼!【AWS 컨테이너 입문】간단한 Py..
서론KAIST GDSC에서 개최하는 스파클링톤에 참여하게 되었다. 모교에서 해커톤을 2회 주최한 경험은 있어도 100% 참여자로써의 해커톤 경험은 처음이라 많은 기대를 하고 있다. 해커톤 개최 경험자로써 개발자의 이상적인 준비를 이야기해보고자 한다.협업에 관한 내용도 개발 실력보다도 아주아주 중요하지만 개발 이야기만 해도 할 말이 많기 때문에 이번 글에서는 생략하겠다. 해커톤 참여자는 이래야 한다.해커톤은 스펙보다는 재미, 협업 능력 향상, 무료 피자와 콜라를 목표로 하는 것이 옳다. 번뜩이는 아이디어를 빨리 구현해야 하는데 대용량 트래픽, 확장성 같은 경험을 채우고 싶어서 해커톤에 참여하는 것이라면 그다지 좋은 팀원으로 평가되지는 않을 것이다.그렇다면 어떤 개발자가 좋은 해커톤 팀원일까? 의존하지 않아..
서론원문: What is domain logic? | Vladimir Khorikov 도메인 로직 vs 비즈니스 로직?우리는 코드를 작성하기 전에 두가지를 생각합니다. 해결하고자 하는 문제와 해결 방안입니다. 여기서 실생활에서 해결하고자 하는 문제가 바로 도메인(a.k.a. Problem Domain, Core Domain)이며 해결방안을 비즈니스 로직(a.k.a. Domain Logic, Business Rule, Domain Knowledge)이라고 부릅니다.알고보면 쉽지만 찾아보지 않으면 대화조차 안되는 내용이라 학생 입장에는 슬프다. 결론은 도메인 로직과 비즈니스 로직은 동의어이며 위와 같은 의미라는 것만 알면 된다. 도메인 로직하지만 문제 해결방안(이후 도메인로직)만이 코드에 있으면 너무 좋겠..
서론티스토리는 기본적으로 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 클래스를 제거하였습니다.
서론어떤 코드가 유닛 테스트를 작성할 가치가 있는 코드인지 판별하는 방법에 대해 이야기합니다.(어그로 죄송합니다.) 가치있는 테스트란?단순히 테스트가 많이 작성되어 있는 것이 결코 좋은게 아닙니다. 여러분이 만약 프라모델을 조립한다고 가정했을 때, 핵심만 잘 정리된 설명서와 별로 중요하지 않은 내용이 포함되어 있는 설명서 중 어떤 문서가 읽기 편하신가요? 아마도 무조건 전자일겁니다.테스트 또한 문서이기에 핵심만 명확하게 작성되어 있는 것이 훨씬 좋습니다. 테스트의 가치란?그렇다면 우리가 테스트의 우선순위가 떨어지는 코드에는 무엇이 있을까요? 첫번째로 너무 간단한 로직들도 있을거에요. 굳이 문서를 읽지 않아도 이해할 수 있으니까요. 두번째로는 의존객체가 많은 객체들은 테스트하기에 너무 어려울거에요. 실제..
서론1부는 이론편, 2부는 실습편입니다.트랜잭션을 통해 테스트 격리성을 가져가고 싶었습니다.단, TypeORM에는 세션을 관리해주지 않아, 하나의 테스트만 실행해도 여러개의 세션이 연결됩니다.위 제약사항에 대한 접근방식 + 해결방법을 공유하겠습니다. 트랜잭션으로 테스트 격리성을 확보한다는게 무슨말이야?각 테스트 간의 영향을 끼치지 않도록 하는 테스트 방법입니다. 크게 두가지 전략이 있습니다.트랜잭션 전략: 테스트 시작과 끝에 트랜잭션을 시작하고 롤백하는 전략클린업 전략: 테스트 종료 후 DB의 모든 행을 제거하는 전략 둘다 처음 들어본다면 향로님의 재미있는 글이 있으니 추천드립니다. (테스트 데이터 초기화에 @Transactional 사용하는 것에 대한 생각, 향로, 2023. 11. 26.)befor..
서론Classicist와 Mockist 방식의 테스트 방식, 사고방식의 차이가 정리된 글입니다.본 글은 대표적인 Classicist TDDer인 martinfowler의 'Mocks Aren't Stubs(2007)'의 글을 기반으로 두고 있습니다.본문의 예제는 TypeScript(with Jest)의 스타일로 코드를 작성했습니다. 원문은 Java(with JUnit)로 되어있으니 읽기 편하신 예제로 읽으시면 됩니다. 기본적인 테스트 살펴보기Order(주문), WareHouse(창고) 객체를 사용하는 주문 시스템 예제입니다.Order를 테스트하는 코드입니다.하지만 order.fill 메서드를 테스트하려면 WareHouse의 인스턴스를 필요로 합니다.기존 테스트 방식(Classicist)과 Mock 객체를..
취업을 준비하는 백엔드 개발자 학생으로서, '보고혁명'을 읽고 느낀 점을 공유하고자 합니다.이 책은 직장인들을 대상으로 보고서 작성의 모든 것을 다루고 있어, 업무에서 보고서 작성이 얼마나 중요한지 감을 잡게되었습니다.보고서 작성은 직급에 상관없이 모두에게 어려운 과제입니다. 어떤 내용을 어떻게 써야 할지 막막할 때가 많기 때문에요. '보고혁명'은 이런 어려움을 해결하는 데 큰 도움을 줍니다. 책의 도입부는 보고서 작성의 중요성을 강조하며 시작합니다. 필자분은 경력직 팀장이 설명하는 보고서의 역할과 실제 현장에서의 사용 사례는 매우 직관적으로 이해되었습니다. 보고서가 단순한 문서 작성이 아닌, 주요 의사결정의 근거가 되는 중요한 도구임을 알게 되었습니다. 특히, 책에서 제시하는 'B2WHEN' 방법은..
"한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다." 이 책은 관찰 가능성(observability) 엔지니어링을 주제로 하여, 단순한 모니터링과의 차이점을 심도 있게 탐구한다. 저자는 어떻게 관찰 가능성이 기술적 문제를 해결하고 시스템 이해를 증진시키는 데 중요한 역할을 하는지를 설명합니다. 특히 데이터독(Datadog)과 같은 도구를 사용하여 마이크로서비스와 분산 시스템을 효율적으로 모니터링하는 방법에 대해 설명하면서, 단순한 메트릭스로는 파악하기 어려운 복잡한 문제들을 어떻게 쉽게 발견하고 해결할 수 있는지를 보여준다.이 책은 데브옵스 엔지니어 뿐만 아니라 백엔드 엔지니어에게도 유용하다. 저자는 이미 구축된 솔루션을 사용하는 것을 권장하지만, Pinpoint와 같은 강력한 무료 툴을 사용..
소개https://k6.io/our-beliefsgrafana사의 성능 테스트 툴인 k6의 공식문서에 포함되어 있는 내용입니다. 성능 테스트에 관심이 있는 개발자 / 학생분들이 읽기 좋은 내용입니다.저는 자료 번역을 할 때 직역하지 않습니다. 필요해 보이는 내용은 추가하고 불필요하다고 생각되는 내용은 지웁니다. 원래 글을 그대로 읽고 싶으시면 원문을 읽으시는 것을 추천합니다. 간단한 테스트가 테스트를 안하는것보단 낫다.성능 테스트는 실제 클라이언트의 행동과 환경을 유사하게 모방하는 것이 좋습니다. 하지만 그것보다 중요한 것은 테스트를 수행하는 것입니다. 80:20 규칙은 상위 20%의 작업만으로 80%의 가치를 얻을 수 있으며 간단한 테스트를 통해 개선하는 것이 아예 안 하는 것보다 훨씬 좋다는 것을 ..
도파민 디톡스란도파민 디톡스(dopamine detox)는 현대사회에 흔한 도파민을 쉽게 수급할 수 있는 매개체를 소비하지 않음으로써 본업에서의 집중력, 행복감 등을 향상하는 챌린지입니다. 제가 고교시절 시도했던 게임 끊기(익명 커뮤니티에 올렸던 게시글, 게시판 내 최고 조회수)와 같은 행위를 요즘에는 도파민 디톡스라는 단어로 불리며 인기가 있는 것 같습니다. 최근 뉴스에서 초·중등학생에게 유튜브, 쇼츠 등이 문제라고 이야기하고 있습니다. 쇼츠가 건강하지는 않다는 의견에는 동의하지만 제 또래 세대만 해도 어릴 떄부터 유튜브를 접하며 자랐기에 옛날부터 문제라면 문제였는데 이제 와서 뉴스에서 떠드는게 공감이 안됩니다. 이 글에서는 7일간 도파민 디톡스를 했으며 그동안 든 생각에 대해 정리했습니다. 시작하게 ..
도입본 케이스는 ORM레벨의 에러 때문에 작성되었기에, ORM에 직접 메서드를 추가하는 접근방식을 사용했습니다.만약 Data Access Layer에 Customized Method를 추가하고 싶으시다면 TypeORM 레퍼지토리를 참조하는 클래스를 구현하세요. TypeORM 커스텀함수가 필요하게 되어 구현하게됐다. 처한 상황은 다음과 같다.발생 환경: MySQL, Mac발생 조건: upsert method를 사용하고 충돌 조건을 PK가 아닌 Key를 사용함결과: upsert signature은 Upsert를 시도한 객체를 반환하는데 ORM에서 객체를 찾지 못해 TypeORM 에러 발생#10909번 이슈 때문에 이를 해결하기 위해 TypeORM에 함수 하나를 추가해보려고 한다. 코드//custom-orm-..
인생 사는 마인드에 관한 이야기이다. 우선, 나는 철학에 대한 지식이 없다. 단순히 내 사고 방식과 유사하고 내가 옳은 사고방식이라고 생각하는 것에 대한 정리다.내가 옳다고 생각하는 것은 명량한 염세주의다. (버틀란드 러셀 왈) 염세주의는 뭐고 명량한 염세주의는 무엇인가? 우선 염세주의에 대해 설명하겠다.염세주의는 비관주의라고도 말한다. 세계는 원래 불합리하며 비애로 가득찬 곳으로 당신이 느끼는 행복이나 희열도 덧없는 일시적인 것에 불과하다고 보는 마인드다. 그렇다면 세상은 불합리할까?아니 세상은 합리적이다. 그림이 좋아 미대 입시를 준비하고 있는 친동생은 하기 싫어하는 내신공부와 입시미술을 반드시 공부해야한다. 그렇지 않으면 다른 학생들보다 더 안좋은 환경에서 공부하게 될 것이기 때문이다. 이런 불합리..
프로젝트 소개 및 요구사항 waktaverse games라는 약 30개의 팬게임과 협업하는 게임 포럼/배포 서비스입니다. 왁타버스 게임즈 | Waktaverse GamesWaktaverse Games를 통해 왁물원의 게임을 한곳에서 즐겨보세요!waktaverse.games 본 웹 사이트에는 2가지 클라이언트가 존재합니다.웹 브라우저(react)팬게임 개발자용 클라이언트(electron)각 클라이언트마다 고유의 refresh 토큰을 가지고 있어서 메서드 내부에서 처리해줘야 하는 중복 로직이 많았습니다.그래서 이번 글에서는 다음과 같은 작업을 수행해보겠습니다.클라이언트가 더 추가되도 코드의 변경이 일어나지 않도록 개선request query에 따라 service가 동적으로 할당되도록 개선 Service 동..