분류 전체보기 379

테스트 주도 개발(TDD)의 적용

코드의 우아함을 신경쓰다보면, 코드 한줄을 짜더라도 이게 잘 구조화된 코드인가 하고 한참을 고민하게 되는데, 이게 좋은 방식인가?그렇다고 아무렇게나 막 짜니, 코드가 지저분해지고 리팩토링하긴 무서워진다.그래서 TDD를 학습했다.후기TDD 적용 방법먼저, 요구사항을 제대로 이해하자.TDD로 일단 돌아가게 만들고, 중복을 제거하자.삼각측량 기법을 적극 활용하자.모든 중복을 제거하기 전까진 테스트 코드를 통과한 것으로 치지 말자.리팩토링을 수행하지 않으면, 단편적인 기능 구현의 연속만 하게되고, 결과적으로는 유지보수하기 어려운 '단순하고 파편화된' 코드 덩어리가 만들어진다.탑다운/바텀업 둘중 하나가 정답은 아니다.막힐때마다 TDD도 해보고, OOD도 해보고 번갈아가며 접근해야 한다.한가지 방식에 얽메이지 말기..

[모-던한 프로그래밍] 람다/스트림/Optional, 지연 평가와 flatMap

본 글은 스트림에 어느정도 익숙한 사용자를 대상으로 작성된 게시글로, IDE를 통해 어찌저찌 사용하는 수준의 개발자를 대상으로 작성된 게시글입니다.IDE가 추천해주는 기능을 넘어서, 능동적으로 스트림을 사용하기 위한 기본 동작 구조를 살펴봅시다.목차스트림(Stream)이란?람다 vs 익명 클래스스트림의 Lazy Operationmap vs flatMapOptional기본형 특화 람다/스트림그 외 주요 기능스트림(Stream)이란?스트림의 정의데이터의 흐름을 추상화해서 다루는 도구로, 컬렉션 또는 배열 등의 요소들을 연산 파이프라인을 통해 연속적인 형태로 처리할 수 있게 해줍니다. 이때, 연산들의 체이닝을 적극 활용합니다. 파이프라인 (컴퓨팅) - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과..

두려움 인정하기. - 25년 6월 1주차 회고

솔직하게 말하자면, 나의 가장 큰 컴플렉스는 “두려움”이다. 나의 회고는 대부분이 이 두려움을 컨트롤하기 위한 방향으로 나아가고 있다. 겁이 나면, 생각이 많아지고, 조금 더 많은 걸 알아야 한다고 자신을 몰아붙인다.그렇게 이번주도 조금 더 열심히 하다가, 켄트 백의 “테스트 주도 개발”을 읽으면서 느낀 인상깊은 글귀가 있어 이 회고를 작성한다. 테스트 주도 개발 - 예스24Test-Driven Development: By Example아름다운 코드와 즐거운 개발을 위한 테스트 주도 개발테스트 주도 개발은 학계와 업계에서 많은 주목을 받아온 프로그래밍 방법으로, 여러 연구 논문과 실례를 통해www.yes24.com 켄트 백의 “테스트 주도 개발”에서, 켄트 백은 두려움을 두가지 종류로 정의한다. 비합리적..

[객체지향 패러다임] OOD와 GRASP 패턴, 웹 개발에서의 객체지향 적용

이 게시글을 검색해서 탐색했다는 것은, 객체지향 패러다임 중에서도 OOD와, 그 중간에 사용되는 GRASP 패턴의 목적에 대해 찾아보고자 했다고 가정한다.실제로 코드를 짜면서 쉽게 알게되는 부분을 제외하고, OOD(Object Oriented Design) 관점에서의 객체지향에 대해 설명하도록 하겠다.다소 추상적이고 이론적으로 들리지만, 그만큼 의식적이고 체계적으로 적용하게 되면 일관성 있는 코드가 나온다.웹 구현에서 객체지향적인 코드는 어떻게 나오는지에 대한 고찰을 담았다.권장하는 이전 글 - SOLID 원칙목차OOP(Object-Orientied Paradigm)이란?OOP에서 이야기하는 "책임"이 무엇인가?분석 - OOA설계 - OOD설계 - Interaction Diagram적절한 책임의 할당 -..

효율적으로 배우기: 백면서생, 주먹구구가 되지 않도록 - 25년 5월 4주차 회고

