2024년 기록

수정일 2024-12-26, 작성일 2024-01-01

강의

장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker

급하게 서킷브레이커를 학습하기 위해 수강해보았다. 강의 시간은 2시간 36분 밖에 되지 않지만 꽤 알찬 강의라고 느꼈다.
아래의 내용을 학습했다.

  1. Retry에 대한 이해
  2. 서킷브레이커의 각 상태에 대한 이해 (HALF_OPEN 상태가 존재하는 이유 등)
  3. 상태 변경을 위한 조건 설정
  4. fallback 기능에 대한 이해
  5. actuaotr를 활용한 서킷브레이커 설정 정보 조회 및 수정

자세한 설정 정보를 직접 확인하여 테스트를 진행할 수 있을 정도의 지식은 얻을 수 있기에, 급하게 서킷브레이커에 대한 내용을 개괄적으로 이해하고 싶다면 강의를 추천한다.

견고한 결제 시스템 구축

평소에 결제/정산 도메인에 관심이 있었어서 강의가 공개되자마자 구매해놓았었는데 이번에 완강해보았다.
결제,정산,장부 서비스들을 Spring webflux, R2DBC, 헥사고날 아키텍처, kafka를 사용하여 구현해보는 강의이다.
위의 기술 스택과 거리가 먼 나로서는 최소한 결제/정산 도메인 흐름과 헥사고날 아키텍처, kafka에 대한 이해를 목표로 하였다.

이 강의를 통해 아래의 내용을 학습할 수 있었다.

  1. 결제 시스템에 필요한 요소들
  2. 주문부터 결제 요청,정산,장부, 결제완료까지의 흐름
  3. 결제 승인 에러 핸들링과 재시도 메커니즘
  4. 결제 복구 작업 (+ Bulk Head Pattern)
  5. kafka를 통한 트랜잭션 아웃박스 패턴
  6. kafka와 kafka 트랜잭션에 대한 찍먹
  7. kafka의 DLQ를 통한 서비스 신뢰성 향상
  8. 더 견고해지기 위해 추가적으로 신경써야 할 부분 (보안, 모니터링 지표, 신뢰성을 향상 시킬 수 있는 다른 방법)

강의의 흐름이 굉장히 빠르고 webflux와 헥사고날 아키텍처에 익숙하지 않다면 초반에 고생할 수도 있다..
하지만 Spring webflux와 R2DBC가 도메인을 이해하는데 걸림돌이 될 정도는 아니며 제공되는 교안이 상당히 고품질이다.
추후에 예제 코드와 교안만 다시 보아도 이해하는데 문제가 없을정도이다.
그래도 헥사고날 아키텍처는 이 강의를 보기전에 대략적으로 이해하고 보는것을 추천한다. 그렇지 않으면 패키지 구조나 왜 이런 추상화와 구현체가 생기는지 이해할 수 없어 넋놓고 따라치기만 할 가능성이 높다.
사전에 이 강의를 보길 추천한다.

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트

극찬의 수강평과 커리큘럼에 헥사고날 아키텍처가 있어서 구매해보았다.
(견고한 결제 시스템 구축 강의를 들으면서 헥사고날 아키텍처 때문에 고생하고 있었다.)

강의 초반 ~ 중반까지는 지루한 이론 + 리팩토링 과정이 진행된다. 그래도 좋은 설계 + 객체지향 + 테스트 가능성에 대한 강조는 언제 들어도 항상 좋다.
처음엔 mockito와 h2를 이용한 중형 테스트와 mockmvc를 이용한 대형 테스트부터 작성하여 이 코드를 점차 개선해나간다.
외부 라이브러리에 의존하는 테스트를 제거하고 순수 도메인 코드로 테스트를 적용해간다. 이 부분이 꽤 지루하지만 이 작업을 견뎌내야 후반에 크게 공감할 수 있다.

일반적인 테스트 코드 작성부터 시작하여 지루한 리팩토링 작업이 끝난 후에 레이어드 아키텍처의 단점부터 헥사고날 아키텍처에 대한 내용을 설명하는 빌드업이 너무 좋았다.
게다가 아키텍처에 대한 강사님의 생각과 생각의 근거까지 완벽하게 설명하여 후반은 시간가는 줄 모르고 봤다.
(패키지간 의존성 방향은 어떻게 되어야 하는지?, 모델은 어디까지 분리해야 하는지?, Repository는 어떻게 다뤄야 하는지?, Use Case는 추상화 되어야 하는지? 등)

대략적으로 아래의 내용들이다.

  • layer 패키지 구조를 domain/layer 패키지 구조로 변경하여 도메인을 더 노출한다.
  • domain 패키지를 추가하고 repository 패키지를 이제 외부 통신을 담당하는 infrastructure 패키지로 리네이밍한다.
  • UUID와 Clock 같은 테스트하기 힘든 지점을 의존성 역전을 통해 개선한다.
  • port-adapter(의존성 역전) 패턴을 적용하여 헥사고날 아키텍처로 개선한다.
  • 모든 테스트를 mockito와 h2에 대한 의존없이 개선한다.

레이어드 아키텍처 밖에 모르고 헥사고날 아키텍처에 관심이 있는 분, 테스트 가능성과 좋은 코드에 대해 욕심이 있는 분이라면 시야를 넓히기 굉장히 좋은 강의다.
강의가 총 6시간 20분 밖에 안되는게 아쉬울 정도로 너무 알찬 구성에 만족하는 강의였다.

토비의 스프링 6 - 이해와 원리

얼마전에 올라온 인프런의 토비님 강의가 토비의 스프링 1권에 대한 내용을 설명한다고 하셔서 학습해보았다.
1권을 읽은 입장으로는 요즘 시대에 맞는 내용들만 추려서 핵심만 설명해주신 것 같다.

  • 스프링 IoC/DI의 이해를 돕기위한 DIP와 OCP를 적용하면서 점진적인 구조 개선
  • 시간이나 외부 서비스가 포함된 테스트 케이스를 작성하는 방법
  • 스프링에서 사용하는 템플릿을 이해하기 위한 템플릿/콜백 패턴 예제
  • 스프링의 예외 추상화
  • 서비스 추상화를 이해하기 위한 JPA → JDBC로 변경
  • 트랜잭션 AOP를 이해하기 위한 트랜잭션 프록시 구현

위의 내용을 깊진 않지만 넓게 설명해주었다.
1권을 읽은 분이라면 복습하기 좋고, 1권을 읽지 않았다면 강의에서 설명하는 내용만 더 자세한 내용을 책에서 읽어보면 좋을 것 같다.

기술

만들면서 배우는 클린 아키텍처

이때까지 도메인을 노출하는 형태의 레이어드 아키텍처만 사용해왔었다. 필요한 곳에 common 또는 util 패키지를 추가하여 어중간한 책임을 가진 클래스를 몰아넣는 지름길을 많이 선택해왔다.
이번 기회에 토이 프로젝트를 진행하면서 레이어드 아키텍처의 단점을 보완하면서 클린 아키텍처의 장점을 차용하는 멀티 모듈 아키텍처를 고민할 수 있었다.

Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트, 견고한 결제 시스템 구축 이 두 강의를 먼저 학습한 후에 읽은 것이라서 클린 아키텍처에 대한 특징과 구조는 이해하고 있었다.
하지만 레이어드 아키텍처의 명확한 단점을 설명하거나 클린 아키텍처의 각 계층에 대한 책임은 설명할 수 없는 수준이였기에 이 책을 읽게 되었다.
(유명한 '클린 아키텍처', '엔터프라이즈 애플리케이션 아키텍처 패턴 책'과 같이 고민하였지만.. 너무 두꺼워서 이 책을 선택하였다.)

이 책은 레이어드 아키텍처의 단점을 설명하면서 이 단점을 상쇄하는 클린 아키텍처로 내용을 전개한다.
책이 꽤 얇지만 인커밍, 아웃고잉 어댑터와 유스케이스가 가져야하는 책임과 계층간 모델 매핑 전략, 멀티 모듈에 대한 설명도 간략하게 하여 클린 아키텍처에 대한 윤곽은 잡기 충분하다고 느꼈다.
그리고 저자는 어떤 아키텍처가 옳다, 틀리다라는 관점을 가지고 있지 않고 현재 구조의 단점을 파악하여 함정을 잘 피해나가라고 조언한다.

즉, 레이어드 아키텍처의 단점을 상쇄하는 클린 아키텍처에도 함정은 있다는 것이다.
대표적으로 복잡도가 올라가고 작성해야 하는 코드 양이 늘어나기에 적절한 트레이드 오프를 통해 결정해야 한다고 한다.

이 책을 통해 토이 프로젝트 아키텍처의 가이드라인을 세우는 데 많은 도움이 되었다.
클린 아키텍처에 대해 너무 심오하게는 말고 가볍게 윤곽을 잡고 싶다면 이 책을 추천한다.

이벤트 소싱과 마이크로서비스 아키텍처

MSA에서 일관성 관리는 어떻게 하지? 작업 단위는 어떻게 관리하지? 이런 궁금증이 항상 있었는데 코드스피츠에서 이 책으로 스터디를 모집하기에 읽어보았다.
도메인 주도 설계부터 애그리게이트 설계, 객체지향 설계 원칙까지 설명하고 나서야 이벤트 소싱과 MSA를 설명해주기 때문에 베이스 지식이 없어도 부담이 조금 덜 했던 것 같다.

이벤트 소싱 자체는 나에게 엄청 신기하게 다가왔다. 상태 변화를 도메인 이벤트를 기준으로 기록하여 필요할 때 재수화하여 (성능상 스냅샷이나 CQRS를 이용할 수 있다.) 최종 상태를 만들어 응답한다는 것은 생각도 해본적이 없었기 때문이다.
(이 이벤트 소싱을 적극적으로 활용하는 곳이 있다면 다녀보고 싶다는 생각이 들었다.)
배우게 된 내용을 정리해보자면

  1. 이벤트 소싱
  2. 커맨드와 이벤트
  3. 동시성과 이벤트 충돌
  4. 아웃바운드 어댑터와 이벤트 발행 (트랜잭셔널 아웃박스 패턴과 메시지 릴레이)
  5. 인바운드 어댑터와 이벤트 소비 (트랜잭셔널 인박스 패턴과 리버스 릴레이)
  6. EventStore (메시지 릴레이에서 이벤트 브로커로 도메인 이벤트를 발행하기 위함)
  7. 분산 트랜잭션
  8. 사가 (오케스트레이션, 코레오그래피) : 시나리오를 전부 설명하기에 294p부터 참고
  9. CQRS

평소에 궁금했었던 내용들을 이 책을 통해 학습할 수 있게 되어서 재밌었다.
이벤트 소싱과 MSA에 대해 윤곽도 잡으면서 입문하기에는 부담없는 책인 것 같다.

자바의 신 1권, 2권

