덕토피아

· 개발서적
http://www.yes24.com/Product/Goods/97584812 개발자가 코딩만 잘하면 된다? 고객의 요구사항 분석을 제대로 글로 옮기지 못한다면 무슨 일이 발생할까? 장애 발생 시 공지문을 작성해야 하는데, 빠짐없이 정확하게 작성할 수 있을까? 오류와 확인 메시지는 제대로 쓸 수 있을까? UI에 들어가는 텍스트는? 소프트웨어 제품 출시 후 사용자 가이드는 어떻게 만들어야 할까? 개발자는 코딩 영역 외에도 이렇게 수많은 글쓰기 문제에 직면한다. 이를 위해 저자는 테크니컬 라이터로서 20년 이상 개발자와 함께하며 얻는 핵심 노하우를 이 책 한 권에 정리하였다. 옆에 두고 항상 참고할 수 있는 개발자만을 위한 글쓰기 가이드이다. 테크니컬 글을 작성하고 싶다면, 도움이 될 책입니다. 글을 자주 ..
· 이것저것
참 다사다난한 한 해였습니다. 회고 포스팅을 12월 초부터 계획하였는데, 정말 달의 끝의 끝까지 가서야 쓰게 되었네요. 저의 미루기 스킬에 또 한 번 찬사를 보냅니다. (_ _) 회고 글은 처음 작성해 봅니다. 습관이 되어서 매 년 작성을 할 수 있게 되면 좋겠네요. 많은 분들의 회고 포스팅과 퍼블리의 회고 템플릿을 참고하였는데, 카테고리 별로 글을 작성해 보려고 합니다. 좋았던 점은 파란색으로, 아쉬웠던 점은 빨간색으로 표시하였습니다. [일과 커리어] 원하는 회사에 이직하기 올해의 가장 큰 사건 중 하나가 아니었을까요? 여러 가지 이유로 정든 회사를 떠나서 새 회사로 가게 되었고, 6개월이라는 길다면 길고 짧다면 짧은 기간 동안 적응하느라 정신없이 보냈었습니다. 그래서 깃허브 잔디 관리라던지 포스팅에 ..
· 이것저것
5월에 시작한 글또가 벌써 마지막 글 제출일이 다 되었네요. 그래서 오늘은 글또 7기를 겪으면서 이루었던 점, 아쉬웠던 점, 그리고 앞으로 이룰 것을 간략하게 적어보도록 하겠습니다. 글또 7기를 참여하면서 글또 7기에 참여한 동기는 다음과 같습니다. 글또 7기 다짐글 에서 볼 수 있습니다. 나태한 나를 채찍질 하면서 초심을 되찾기 위하여 다른 많은 개발자 분들과 좋은 관계를 구축하기 위해 우선 1번 항목을 달성했는지 본다면, 초심까지는 아니지만 그래도 미제출 없이 약 5개월을 잘 달려온 것 같습니다. 사실 여기서만 얘기하는 건데, 처음에는 “한 번도 PASS권 사용하지 않고 달려봐야지!”란 거대한 다짐을 가지고 시작하였습니다. 그런데 결과는…(PASS 2회권 모두 사용). 꾸준히 글 쓰시는 분들 정말 모..
Spring Boot를 사용하면 대부분 사람들이 가장 먼저 배우는 MVC 패턴! 가장 기초적인 패턴이라 인터뷰 질문에 많이 나오기도 합니다. 오늘은 그 MVC 패턴에 대해서 알아보도록 하겠습니다. MVC 패턴의 구조 동작 방식은 간단합니다. 쉽게 설명하기 위해 학생이 과제 게시판을 보고 싶다고 가정하겠습니다. 1. 학생이 컨트롤러에게 과제 게시판 조회를 요청한다. 2. 컨트롤러는 모델에게 과제 게시판 데이터들을 달라고 요청한다. 3. 모델은 가져온 데이터들을 컨트롤러에게 전달해 준다. 4. 컨트롤러는 가져온 데이터들로 뷰를 만들어서 사용자에게 UI로 전달해준다. 여기서 나오는 컨트롤러, 모델, 뷰가 바로 MVC의 Model, View, Controller 입니다. 예시에서 파악할 수 있다시피, 모델은 데..
MVC 패턴은 Spring을 처음 접할 때 가장 먼저 배우는 기초적인 패턴입니다. 그 구조에서 메서드와 메서드 간에 데이터를 전달할 때 DTO, 또는 VO의 형태를 사용합니다. 그러나 이름마저 비슷한 이 둘은 도대체 어떤 차이가 있는 건지 처음 배우는 입장에서는 헷갈리기만 합니다. 오늘은 DTO와 VO의 차이에 대해서 알아보도록 하겠습니다. DTO란? 우선 DTO는 Data Transfer Object(데이터 전송 객체)로 계층 간에 데이터 교환을 위해서 사용하는 객체입니다. 여기서 계층이란, MVC 패턴의 Controller, Service, Repository를 뜻합니다. DTO는 로직을 갖고 있지 않은 순수한 데이터 객체 이며, 안의 field가 변해도 되기 때문에 보통은 Getter와 Setter..
Java 8 버전부터 자바의 Stream을 지원하기 시작하였습니다. Stream이란 컬렉션에 저장되어 있는 원소들을 하나씩 돌아가면서 처리할 수 있는 패턴입니다. Stream은 람다식과 함께 다양한 편의 메서드들을 제공하여 조금 더 코드를 간결하고 아름답게 작성할 수 있게 많은 도움을 주고 있습니다. 그래서 가독성이 좋다는 이유로 for문을 대신하여 stream을 많이 사용하기도 합니다. 그러면 stream과 for문은 어떤 차이가 있을까요? For문 이란? 이미 알고 계시겠지만 노파심에 정리하자면, for문은 안에 for( 초기화; 조건; 후처리 )의 내용을 적어서, 반복문을 만들기 위해서 사용하고 있습니다. 예시로 위의 이미지는 1부터 5까지의 숫자를 가지고 있는 리스트를 차례대로 출력을 하고 있습니..
Java로 프로젝트를 진행하려면 우선 어떤 버전으로 만들 것인지(모든 언어가 그렇지만) 정해야 합니다. Java는 대표적으로 8 버전부터 혁신적으로 언어가 변화했다고 여겨지고 있습니다. 그러나 구체적인 버전 별의 세세한 차이까지는 알지 못하는 사람들이 대부분입니다. 이번 포스팅에서는 Java 1.8 이전 부터 최근에 릴리즈 된 Java 17 버전까지의 차이점을 다루어 보겠습니다. Java 1.8 이전 가장 혁신적으로 바뀌어진 변경점들이 Java 8 에서 나타났기에, 그 이전 버전들은 모두 통으로 묶어서 알아보겠습니다. 우선 Java는, 썬 마이크로 시스템즈에서 C++의 단점을 극복하고자 만든 언어입니다. 그 단점이라 함은, 메모리 할당/해제의 복잡함과 다중 상속으로 인한 실수 유발 등을 말합니다. 항상 ..
· DevOps
프로젝트를 진행할 때, 주로 몇 명이서 작업을 하나요? 혼자만의 프로젝트를 진행할 수도 있겠지만, 대부분은 본인을 포함한 두 명이상으로 인원이 구성될 것입니다. 그리고 여러 명이 개발로 협업을 해야 할 경우, 대부분은 git을 사용하여 진행합니다. 브랜치를 통한 효율적인 협업을 진행할 수 있다는 것이 git을 사용하는 큰 이유입니다. 저도 이전 회사에서는 commit, push, pull 등의 아주 기본적인 명령어들 밖에 사용하지 않았지만, 이직을 한 뒤에는 초면인 git 명령어들을 많이 만나게 되었고 지금은 친해지려고 노력 중에 있습니다. 그들과 절친이 될 수 있게, 이번 포스팅에서는 협업할 때 쓰이는 여러 가지 Git 명령어들에 대해 알아보겠습니다. [stash & apply] commit을 사용하지..
백엔드 개발자라면 누구나 들어봤을 만한 개념, SOLID. 기술 면접을 위해 달달 외워보지만 개념도 어렵고 심지어는 긴 영어단어로 이루어져 있어서 이름 외우기도 힘듭니다. 저도 실제로 면접 질문으로 나온 적이 있었는데, 그때 이렇게 대답했습니다. "S가 단일 책임 이고, O가 아... L이 리스코프 치환 어쩌고였는데 생각이 나지 않네요...." 지금 생각하면 아찔한 답변이네요. 자주 나오는 빈출 질문이어서 외우기는 했는데 실제로 답변을 하려니까 머리가 새하얘 졌었습니다. 물론 이 질문 하나로 당락이 결정되지는 않겠지만 외우기 힘든 개념을 술술 말한다면 좋은 인상을 남길 수는 있겠죠. 같은 실수를 반복하지 않기 위해, 그리고 여러분은 저와 같은 실수를 범하지 않게 하기 위해 이번에는 SOLID 원칙에 대해..
Spring Boot 프로젝트를 빌드할 때, Maven과 Gradle 중 하나의 빌드 툴을 정하여 사용하게 됩니다. 만약, Gradle이라는 빌드 툴을 사용할 경우, build.gradle이라는 파일이 생기게 됩니다. 해당 파일에서는 gradle 빌드 작업에 필요한 여러 가지 옵션, 설정, 동작 등을 정의해주며 의존성 라이브러리 또한 관리해줍니다. 의존성을 관리해주는 dependency 프로퍼티는 굉장히 다양한 옵션을 가지고 있습니다. implementation, compileOnly, runtimeOnly,... 등. 일부 종속성은 소스 코드를 컴파일하는 데 사용되는 반면, 다른 종속성은 런타임에만 사용할 수 있어야 합니다. 이번 포스팅에서는 의존성 옵션들 각각의 특징에 대해 알아보겠습니다. Java의..