효율적으로 학습하려면, 이론이 진리일까? 아니면, 경험과 실전이 진리가 될까?이론, 지식장점응용에 강하다.단점너무 많은 것들을 알아야 한다.지금 내가 알아야 할 것 외에, 쓸데없는 것들을 너무 많이 알아야 한다.경험, 실전장점이론만으로는 알지 못했던 깊은 지식을 알 수 있게 된다.단점내가 경험한 것만이 전부라고 알게 되고, 좁은 시야를 갖게 된다.둘 중 하나만 있으면 추상적이게 된다.둘 다 있어야 구체화가 된다.작업 주도 학습이미 학습된 부분에 대해서는 작업 주도 학습 적용하기작업을 통해 학습하는 것.무작정 이것저것 해봤자, 체계적인 학습은 불가능하다.명확한 목표, 깊이 있는 이해, 의도적인 적용, 그리고 꾸준함이론+실습 둘 다 있어야 진짜 “알고 있다”라고 말할 수 있다.일단 이것저것 시도해본다효율화를..

도메인 주도 설계(DDD)

사전 지식 - GRASP 패턴도메인 주도 설계(Domain-Driven Design) 란?도메인 주도 설계(Domain-Driven Design)는 소프트웨어의 핵심 비즈니스 도메인에 집중하여 복잡한 도메인 지식을 코드의 도메인 모델로 표현하고 발전시키는 설계 철학이다.DDD는 복잡한 비즈니스 로직을 도메인 모델(객체 모델)로 추상화함으로써 비즈니스에서 발생하는 현실과 코드 간의 간극을 줄인다. 이를 위해 도메인 전문가와 개발자는 공유하는 보편 언어(Ubiquitous Language)를 구축하여 요구사항 분석부터 설계, 구현까지 동일한 언어로 소통한다. 이 과정에서 모델은 지속적으로 정제되고 리팩토링되어, 요구사항의 의도를 코드에 정확히 반영하게 된다. DDD는 왜 사용하는가?전통적인 데이터 중심 설..

[SuperBoard] 댓글 수 조회 쿼리 최적화

요약게시판 기능을 실제로 서비스한다고 가정할 때, 댓글 수 표기 로직을 최적화 수행단순 group by + 집계함수 + limit/offset의 문제점 파악실행계획 분석최종 결정 - from 절 서브쿼리 + index커밋 및 수정 내역 PR - 링크 Board/feature/41 댓글 수 조회 최적화 by GoGradually · Pull Request #51 · GoGradually/SuperBoard관련 이슈 close #41 다음 링크를 참고해주세요. 댓글 수 조회 쿼리 최적화 Summary by CodeRabbit 신규 기능 MariaDB 데이터베이스 연결을 위한 드라이버가 추가되었습니다. 게시글 및 댓글 데이터를 위한github.com 서론기존에 구현해둔 게시판 기능을 좀 더 최적화해보기 위해,..

"잘 쉬기" - 25년 5월 3주차 회고

“잘” 쉬기.계획 없는 휴식을 피하자.쉴 계획 또한 수립해둬야 한다.돌발 휴식이 하고싶어지지 않도록, 컨디션 관리 잘하자.왜?1. 결정 피로 -> 결국 결정은 해야 한다. - 계획없이 쉬면, 쉬면서도 결정해야 한다.2. 심리적 분리 + 복귀 충격 완화 - 쉴 계획 + 복귀 계획이 모두 있어야 마음 편히 쉬고 복귀할 수 있다. - 계획 없이 쉬면, 역체감 대처가 되질 않는다.의지와 노력이 아닌, 시스템으로 움직여야 피로하지 않다.애자일하게 움직이기 - 돌발 상황의 대응둔함변화를 예상하지 않는 체계조급+경솔함체계 없이 변화하는 상황.충분한 고려 없는 대처민첩함변화에 대한 대처와, 그 대처를 평가할 수 있는 체계침착함은 시행착오에서 보인다.골랐더니 정답이었어요 ← 조급함의 신호모든 선택 시점에..

[Gradle] build.gradle, 그리고 settings.gradle

본 글은 멀티모듈 빌드와 관련된 gradle의 핵심 기능을 다룹니다.단순 라이브러리 의존용으로 사용하는 걸 넘어, 직접 모듈을 만드는데 필요한 기본 지식을 다루니, 관심있다면 docs를 직접 읽어보시는것도 추천드립니다.주요 주제gradle의 디렉토리 구조Project Root Directory멀티 모듈의 구조Gradle의 빌드 라이프사이클settings.gradlebuild.gradleGradle의 프로젝트 루트 디렉토리gradle은 다음 두가지 디렉토리를 사용한다.Gradle User Home DirectoryProject Root DirectoryGradle User Home DirectoryGradle의 글로벌 설정, 초기화 스크립트, 캐시 및 로그 파일이 저장된 디렉토리이다.자세한 내용은 해당 문..