자바 기본서를 진득하게 다 읽어본적도 없고 flab 필독서로 나와있길래 읽어보았다.
언어를 처음 배울 때 학습했던 것들을 상기시키기 좋았으며, 처음 배운 내용도 있다.

  1. String 클래스가 자바 9부터 개선되었다.
    1. 내부 문자열 저장을 char[]에서 byte[]로 변경하였다.
    2. 내부 coder 필드를 통해 인코딩 방식에 따라 UTF16을 사용할지, LATIN1을 사용할지 지정하여 최적화한다. (Compact String)
  2. 자식이 메서드 오버라이딩 시 접근 권한을 확장 시킬 수 있다.
  3. 자바의 sealed class와 permits, non-sealed
  4. HotSpot 클라이언트 컴파일러와 HotSpot 서버 컴파일러
  5. Thread 생성 시 stackSize를 통해 스택의 크기를 제한할 수 있다.
  6. Thread는 임계영역 안에서 wait()을 실행하면 해당 lock을 반환한 상태로 기다린다.
  7. Serializable과 serialVersionUID에 대한 내용
  8. non reifiable varargs 타입에 대한 @SafeVarargs 어노테이션
  9. NIO의 WatchService
  10. OpenJDK 21 문서를 통해 자바의 버전별 개선 사항을 확인할 수 있다.
  11. Publish-Subscribe 프레임워크의 publisher와 subscriber 사이에 존재하는 Processor

더 빨리 배웠으면 좋았을만한 내용들이 많아서 첫 회사에 입사하자마자 읽었었다면 도움이 많이 되었을텐데 이제 읽어서 아쉽다.
자바의 Thread, NIO, 버전별 변화에 대해 학습하고 싶다면 2권만 읽기를 추천한다.

OAuth2 인 액션, 네티 인 액션 리뷰 내용 작성 시점을 놓침..

오브젝트

이 책은 2년전 코드숨 소소한 스터디에서 한 번 진행한적이 있었는데 초반에 조금 읽다가 포기한 경험이 있다.
그간 읽어야지 읽어야지 하면서 책이 두꺼워 못 펼쳐보았었는데 이번에 다 읽게 되었다.
토비의 스프링과 모던 자바 인 액션 같이 '조금 더 빨리 읽었으면 좋았겠다.' 라는 생각이 들 정도로 내용이 좋았다.
얄팍한 지식으로 대충 지레직잠하고 있던 내용들을 확실하게 학습할 수 있었고, 깨닫게 되는 내용도 많았어서 좋았다.

책이 꽤 두꺼운만큼 여러 개의 설계 예제들이 등장하며, 이 예제들을 이리저리 수정하고 확장해보면서 트레이드 오프가 어디서 어떻게 발생하는지 친절하게 설명해준다.
'이것이 왜 좋은 설계인지? 이것이 왜 나쁜 설계인지?'를 배울 수 있다.

책을 읽은 후에 아래와 같은 내용들도 깨닫게 되었다.

  1. 우리가 작성하는 코드들은 단순한 텍스트 쪼가리들이 아니다. 각 객체들은 유기체이며, 유기체들이 모여서 공생과 상생 관계를 가진다는 것을 명심해라.
  2. 메시지는 단순히 누가 누구를 호출하는 것이 아니라 특정 문맥에 대한 문제를 해결하기 위한 협력 요청이며, 그 요청은 책임에 맞는 역할을 가진 객체에게 분배되어야 한다.
  3. 객체의 상태에 초점을 맞추어 상태에 필요한 행동을 결정하는 방식으로 설계한다면 객체의 내부 구현이 인터페이스에 노출되기 쉽기에 클라이언트가 보는 시점에서 객체의 행동이 결정되어야 한다.
  4. 항상 객체 설계에서 고민하던 내용들은 어떤 지점에 어떤 추상화 기법을 사용해야 하는지만 고민했다. 하지만 더 중요한 점은 내부와 외부를 분리하고 변하는 것과 변하지 않는 것들을 최대한 구분해서 변하는 것들을 최대한 캡슐화하고 변경의 여파를 제한하는 것이다.
  5. 추상화와 다형성을 통한 런타임 의존성, 동적 디스패치를 잘 활용하여 유연성을 가져야한다.
  6. ...

객체지향 프로그래밍이라는 크고 두루뭉술한 단어에 대한 스스로의 주관적인 생각과 윤곽을 잡기에 좋은 책이라는 생각이 들었다.
만약 아래에 대한 질문에 관심이 생긴다면 이 책을 강력 추천한다.

  • 협력, 책임, 역할에 대해 이해하고 있는가? 설계에서 얼마나 고려하는가?
  • 명령 쿼리 분리 원칙을 이해하고 있는가?
  • 유연하고 확장 가능한 협력관계를 구축하기 위해서는 객체와 객체 간에 어떤 의존성이 존재해야 하는가?
  • 서브클래스라고 모두 서브타이핑이라고 볼 수 있는가?
  • 추상 클래스와 인터페이스, 상속과 합성에 대한 차이점을 이해하고 트레이드 오프를 고민해볼 수 있는가?

코틀린 디자인 패턴 2/e

이 책은 코틀린으로 생성 패턴, 구조 패턴, 동작 패턴 그리고 동시성 패턴까지 활용하는 방법을 알려준다.
가장 인상 깊은 내용은 코루틴을 활용하는 동시성 패턴이였다.
코틀린의 sequence, channel, flow가 자바의 Executor API보다 훨씬 사용하기 편하고 빠르다는 것을 알 수 있어서 좋았다.

언어 레벨에서 연산이 오래 걸리는 작업을 분배하여 처리하고 결과를 다시 묶어서 보내는 등 코루틴에 대한 흥미가 생겼다.
그리고 코틀린 다운 코드는 어떻게 작성하는지, reified가 무엇인지 알 수 있었다.

코틀린 기본 정도만 알고 있으면 충분히 학습할 수 있는 내용들이라서 코틀린과 코루틴에 대한 인사이트를 얻고 싶다면 추천하고 싶다.
스터디 내용은 여기서확인할 수 있다.

HTTP/2 인 액션

사내에서 Armeria + gRPC를 통한 POC를 진행한 적이 있는데 HTTP/2에 대한 이해가 없었어서 힘들었던 경험이 있다.
위의 경험 때문에 코드숨 스터디 모집을 보고 바로 참가했다.

HTTP/2가 개선되긴 했지만 HTTP/1.1과 비교해서 명확하게 어떤 부분이 개선되었는지 , 스트림에 대해서는 들어봤는데 명확하게 어떤 방식으로 통신이 이루어지는지 알지 못했다.
이 책은 HTTP/2 뿐만이 아니라 HTTP/1.0, HTTP/1.1, HTTPS, TCP, QUIC에 대해서도 설명해주어서 가려웠던 부분을 시원하게 다 긁어준다.

  1. HTTP/1.1까지의 문제점과 한계
  2. HTTP/2 개념과 프레임, 단일 연결 다중 요청
  3. HTTP/2 푸시, 최적화
  4. HTTP/2 스트림, 흐름 제어, 스트림 우선순위
  5. QUIC과 HTTP/3를 설명하기 위한 TCP의 비효율성과 UDP를 선택한 이유

이번 책으로 인해서 HTTP/2가 어떤 문제를 어떻게 해결하는지, 한계는 무엇인지를 이해할 수 있었다.

스터디에서 매 챕터마다 문제를 제공해줘서 문제를 풀면서 학습할 수 있었어서 좋았다.
네트워크 내용이 너무 방대해서 항상 네트워크 책을 읽을 때 마다 힘들었는데, 이번 책은 HTTP 프로토콜에 대해 집중적으로 설명해줘서 다른 책에 비해 덜 힘들었던 것 같다.

요즘 많은 회사에서 HTTP/2를 적용한 통신 방법을 채택하고 있고 전반적인 네트워크 변화의 흐름에 대해 이해하기 위해서는 정말 좋은 책이라고 생각한다.

Real My SQL 1권

MySQL의 아키텍처부터 메모리 영역, 인덱스, 옵티마이저와 힌트, 실행 계획까지 넓고 깊은 내용을 학습할 수 있었다.

  • 아키텍처
    • MySQL 엔진, 스토리지 엔진, 핸들러 API
    • 포그라운드, 백그라운드 스레드
    • 글로벌 메모리 영역 (InnoDB 버퍼풀, InnoDB 어댑티브 해시 인덱스, InnoDB 리두 로그 버퍼 등)
    • 로컬 메모리 영역 (커넥션의 생명주기와 동일한 커넥션 버퍼, 결과 버퍼 그리고 쿼리를 실행하는 순간에만 할당했다가 다시 해제하는 소트 버퍼, 조인 버퍼 등)
    • 쿼리 실행 구조 (쿼리 파서 → 전처리기 → 옵티마이저 → 실행 엔진 → 핸들러)
  • InnoDB 스토리지 엔진 아키텍처
    • 언두 로그를 활용한 MVCC와 잠금 없는 일관된 읽기
    • 버퍼풀 (데이터 페이지를 관리하는 LRU 리스트 구조, 클린 페이지, 더티 페이지)
    • 리두 로그, 언두 로그, 체인지 버퍼, 어댑티브 해시 인덱스
  • 인덱스
    • 인덱스를 통한 데이터 읽는 방법
  • 옵티마이저와 힌트
    • 데이터 스캔 방식
    • 정렬과 조인 처리 방식
  • 실행 계획과 통계정보
    • 실행 계획 분석 방법

많은 양의 이론적인 내용들을 설명해서 지루한 부분도 있었지만 겉핥기 식으로 알고 있었던 인덱스와 실행 계획에 대해 학습할 수 있어서 좋앗다.
한 번 읽고 모든 내용을 기억할 수는 없으니 일회독으로 MySQL에 대한 윤곽을 어느정도 잡고 나중에 필요할 때 찾아봐야할 것 같다. MySQL을 사용하는 개발자라면 필수로 읽어야 할 책이라고 생각한다.

타입으로 견고하게 다형성으로 유연하게

정적 타입 언어는 타입 검사기를 통하여 생산성을 높이기도 좋고, 불필요한 실행 중 검사를 없앨 수 있어서 프로그램이 좋은 성능을 내는데 유리하고 큰 프로그램을 만들 때 타입 검사기의 위력은 강력하다.
타입 검사기가 거부하는 코드를 줄이고 정적 언어를 잘 사용하기 위해 여러 경우에 대한 다형성,가변성에 대한 이해와 타입 검사기와 친해지도록 노력해야 한다.

이 책을 통해 아래의 내용을 학습할 수 있다.

  1. 여러 종류의 다형성
  2. (JVM 언어에서는 지원하지 않는) 다른 언어의 기능
  3. 최대, 최소 타입
  4. 제네릭 가변성
  5. PECS를 지켜야하는 이유
  6. 타입 클래스, 카인드

제일 와닿았던 부분은 제네릭 가변성에 대한 이해가 없을 때 이게 왜 안되는지 몰랐던 부분들을 깨닫게 도와줬다.
PECS : producer-extends, consumer-super를 외워서 사용했는데 왜 저렇게 제한해야 하는지 더 깊은 이해를 할 수 있도록 도와주었다.

이 책을 읽으면서 안다고 착각했던 부분들이 많았다는 것을 깨달았다. 정적 타입 언어에 대한 이해를 한층 더 높여준 책이다.
개발하면서 타입 검사기가 거부하는 상황이 발생하면 IDE의 도움을 받아 어영부영 넘어간 경험 또는 제네릭이나 제네릭을 통한 타입 매개변수 제한을 사용할 때 타입 검사기가 왜 거부하는지 이해하지 못 했던 경험이 있다면 이 책은 큰 도움이 될 것이다.

내 코드가 그렇게 이상한가요?

(박성철님의 이 글을 보고 구매해서 읽어보았다.)
대부분의 개발자들은 코드를 작성하는 시간보다 코드를 읽고 이해하려 노력하는 시간이 더 많을 것이다.
그 이해를 바탕으로 코드를 수정하거나 기능을 추가하고 테스트를 할 것이다. 하지만 이 행위는 말처럼 쉽지 않다.

