전체 글

전체 글

    테스트를 통한 코드 보호

    레거시 코드, 빈약한 모델 구조의 프로젝트를 파악하기란 무척이나 어렵다. 레거시 코드를 리팩토링하는 건 더 어렵다. 어떻게 리팩토링을 시작해야 할까? 최선의 방법은 테스트 코드다. 테스트 코드란? 기능을 검증하는 코드를 테스트 코드라 한다. 테스트에는 단위 테스트, 통합 테스트, 인수 테스트가 있다. - 단위 테스트 : 기능 별로 테스트 진행, 필요한 부분만 따로 진행할 수 있다. - 통합 테스트 : 외부 모듈을 묶어서 진행, 단위 테스트에서 발견하지 못한 에러를 발견할 수 있다. - 인수 테스트 : 시스템을 대상으로 검증, 최대한 운영과 흡사한 환경에서 진행한다. 레거시에 테스트 코드를 작성하는 이유? 테스트 코드를 통해 레거시의 여러 가지를 파악할 수 있다. - 도메인 파악 : 레거시 코드를 통해 무..

    10월 1주차 회고

    지난주에 있었던 일 지난주를 간단히 정리하자면 다음과 같은 일이 있었다. - 우테캠프로 3기 프리코스 진행 - 사이드 프로젝트 모임 - DDD 정리 포스팅 - 함께자라기 애자일로 가는 길 읽기 - 백신 2차 접종. 우테캠프로 3기 프리코스 지난주 가장 많이 시간을 투자했던 우테캠프로 3기 프리코스 진행이다. 1주차, 숫자야구게임을 진행했다. 2주차, 자동차경주를 진행했다. 상반기 우테캠프로 2기 프리코스와 같은 문제였지만, 이전과는 다르게 라이브러리와 통합 테스트 코드를 제공한다. 제약사항 중에 통합테스트코드가 통과한다는 조건이 추가되었다. 아마 2기 때 다양한 수백명의 코드 때문에 변별력을 늘리기 위해 추가한 거 같다. 처음엔 의문이였다. "어떻게 미리 짜여진 통합 테스트 코드를 통과하지?" "통합 테..

    레거시 코드, 빈약한 도메인 모델(Anemic Domain Model)

    이전 시간에 잘못된 소프트웨어를 언급했었다. 이번에는 잘못된 소프트웨어를 지칭하는 대표적인 용어 레거시 코드를 간단히 알아보고 그중 하나인 빈약한 도메인 모델을 알아보려 한다. 레거시 코드 레거시란 용어를 말하면 누구나 다음과 같이 비슷한 생각을 할 것이다. - 매우 악취가 풍기는 코드 - 파악하기 힘든 코드 - 의존성이 매우 강하게 결합된 코드 - 전혀 의미를 알 수 없는 변수명과 함수명 - 큰 진흙 덩어리 - 테스트코드 작성하기 두려운 존재 - 기타 등등 즉, 이해할 수 없고 수정하기도 힘든 코드를 뜻하는 경우가 많다. 이런 레거시 코드의 특징은 새로운 기능이 추가될수록 점점 감당하기 어려워진다. 하지만 레거시 코드를 기피할 수 없다. 언젠간 극복해야할 과제다. 빈약한 도메인 모델 (Anemic Do..

    도메인 주도 설계(Domain Driven Design)란?

    도메인 주도 설계(Domain Driven Design, DDD)를 도입하는 회사나 DDD 경험 있는 개발자를 구하는 모집 공고가 흔하다. 커뮤니티 게시판에도 DDD 스터디 모집글이 보이고, 아는 지인들도 DDD 스터디 진행하거나 찾고 있다. DDD가 무엇이고, 많은 회사와 개발자들이 매달리고 있을까? 우선 도메인이 등장한 배경부터 알아보자. 왜 도메인 주도 설계인가? 레거시는 이해할 수 없는 코드가 덕지덕지 있는 것을 경험해봤을 거다. 존재 이유를 모르는 코드 수많은 분기문이 있다. 이러한 형태는 새로운 요구 사항이 추가되거나 버그가 발생했을 때 해당 메서드에 코드가 여러줄이 증가하는 걸 볼 수 있다. 또한, 비즈니스 규칙은 자바뿐만 아니라 자바스크립트, SQL에도 구현되어 있으며, 코드가 아닌 운영 ..

    9월 회고록 및 10월 목표

    9월 한 달 동안 무엇을 했는가? 지난 회고를 통해 9월의 목표를 크게 2개로 잡았지만 9월 초에 우테캠프로 3기 모집이라는 메인 목표가 추가되었다. 그리고 진행중인 스터디가 있다. - DDD 세레나데, 매주 화요일 19시 30분 - 사이드 프로젝트, 매일 틈틈이 진행 중. - 우테캠프로 3기, 9월 15일~9월 29일까지 지원받음 - 오브젝트 스터디, 2달 넘게 진행된 스터디 마무리 - 블랙커피 블로그 스터디, 매주 월요일 22시 - 객체지향 스터디, 매주 토요일 20시 - 우아한유스방 스터디, 과제 형식과 피드백 하나씩 풀어보자. 많은 걸 알려준 DDD 세레나데 (매주 화요일 19시 30분) DDD(Domain-Driven Design) 세레나데 edu.nextstep.camp DDD 세레나데를 통해..

    8월 회고록, 번뇌

    공부가 안되던 한달 8월에 진행했다고 느낀건 DDD 세라나데 교육과 사이드 프로젝트뿐이다. 교육은 지식을 강제로 주입받아서 진행했다고 느낀다. 사이드 프로젝트는 여러 회의를 진행한 결과 방향성을 잡고 진행중이다. 그 외에는 뭔가 진행된 내역이 없다. 책을 읽어도 이전보다 오래 걸리고 목표도 제대로 진행되지 않는다. 집중을 한다 생각했지만 멍때리는 시간이 많았다. 무엇이 문제인가? 다양한 요소가 있지만, 가장 큰 것은 무지성 문어발로 여기저기 발을 담궜다는 거다. 현재 진행중인 내역이다. 사이드 프로젝트 DDD 세라나데 교육 다양한 서적 (책이 쌓여간다) 오브젝트 스터디 객체지향? 스터디 면접 & 이력서 종합 스터디 다양한 인강 (인강이 쌓여간다) 기타 등등 그냥 한두개만 기준으로 진행할껄 너무 많이 저질..

    8월 1,2주차 회고록

    8월 1일부터 어제까지 휴식기... 소제목 그대로 2주간 쉬는 시간이었다. 2주간 뒤죽박죽 독서실에 내키는 대로 있었다. DDD 교육을 진행하는 날에는 코딩하는 시간 때문에 독서실에 좀 더 있었을 뿐 대체로 쉬엄쉬엄 간단히 진행만 했다. 매일 같은 생활만 지속되다 보니 지치고 의욕이 어느 정도 떨어지고 더위까지 겹치니 더 힘들어진다. 7월 회고 및 8월 목표에 계획을 세웠지만 제대로 못 지켰다. 그나마 DDD 교육을 뒤처지지 않고 일정대로 따라잡은 게 위안 삼는다. 그래도 쉬엄쉬엄 진행한 내역 2주간 진행한 건 다음과 같다. 가상 면접 사례로 배우는 대규모 시스템 설계 기초 9장까지 읽음 DDD 교육 첫 번째 미션 진행 (Mockito, @WebMvcTest, MockMvc 등 테스트 도구 학습 및 사용..

    스프링 MVC 기본 기능 - HTTP 메시지 컨버터, 요청 매핑 핸들러 어댑터 구조

    인프런 김영한 님의 스프링 강의이며, 섹션 6 - 스프링 MVC 기본 기능을 정리하는 시간이다. 자세한 설명이 궁금하면 수강을 권장한다. 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원 www.inflearn.com HTTP 메시지 컨버터 뷰 템플릿으로 HTML으로 응답하는 게 아니라, HTTP API처럼 JSON 데이터를 HTTP 메시지 바디에서 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다. 스프링 MVC는 HTTP 요청과 응답에 HTTP 메시지 컨버터를 적용한다. - HT..