많은 사람이 개발 이론을 현장에 적용하는 걸 어려워합니다. 이 책은 ‘SQL에서 왜 오토커밋을 권장하지 않는지, 왜 비밀번호를 단방향 암호화 방식을 통해 저장해야 하는지’ 등 개발자들이 현장에서 갖는 수많은 의문을 해소시켜줍니다.
실무가 서툰 주니어 개발자, IT 기업 입사를 준비 중인 학생 또는 이들을 가르쳐야 하는 시니어 개발자까지 대상으로 합니다. IT 기본 개념을 폭넓고 깊이 있게 다루면서 현장에 바로 적용할 수 있는 실무 지식을 예제 코드, 다양한 그림과 표 등을 통해 알기 쉽게 전달합니다. 사수가 없는 개발자도 현장에 쉽게 적응할 수 있도록 각종 꿀팁까지 안내합니다. 데이터베이스, 보안, 자원 최적화, 클린 코드 등 고급 개발자로 거듭나기 위한 여정을 이 책으로 시작해보세요.
저자소개
저자
김현정
카이스트에서 소프트웨어공학을 전공했고, IT 컨설팅 회사에 근무하면서 다양한 소프트웨어를 현장에서 직접 경험하고 있다. 소프트웨어 분야에서 공적을 인정받아 2014년 미래창조과학부 장관상을 수상했다. ISO/IEC 국제 표준화 활동에 활발하게 참여하고 있으며, 관련 분야 전문위원으로도 활동 중이다. 15여 년 동안 아카데미와 대학교 등에서 강의를 하면서 IT 기술을 이해하기 쉽게 설명하는 방법을 배웠고, 현장감 있는 교육을 제공하기 위해서는 흥미롭고 재미있는 이야기와 경험을 공유하는 것이 중요하다는 것을 깨달았다. 이에 청소년과 일반인을 위한 재미있고 이해하기 쉬운 교양서 집필을 시작해, 그 결실로 『그림과 이야기로 쉽게 배우는 소프트웨어와 코딩 첫걸음』, 『코딩책과 함께 보는 코딩 개념 사전』, 『코딩책과 함께 보는 소프트웨어 개념 사전』, 『엔트리 블록 코딩 100제』, 『코딩책과 함께 보는 인공지능 개념 사전』, 『청소년을 위한 파이썬 300제』를 펴내게 되었다.
저자
이재효
성균관대학교 임베디드소프트웨어학과에서 석사 학위를 받았다. 국내 DBMS 개발 회사에서 오랜 기간 품질 책임자로 활동하면서 시스템 소프트웨어 품질 관리, 테스트 자동화 도구 개발, 신뢰할 수 있는 코딩 가이드 개발 등 좋은 소프트웨어를 만들기 위한 다양한 실무 경험을 쌓았다. 현재는 IT 컨설팅 회사에 근무하면서 소프트웨어를 전문적으로 검증하고 있다. ISO/IEC 국제 표준화 활동에 참여하고 있으며, IT 분야 아카데미 등에서 소프트웨어 관련 강의를 하고 있다.
목차
[PART 1 | 학교에서 배운 이론을 실무에 적용하기]
Chapter 1. 데이터베이스의 효과적인 활용
_1.1 논리적인 작업의 단위, 트랜잭션
_1.2 지름길 정보, 인덱스
_1.3 쿼리 옵티마이저의 실행 계획
_1.4 데이터에 결점이 없는 성질, 데이터 무결성
_1.5 다양한 데이터베이스의 세계
Chapter 2. 데이터를 지키는 암호화 기법
_2.1 대칭 키와 비대칭 키 암호 알고리즘
_2.2 단방향 암호화를 위한 해시 함수
_2.3 개인정보를 지킬 수 있는 암호화
_2.4 안전하게 코드를 작성하는 법, 시큐어 코딩
_2.5 보안도 이제 클라우드 서비스 시대
Chapter 3. 체계적인 자원 관리
_3.1 여러 가지 일을 동시에 처리하는 동시성 프로그래밍
_3.2 소중한 자원의 소실, 메모리 누수
_3.3 스레드의 수영장, 스레드 풀링
Chapter 4. 성능을 향상하는 방법
_4.1 시스템의 최대 출력, 성능
_4.2 시스템이 느려지는 지점, 병목 지점
_4.3 클라우드 서비스의 오토 스케일링
_4.4 성능을 고려한 5가지 개발 팁
Chapter 5. 오픈소스 라이선스의 세계
_5.1 오픈소스 라이선스란
_5.2 오픈소스 커뮤니티에서 활동해볼까
_5.3 오픈소스도 라이선스를 따져가며 사용하자
_5.4 소프트웨어의 원산지 증명, SBOM
[PART 2 | 더 나은 개발 환경 조성하기]
Chapter 6. 개발자를 위한 개발 도구
_6.1 개발자의 개발 도구
_6.2 형상 관리를 위한 깃허브
_6.3 이슈 관리를 위한 레드마인
_6.4 지속적 통합을 위한 젠킨스
Chapter 7. 효율적인 테스팅을 돕는 도구
_7.1 숨은 버그를 찾아내는 SpotBugs
_7.2 단위 테스트를 위한 xUnit
_7.3 시스템 부하 상황을 대비하는 LoadRunner와 JMeter
_7.4 지루한 작업을 자동화하는 셀레니움
_7.5 보안 약점을 찾아내는 Find Security Bugs
[PART 3 | 더 고급진 소프트웨어 개발하기]
Chapter 8. 좋은 코드 작성과 에러 처리
_8.1 반듯한 코딩을 위한 코딩 규칙
_8.2 글쓰기처럼 코딩도 의도를 분명하게
_8.3 안전한 코드를 만들기 위한 시큐어 코딩 규칙
_8.4 원인 분석을 위한 에러 처리
_8.5 부적절한 에러 메시지의 종류
Chapter 9. 글로벌 소프트웨어 개발하기
_9.1 글로벌 소프트웨어를 만드는 방법, 국제화와 현지화
_9.2 코드와 리소스의 이별
_9.3 사용자 취향 저격, 현지화
Chapter 10. 전 세계로 통하는 클라우드 서비스
_10.1 대세는 구독형 서비스
_10.2 IaaS, PaaS 그리고 SaaS
_10.3 멀티테넌시를 위한 소프트웨어 만들기
_10.4 고객을 위한 셀프 기능 만들기
_10.5 물리적 거리에 구애받지 않는 리전
_10.6 가용성은 제일 중요한 덕목
_10.7 자원을 탄력적으로 활용하는 서비스 개발하기
출판사리뷰
현장에서 바로 써먹는 40가지 ‘실무’ 기술
"편히 물어볼 사수가 없어서 막막해"
"신입 개발자를 어떻게 가르쳐야 할지 모르겠어"
이 책은 이러한 고민을 하고 있는 분들을 위한 개발 실무 지침서입니다. 15년 동안 소프트웨어 분야 강의를 하며 『코딩책과 함께 보는 코딩 개념 사전』 등 쉽고 재밌는 코딩 책을 집필해온 김현정 저자가 이번에는 ‘주니어 개발자의 멘토’를 자처하며 개발 실무 지식의 세계로 초대합니다.
개발을 이론과 간단한 프로젝트로만 접해온 이들은 현장에서 실무와 마주했을 때 큰 혼란을 느낍니다. 제대로 된 프로그램을 만들려면 프로그래밍 실력뿐만 아니라 보안, 데이터베이스, 품질, 성능 등 광범위한 지식과 노하우가 필요합니다. 저자는 마치 개인 사수처럼 친근한 말투로 직접 구성한 그림과 표, 예제 코드를 한 줄 한 줄 설명하며 탄탄한 실무 토대를 다지게 도와줍니다.
한 줄 한 줄 짚어주는 코딩의 핵심
기본기는 탄탄하게 실무 활용은 능숙하게!
이 책은 좋은 코드 작성을 위한 기본 코딩 컨벤션부터 프로그램의 국제화와 클라우드 서비스까지 폭넓고도 깊이 있는 지식으로 신입부터 기본기가 절실한 중급 개발자까지 아우릅니다. 신입을 어떻게 가르쳐야 할지 고민하는 시니어 개발자에게 도움이 되는 내용도 가득합니다. 또한 흔히 하는 실수를 짚어주고 문제 해결 과정을 제시하는 등 초보 개발자의 시행착오를 줄이며 더욱 빠른 성장을 돕습니다.
★내용 구성
1부 | 학교에서 배운 이론을 실무에 적용하기 데이터베이스, 보안, 자원 관리, 성능 등 다양한 이론을 현장에 적용할 수 있도록 실무 관점에서 소개합니다. 아울러 소프트웨어 저작권인 라이선스를 제대로 이해하고 개발할 수 있도록 다양한 오픈소스 라이선스를 설명합니다.
2부 | 더 나은 개발 환경 조성하기 더 나은 소프트웨어, 체계적인 개발을 위해 갖추어야 하는 개발 도구부터 테스팅 도구까지 개발자들이 활용할 수 있는 다양한 도구의 세계로 초대합니다.
3부 | 더 고급진 소프트웨어 개발하기 반듯한 코딩 작성을 위한 코딩 규칙과 시큐어 코딩 규칙, 에러 처리 방법 등을 설명합니다. 이를 위해 에러 상황별로 핵심 개념을 설명하고, 좋은 코드의 다양한 예시를 제공합니다. 나아가 소프트웨어가 다양한 국가에서 사용될 수 있도록 국제화 개념을 설명하고, 소프트웨어 구독형 서비스 시대에 상식적으로 알아야 하는 클라우드 컴퓨팅의 개념을 알아봅니다.
★이 책의 주요 내용
효과적인 데이터베이스 활용법
데이터를 지키는 암호화와 시큐어 코딩
체계적인 자원 관리
성능 최적화와 오토 스케일링
오픈소스 라이선스의 이해
효율적인 개발을 위한 개발 도구와 테스팅 도구
좋은 코드 작성법
글로벌 소프트웨어 개발 방법
클라우드의 기본 개념과 개발 방법
★이 책의 대상 독자
IT 기업 입사를 준비 중인 학생 및 비전공자
실무에 어려움을 느끼는 주니어 개발자
후배, 신입을 가르쳐야 하는 시니어 개발자
★먼저 읽은 베타리더들의 한 마디
아무것도 모르는 신입 개발자에게 사수 같은 책입니다. _박소현 님
이 책으로 미리 실무를 익히면 선배 개발자와 원활한 소통이 가능할 것입니다. _박수빈 님
프로그래밍 언어와 CS 지식이 분리된 느낌을 받는 비전공자에게 유용합니다. _정하영 님
실무에 어려움을 느낀다면 분야를 막론하고 꼭 한번 읽어보길 바랍니다. _안예린 님
주니어 개발자에게 마치 안정제 같은 책입니다. _장유리 님
실수를 사전에 예방하고 해결하는 데 도움이 되는 실용적인 정보가 가득합니다. _이재복 님
추천사
비전공자와 전공자 모두에게 개발자로서 역량 향상에 도움을 주는 책으로, 저자의 경험을 토대로 한 구체적인 예시는 실무를 효과적으로 이해하는 데 큰 도움을 줍니다. 다양한 주제를 아우르며, 초보자부터 경력자까지 폭넓은 독자층에게 실무 능력을 높일 수 있는 필수 지식을 선사하는 책입니다. - 정창호 (구글코리아 고객 지원 엔지니어)
신입 개발자도 실무에 바로 적용할 수 있는 개념이 상세하게 설명되어 있습니다. 뿐만 아니라 효율적인 소프트웨어 개발과 테스팅을 위한 환경 설정에 대한 내용도 담겨 있어 지식을 업무에 실제로 적용할 수 있도록 도와줍니다. - 송옥수 (우아한형제들 품질 엔지니어)
이 책은 개발 프로젝트를 수행하는 모든 이에게 필요한 지식과 실무 요소를 이해하기 쉬운 예시를 통해 설명합니다. 특히 초급 개발자뿐만 아니라, 최신 SI 환경을 낯설어하는 고급 개발자와 해당 환경을 구축하고 관리해야 하는 PM에게도 큰 도움이 될 것입니다.프로젝트 참여자들이 어렵게 느끼는 데이터베이스, 암복호화, 깃허브, CI/CD 등도 명확히 이해할 수 있도록 전반적인 그림이 잘 그려져 있고, 실제로 개발자들이 흔히 하는 실수도 짚어주어 매우 인상 깊었습니다. 저 또한 이 책을 통해 어렴풋이 알고 있던 개념을 정확히 이해할 수 있었기에, 개발 프로젝트와 관련이 있는 모든 이에게 추천하고 싶습니다. - 김아연 (QA 엔지니어)
소프트웨어 분야는 전문 도서로만 공부해야 실력자가 된다는 말은 옛말입니다. 이제는 현장에서 마주하는 세세한 부분을 누구나 알기 쉽게 전달해주는 책을 원하고 있습니다. 이 책이 바로 그런 책입니다. 기초부터 분야별 이슈로 체계적으로 구성되어 있으며 심지어 친절하기까지 합니다. - 이창희 (LG전자 소프트웨어 센터 책임 연구원)
데이터베이스, 보안, 성능 최적화 등 다양한 주제를 다루는 동시에, 고급 개발자로 성장하는 데 필요한 최신 기술의 핵심을 조리 있게 설명합니다. 그런 의미에서 개발을 시작하는 이들에게는 기초 입문서로, 성장을 추구하는 주니어 개발자에게는 탄탄한 실무의 토대를 다지는 지침서로 추천합니다. - 장석진 (삼성전자 수석 연구원)
이 책은 실무 환경에서 알면 좋은 기초적인 CS지식부터 실무지식까지 여러가지 방면에서 쭉 훑어볼 수 있는 책입니다.
첫 번째 파트 제목이 마음에 드는게, 학교를 졸업하고 입사를한지 얼마안되다보면
학교에서 배운 개념적인 이론이 실무에서 잘 와닿지 않을 때가 많은데요,
그것에 대한 간극을 메워주는 파트라 좋았습니다.
저는 개발자는 아니지만, IT에 조금이라도 발을 걸치신 분들은 알면 좋은 CS지식들이 많이 있었습니다.
이 책의 가장 큰 장점은 스토리텔링식으로 설명을 하기 때문에 생소한 용어가 있더라도 술술 읽힌다는 것이 가장 좋은 장점인 것 같습니다. 중간 중간 질문식으로 설명하고자 하는 개념에 대해 생각해 볼 수 있도록 하는 점들이 좋았는데요, 잠깐 멈추고 내가 알기에는 ~한 것인데 맞을까? 하고 다음 페이지를 넘기게 되는 재미가 있습니다.
두번째로는 실제 어플리케이션의 화면 스크린샷과 코드, 인포그래픽을 적절히 활용해서
이해하기가 쉽다는 장점이 있습니다. 아래 사진처럼 해당 개념에 쓰인 과정과 관련된 스크린 샷과 전체적인 흐름을 인포그래픽을 사용해서 보여주기 때문에 한눈에 와닿는게 좋았습니다.
그리고 특정 개념이 있다면 위의 사진처럼 옆에 영어개념도 같이 적어놓아서 해당 개념에 대해 좀더 세부적으로 찾고 싶다하면, 찾을 수 있다는것도 장점이라면 장점이겠네요.
CS지식을 아무것도 모르는 분들이 봐도 읽어내기에 큰 부담은 없지만
어느정도 알고 읽는 다면 이해하는데 더 수월합니다.
CS지식이 부족하다 생각해서 기본을 훑고 싶은 IT관련 종사자 분들(기획자, 데이터 분석가 등등)
입문 부터 주니어레벨의 개발자 분들에게 도움이 되는 책이라 참고하시면 좋을 것 같아요!
해당 리뷰는 "한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 제공 받아 작성된 서평입니다."
이 도서는 데이터베이스에서의 트랜잭션과 인덱스, 대칭키와 비대칭키, SQL 인젝션 그리고 더 나아가 좋은 코드를 만들기 위한 예외 처리 방법까지 필요한 핵심 부분들을 모아놓은 도서였다.
개인적으로 느끼는 이 책의 장점이 바로 필요한 부분을 모아놓은 요점 정리 노트인데 개념 설명까지 깔끔하게 되어 있는 점이라고 생각한다. 암호화 기법을 설명하는 부분에선 자바 코드로 java.security 패키지의 있는 코드를 사용하며 암호화, 복호화 과정을 설명하고 예제 그림을 통해 과정을 설명해주고 있다. 또 어떠한 암호화 방식은 이래서 사용하면 안되고 어떤 방식은 이런 점에 취약하다고 설명까지 해주어 쉽게 이해 되었다.
현재 나의 상황에 적절한 도서인거 같다. 전공 지식 어느 정도 익히고 자바를 이해하는 분들에게 추천할만한 도서이다.
그리고 해당 도서 마지막에 각 목차마다 더 공부해볼만한 키워드를 제시해주고 있어 추가로 학습하고 싶은 사람들에게 방향을 제시해주고 있다.
해당 도서를 골랐던 이유는 전공 지식과 실무가 어떻게 연결되는지 궁금해서였다. 전공자로서 공부를 하긴 했지만 어떤 게 실제로 자주 쓰이는지 잘 몰랐기 때문이다. 그래서 다시 배운 것을 돌아보며 공부를 다시 할 때에도 막막했었다.
그렇지만 이 책을 읽고서는 그러한 의문점을 해소시켜주는 느낌이었다. 왜냐하면 Part1에서 나오는 학교에서 배운 이론, 실무에 적용하기 챕터에서 설명을 해주기 때문이다. 학교에서 배우는 다양한 Computer Science 과목들(컴퓨터 구조, 운영체제, 데이터 베이스, 정보보호 등)을 총망라해서 개념과 함께 설명을 해주어서 내용을 복습하는 느낌이었다. 그리고 이 책에서는 이론적인 것 뿐만 아니라 코드로도 설명한다. 대부분 자바 코드로 설명을 하긴 했지만 이렇게 구성하면 되는 것이었구나라는 생각을 하게한다. 머리속에 뒤엉켜 있는 개념을 잡아준다는 점에서 좋았던 것 같고 실무에 들어갈 때에도 이 책과 함께 간다면 도움이 될 것 같다는 생각이 들었다. 특정 분야를 위한 책보다는 전체적으로 개발을 위해 고려할 수 있는 것들이 담겨 있어 필요한 것을 찾아보는 백과사전 같은 느낌이었다.
만약 이 책을 보는 것을 고려하고 있다면 특히 실무에 종사하거나 실무와 전공 지식을 엮어서 보고 싶은 분들에게 추천한다. 개념을 하나하나 깊게 파지는 않지만 실무에 필요한 개념들을 정리해주기에 필요한 것을 찾아보기에 좋은 책이라고 생각이 든다.
해당 도서를 고른 이유는 요즘 분석 업무보다 IT업무에 더 관심이 가져지고 있어서 한번 해당 책을 선별해보았다.
사실 학부생때 공부를 했던 내용들을 취업하고 나서 이용했던 것들이 생각보다 적어서 놀랐던 적이 있었다. 하지만 그것은 극 초반의 일이었고, 1~2년차 부터는 학부 때 공부 좀 해둘걸 ... 이라는 후회가 쓰나미처럼 몰려왔다.
그렇게 학부에서 놓친 내용들을 구글에 하나 하나 찾아 보면서 다시 공부를 시작했던 나로서는 이런 책이 굉장히 학부생들에게 도움이 될 것이라 생각되어서 읽어보고 싶은 욕구가 강했다.
하여, 해당 도서를 보며 첫 페이지 부터 엄청 놀라면서 보게 되었다. 바로 1-2 에 나오는 내용인 INDEX 부분 때문이다. 해당 부분은 DB에서 데이터를 조회할 때 사용되는 기능 중 하나인데, 내가 정확히 신입 1년차가 넘어갈 때 쯤에 실무에서 배운 부분이다.
해당 부분을 중점적으로 DB에 부하가 가지 않게 INDEX와 PRIMARY KEY를 설정하는 이유, 어떻게 활용하는지 그런 이유에 대해서 상세하게 나왔다. 심지어 쿼리 조회 할때 EXPLAIN을 활용해서 쿼리 연산이 어느 정도 일어나는지 FULL SCAN 이 되는 지 등 다양한 실무에서 배울만한 것들이 즐비했다.
첫 인상부터 너무 강렬한 도서였다. 하여, 계속 쭉 읽어나가기 좋았고 대부분이 실무에서 활용되는 이야기들을 주로 구성되어 있다.
조금 아쉬운 점은 코드를 파이썬만 알고 있는 나에게 예시 코드들이 자바로 나와있던게 조금은 아쉬웠다.
(이 부분은 도서의 문제가 아닌 저에 문제라고 생각되지만...ㅎ)
그 외에도 SQL 인젝션, Hash 등 이론에서 매우 헷갈리던 개념들을 실무에서 어떻게 사용되는지 예시와 함께 상세하게 설명해주는 부분이 너무나도 좋았다.
올해(아직 2월이지만) 읽은 아니, 최근에 읽은 도서 중 신입에게 가장 추천해주고 싶은 도서였다.
학교에서 배웠던 것들. 그게 어디에서 어떻게 쓰이는지. 왜 배워야 하는지 알 수 있었다. 사례(예시)를 통해 설명해서 잘 와닿기도 했다. 가장 만족스러운 건, 여기저기서 주워들은 것들의 정체를 알 수 있었다. 그게 이거였구나. 그게 이럴 때 쓰는 거였구나. 그게 왜 필요했는지. "아..!" 하는 포인트가 정말 많았다.
체계적으로 정리가 잘 되어있다. 그래서 잘 읽히고, 머리에 구조가 잘 잡히고 크게 노력하지 않아도 머리에 정리가 잘 된다. 특정 내용을 깊게 다루지 않아서 잘 읽힌다. 이런 특징때문에 한편으로는 독자. 즉, 누가 읽는 지가 주효할 것 같다.
내가 생각하기에 이 책을 읽으면 좋을 것 같은 사람들
컴퓨터공학과(소프트웨어학과)인데, 학과 공부가 재미 없는 사람들
이 걸 대체 왜 배우는거지? 이거 배워서 뭐 하는건데? 하는 불만 섞인 궁금증을 조금 해소할 수 있다. 그리고 학과 전공생이면 아예 모르는 건 아닌데 주워들은 건 또 많을 거다. 그런 것들이 자주 나와서 더 흥미가 갈 것. 게다가 깊게 파고들어가는 학교 수업과는 달리 교양 책처럼 가볍게 슥슥 읽으면 되니까 편하다. 다 읽고나면 학과 과목과 수업에 긍정적인 연쇄 효과와 선순환을 기대할 수 있다.
2. 개발자를 희망하는 취준생들
같은 맥락이다. 책과 실습으로만 배웠던 것들을 컴팩트하게 정리할 수 있다. 아마 채용 공고에서 봤었던 것들이 많을 거다. 학교 공부와 실무와의 간극에 있는 내용들을 엿보면서 관련 경험을 채우고, 회사에 지원하고 면접과 자소서 등 각 전형에서 유용하게 쓸 수 있지 않을까.
내가 현직 개발자가 아니라서 이 레벨 이상의 사람들에게 왈가왈부는 못 하겠다. 딱 이 정도.
개발팀 내에 신입 개발자 또는 주니어 개발자가 있을 경우 이들에게 어떤 것을 가르쳐야 할지 고민이 종종 발생한다. 개발 자체에 대한 부분은 개발자 개개인의 능력이라고 볼 수 있지만 실무에 필요한 지식은 정의하기도 어렵고 범위도 넓어 어떤 부분을 교육해야 할지 막막하기도 하다. 이 책은 개발자를 위한 최소한의 실무 지식이란 제목에 맞게 주니어 개발자에게 필요한 최소한의 실무 지식을 알려준다. 개발자가 꼭 알고 있어야 하는 효과적인 데이타베이스 활용법과 암호화 및 시큐어코딩, 자원 관리, 성능 최적화 등 개발에 직접적인 지식뿐만 아니라 효율적인 개발을 위한 개발 도구, 테스팅 도구, 좋은 코드를 작성하는 방법 등 폭넓은 지식을 익힐 수 있도록 되어 있다.
어떻게 보면 주니어 개발자가 혼자서 이 책을 통해 공부하기에는 조금은 어려울 수도 있겠다는 생각이 든다. 보다 효과적으로 이 책을 활용할 수 있는 방법은 주니어 개발자를 가르쳐야 하는 시니어 개발자가 이 책을 이용하여 교육하는 것이 좋은 방법이지 않을까 생각한다. 총 10개의 챕터로 구성되어 있지만 서로 연관성은 없기 때문에 조직내에서 꼭 필요한 챕터만 간추려 교육해도 좋곘다는 생각이 들었다. 물론 어느정도 기반지식이 있는 주니어 개발자라면 혼자서도 별 무리없이 이 책을 기반으로 학습할 수도 있을 것 같다.
이 책에 포함된 내용은 개발자라면 누구라도 접할 수 밖에 없는 핵심적인 지식을 포함하고 있다는 생각이 들었다. 조직 내에서 교육자료로 사용하든 혼자서 공부하는 용도로 사용하든 어떤 방식으로든 유용하게 활용될 수 있는 책이라는 생각이 든다. 또한 단순히 내용만 기술하는 것이 아니라 코드가 필요한 곳에서는 실제 코드를 활용하여 상세히 설명하고, 참고 화면이 필요한 곳에서는 실제 화면을 보여주면서 설명하고 있기 때문에 좀 더 실제와 가까운 지식을 습득할 수 있다고 생각한다.
개발자로서 출발하는 주니어 개발자, 주니어 개발자를 교육해야 하는 시니어 개발자가 이 책을 활용한다면 실무에서 바로 활용할 수 있는 실무 지식을 습득할 수 있는 좋은 방법이 될 것 같다.
책 표지의 현장에서 바로 써먹는 40가지 핵심 기술이란 카피가 눈에 띄어 읽게 됐다. 과연 나는 최소한의 실무 지식을 갖췄을까? 그렇지 않다면 어떤 점을 더 갖춰야 할까 라는 마음으로 읽었다.
예상 독자
책의 예상 독자는 개발자로 취업을 준비 중인 사람, 이제 막 커리어를 시작한 신입 개발자, 그리고 어느정도 개발 경험이 있는 주니어 개발자를 대상으로 한다. 책을 읽어보니 어느정도 아는 내용에 대해선 더 자세히 알수 있어 유용했고, 새롭게 배운 내용은 배운다는 마음으로 읽을 수 있어 좋았다.
책 구성
1부에서는 학업에서 배운 데이터베이스, 보안, 자원관리, 성능 등 다양한 이론을 현장에서 적용할 수 있는 실무적 관점을 제공한다.
데이터베이스의 중요한 개념을 실무에 녹인 관점을 보여주고, 소프트웨어 특징에 따라 왜 다양한 DBMS 를 사용하는지 알 수 있다.
2부는 더 나은 소프트웨어를 만들기 위해 필요한 사항을 소개한다. 깃허브, 젠킨스 등 현업에서 흔히 사용하는 개발 툴을 배울 수 있다. 뿐만 아니라 소프트웨어 품질 검증을 위해 필요한 다양한 테스팅 도구에 관한 내용도 다루고 있다.
3부에선 반듯한 코딩 작성을 위한 코딩 규칙과 시큐어 코딩 규칙, 에러 처리 방법 등을 설명한다. 더 나아가 소프트웨어가 다양한 국가에서 사용될 수 있도록 국제화 개념을 소개하고, 소프트웨어의 구독형 서비스 시대에 상식적으로 알아야 하는 클라우드 컴퓨팅 개념을 배울 수 있다. 3부 chapter8의 내용은 코드를 깔끔하게 작성하는 최소한의 규칙을 설명하는데 클린코드의 내용과 어느 정도 상통하지 않나 생각했다.
인상 깊었던 챕터
"chapter9 글로벌 소프트웨어 개발하기" 에서 현지화와 국제화에 관한 내용에서 글로벌 소프트웨어를 개발하기 위해 고려해야 할 내용을 소개한다. 현업에서 다국어 적용을 고려하며 개발 중이기에 해당 챕터의 내용을 더 흥미롭게 읽을 수 있었다. 필자는 국제화와 현지화의 명확한 개념이나 차이를 잘 모르고 사용했는데 책에서는 이 부분을 잘 정리해준다.,
국제화(i18n)
현지화(L10n)
코드와 리소스 분리 로케일에 따른 다국어 언어 표시 문자 인코딩(유니코드) 등
숫자, 정렬, 통화 날짜와 시간 키보드 레이아웃, 색상, 아이콘 등
Internationalization(국제화) 을 단어의 글자수가 많아 i18n 이란 축약어를 사용한다는 알아두면 좋을 내용도 책에서 꿀팁처럼 설명해준다. Internationalization의 글자수가 20자라 맨앞과 맨뒷 글자를 제외하여 18로 축약했다고 한다. Localization(현지화) 도 마찬가지로 L10n으로 축약한다.
현업에서 국제화는 현재도 적용중이지만 아직 현지화에 대한 개발은 적용하지 않은 상태다. 사실 현지화의 개념도 책에서 새로 배운터라 업무에서 현지화 개념을 도입할 때 잊지않고 떠오를 것 같다.
책에서 현지화에 관한 몇가지 사례를 소개한다. 예를 들어 사용자 인증을 영어로 번역하면 'user authentication' 이 옳은데 'user certification' 으로 오역하는 경우가 있다. 영어가 모국어인 사용자는 문맥에 따라 authentication과 certification 을 다르게 사용하기 때문에 이런 사소한 번역 실수에 신뢰도가 크게 떨어진다는 사례를 소개했다. 콩글리시에 익숙한 개발자라면 심각하게 생각하지 못하고 넘길 수 있는 부분이지만 책에서 이러한 사례를 소개해준 덕분에 현지화 시 고려해야 할 점을 배울 수 있었다.
책에서는 이외에도 스레드풀이나 웹서버의 동작 원리 등 어렴풋이 알고 있던 내용을 쉽게 풀어 설명한다. 책 제목대로 정말 최소한의 실무지식을 넓고 다양하게 읽어볼 수 있는 책이라 이제 막 현업을 시작하는 분들에게 추천드리고 싶다.
"개발자를 위한 최소한의 실무 지식"이라는 책을 개발자 초창기 때 만나지 못한 것이 안타깝다는 생각이 들었던 만큼 이 책은 신입 개발자 또는 개발을 시작하려는 사람들을 위한 필수 가이드입니다. 데이터베이스 활용, 데이터 암호화, 자원 관리, 성능 최적화, 오픈 소스 라이선스 이해, 개발 도구와 테스팅 도구 사용법, 좋은 코드 작성법, 글로벌 소프트웨어 개발 방법, 클라우드의 기본 개념과 개발 방법 등의 내용을 포괄적으로 다룹니다.
이 책은 개발에 필요한 기본적인 개념들을 명확하고 간결하게 설명하고 있다는 부분에서 강점을 찾을 수 있습니다. 이 책을 통해 개발에 관한 실질적인 지식을 쉽게 얻을 수 있습니다. 이러한 지식들은 많은 경험을 통해서 알아가게 되는 것이 일반적일 텐데, 이렇게 통합적이고 체계적이게 한 번에 정리해 볼 수 있다는 점이 너무나 좋습니다.
또한, 이 책은 개발에 필요한 다양한 도구와 테스팅 방법에 대해서도 자세히 설명하고 있습니다. 이를 통해 개발 과정을 효율적으로 진행할 수 있는 방법을 배울 수도 있습니다.
이미 개발 경험이 풍부한 사람에게는 이 책의 내용이 다소 익숙해서 지루하게 느껴질 수도 있겠다는 생각도 해봤습니다. 그럼에도 불구하고, 개발에 필요한 기본적인 지식을 복습하거나, 변화하거나 새롭게 등장한 개념을 배우는 데 도움이 될 것입니다.
이 책을 읽고 나서, 개발 실무에서 필요한 기본적인 지식을 다시 한번 정리할 수 있었습니다. 특히, 데이터베이스와 관련된 개념에 대해 쉽게 이해할 수 있었고, 라이선스와 관련된 내용도 체계적으로 정리되어 많은 도움이 되었습니다.
"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 제공 받아 작성된 서평입니다."
어느 정도 알고 있다고 생각하지만, 실제로 누군가에게 설명하기 어려운 내용을 이해하기 쉽게 잘 설명 되어있어서 재미있게 읽을 수 있었습니다.
특히 'chapter 2 데이터를 지키는 암호화 기법'의 내용이 저에겐 흥미로웠습니다.
암호화 알고리즘이 무엇인지, 어떤 종류들이 있고, 그것이 실제로 HTTPS 통신에 어떻게 적용되는지 알게 되어 좋았습니다.
위 내용은 아래 개인 블로그에도 정리 하였습니다.
개인 블로그 https://developer-as-job.tistory.com/37
이 책에서 좋았던 점은 아래와 같다. 1. 다양한 분야를 설명한다고 해서 결코 깊이가 얕지 않다. 2. 다양한 키워드를 짚어준다. 3. 용어에 대한 설명이 매력적이었다.
1. 다양한 분야를 설명한다고 해서 결코 깊이가 얕지 않다. 핵심적인 키워드들을 잘 뽑아서 설명해준다. 데이테베이스의 트랜잭션과 인덱스가 왜 기본이고 중요한지를 메모리 / 디스크를 포함해서 설명해주는 게 좋았고, 공부할 때는 한 번 듣고 넘어가는 경우도 많았던 옵티마이저 또한 핵심만 뽑아 설명해줘서 이해하기 쉬웠다. 데이터베이스 뿐 아니라 보안, 자원, 성능, 테스트, 좋은 코드 작성방법, 클라우드 등 정말 다양한 분야에 대해서 한 권에서 설명하다보니 한 분야의 전문 서적보다는 당연히 깊지는 못하지만, 핵심을 잘 짚고, 예시 또한 당연하게 중요하게 생각했던 것들이어서 좋았다.
두 번째 장점과도 연결이 되는데, 40가지 외에도 책 중간중간 더 깊게 알아볼 만한 용어를 다양하게 알려준 뿐 아니라, 책 부록에서도 독자들이 챕터 별로 더 관심이 있으면 찾아보면 좋을만한 키워드들을 알려준다.
책을 읽으면서 이 키워드에 대한 설명이 있으면 좋겠는데~ 했던 키워드들이 몇 개가 포함되어 있는 걸 보고, 작가가 책 분량에 막혀 넣고 싶은데 못 넣은 키워드들이 많았겠다는 생각이 들었다.
키워드들만 잘 각인하더라도 책 값은 뽑을 수 있겠다는 생각이 들 정도로 다양한 분야들의 핵심 키워드들을 잘 짚어주는 게 느껴졌다.
3. 용어에 대한 설명이 매력적이다. 단어는 그 단어가 어떻게 시작했는지, 왜 탄생했는지, 어떤 의미인지를 알게되면 더 쉽고, 오래 기억한다고 생각한다.
이 책에서는 유명한 버그, 스레드를 포함해 그 단어의 어원을 설명해주기 때문에 단순 기술서적보다 흥미를 키우기 좋다.
이 책은 정말 넓은 분야에 대해 담고 있다. 그렇기 때문에 이 책은 실무에 들어가기 전 다양하게 이런 것들을 알아둬야 되는구나를 파악하고, 용어, 키워드들에 익숙해져서 실무에서 마주쳐도 덜 당황할 수 있게 해줄 것이다.
또한, 읽다보면 본인이 더 관심이 가고, 궁금한 챕터들이 생길 수 있는데 뒤 부록과 챕터에서 나온 키워드들을 검색해서 더 깊게 공부 할 수 있도록 길잡이 역할을 해줄 수 있는 책이다.
필요 선수 지식 요구 학력 : 관련학과 대졸 이상 (프로그래밍, 데이터베이스, 보안, 테스팅 기법등을 실무 관점에서 풀어내었기 때문) 예제 코드 : Java 난이도 : ★★☆☆☆
책의 구성 중 마음에 들었던 주제 Chapter 01 데이터베이스의 효과적인 활용 데이터베이스의 중요한 개념들을 실무적인 관점에서 설명하고 다양한 DBMS들을 특징에 따라 왜 사용하는지 설명한다. Chapter 03 체계적인 자원 관리 다수의 사용자가 동시에 사용하는 소프트웨어의 사례를 바탕으로 동시성 프로그래밍, 메모리 누수(C, Java, Python의 관점으로), 스레드 풀링에 대해 설명한다. Chapter 04 성능을 향상하는 방법 성능의 개념과 병목 지점에 대해 설명하고 클라우드 컴퓨팅 환경에서의 오토 스케일링, 웹 어플리케이션 개발에서 고려할 팁들을 설명한다. Chapter 06 개발자를 위한 개발 도구 개발자간의 협업에 필요한 도구인 깃, 레드마인, 젠킨스 등의 다양한 도구를 설명한다. Chapter 07 효율적인 테스팅을 돕는 도구 반복적인 기능 시험을 위한 테스트 자동화 도구, 부하 발생을 위한 성능 시험 도구, 웹 취약점 점검 도구 등의 각종 도구를 설명한다. Chapter 08 좋은 코드 작성과 에러 처리 가동성 높고 유지보수 하기 좋은 코드를 작성하는 방법인 코딩 규칙과 작명법, 에러처리를 설명한다.
읽고 난 후 추천 지수 : ★★★★☆ 학부 시절 왜 이런 것을 사용해야하지? 싶은 것들을 실무에 가서야 느끼게 되었던 것들을 미리 알기 쉽도록 여러가지 사례와 보기 쉬운 삽화, 읽기 쉬운 어투를 사용하여 풀어낸 책 이런 책이 신입 개발자일 때 나왔다면 여러 시행착오를 줄이는데 큰 도움이 되었을 것 같다. 하지만, 여러가지 내용들을 다룰려고 하다보니 많은 내용들을 얇게 다루는 감이 있다. 개인적으로 클라우드 컴퓨팅 환경과 웹 부분을 들어내고 다른 부분들의 설명을 강화했으면 어땠을까 싶다.
"개발자를 위한 최소한의 실무지식"이라는 책을 읽어보고 싶었던 11년차 개발자이자 초보 팀장인 나. "나는 리뷰어다" 신청하고 활동하게 되면서 2월달에 관심 가진 책을 읽을 수 있어서 즐겁게 읽었다.
학교 다닐때나 개발자 초년생때를 생각해보면 정말 모르는게 너무 많았다는 생각이 들었다. 단순히 주어진 개발을 하는게 중요하다고 생각했는데 내가 이제서야 정립하게 된 (내 기준) 개발자의 중요 덕목(?!)은 다음과 같다.
개발도 결국엔 건축과 유사하다는걸 깨달을 필요가 있다. 생각의 전환이 필요하다.
유지보수까지 고려한 설계와 제대로 된 요구사항 파악 및 분석
결국은 사용자가 쓴다는걸 잊지 말아야 한다 (개발이 편한것보다 사용자가 편해야함. 고로 섬세한 개발이 필요하다)
코드의 가독성도 중요하지만 성능도 매우 중요하다! (무엇이든 돈과 연관되어 있다. 생산성~!)
모르는 게 대부분이니 그냥 배운다고 생각하고 몸을 던진다. 맨땅에 헤딩!
생성형 AI에 의지하지 말자. 머리는 굴려야 좋아진다.
넓게 보자. 드넓게~~
이 책의 목차는 다음과 같다. (세부 목차는 생략했다.)
[PART 1 | 학교에서 배운 이론을 실무에 적용하기]
Chapter 1. 데이터베이스의 효과적인 활용
Chapter 2. 데이터를 지키는 암호화 기법
Chapter 3. 체계적인 자원 관리
Chapter 4. 성능을 향상하는 방법
Chapter 5. 오픈소스 라이선스의 세계
[PART 2 | 더 나은 개발 환경 조성하기]
Chapter 6. 개발자를 위한 개발 도구
Chapter 7. 효율적인 테스팅을 돕는 도구
[PART 3 | 더 고급진 소프트웨어 개발하기]
Chapter 8. 좋은 코드 작성과 에러 처리
Chapter 9. 글로벌 소프트웨어 개발하기
Chapter 10. 전 세계로 통하는 클라우드 서비스
이번 책을 읽자마자 맨 먼저 박수를 친 부분은 데이터베이스 쿼리와 관련된 하드디스크 설명이였다. "끼야호.. 설명 좋네~"를 속으로 외쳤는데, 물리적인 하드디스크의 원리와 구조 그리고 그것과 연관된 데이터베이스까지 생각하게 된다면 주니어 개발자는 뛰어넘는 생각의 넓이를 가진다고 볼 수 있을것 같다.
물론, 플래터를 사용하지 않는 SSD를 사용하는 경우도 많지만 대용량의 데이터베이스를 서버+SSD로 사용하기엔 아직까진 HDD보단 가성비가 나오지 않을 것 같다. Primary Key, Index, Join 그리고 테이블의 구성과 분리까지 고려하여 실무에 적용한다면 보다 나은 개발자가 되지 않을까 싶다.
그 다음으로는 암호화 기법, HTTPS 에 대해서 간략하면서도 폭넓게 설명해주고 있어서 이런 것들이 어떤 것인지 알 수 있도록 "찍먹" 이상의 수준으로 학습할 수 있는 부분이 많았다. 와이어샤크를 사용하여 패킷 분석까지 사진으로 제공하는 모습을 보고 저자들의 지적 수준을 가늠할 수 있었다. (쌍따봉)
실행하고 네트워크 어댑터(랜카드)를 선택하면 송수신하는 패킷과 해당 패킷의 상세 내용을 알 수 있다.
과거에 네트워크 보안 수업들을때 해당 프로그램을 활용해서 보안 취약점 관련하여 배웠던 기억이 생각났다.
대부분의 프로젝트를 하다보면 보안취약점 검사를 무조건 한다고 봐도 과언은 아닌데, 그때마다 SQL 인젝션이 꼭 있다. 그만큼 데이터베이스에 있는 데이터에 대한 보안이 대단히 민감하다. 웹 프로그램들도 그렇고 대부분 데이터베이스랑 연동되는 기능들은 SQL 쿼리를 통해 데이터를 조회하고 업데이트하게 된다. 보안이 취약하게 개발이 된 경우 SQL 인젝션을 통해 사이트 접속이나 크게는 중요 데이터를 탈취할 수 있는 문제가 발생한다. (보안에 맞게 시큐어 코딩을 해야 보안취약점 검사 통과를 할 수 있다.)
웹 프로그램에서 중요한 것중에 또 하나인 크로스 사이트 스크립트(XSS)도 대단히 중요하다. 결국엔 사용자의 중요 정보를 탈취하는 목적으로 스크립트를 삽입해서 그것을 사용자 웹브라우저가 실행하게 만드는 건데 이또한 중요한 개념이다!
클라우드 서비스 여러개를 개발한 입장에서 클라우드에 대한 보안을 제대로 체감했던 여러 경험이 있다. 포트 하나만 잘못 열어놓아도 공격이 많이 들어오기 때문에 그런 부분에 대한 이해도가 있느냐 없느냐가 중요한 갈림길이 되지 않을까 싶다. (클라우드는 비용이 대단히 많이 나온다. 보안사고 조심!)
자원관리의 경우 슈퍼컴퓨터를 좋아해서 병렬+분산 프로그래밍 관련 수업도 듣고 몇년간 관련 개발 업무를 경험했기에 해당 부분에 대한 메모리 관리에 대해서도 중요함을 체감했었다. 자바처럼 가비지 컬렉터가 존재하면 좋겠지만 병렬/분산의 경우 C언어가 성능적으로 보장이 되기 때문에 코드적 레벨에서의 메모리 반납(free)과 할당(alloc)을 잘 해놓아야 메모리 누수가 생기지 않는다. (동적 할당의 묘미...?) (이런걸 책에서 잘 설명해주고 있어서 우리 팀 막내에게도 책 사서 선물을 해줘야겠다.라는 생각이 든다.)
리눅스에서 자주 사용하는 메모리 누수 체크 프로그램인 valgrind도 설명해주고 있어서 놀랐다. 메모리 누수가 발생하거나 segmentation fault가 발생한 경우 valgrind를 통해서 확인하면 편안하게 확인이 가능하다. 다만 상시 동작중인 데몬형태의 프로그램은 확인하기 어렵기 때문에 gdb를 통해 원격으로 attach해서 확인하는게 바람직하다.
오픈소스의 경우 학생때는 라이선스 생각을 안하고 사용하는 경우가 많은데 상업용으로 사용하는 경우 제약이 많이 생긴다. 라이선스의 경우 상업적으로 사용했을때 고지해야하는 의무가 있는 경우도 있고 관련 교육을 하루 날잡아서 들은적이 있는데 보통 회사들은 아래처럼 구성이 되어있다. (LG전자의 오픈소스 관련 홈페이지 링크!)
https://opensource.lge.com
학교 다닐때는 사용하지 않았던 형상관리 시스템(Git, SVN)과 배포 자동화 도구들, 그리고 이슈 관리 프로그램들은 협업과 생산성에 중요한 역할을 하고 있다. (백업적인 측면도!) 통합개발환경인 IDE의 경우 개발의 편의성을 보장해주는 여러 플러그인을 제공해주고 있어서 컴파일, 빌드 그리고 개발에 전부분에 이르기까지 다양한 기능을 제공해주고 있는데 그런 내용들을 넓게 설명해주고 있어서 개발자에겐 정말 최소한의 실무지식이라는 말이 맞다. (박수 짝짝짝~!)
개발, 테스트에 이르기까지 편리한 환경 구성을 하면 정말 생산성이 오르는걸 체감할 수 있다. 거기에 좋은 코딩에 대한 생각과 실천이 중요하다. 개발은 혼자하는게 아니기 때문에 남의 코드를 보는 경우도 꽤 있다. 보통의 회사에서는 자체적인 코딩가이드를 준수하고 개발을 하기 때문에 개발 또한 "프로토콜"을 맞출 필요가 있다.
멀티 테넌시, 클라우드 서비스 연동, 글로벌 개발을 위한 준수해야할 점(인코딩 등), 대세가 된 SaaS에 대한 설명 등 다양한 내용들을 책에서는 설명해주고 있다. 사실 이런 부분을 다 알고 있는 개발자가 얼마나 될지는 모르겠지만 모두 다 알 필요가 있는 내용이라는 생각이 든다.
책에서 설명하는 키워드들, 도메인들만 잘 알아도 코딩만 하는 개발자에서 기술에 대한 전반적인 이해력을 가진 개발자로 발돋움할 수 있다고 생각한다. 그만큼 40가지 핵심기술에 대해서 깊게 고민하고 만든 책이라고 한다.
한줄평. 주니어 개발자라면 이 책 꼭 사라. 몇권 사서 나눠주고 싶어진다. ^^..
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다. (현재 파리에서 한달살기를 하고 있어서 전자책으로 수령했습니다)
최소한"이라는 추상적인 용어로 40가지 항목을 선정한 기준에 대한 의문이 들었다. 개발 과정에서는 알아야 할 내용이 워낙 다양하고 잡다하게 파악해야 하는 정보가 많기 때문이다. 그러나 책의 목차를 보면 이 정도면 최소한의 내용일 것이라는 공감이 생긴다. 이는 책의 제목에서도 드러낫듯이 "실무" 관점에서의 “최소한”의 맥락이다.
또한 책에서 서술하는 개념이 머리에 손쉽게 들어온다. 어떤 IT 서적들은 복잡한 전문 용어가 즐비하고 그걸 설명하기 위한 번역체 같은 문장들을 사용하기 때문에 오히려 이해하기 어렵게 만드는 경우가 종종 발생하는데 이 책은 독자층을 명확히 설정하여 이해를 위주로 친절히 풀어나간다는 느낌을 준다.