이해하기 힘든 코드, 의도를 전혀 알 수 없는 코드들을 맞닥뜨린 경험 또는 수정이나 확장했을 때 어디까지 영향을 끼치는지 확인하다가 하루가 다 가버린 경험, 냄새나는 코드인 줄은 알지만 어떻게 수정해야 할지 몰라서 결국 냄새나는 코드를 또 작성하며 죄책감을 느낀 경험이 있다면 이 책이 재밌게 읽힐 것이다.
이 책에서는 이와같이 개발 능력을 떨어뜨리고 소프트웨어의 성장을 방해하는 설계, 또는 구현상의 문제를 악마에 비유하며 악마를 인식할 수 있는 시각과 악마가 코드에 스며들지 못하도록 예방하고 무찌를 수 있도록 도와준다.

많은 책에서 응집도와 결합도 이야기가 자주 나오는데 항상 뉘앙스로 이해 했었다.
이 책에서는 명확하게 데이터와 로직 등이 분산되어 있는 것을 응집도가 낮은 구조 라고 정의한다.
응집도가 낮고 결합도가 높을 때 발생하는 코드 중복, 수정 누락, 가독성 저하, 초기화되지 않은 객체, 잘못된 값 할당 들을 설명해준다.
그렇다고 코드 중복을 해결하기 위해 섣부른 일반화를 해서도 안된다. 코드 중복을 제거하는것이 핵심이 아니라 비즈니스적인 책무를 일반화 해도 괜찮은지를 먼저 고민해야한다.
즉, 같은 로직, 비슷한 로직이라도 개념이 다르면 중복을 허용해야 한다.

  1. 성숙한 클래스를 설계하기 위해 클래스의 내부 필드와 그 필드를 가공하는 로직이 분산되지 않도록 노력해야하며 인스턴스 변수가 잘못된 상태에 빠지지 않게 하기 위한 구조를 만드는 것임을 명심해야 한다.
  2. 값 객체, 완전 생성자, 불변, 부수 효과 방지 는 기본적으로 유의해야 한다. 그렇다고 응집도를 높이기 위해 로직을 한곳에 모아 강한 결합 구조를 만들지 않도록 신경써야 한다.
  3. ..Manager, Person, Product와 같은 너무 범용적인 이름을 사용하여 많은 책임과 관심사를 가지도록 하면 안된다. 목적 중심 이름 설계를 명심해라.
  4. 관심사가 다르고 관계없는 책무를 가진 메서드는 동사 + 목적어 형태가 되는 경향이 있으므로 메서드 이름은 동사 하나로 구성되게 해라.
  5. 모델특정 목정 달성을 위해서, 최소한으로 필요한 요소를 갖춘 것이다. 그렇기에 목적 달성의 수단 이며 목적별로 모델링해야 한다.
  6. 모델 != 클래스 이다. 일반적으로 모델 하나는 여러 개의 클래스로 구현된다. 클래스 설계와 구현에서 무언가를 깨닫는다면, 이를 모델에 꾸준하게 피드백해야 한다. 그렇지않으면 서로 괴리가 생긴다.
  7. 일급 컬렉션에 대한 내용을 넥스트스텝 코틀린 교육에서 접했을땐 코틀린에서 지원하는 컬렉션 공통 함수들을 사용하기 불편하다고 생각해서 와닿지 않았었는데 이 책을 통해 잘못이해하고 있었다는 것을 느꼈다.

인상 깊은 내용들은 이 정도로 정리할 수 있겠다. 중후반부 까지는 좋은 코드를 작성하는 방법, 설계에 대한 강조, 모델의 개념들에 대해 설명했다.
(엘레강트 오브젝트가 자주 떠올랐다.)

대체로 이렇게 코드,설계 레벨에서 마무리짓는데 이 책은 후반부에 레거시 코드와 엔지니어의 성장 가능성의 관계, 설계를 방해하는 환경, 리뷰의 의의 들도 설명하면서 자신의 업무 환경을 개선하기위한 용기와 방법을 알려준다.
팀에 새로운 인원이 투입된다면 온보딩 기간에 읽어야 할 책으로 선정해도 무방할 정도로 좋은 책이였다.

이 책 덕분에 레거시 코드 활용 전략에 흥미가 생겨 읽어볼 예정이다.

켄트 벡의 Tidy First?

이 책은 설계와 코드 정리를 잘 하기 위한 방법을 배우기 위해 읽기도 좋지만 코드 정리와 설계를 진행하면서 발생하는 비용에 대한 생각 을 깨닫기 위해 읽기 좋은 책이라고 생각한다.

  1. 이미 잦은 코드 정리가 진행되고 있어 변경사항 적응하는 것에 대한 팀원들의 불만은 없는지?
  2. 코드 정리가 결과적으로 도움이 되는지?
  3. 해당 변경사항이 코드 정리인지, 동작 변경인지? 코드 정리를 먼저할지? 동작 변경을 먼저할지?
  4. 코드 정리, 설계 대상이 얼마나 자주 변경되는지? 얼마나 자주 읽히는지? 얼마나 읽기 어려운지?

위와 같이 코드 정리, 설계를 진행할 때 고려해야할 것들의 근본적인 원인은 코드 정리, 설계를 진행하는 것은 비용이 들기 때문이다.
일반적으로 개발자들이 근무하는 회사는 영리기업이고, 영리기업은 이윤을 목적으로 하기 때문에 지금 당장 이익을 얻기는 힘들면서 미래에 투자하는 코드 정리와 설계같은 업무는 비용 지출에 대한 이익과 손실을 고려하여 진행해야 한다.

오늘의 1달러가 내일의 1달러보다 더 가치가 있기 때문에 버는 것은 빨리하고, 쓰는 것은 가능한 뒤로 미룹니다.
혼란스러운 상황에서는 어떤 물건에 대한 옵션이 물건 자체보다 낫기 때문에 불확실성에 맞서는 옵션을 만듭니다.
즉, 지금 돈을 벌려면 미래의 옵션이 줄어들 수 있지만, 지금 돈을 벌지 못하면 미래의 옵션을 행사할 여력이 없을 수도 있다.

금융 업계의 옵션을 소프트웨어 설계 결정에 투영한다. 옵션은 '선택'의 의미를 내포하는데,
소프트웨어 설계 문제에서 옵션을 보유하는 일은 당장 모든 비용을 '동작 변경'에 모두 투자하는 대신에 '선택 가능성' 혹은 '선택의 기회'를 유지하는 것이다.

이익이 미래에 언제 발생하는지? 그리고 그 이익은 얼마나 확실한지?를 스스로 질문해야 한다.
결국 지금 돈 벌기지금 돈 쓰기를 고민하는 것이다.

지금 돈 벌기 지금 돈 쓰기
정의 현금 흐름 할인, 발생하는 비용의 시간 가치 옵션, 선택 가능성을 늘리기
설명 흐름 할인지금 돈을 벌 수 있게 기능 변경 및 추가 미래에 기능 번경을 더 쉽게 할 수 있게 코드 정리, 리팩토링, 설계
지금 돈을 못 벌면 미래는 없다. 변경 비용이 높아지면 미래가 없다.

옵션을 만드는 것과 동작을 변경하는 것의 균형을 맞추는데 집중해야 한다.
가치에 대한 예측이 불확실할수록 바로 구현하는 것보다 옵션이 지닌 가치가 더 커진다. 바로 구현하는 것보다 변화를 포용하면 창출한 가치를 극대화할 수 있지만, 그 상황은 통상적으로 소프트웨어 개발이 극적으로 실패하는 지점이다.

비용(코드 정리) + 비용(코드 정리 후 동작 변경) < 비용(바로 동작 변경) 이라면 코드 정리를 진행해도 좋다. 그 반대라면 고민해야한다..
비용에 대한 판단력을 기르기 위한 연습을 꾸준히 한다면 어떻게 설계해야 하고 언제 설계하지 말아야하는지 직감적으로 느낄 수 있을것이다.

  • 비용 : 코드를 정리하면 비용이 줄까요? 아니면 나중에 하는 편이 나을까요? 줄일 가능성이 있을까요?
  • 수익 : 코드를 정리하면 수익이 더 커질까요? 혹은 더 빨리 발생하거나 커질 가능성이 있나요?
  • 결합도 : 코드를 정리하면 변경에 필요한 요소의 수가 줄어드나요?
  • 응집도 : 코드를 정리하면 변경을 더 작고 좁은 범위로 집중시켜 더 적은 수의 요소만 다룰 수 있을까요?

옮긴이의 글들도 참고하자.

켄트 백의 구현 패턴

클린코드와 리팩토링에 관심을 가지면서 접하게 된 책이다. 아마 이때까지 읽은 책들 중에 가장 많은 인덱스 스티커를 사용한 것 같다.
켄트 백은 서문에서부터 "프로그램을 짤 때는 자신과 컴퓨터뿐만 아니라, 다른 사람들을 생각해야 한다!"고 강조한다.
기능을 개발하는 비용이 1이라면 그 소프트웨어가 폐기될 때까지 유지보수하고 기능을 추가하기 위한 비용은 1보다 크다는 것을 다 알고 있을 것이다.
그렇기에 정확하게 작동하도록 코드를 작성하는 것은 당연하지만 다른 사람들이 읽기 편하도록 작성하는 것도 정말 중요하다.

이 책은 개발하면서 만나는 많은 선택들을 "내 생각을 다른 사람에게 어떻게 전달할까?" 고민에 차선책을 선택할 수 있도록 도와준다.
이런 고민과 결정은 책임감장인 정신을 지키기 위한 자신의 양심과 자랑스럽지 않은 일을 하지 않으려는 마음에 의존한다.

"좋은 코드가 상업적 성공에 필수적인 부분은 아니다. 조잡한 코드로 돈을 많이 버는 사례가 있다고 할지라도, 나는 여전히 코드 품질이 매우 중요하다고 믿는다."
"기능을 개발하고 출시하며, 기회와 경쟁 상황에 따라 개발 방향을 바꿀 수 있으며 위기 속에서도 직원들의 사기를 높일 수 있는 회사는 조잡하고 버그가 있는 코드를 작성하는 회사에 비해 성공할 확률이 높다."
"설사 좋은 코딩이 장기적으로 경제적 이득을 가져오지 못한다고 하더라도 나는 여전히 내가 작성할 수 있는 최고의 코드를 작성할 것이다."

많은 패턴을 학습하여도 개발하면서 모든 상황을 커버할 수 없고 정형화된 패턴도 적용할 수 없는 경우가 있다.
이때는 학습한 이론과 패턴이 아닌 결정 사항에 영향을 끼치는 가치원칙 이 존재한다.

  • 가치는 코드의 복잡성을 낮추고 가독성을 중시하며, 유연성있는 코드를 작성하는 클린 코드의 가치이다.
  • 원칙은 가치처럼 언제나 적용되는 것은 아니지만 때로는 직접 적용하기 어려운 가치와 적용법은 명확하지만 조금은 지엽적인 패턴 사이의 가교 역할을 하는 것이 원칙이다.

패턴은 "지금 당장 무엇을 해야할지" 알려주며, 가치는 "패턴을 사용해야 하는 동기"를 알려주고, 원칙은 "동기를 행동으로 어떻게 바꿔줄지" 알려준다.

절대적인 최고의 개발 스타일이란 존재하지 않는다. 가치, 원칙, 패턴은 실무 경험과 다른 프로그래머와의 대화를 통해 스스로 만들어 가야한다.
일하는 환경에 따라 다르겠지만 업무에 치이다보면 좋은 코드와 나쁜 코드 작성에 대한 저울질을 할 때가 많다.
자신있게 항상 좋은 코드를 작성하기 위해 노력했다라고 말하기 힘든 경험들이 분명있을 것이다. 그리고 함께 일하는 동료들이 클린 코드에 대한 공감이 없어 괴리감을 느낄 수도 있다.

이 책은 그 괴리감을 메꿔주며 스스로의 소프트웨어 장인 정신을 확립해나가는데 큰 도움을 준다.

UML 실전에서는 이것만 쓴다

책의 제목을 보면 UML을 사용해야 한다고 강조할 것 같지만 실제로는 UML은 그저 표기법이며 목표를 이루기 위한 도구 임을 강조한다.
UML 다이어그램을 그리는 일도 비용이다. 시험해 볼 구체적인 것이 있고, 그것을 코드로 시험해 보는 것보다 UML로 시험해 보는 쪽이 비용이 덜 들때 사용해야 한다.
항상 산출물로 작성해야 한다는 강제성이 포함되거나 형식적인 문서라고 생각해서는 안된다. UML 다이어그램의 수명 주기는 짧게 가져가도록 버리는 습관을 길러야 한다.
잘 그려야한다는 생각을 버려라. 다이어그램을 잘 그리는 것, 시퀀스 번호에 점을 제대로 찍는 것은 중요하지 않다.
앞에 있는 사람들이 지금 논의하는 내용을 다 이해하고, 회의를 빨리 끝내 사람들이 코드를 빨리 작성하기 시작하도록 돕는 것이 핵심이다.

  1. 클래스 다이어그램
  2. 객체 다이어그램
  3. 시퀀스 다이어그램 : 객체 사이의 연결을 드러내기 위해 사용하지, 알고리즘의 세부사항을 자세하게 보여주기 위해 사용해서는 안된다.
  4. 상태 다이어그램
  5. 유스케이스 : 사용자의 눈에 보이지 않는 동작을 전혀 기술하지 않고 시스템 안에 숨겨진 메커니즘도 다루지 않는다. 오직 사용자가 직접 볼 수 있는 것을 적어 놓을 뿐이다.

UML 다이어그램을 이용해 시스템 설계에 대한 놓친 부분이나 보완할 점을 빨리 찾기 위함도 있다.
많은 책임을 가진 클래스를 발견하거나, 수정에 의한 여파가 여러 클래스에 전달되는 것을 발견하는 것이 대표적이다.

객체지향 개발의 SOLID 설계 원칙을 명심하고 나쁜 설계의 냄새가 스며들지 않도록 신경써야 한다.

  1. 하나를 바꿀 때 반드시 다른 것도 바꿔야 하는 경직성
  2. 한 부분을 변경하면 다른 부분에 문제가 생기는 부서지기 쉬움
  3. 작은 단위로 분해해서 다른 시스템에 재사용하기 힘든 부동성
  4. YAGNI 원칙을 위배한 쓸데없이 복잡함
  5. 필요없는 반복 과 코드를 작성한 의도가 불투명함

자주 변경되는 콘크리트 클래스에 의존하지 마라.
만약 어떤 클래스에서 상속받아야 한다면, 기반 클래스를 추상 클래스로 만들어라.
어떤 클래스의 참조를 가져야 한다면, 참조 대상이 되는 클래스를 추상 클래스로 만들어라.
만약 어떤 함수를 호출해야 한다면 호출되는 함수를 추상 함수로 만들어라.
구체적인 것보다는 이런 추상적인 것에 의존하는 편이 좋으며 추상적인 것은 구체적인 것에 의존하지 말아야 한다.

이 원칙들을 적용하는 가장 좋은 방법은 능동적으로 적극 적용하는 것이 아니라, 문제가 생겼을 때 그에 대한 반응으로써 작용하는 것 이다.
코드의 구조적인 문제를 처음 발견했거나, 어떤 모듈이 다른 모듈에서 생긴 변화에 영향을 받음을 처음 깨달았을 때 그때 비로소 원칙 가운데 하나 또는 여러 개를 써서 이 문제를 해결할 수 있는지 알아보아야 한다.

이 책에서 UML 다이어그램의 내용은 절반도 되지 않는 것 같다.
UML 다이어그램은 단지 도구에 불과하다는 것을 명심하고 본질에 집중하라는 느낌이다.
좋은 품질의 소프트웨어를 작성하기 위한 객체지향 설계, 짝 프로그래밍, 테스트 코드(분로 단위 테스팅 패턴 등), 리팩토링, 개발자의 꾸준한 학습, 휴리스틱, 개발 일정 등에 대해 설명한다.
가장 중요한 핵심은 우리가 좋은 코드를 작성하기 위한 이유가 사람을 위한 것이라는 점을 명심하자.

휴리스틱
우리말로 번역하면 경험적 방법이며, 어떤 문제가 있는데 그 문제를 푸는 방법이 아직 없거나 현실적으로 불가능할 때, 문제를 풀기 위한 정보가 완전하지 않을 때,
또는 확립된 절차에 따라 답을 구할 수 있을 정도로 문제가 명확하게 정의되지 않았을 때 경험이나 직관을 사용하거나, 노력을 기울여 시행착오를 거치며 충분히 효율적인 해답이나 지식을 알게 되는 과정이다.

엘라스틱서치 바이블

실무에서 엘라스틱서치와 맞닿아 있는 업무를 할 때 모르고 넘어가는 것이 많아 불편하고 찝찝한 느낌이 있었다.
그리고 데이터 팀의 공유 사항을 들으면 이해 못하는 것이 많았다.

  1. 운영중인 여러 개의 검색 클러스터, ES 내부 아키텍처에 대한 이해가 없어 검색 이슈가 발생했을 때의 상황과 해결 방법을 이해할 수 없음
  2. ES QueryDSL 작성할 때 마다 구글링을 하는 불편함
  3. 현재 운영중인 ES 환경의 문제점과 개선점에 대해 고민하거나 공감할 수 없음

위와 같은 이유로 엘라스틱서치를 공부해야겠다는 생각이 들었고 사내 스터디를 만들어서 읽어보았다.
ES에 대한 지식 하나도 없었지만 읽기 편했고 대부분의 개발책은 외국에서 쓰여서 번역본으로 읽게 되는데 이 책은 내국인이 써서 읽기 편했다.

읽으면서 내용들을 정리해 보았다.

  1. 엘라스틱서치 클러스터 수준에서 루씬 세그먼트와 루씬 commit, flush 그리고 translog 수준까지의 개괄적인 구조
  2. 복잡한 수준의 쿼리를 작성하면서 설명하진 않지만 기본적인 여러 종류의 ES Query DSL
  3. 인덱스 설정과 필드 타입
  4. 문서를 검색하거나 조작하는 여러 문서 API
  5. 저수준, 고수준 REST 클라이언트와 최신 자바 클라이언트 사용 방법

위의 내용들을 재밌게 읽었다.
하지만 아래와 같이 실제 운영하는 인원에게 도움이 되는 내용들은 흥미가 없었다.

  1. 엘라스틱서치, 키바나, 클라이언트 등을 TLS로 구성하는 방법
  2. 인덱스, 샤드 운영 전략과 스냅샷 복구 방법
  3. 코드 레벨의 동작과 커스텀 플러그인

전반적인 내용으로 봤을 때, 엘라스틱서치 클라이언트 입장이거나 엘라스틱서치의 관계자인 개발자보다는 클러스터를 직접 운영하고 튜닝하거나 깊은 내용의 이해를 필요로 하는 개발자한테 도움이 많이 될 것으로 보인다.
그래도 학습하면서 현재 실무 운영 환경과 책의 내용을 비교하면서 읽을 수 있었고 같은 회사의 팀원들과 읽어서 더욱 재밌게 읽었던 것 같다.
이 책으로 진행한 스터디 덕분에 실무 환경에서 모르고 넘어갔던 부분들을 배울 수 있었고 백엔드만의 영역이 아니라 데이터 팀의 영역에 대한 시야도 넓어진 느낌이다.

실용주의 프로그래머

12월 8일부터 01월 18일까지

처음엔 3,4주면 다 읽을 줄 알았는데 6주가 걸렸다. 너무 기대해서 그런지 지루한 느낌이 있었다.
기술 책이라기 보다는 개발자라는 직업의 장인 정신에 대한 이야기 를 한다고 느꼈다.
누구나 문제에 접근하는 태도와 방식, 철학에 차이가 있는 실용주의 프로그래머 가 될 수 있다고 설득한다.

  1. 자신의 경력에 대한 책임을 지고, 자신의 무지나 실수를 주저없이 인정하며 정직하고 솔직해야 한다.
  2. 어설픈 변명 말고 대안을 제시하라.
  3. 프로그램을 과도하게 장식하거나 지나칠 정도로 다듬느라 망치지 말라.
  4. 왜냐고 다섯 번 묻기
  5. 직교적인(응집도가 높은) 시스템을 작성하도록 노력하여 관련 없는 것들 간에 서로 영향이 없도록 하라.
  6. 누군가에 문제를 설명해봐라. 고무 오리라도 괜찮다.
  7. 여러분은 완벽한 소프트웨어를 만들 수 없다.
  8. 이 책의 저자는 문제를 찾고 원인을 밝히기 위해서는 사고가 난 지점에서 "일찍 멈추기"를 장려한다.
  9. has-a가 is-a 보다 낫다.
  10. 의도적으로 프로그래밍하라. 우연에 기대지 말고 가정에 의존하지 마라. 신뢰할 수 있는것에만 기대라.
  11. 리팩토링가 기능 추가를 동시에 하지 말라.
  12. 요구 사항 문서는 의뢰인을 위한 것이 아니다.

책을 읽으면서 표시해놓은 인덱스들을 작성해봤다. 위의 내용만 보아도 책에서 설명하는 범위는 굉장히 넓은 것을 알 수 있다.
개인적으로는 철학, 편집도구, 클린코드, 테스트, 태도, 문서화, 협업 등 내용이 너무 포괄적이라서 흥미를 느끼지 못한 것 같다.
순서대로 읽기 보다는 목차에서 관심있는 주제들을 골라서 읽는 것을 추천한다.

개발자의 글쓰기

책이 얇고 글씨도 커서 금방 읽은 것 같다. 글을 쓸때 꼭 포함시켜야지 하는 중요한 내용들을 위주로 쓰다보면 문맥 연결이 잘 되지않을 때가 있어 글쓰기 책을 한번 읽어보고 싶어 이 책을 읽어보았다.

서술식, 개조식, 도식의 차이

  • 서술식 : ~다.로 끝나는 완전한 문장으로 구성된 글을 말하며, 무엇을 설명하거나 논증할 때 주로 사용하는 방식이다.
  • 개조식 : 어떤 사항을 나열할 때 사용하며 종결 어미 대신 명사나 용언의 명사형(~했음)으로 끝내는 것이다.
  • 도식 : 사물의 구조나 관계, 상태를 그림이나 서식으로 보여주는 것이다.
  • 줄거리가 있는 설명이나 이야기라면 서술식 , 여러 가지 종류의 항목과 내용이 반복되거나 서술식에서 강조가 필요한 내용이라면 개조식 , 각 항목이나 사항의 관계를 명확히 규정하고 싶다면 도식 이다.

내가 작성하려하는 글의 특징을 잘 이해하여 선택하여야 한다.

네이밍 컨벤션

이 네이밍 컨벤션은 항상 같은 조직 구성원들의 노력이 동반되어야 한다고 생각한다. 사내에는 네이밍 컨벤션이 따로 없지만 이 책의 내용이 좋은 가이드가 되어준 것 같다.
반대되는 단어를 선택할 때 일관성과 개연성이 있어야 한다.

  • 이상, 초과, 이하, 미만 : and over, over, or under, under
  • 중단에 대한 단어 선택
    • 잠시 중단하고 재시작 가능할 때는 stop, 완전히 중단되어 재시작 가능성이 없을 때 end, 끝장을 봐서 재시작을 고려할 필요도 없을 때 finish
    • 다음 단계의 시작을 중단했을 때 suspend, 중단한 어떤 의도가 있을 때 hold
  • 어떤 값을 가져올 때
    • 어떤 값을 돌려받아서 반환하는 함수일 때 get, 검색해서 가져온다는 의미인 retrieve, 다른 것을 가져가지 못하게 독점하고자 할 때는 acquire
    • 현재 값을 가리키는 포인터가 다음 값으로 이동한 것을 가져올 때는 fetch
  • 어떤 값을 만들거나 수정할 때
    • 어떤 값을 정해진 틀에 넣을 때 set, 정해진 틀이 없으므로 먼저 틀을 만들때는 create
    • 내용을 단순히 바꾸는 change, 잘못된 것을 바로잡을 때 modify, 기존 내용과 달라졌음을 분명히할 때 revise

코드를 보는 개발자 사이에 일관적이고 개연적인 합의만 되어 있다면 어떻게 쓰든 상관없다. 오픈소스의 네이밍 특징들을 읽어보는 것도 추천한다.

기술 블로그의 4종류

  • : 직접 경험하고 실험한 과정이나 결과
  • : 어떤 것을 분석하여 의미를 풀이하고 해석한 것
  • : 산만하고 복잡한 자료를 편집해 질서를 부여한 것
  • : 여러 사람의 견해나 흩어진 자료를 한데 정리한 것

이 책에서 더 좋은 많은 내용들을 서술한다.
느끼기로는 글쓰기 가장 중요한점은 내가 쓸 글의 특징과 이 글을 읽을 독자의 관심이 무엇인지, 비즈니스 관점의 글쓰기가 필요하진 않은지 잘 판단하여야 한다는 것이다.

  1. 이 글을 왜 쓰는지?
  2. 이 글을 읽는 독자는 누구인지?
  3. 이 글을 읽는 독자에게 무엇을 말하려고 하는지?
  4. 이 글이 주장하는 바가 무엇인지?
  5. 이 글이 주장하는 바의 근거가 분명한지?

문제를 해결하면서 만난 모든 문제를 순차적으로 서술하기 보다는 문제 해결의 핵심 내용들을 정리하여 간결하게 써봐야겠다.

그 외

채식주의자

'채식주의자'에서 꽤 불편한 내용이 등장하는데.. 그 불편한 내용조차 전달력이 너무 좋아 생생하게 읽혔다.

이 책을 읽으면서 흥미 → 불쾌 → 답답함 → 공감 → 수긍 단계를 거친 것 같다.
영혜가 무너지기 시작하면서 가까운 주변 인물들이 어떻게 무너지는지 자세하게 묘사하는데, 왜 주인공 입장에서 공감해주려 노력하는 사람이 없을까? 왜 자기가 가진 렌즈로만 가까운 사람을 보려고 할까? 라는 답답함을 많이 느꼈다.
가장 가까운 남편, 가족들이 강요만 하고 이해하려 시도하지 않는 것부터 너무 답답했다...

공감하기 힘들었던 부분은 영혜가 채식을 시작하게 된 이유이다. 왜 나무가 되려 하는지, 왜 이기적이게 변했는지도 궁금하다. 영혜에 대한 이야기가 더 있었다면 답답함이 사라질 수 있지 않았을까
가장 안타까운 인물은 영혜의 언니라고 생각했다. 평생을 참아오고 지켜내면서 이겨내온 인물이였지만 스스로 무너질 뻔 했던 내용들이 마음이 아팠다.

이 책은 과하게 이야기하면 역겨운 내용이 포함되어 있기에 마음먹고 읽어보길 바란다. (불편했지만 재밌긴 했다)

소년이 온다

5.18 민주화운동을 소재로한 영화를 보면서도 사실 엄청 와닿진 않았던 것 같다. '아 이런 일이 있었구나..' 정도였던 것 같다.
하지만 이번엔 이 책을 읽으면서 그 때의 상황들을 확실하게 느낄 수 있었다. 출퇴근길 지하철에서 읽으면서 울컥도 하고 진짜 이런 일이 가능한 것인지 생각에 잠기기도 했다.
읽다보면 너무 빠져서 영화 한 편 보는 느낌이였다. 책을 다 읽었다면 노벨문학상 수상 특집 다큐 '한강이 온다' 영상도 추천한다.

썩어가는 내 옆구리를 생각해.
거길 관통한 총알을 생각해.
내 모든 따뜻한 피를 흘러나가게 한 구멍을 생각해.
그걸 쏘아보낸 총구를 생각해.
차디찬 방아쇠를 생각해.
그걸 당긴 따뜻한 손가락을 생각해.
나를 조준한 눈을 생각해.
쏘라고 명령한 사람의 눈을 생각해.

한국인이라면 꼭 읽어야 할 책이 아닐까

싯다르타

싯다르타를 보고 석가모니(고타마 싯다르타) 이야기로 오해할 수 있지만 동명이인인 싯다르타의 내면 성찰에 대한 이야기이다.
(고타마 싯다르타가 등장하긴 하지만 연관있진 않다.)
싯다르타는 최고 계급인 브라만 계급(바라문)의 가문에 속하였으며 다른 사람들에게 사랑과 존경을 받는 환경에서 자랐다.
게다가 바라문에는 최고의 지혜와 풍부한 지식이 있었음에도 불구하고 스스로 만족하지 않는 삶이였다.
깨달음, 자기를 비우는 일, 평정함을 얻는 것, 자기를 초탈하는 경지에 이르는 것이 목표였다.

그러기위해 여러가지 도전을 하게된다. 사문이 되어 자아로부터 벗어나는 법을 배우고 고타마 싯다르타의 가르침을 듣지만 그대로 수긍하지 않고 스스로 깨달음을 얻으러 가는 등 수많은 자기 발전의 단계를 거치게 된다.
싯다르타의 이런 경험들과 경험들에서 얻는 깨달음을 같이 경험할 수 있었다.

지식은 타인에게서 얻을 수 있지만 지혜와 깨달음은 그렇지 않다는 것이 기억에 남는다.
이 책은 한 고행자의 희로애락을 경험할 수 있는 책이다. 불안하고 잡생각에 자주 빠진다면 읽어보길 추천한다.

나의 하루는 4시 30분에 시작된다

어떤 블로그에서 이 책을 알게되어 시간 관리에 대한 동기를 얻을 수 있지 않을까 싶어서 읽어보았다.
책 읽기 전에 유퀴즈에 출연한 영상도 시청하는 것도 좋다.

저자는 미국 2개 주에서 변호사 자격증을 따고 국내 대기업에서 사내 변호사로 활동 중이다.
이 결과만 보면 평탄하고 문제 없는 삶을 살아왔으리라 짐작한다.
하지만 이 책을 통해 어린 시절 이민으로 겪은 따돌림, 주변 사람들과 스스로를 비교하며 쫓기는듯한 삶, 변호사 시험에 떨어질 떄 느낀 좌절들에 대한 이야기를 읽을 수 있었다.
이런 고난을 이겨내기 위해 수영을 연습하여 청소년 대표가 되고, 자아성찰과 건강한 피드백을 통해 스스로를 돌아보는 습관과 부족한 시간을 모아 시험에 재도전하는 노력을 이루었다.

이 기저에는 새벽 시간을 통해 내가 주도하는 시간을 꾸준히 만들어낸 것이다.
저자는 살면서 무언가를 쉽게 얻은 적이 없다고 얘기한다. 사람들이 피하는 험난한 길을 걸으며 인내를 기르고, 힘듦에서 즐거움을 찾는 습관을 갖게 되었다고 한다.

  • 새벽 기상은 시간이 없다는 핑계를 댈 수 없게 만든다. 새벽 시간은 내가 주도 하는 시간, 그 밖의 시간은 운명에 맡기는 시간이다.
  • 몸이 무엇을 하고 있는지가 아니라 머리와 마음이 무엇을 느끼는지가 휴식의 질을 좌우한다.
  • 자기계발을 할 때는 "멀리 가려면 같이 가라."가 적용되지 않는다. 외부 소음과 주변인들의 조언을 차단할 수 있는 용기가 필요하다.
  • 순간의 즐거움을 나의 발전과 교환해서는 안 된다. 타인의 설득에 쉽게 휘말리는 삶은 결코 안정적일 수 없다.
  • 진정한 발견은 자신이 잘하는 걸 찾는 것이 아니라 부족함을 인정하고 어제보다 더 나은 자신이 되기 위해 노력하는 것이다.

엄청난 위인이 얘기해주는 것이 아니라 일반인이 자신의 삶을 통해 교훈을 전달하니 더욱 와닿았다. (일반이이라고 하기에는 엄청난 정신력의 소유자이지만)
덕분에 평소 배우고 싶었지만 용기내지 못했던 일을 현재 새벽에 일어나서 실천하게 되었다.
이 책은 시간 관리를 어떻게 해야하는지도 설명하지만 (가장 중요한 것은) 시간 관리를 왜 해야하는지, 자기 인생을 주도하는 방법을 깨닫을 수 있어 좋았다.

이방인

너진똑 - 카뮈 [이방인]의 영상을 보고 내용이 궁금하여 읽어보았다.
허무주의염세주의에 가까워 보이는 주인공이 삶을 대면하는 자세를 볼 수 있었다.

"뫼르소에게는 모든 것들이 무관하다. 결혼하는 것과 결혼하지 않는 것, 범속한 장례식과 종교적 장례식, 직장에서 승진을 하는 것과 승진을 하지 않는 것이 다르다고 느끼지 못한다."
"자기 자신에게도 무관심하다. 자기 스스로의 감정에 대해서도 이방인인 것이다."

주인공은 어머니의 죽음, 여자친구의 청혼, 바다로 떠나는 즐거운 여행 등 삶을 살면서 경험하는 희노애락에 초연하다는 것을 느꼈다.
재판을 받으면서 부조리한 상황에도 거짓말을 하지 않겠다는 결연한 자세도 볼 수 있었다.
이런 주인공이 사형을 선고받고 죽음을 앞둔 심경 변화가 인상깊다.

책의 저자인 카뮈는 "죽음"을 통해 삶의 의미에 대한 물음을 던진다.

죽음은 우선 '몸'의 문제다. 햇빛과 바다가 주는 행복감을 전신에 맛보며 수영하는 젊은 육체, 축구장에서, 연극 문대에서, 신문 기자로 삶의 현장에서 매 순간 속에 열정적으로 몰입하는 육체에는 오직 현재만이 있을 뿐이다.
"내일 없는" 현재의 가득함, 이것을 카뮈는 "희망 없는" 삶 이라고 한다.

주인공이 죽음에 대하는 자세를 통해 인생을 대하는 자세를 배울 수 있다.

인간은 모두 다 "사형수"다. 삶의 끝에서 기다리고 있는 죽음의 확신이 인간을 사형수로 만들어 놓는다.
사형수는 죽음과 정대면함으로써 비로소 삶의 가치를 깨닫는다. 죽음은 삶의 가치를 더욱 돋보이게 하는 어두운 배경이며 거울이다.
필연적인 죽음의 운명 때문에 삶은 의미가 없으므로 자살해야 하는 것이 아니라 이 한정된 삶을 더욱 치열하게 살아야 한다.
이 소설의 참다운 주제는 삶의 찬가, 행복한 찬가다.

이 책은 서문, 작품 해설까지 포함되어 있어 이런 고전 문학에 익숙하지 않은 나에게 책을 이해하는데 굉장히 도움이 되었다.
그렇다고 모두 이해했는지는 모르곘지만.. 내년에 한 번 더 읽어보고 싶다.

프레임

책을 추천받아 읽어보았다. 아마 현재를 만족하지 못하고 불평만 하며 가지지 않은 것에 대한 욕심만 높아 스트레스를 받는 나를 보고 추천해준 것 아닐까 싶다.
책 이름을 보고 따분한 자기계발서로 예상할 수 있지만 연구 결과에 기반한 심리학 내용을 전개하여 흥미롭게 읽었다.

프레임은 "세상을 바라보는 마음의 창"이다. 어떤 문제를 바라보는 관점, 세상을 향한 마인드셋, 세상에 대한 온유, 사람들에 대한 고정관념등이 모두 프레임의 범주에 포함되는 말이다.
마음을 비춰보는 창으로서의 프레임은 특정한 방향으로 세상을 보도록 이끄는 조력자의 역할을 하지만, 동시에 우리가 보는 세상을 제한하는 검열관의 역할도 한다.

프레임은 우리가 지각하고 생각하는 과정을 선택적으로 제약하고, 궁극적으로는 지각과 생각의 결과를 결정한다.

프레임은 다양한 형태를 지닌다. 우리의 가정, 전제, 기준, 고정관념, 은유, 단어, 질문, 경험의 순서, 맥락 등이 프레임의 대표적인 형태다.

프레임 에 대한 특성과 연구 결과들을 설명한다.
그중에 인상깊은 연구들이 있다.

  1. 동메달이 은메달보다 행복한 이유
  2. 이미지 투사
    • 타인을 평가하는 기준은 자기 자신을 평가할 때도 그 기준을 중요하게 생각한다.
  3. 행동의 원인은 사람인가? 상황인가?
    • 나치의 반인륜적인 악행을 행한 사람들을 "소수의 악인, 소수의 사이코패스가 저지른 악행" 이라는 사람 프레임 으로 보지 않는 것
    • 악이 사람이 아니라 상황에 의해 유발된다는 상황 프레임 으로 보는 것
  4. 위의 연구에 힘을 싣는 권위에 대한 위험한 복종 연구
    • 지시자, 교사, 학생 3명의 인원 중 교사만 실험 대상이다.
    • 지시자는 교사에게 학생이 오답을 말하면 전기가 통하는 스위치를 누르도록 지시
    • 학생이 고의로 오답을 선택하게 하여 전기 충격을 15V에서 450V 까지 단계적으로 올렸다.
    • 마지막 수준까지 전기 충격을 가할 사람의 수는 극소수라고 생각했지만 67%에 해당하는 사람이 끝까지 복종
  5. 방관자 효과
    • 살인 사건에 최소한 49명의 목격자가 있었지만 경찰에 즉각적으로 알라지 않고 서로 떠넘김으로써 골든타임을 놓쳐 사망한 사건
  6. 군중의 힘
    • 고층 빌딩에 뛰어내려 자살하려는 긴박한 상황에 군중들이 오히려 자살을 부추기는 상황
    • 개인이 군중이라는 상황 속에서 자아 실종 현상을 심리학에서 "몰아" 라고 한다.
  7. 가장 긴 선을 고르세요.
    • 8명 중 1명을 속이는 실험, 8명 중 7명은 가장 긴 선을 선택하라는 질문에 동일하게 잘못된 답을 선택
    • 그 중 실험 대상인 1명은 처음엔 맞는 답을 선택하였지만 시간이 지날수록 7명이 선택한 잘못된 답을 선택한다.
    • 하지만 7명의 동조자 중 1명이라도 정상적인 답을 선택하면 정답률이 100%에 가깝게 회복된 것
    • 조금 다르게 7명의 동조자 중 1명이 다수가 선택한 오답이 아닌 다른 답을 선택하여도 정답률이 상승한 것
    • 집단의 다양성을 보장하여 우리 모두의 소신을 이끌어내야한다.
  8. 매몰 비용
    • 할인할 때 3000원 주고 스파게티를 사서 집에왔지만 친구가 온다하여 다시 사러 갔을 때는 6000원 주고 스파게티를 사왔다.
    • 친구가 못 온다고 하였을 때, 두 개의 스파게티 중 많은 사람들이 비싼 스파게티를 선택하는 것
    • 아깝다는 이유만으로 제값에 산 걸 먹어야만 된다고 생각하는 손실에 대한 원초적 거부

책이 나를 설명한다고 느낄 정도로 읽으면서 뜨끔한 적이 많았다.
그리고 읽으면서 유연함의 힘이 떠올랐다. 유연함의 힘은 커리어, 회사생활에 대한 내용이였다면 이 책은 삶에 대한 내용을 설명한다고 느꼈다.

심리학에 흥미가 있는 사람이라면 추천해주고 싶다.

타이탄의 도구들

개인적으로 자기계발서 책을 선택할 때는 어떤 주제에 특정적으로 관심이 생기거나 "몰입"과 "프레임", "이너게임"처럼 심리학을 근거로 연구 결과에 기반한 자기계발서들을 선택하려 한다.
타이탄의 도구들과 같이 성공한 사람들의 이야기를 전달하는 자기계발서를 좋아하지 않다보니 거부감이 드는 내용도 있었다.
원래는 조금 읽다가 덮었겠지만 추천받은 책이라서 끝까지 읽어보았다.

이 책은 세상에서 가장 성공한 사람들, 특정 분야에서 거대하고 영향력이 큰 사람들 타이탄과 나눈 이야기들을 전개한다.
그중에 인상깊은 내용만 간략하게 적어보면

  1. 나는 가진 것의 가치를 낮게 보고 가지지 않은(못한) 것에 집착한다는 이야기를 들은적이 있다.
    • 타이탄들은 "추구하는 것에만 집착하면 현재 갖고 있는 걸 잃는다. 반대로 현재 갖고 있는 것에 감사하면 마침내 추구하는 것을 얻게 된다." 라고 말한다.
    • '내가 감사하게 여기는 것들'을 떠올려라
  2. 나는 회의를 하거나 토론할 때 감정적으로 동요할 때가 있다.
    • "비판하는 사람도, 그것을 달게 받는 사람도 모두 자기 자신과 상대, 회사를 위해 기여하고 있다는 걸 깨닫아야 한다."
    • 점점 똑똑해진다는 것은 점점 강해진다는 뜻이니 강력한 의견과 침착한 태도를 유지해라
  3. 전속력으로 달릴 때의 속도와 즐기면서 달릴 때의 속도 차이는 크지 않다.
    • "우리는 천천히 해도 충분하다. 우리가 저지른 실수들은 대부분 나태함 때문이 아니라 야심과 욕심 때문이다."
    • "그러니 명상을 하든 컴퓨터 모니터 앞에서 벗어나 나 자신을 위해 시간을 쓰든, 아니면 함께 있는 사람에 집중하든지 속도를 늦춰야 한다."
  4. 부정적인 감정에 휩쓸리지 마라. 화를 내고 속상해하는 것은 백해무익이다. 그 시간에 대안을 찾아라.
  5. "당신은 인생의 몇 퍼센트를 화를 내고 걱정하고 좌절하는데 사용하고 있는가?"
  6. "자기 전에, 꼭 생각할 거리를 정해두고 자라."
    • "몰입"에서도 수면을 취하면서 무의식과 잠재의식으로 독창적인 해결책들을 찾는다고 하였는데 이 책에서도 관련 내용이 나왔다.
  7. 사회생활을 한다면 명심하라. 위기에 처했을 때 모욕감없이 자존심을 굽힐 수 있게 해주고, 편견없이 모든 유용한 조언들을 스폰지처럼 흡수할 수 있게 해준다.
    • 첫째. 당신은 당신이 생각하는 것만큼 유능하거나 중요한 인물이 아니다.
    • 둘째. 당신은 태도를 조금 바꿀 필요가 있다.
    • 셋째. 책이나 학교에서 배운것들, 당신이 안다고 생각하는 사실들은 대부분 시대에 뒤떨어졌거나 잘못된 것들이다.
  8. 분노가 찾아온다면 그 존재를 의식적으로 알아차리고, 이름을 붙이고, 바라보는 것. 그것이 우리에게 가장 필요한 지혜이자 최선이다.

그리고 책 마지막에 크리스토퍼 소머의 '단 하나의 결단'의 내용도 인상깊었다.
이루고 싶고 원하는 것을 위해 노력하고 있지만 발전이 보이지 않는다고 생각하는 사람이라면 꼭 읽어봤으면 좋겠다.

이 글 시작에 이런 종류의 자기계발서를 좋아하지 않는다고 적었지만 위에 작성한 내용 말고도 인상 깊은 내용들이 많았다.
모든 내용들이 다 와닿지는 않았지만 주옥같은 조언들이 많으니 나와 같이 이런 종류의 자기계발서를 기피하고 있다면 한 번은 읽어보길 추천한다.

가난한 아이들은 어떻게 어른이 되는가?

회사 책장을 둘러보다가 제목을 보고 재밌어 보여서 읽어보았다.

"나도 어린시절이 풍족하진 않았지" 라고 생각하면서 책을 읽었는데 내가 생각한 "풍족하진 않다."와 책에서 말하는 "빈곤"이라는 단어는 확실히 달랐다.
이 책은 8명의 청(소)년들 이야기를 어린 시절부터 성인이 될 때까지 3,4년 주기로 세 번이상 인터뷰를 진행한 내용들을 담았으며, 개개인들이 빈곤, 어려운 환경들을 어떻게 극복해나가는지 설명하는데 기질에 따라, 환경에 따라 다 다른 과정과 다른 결말이였다.

  1. 불우한 가정환경 때문에 자신을 챙겨주고, 염려해주는 사람은 없지만 철저한 자기 객관화와 주변 환경(복지센터 등)을 잘 활용한 사례
  2. 가족이 어려움을 겪고 헤어지는 위기도 있었지만, 결국엔 다시 결합하는 과정을 통해 가족에 대한 애틋함을 배워 행복한 가정을 꾸리는 것이 꿈인 사례
  3. 가난은 사회적으로 만들어진 현상이라는 것을 깨닫아 타인의 편견과 시선에 굴하지 않고 자신이 원하는 바를 추구해나간 사례
  4. 자신을 돌보고 자기 욕망과 사회적 위치를 사고하고 판단하는 내면적 성숙도, 성찰하는 힘이 강한 사례
  5. 한 개인이 어디에 위치해 있는가에 대한 정확한 파악과 자아실현을 위한 일이 무엇인가에 대한 인식 혹은 사고, 즉 자아정체감을 찾으려 노력한 사례

이런 긍정적인 작용들이 있었지만 "빈곤"이 주는 벗어나기 힘든 반작용들도 있었다.

  1. 사람을 쉽게 믿지 못하고, 깊은 관계를 가질 수 없다.
  2. 가족에 대한 책임감으로 부모님의 잘못된 집착과 관심에 벗어나기 힘든 상황
  3. 물질적인 것에 집착하는 상태

불평등한 사회에서 빈곤은 단순히 경제적 수치에 해당하는 저소득의 문제가 아니고, 그 영향력이 삶의 전반에 미친다.
불평등한 사회에서 사람들은 자신의 욕구 실현이 매번 좌절되는 경험을 하게 된다.
공부하고 싶어도 가정형편 때문에 못 하고, 안락한 주거환경에서 편안한 생활을 하고 싶지만 항상 불안에 휩싸여 낮은 삶의 질을 경험해야 하고,
모범이 될 만한 사람을 만나 배우고 각성해서 어떤 꿈을 실현하고 싶지만 주위에서 그런 사람을 접해보지 못하는 삶,
또한 이 삶의 패턴이 조부모, 부모로부터 지속적으로 반복되어왔다는 것을 경험하는 삶,
이러한 과정이 누적되면 자신이 누구인가 하는 사회적 존엄성에 침해를 입고, 이렇게 침해된 존엄성은 주체를 불안정한 상태로 만들며, 건강한 사회적 관계를 맺는데 질곡이 된다.
결국, 오랜 시간 축적된 빈곤은 자신의 욕구를 실현하고, 거기서 만들어진 능력을 발휘해 사회에 기여하고 이를 통해 개인적이며 사회적인 행복감을 추구하려는 가능성을 모두 훼손한다.

그럼에도 불구하고 이 책에서 소개하는 청(소)년들은 성인이되어 회사를 다니고, 결혼도 하며, 삶을 정상적인 궤도에 올리게 된다.
이 책은 개인적으로 굉장히 잘 읽혔다. 자기 삶이 지루하고 허무하다고 느껴진다면 이 책을 읽어보면 좋은 자극을 받을 수 있을 것이다.
이 책을 통해 가난과 빈곤은 대물림되어 사회적으로 만들어질 수 있다는 것과 극심한 빈곤은 생존 자체에 에너지가 너무 많이 들어가서 합리적 판단을 하고 미래지향적 사고를 할 에너지가 바닥난다는 것을 배웠다.

인간 불평등 기원론

'불안'을 읽다가 소개되어 불안보다 먼저 읽어보았다.
대부분의 사람들이 남에 비해 자신이 더 행복하지 않다고 생각하며 살아간다. 무엇인가 남보다 못한 점이 있다는 생각을 떨치지 못하는 것이다.
상대적으로 무엇인가를 더 가진 자와 비교하면서 발생하는 불평등에 대한 장자크 루소의 개인적인 생각을 전개한다.

인류에게 두 가지 불평등이 있다고 생각한다.
하나는 자연적 또는 신체적 불평등이라고 부르는 것이다. 이것은 자연에 의해 정해지는 것으로 나이, 건강, 체력의 차이와 정신이나 영혼의 자질 차이로 성립된다.
다른 하나는 일종의 약속에 좌우되고, 사람들의 동의로 정해지거나 적어도 용납되는 것으로 도덕적 또는 정치적 불평등이라고 할 수 있다.

다른 사람들보다 더 부유하다거나, 더 존경을 받는다거나, 권력을 더 가지고 있다거나 또는 타인을 복종하게 만든다거나 하는 특권들에 의해 성립되는 두 번째 불평등에 대해 소개한다.
이 불평등의 기원은

  1. 사회가 형성되고
  2. 사유재산이 인정되고
  3. 공동 생활의 경험과
  4. 무제한적인 인간의 가능성

에 따른 문명 사회의 부작용이라고 설명하며, 문명보다 원시를 더 높이 평가하는 듯한 느낌이다.
지구가 멸망하고 인류가 다시 등장하지 않는 한 이 책에서 설명하는 원초적인 자연 상태로 돌아갈 수 없을 것이다.
하지만 선과 악이라는 개념이 존재하지 않고 사회가 형성되기 이전, 완전 원초적 자연 상태에 살았던 미개인들은 더 행복하고 자유롭지 않았을까? 라는 생각이 들게한 책이다.

나의 문해력이 낮다는 것을 알게된 책이다. 읽는데 많은 집중이 필요했다.
불평등에 대한 생각을 해본적이 있다면 읽어보길 추천한다.

인간이 자연의 상태에 가깝게 있으면 있을수록 능력과 욕망의 차이는 점점 더 적어지고, 따라서 행복으로부터 그만큼 가까워지게 된다.
모든 것을 잃어버린 것처럼 보인다고 해서 그때가 가장 불행한 것은 아니다.
왜냐하면 불행이란 사물의 결핍 상태에서 오는 것이 아니라, 결핍감을 느끼게 하는 욕구에서 오는 것이기 때문이다.

왜 일하는가?

나는 개발자를 하기전에 기계설비 관련 일을 먼저 했었다.
처음에는 자동차 엔진 생산 라인 설비 유지보수를 하다가 유지보수말고 설비를 만드는 회사에 가고 싶어서 전기 자동차 모터 테스트 설비를 만드는 회사로 이직했었다.
그리고 설비를 만드는 회사에서 소프트웨어 팀과 협업했던 경험이 지금 개발자로 지내게된 계기가 되었다.

개발자를 하기전에는 일을 잘 해내고 싶다는 욕심이 없었다. 개인 시간에 공부를 한다거나 자기개발에 대한 노력조차 없었다.
삶과 일을 분리하여 생각하면서 퇴근 시간만 기다리고, 일에 대한 재미를 느끼지 못한 시기였다.
삶에 대해 무료함을 느끼면서 생산적이지 않은 행동들로 시간을 허투루 보내왔다.

하지만 개발자를 시작하면서 삶과 일을 분리하려 해도 분리할 수 없는 경험을 하고 있다.
읽고 싶은 책과 듣고 싶은 강의 목록이 생기고, 다음에는 무엇을 공부할지, 일을 더 잘 해내기 위해서는 무엇이 필요한지를 고민하며, 하고 싶고 경험하고 싶은 일, 환경, 목표가 생겼다.
자연스럽게 삶에 생기가 돌기 시작했고 생산적인 행동들로 시간을 보내기 위해 노력하고 있다.

이런 경험 덕분에 이 책을 읽으면서 공감할 수 있는 내용들이 많았다.

"세상에 태어나 단 한 번뿐인 귀한 삶을 사는데, 지금 당신은 정말로 가치 있는 삶을 살고 있는가?"

  • 내가 하고 있는 일을 사회악으로 생각하면서 단순히 돈을 벌기 위한 수단이라고만 생각하면 삶의 아름다움과 일의 재미를 느끼기 힘들다.
  • 일하는 수고로움을 아는 사람만이 안락함의 소중함도 아는 법이다. 추위를 알아야 따뜻함을 알듯이 말이다.
  • 인생과 일 = 능력 * 열의 * 사고방식
  • 자신의 일을 진심으로 사랑하는 사람을 볼 때 감동을 느끼며, 나도 그런 사람이 되기 위해 노력한다.

이 책을 통해 일을 사랑하는 방법과 일을 통해 삶의 아름다움을 느끼는 방법을 배울 수 있을 것이다.

"일하기 싫다. 먹고 살기 위해 어쩔 수 없이 회사에 나간다. 그러니 가능하다면 힘든 일은 피하고, 몸도 마음도 편하게 일하고 싶다."

위와 같은 생각을 한적이 있고 인생이 무료하고 일이 재미없다면 이 책을 읽어보길 추천한다.

오늘도 습관처럼 출근하는 당신에게 묻는다.
당신은 어떤 일을 하는가?
그 일을 통해 당신은 무엇이 되길 꿈꾸는가?
당신이 꿈꾸는 일과 삶의 미래는 어떠한 모습을 하고 있는가?

물고기는 존재하지 않는다.

어린 시절 저자는 아버지에게 "인생의 의미가 뭐에요?" 라고 물었을 때, 아래의 이야기를 듣게 된다.

"인생의 의미? 그런 것은 없어. 신도 없어. 어떤 식으로든 너를 지켜보거나 보살펴주는 신적인 존재는 없어."
"그런 것들은 모두 사람들이 이 모든 게 아무 의미도 없고 자신도 의미가 없다는 무시무시한 감정에 맞서 자신을 달래기 위해 상상해 낸 것일 뿐이니까."
"너 스스로는 특별하게 느껴지더라도 너는 한 마리 개미와 전혀 다를 게 없다는 걸."
"혼돈만이 우리의 유일한 지배자 이며, 혼돈은 우리의 그 무엇에도 관심이 없단다."
"우리는 전체 시간의 선에서 아주 아주 작은 영억에만 존재한단다. 그리고는 결국 사라질거야."
"그러니 너 좋은대로 살아"

저자는 힘들었던 학창시절, 자신의 실수로 인해 사랑하는 사람과 이별하는 등 삶에 대한 무력감을 느끼던 상황에서 아버지가 말해주던 혼돈과 대비되는 데이비드 스타 조던의 인생에 관심을 가지게 된다.

데이비드 스타 조던은 19세기에 스탠포드 대학교의 창립 총장으로 재임했었던, 어류학자로서 지대한 영향을 끼친 인물이다.

데이비드는 자신이 평생을 투자하여 만든 표본 컬렉션들과 문서들이 벼락으로 인해 모두 불탔을 때 자신이 잃은 것들을 되찾기 위해 재를 털고 곧바로 다시 물이 있는 곳을 찾으러 가는 의지 , 사랑하는 아내, 자식이 숨을 거두었을 때에도 툴툴 털고 황야로 다시 나가는 의지 , 샌프란시스코 지진으로 인해 표본 단지들이 박살날때에도 좌절하지 않고 표본들의 이름표를 표본에 직접 꼬메어 다시 단지에 넣는 의지 에 저자는 관심을 가지게 된다.

데이비드는 얼마나 많은 시간을 허비했는지 좌절할 시간조차 가지지 않고 혼돈이 지배하는 세계에서 질서를 만들려는 일이 거의 불가능해 보인다는 점도 고려하지 않았기에 저자는 데이비드 스타 조던에게서 희망을 품는 비결 , 가장 암울한 날에도 계속 앞으로 나아가는 비결 , 신앙없이도 믿음을 갖는 비결 배울 수 있을 것이라고 생각했다.

데이비드는 자기가 옳은 일을 하고 있다고 자신을 설득하고, 그런 다음 무한해 보이는 에너지로 목표를 추구하는 능력 이 있었다.
하지만 이 능력, 즉 자기기만(긍정적 착각) 을 능수능란하게 다루는 이 능력이 옳지 않은 곳에 발휘되어 데이비드의 어두운 면도 확인하게 된다.

  1. 족벌주의
  2. 미궁으로 빠진 제인의 죽음
  3. 자연속에 사다리가 내재되어 있다는 믿음
  4. 20세기 초반, 과학의 탈을 쓰고 퍼져나갔던 거짓된 신념 우생학의 기여를 한 전도사
  5. 우생학적 목표를 이루기 위해 전쟁을 반대하는 평화주의자
  6. 우생학으로 인한 강제적인 불임 시술 지지

저자는 모델로 삼으려했던 인물의 잔인성과 무자비함에 충격을 받지만 데이비드는 자기 죄에 대한 벌을 받지 않고 생을 마감한다.

1980년대에 분류학자들이 타당한 생물 범주로서 "어류란 존재하지 않는다"는 사실을 발견한다.
데이비드에게 너무 소중했던 그 생물의 범주, 그가 역경의 시간이 닥쳐올 때마다 의지했던 범주, 그의 평생을 바쳤던 그 범주는 결코, 단 한 번도 존재한 적이 없었다.

하지만 그 범주가 존재하지 않는다는 사실이 중요한 일일까?
우리가 다른 집단, 인종, 성별에 대한 생각이 우생학과 비슷한 차별일 수 있지 않을까?
나는 내가 존경하는 사람의 오류를 보았을 때 어떻게 대처할 수 있을까?

처음엔 위인에 대한 대단한 면을 읽으면서 존경심이 들었지만, 어두운 면을 읽으면서 어떻게 저런 행동을 할 수 있었을까? 라는 혐오감도 들었다.
이 책은 자연과학, 과학자, 에세이 분류에 속하여 넓은 범위에 대한 내용을 설명하여 읽는 사람마다 느끼고 깨닫는 점이 다를 것이라고 보인다.
(문학인 줄 알고 읽었지만) 과학에 더 가까운 내용이였음에도 불구하고 재밌게 읽었다.

불안

이 책은 군대 훈련소에서 처음으로 읽어보고 감명받았던 책이였는데, 개정판이 나왔다는 소식을 듣고 구매하여 다시 읽어보았다.
퇴사를 진지하게 고민하고 있던 시점에 읽어 더 재밌게 읽힌건지 모르겠다.

  1. 소속이 없는 무직
  2. 안정적인 수입이 사라지는 것
  3. 어느정도 나이에 맞는 사회적 지위가 사라지는 것

이런 걱정들 때문에 불안하여 퇴사를 미뤄왔었지만, 이 책을 읽고 내가 경험해보고 싶은 환경, 잘하고 싶은 분야로 도전하기 위한 퇴사에 대한 용기를 받았던 것 같다.

각설하고, 이 책은 "사람은 왜 불안하나?"에 대한 근본적인 내용을 설명한다.
불안 이라는 문제 해결을 위해 왜 불안한지?에 대한 원인을 이해하는 노력은 필수이다.

  • 사람은 왜 높은 지위를 갖기 위해 노력하나?
  • 사람은 왜 충분한 돈이 있음에도 불구하고 돈을 계속 모으려고 하나?

사랑을 얻을 수 있는 수단이기 때문이다. 다른 사람의 사랑이 중요한 이유는 사람은 날 때부터 자신의 가치에 확신을 갖지 못하고 괴로워할 운명을 타고났기 때문이다.
그 결과 다른 사람이 우리를 바라보는 방식이 우리가 스스로를 바라보는 방식을 결정하게 된다.

"자신의 자리에 확신을 가지는 사람은 남들을 경시하는 것을 소일거리로 삼지 않는다."
"오만 뒤에는 공포가 숨어 있기에, 괴로운 열등감에 시달리는 사람만이 남에게 당신은 나를 상대할 만한 인물이 못 된다는 느낌을 심어주려고 기를 쓴다."

하지만 다른 사람의 인정과 사랑을 받기 위한 지위와 명예, 부는 끝이 없다. 부는 절대적인 것이 아니고 욕망에 따라 달라지는 상대적인 것이기 때문이다.
장자크 루소의 <인간 불평등 기원론>에서 주장하는 내용처럼 근현대의 노동자가 야만인보다 행복한 것이 사실일까? 라는 질문도 생각해봄직 하다.
다른 사람이 나를 바라보는 시선, 나를 판단하는 그 잣대가 나에게 무슨 의미가 있을까 라는 생각이든다.

"칭찬을 받으면 더 나아지는가? 에메랄드가 칭찬을 받지 못한다고 더 나빠진다더냐?"
"만일 청중이 한두 사람만 빼고는 모두 귀머거리라면 그들의 우렁찬 박수갈채를 받는다 해서 연주가가 기분이 좋을까?"

위에서 말하는 지위와 명에, 부를 스스로 쫓고 있다고 느껴진다면 이 책을 통해 생각할 기회를 가져보는 것은 어떨까?
난 뭔가를 얻기 위해 노력하고 성취하는 경험은 아주 좋은 행동이라고 생각한다. 하지만 스스로가 원하는 것이 아니라 단순히 누군가의 인정과 사랑을 받기 위한 노력은 아닌지 확인해보면 좋을 것이다.

몰입

영상을 보고 책에 대해 알게되었다.
책을 읽거나 업무를 할때 집중력을 금방 잃는다는 것을 느꼈다. 그리고 잠들기전에 유튜브 쇼츠를 보는 버릇이 생겼다.
유튜브 쇼츠를 보는 것만으로도, 그저 평범한 영상임에도 불구하고 기분이 좋아지고 편안함을 느끼는 자신을 발견하고 놀랐다.
쇼츠를 볼 때는 넋 놓고 있는 것처럼, 아무 생각없이 뇌를 뺀것처럼 손가락만 슥슥 움직이는 스스로를 보고 심각하구나라고 생각했다.
이런 습관을 없애고 집중력을 높일 수 있는 방법이 있을까 궁금하여 읽게되었다.

"천재와 보통 사람 사이의 지적 능력 차이는 질보다는 양의 문제이다."

저자는 천재와 보통 사람의 차이는 재능 문제가 아니라 생각을 하는 절대적인 양의 차이라고 강조한다.
그리고 (노력하면) 누구나 몰입에 빠질 수 있고, 즐길 수 있으며, 몰입을 통하여 평소에는 겪어보지 못한 행복감을 느낌과 동시에 삶의 질이 상승한다고 말한다.

immersion

위의 이미지처럼 실력과 과제의 난이도가 적당한 균형을 갖춰야 몰입에 이를 수 있다고 한다.
몰입에 빠지면 수면 상태에서 고도로 활성화된 장기 기억을 활용하여 잠을 자면서도 문제를 풀려는 생각을 계속한다고 한다.
절대적인 생각의 양을 늘려서 우연한 영감을 떠올리는 기회를 많이 만드는 것이다.

세런디피티는 완전한 우연으로부터 중대한 발견이나 발명이 이루어지는 것을 말하며 특히 과학연구의 분야에서 실험 도중에 실패해서 얻은 결과에서 중대한 발견 또는 발명을 하는 것을 말한다

예전에 팀 프로젝트로 서비스 개발할 때 한 번 느껴본 것 같다. 잠자려고 누울때도 내일 뭐 개발할지 고민하고 걸을때도 문제에 대해 생각했었다. 그 이후로는 한 번도 경험해본 적 없다..

문제 해결을 목적으로 몰입을 시도할 경우에는 "어떻게 하면 되는가?"라는 물음보다는 "왜 그렇게 되는가?" 하는 물음이 훨씬 더 절실한 감정을 불러일으킨다.
대체로 에 대한 답은 한 가지 원인으로 생각을 집중시켜서 수렴적 사고를 유도하지만, 어떻게에 대한 답은 여러가지 가능성을 열어두어, 집중을 분산시키는 발산적 사고를 유도하는 경향이 있기 때문이다.
초기에는 라는 형식의 물음으로 시작하여 어떻게라는 분산적 사고로 들어가야한다.

위와 같이 사고에 대한 방법과 하루에 한 시간 운동 그리고 천천히 생각하기를 통하여 몰입에서 잘 나오고 지치지 않게 페이스를 조절해야 한다고 한다.
이런 몰입을 하는 능력은 곧 경쟁력이다. 깊이 생각하지 않고 주어진 일을 밤새워 열심히 하면 자신이 발전하기 보다는 소모된다는 느낌을 갖는다.

일상속에서 20분 생각하기 훈련을 해보자.
우리는 머리를 잠시도 비워두지 않는다. 항상 무엇인가를 생각하고 있다.
사람은 한 시간에 2천 가지를 생각하고 하루 24시간 대략 5만 가지를 생각한다고 한다.
그래서 오만가지 생각이라는 말이 생겼다. 그러나 이것은 상념에 해당하는 '생각나기' 이다.
이것은 내가 내 뇌의 주인이 되는 것이 아니고 의도되지 않은 상념이 자리를 차지하고 있는 것이다.
자신이 뇌의 주인이 되어 문제에 대한 해결을 향한 체계적인 사고를 하는 '생각하기' 를 해야 두뇌를 활용하고 즐거움을 얻을 수 있다.

생각하는 시간을 점진적으로 늘려가는 훈련과 천천히 생각하기 훈련을 통하여 몰입에 빠지거나 재몰입하기 쉽도록 해야한다.
저자는 "해야 할 일을 즐기며 행복하게 사는 방법. 나는 그 해답을 '몰입'에서 찾았다." 라고 한다.
올해 연말회고에 몰입한 사례를 기록하기 위해 노력해봐야겠다.

도둑맞은 집중력

몰입을 읽은 후에 집중력에 대한 관심이 커져서 읽어보았다.
무엇인가에 깊게 집중하지 못하면 항상 "왜 이렇게 집중이 안되지?", "이 정도밖에 집중을 못하나?" 라며 스스로를 탓했다.
하지만 이 책에서는 스스로의 문제가 아니라 주변 환경, 시스템 에 대해 지적한다.

저자는 여러 심리학자, 연구원, 엔지니어 등과 나누었던 이야기들을 전달한다.

그 중 스키너 상자이야기가 인상 깊다.
비둘기를 새장에 넣어 특정 행동을 하면 먹이를 주어 비둘기의 움직임을 제어하는 것이다. 이 강화 훈련을 통해 보상만 제대로 하면 많은 동물들이 우리가 선택한 행동들을 수행한다는 것이다.
스키너는 이 원칙으로 인간의 행동들을 설명한다. 자신이 스스로 선택을 내린다고 확신하며 자유로운 존재라고 믿지만 다 환상이라고 주장한다. 우리의 집중력은 그동안 살면서 경험한 강화 훈련의 총합이라고 말이다.
인스타그램의 설계자들은 이 강화 훈련을 인스타그램의 '하트'와 '좋아요'를 통해 수십억 사용자에게 적용했다.

하지만 저자와 많은 미국 심리학자들은 이렇게 생각하지 않았다. 사람들의 집중력은 강화 훈련으로 생기는 것이 아니라 내면에 있는 몰입 이라고 주장한다. (이전에 읽은 "몰입"의 내용과 비슷한 설명들을 한다.)
이 몰입에 쉽게 빠져들기 위한 집중력을 강화하기 위해 수면, 음식, 긴 텍스트를 읽는 능력 등의 중요성을 설명한다.

또한 저자가 강조하는 우리가 집중력이 떨어지는 이유 중 하나는 거대 테크 기업들의 비즈니스 모델 때문이라고 설명한다.
조금 더 서비스를 오래 사용하도록 자극적이고 비관적인 내용을 노출시켜 사용자들의 부정성 편향을 자극한다며 기업의 사회적 책임에 대해 이야기 한다.

"나는 깊이 집중하는 능력이 식물과 같다고 생각한다. 우리의 집중력이 잘 자라서 잠재력을 온전히 피워내려면 특정 조건이 갖춰져야 한다."
"몰입을 느끼고, 책을 읽고, 자신이 집중하고 싶은 유의미한 활동을 찾고, 자기 삶을 이해할 수 있도록 생각이 배회할 공간을 마련하고, 신체 활동을 하고, 잘 자고, 뇌가 건강하게 발달할 수 있도록 영양가 있는 음식을 먹고, 안정감을 느껴야 한다."

항상 집중력이 낮은 스스로를 탓했었는데 항상 환경이나 시스템 탓을 할 순 없지만 주변 환경과 시스템에 대해 생각해본 계기가 됐다.


정현준

Loading script...