https://product.kyobobook.co.kr/detail/S000001628109

 

객체지향의 사실과 오해 | 조영호 - 교보문고

객체지향의 사실과 오해 | 객체지향에 대한 선입견을 버려라!『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝

product.kyobobook.co.kr

 

책 제목 : 객체지향의 사실과 오해 : 역할, 책임, 협력 관점에서 본 객체지향

추천 : 

 - 초급 개발자에게 3.5/5

 - 중급 개발자에게 4.0/5

장점 : 

 - 객체지향 프로그래밍언어를 쓰면서도 잊고 있던, 객체지향이란 무엇인가 라는 원론적인 질문에 대한 숙고를 하게 한다.

 - 객체지향 언어를 조금 더 객체지향스럽게 쓸 수 있는 방향을 제시해 준다.

 - 코드 없이 객체지향에 대해 아주 길고 자세히 설명해 준다.

 

 단점 :

 - 코드가 없다. 오랜만에 코드가 없는 개발 서적이라서 그런지, 어려운 내용이라 그런지 생각보다 읽는 속도가 나지 않는다.

 

군복학 후 첫 학기, 인문학과는 거리가 먼 내가 패기 넘치게 '한국의 젊은 시인들'이라는 교양과목을 패기 넘치게 수강한 적이 있다. 당시 수업의 내용은 기억이 잘 나지 않지만, 강의 교재로 쓰였던 『주름과 기억』이라는 책은 기억에 남는다. 사이사이 어려운 단어들이 있었지만 분명 한글로 쓰여있는 책이었음에도 이를 읽고 이해하는데 정말 오랜 시간이 걸렸다. 아니, 제대로 이해하지 못했으니 성적이 안 좋게 나왔고 강의 내용이 기억이 나지 않는 것일 수도 있겠다. 

 

이번에 읽은 『 객체지향의 사실과 오해 』를 읽으면서 그 시절이 떠올랐다. 분명히 한글로 쓰여있고, 어려운 단어가 있는 것도 아니고 이를 친절히 설명해 주고 있음에도 불구하고 책을 읽는 속도가 나지 않았다. 문장을 이해하기 어렵게 쓰신다고 생각했다. 참 글을 못 쓰신다고 감히 생각했다.

 

과연 책의 문제, 저자의 글솜씨가 문제였을까? 지금에 와서는 아니라고 생각한다. 최소한, 내가 그것을 심사할 위치는 아니라고 확신한다. 인문학에 대해 문외한 수준인 내가 대학시절 『주름과 기억』을 읽는 것이 어려웠던 것은 당연히 내가 어려워하는 분야기 때문이다. 『 객체지향의 사실과 오해 』가 읽는 속도가 나지 않았던 것은 객체지향에 대한 나의 생각을 정리할 시간이 필요했기 때문이다. 구체적으로는 다음과 같은 시간들이 필요했다.

 

먼저 이 책에 대해 한 가지 이야기를 하자면, 이 책은 객체 지향에 대해 매우 친절하게, 쉬운 말과 예시로 객체 지향을 설명하고 있다. 다만 책에는 코드 예시가 (거의) 없기에 책에서 언급하는 개념들과 예시들을 내 머릿속 나름의 코드로 예시를 만들면서 시간을 많이 보낸 것 같다. 이것이 내가 책을 읽으며 많은 시간이 필요했던 첫째 이유다. 하지만 코드 예시가 없어서 아쉽다기보다, 나만의 예시로 책에서 설명하는 개념들을 더 깊이 채워나갈 수 있던 것 같다. 

 

두 번째 이유로는, 이 책에서는 객체지향의 단순한 개념 설명을 통해 설계 원칙이나 패턴들 설명하는 것을 넘어, 좀 더 본질적인 의미와 목적에 대해 이야기하고 있다. 책의 부제에서 말하듯이 '역할', '책임', '협력'이라는 핵심 개념들을 설명하고 이것이 기반이 되어 객체지향 프로래밍을 다루다 보니, 자연스럽게 객체지향에서 DDD, TDD의 경계까지 그 영역이 확대됨을 느낀다. 다소 넓은 범위의 개념들을 다루다 보니 생각할 거리는 많아지고 페이지가 넘어가는 속도는 느려지기 마련이다.

 

무엇인가를 아는 것과, 설명할 수 있는 것은 당연히 다르다. 무엇인가를 설명할 수 있는 것과, 잘 풀어서 설명할 수 있는 것 또한 당연히 다르다. 이 책에서는 내게 객체지향의 철학에 대해 매우 길게 풀어서 설명해 주었다. 그리고 그 친절한 설명들은 내게 생각을 정리할 시간들을 항상 준 듯하다. 마지막 페이지를 읽었을 때 다시 한번 이 책이 잘 읽히는 책인가에 대해 생각해 보았다. 여전히 잘 모르겠다. 다만 이 책은 내가 잠시 코드 타이핑 하는 것을 멈추고, 아키텍처 설계 하는 것을 멈추고 고민을 하게 해주는 유익한 책이었다고 생각한다.

 

+ 아는 만큼 보인다는 말이 있는데, 『클린 코드』처럼, 『어린 왕자』처럼, 이후에 다시 읽었을 때 어떤 느낌일지 궁금한 책이기도 하다

 

추천대상

 - 객체지향이 무엇인지 구체적으로, 본질적인 의미와 목절을 이해하고 싶은 개발자

 - 객체지향에 대해서 남에게 깊게 설명하고 싶은 개발자

 - 잠시 코드가 없는 개발 서적을 읽고 싶은 개발자

 - DDD나 관련 아키텍처 이전에 그것들의 근본이 되는 OOP에 대한 고민을 하고 있는 개발자

유튜브 채널 어라운드 허브 스튜디오 - Around Hub Studio  의 docker 강의 내용을 실습한 내용 일부입니다.

채널 : https://www.youtube.com/@around.hub.studio

강의 재생목록 : https://www.youtube.com/playlist?list=PLlTylS8uB2fDLJRJCXqUowsOViG-ZKnWy

 

docker container ls

container 목록 확인

docker container ls -a

-a 옵션 : 모든 컨테이너 목록을 보여줌 (default 실행중인 컨테이너만 보임)

 

 

container 목록 확인

실행 화면

 

 

준비
docker-compose.yml 파일
services:
  chris_db:
    image: mariadb:10.6 # mariadb 10.6 버전 이미지 사용
    container_name: db_master # container 이름 설정
    restart: always
    environment:
      MARIADB_ROOT_PASSWORD: 1q2w3e4r
      MARIADB_DATABASE: springboot
      MARIADB_USER: chris1108
      MARIADB_PASSWORD: 1q2w3e4r
    volumes:
      - ./master_db/data:/var/lib/mysql #각종 log와 index등이 volume이 저장되는 디렉토리
      - ./master_db/config/:/etc/mysql/conf.d # 이전에 나왔던 ./master/config/my.cnf 를 써줌으로써 설정을 reference 함.
    ports:
      - "3307:3306" # 이 옵션은 docker engine 에게 각 container 에게 포트를 수
    
  chris_redis:
    image: redis:7.0.0
    restart: always
    ports:
      - "6380:6379"
docker-compose-custom.yml 파일 
services:
  chris_db:
    image: mariadb:10.6 # mariadb 10.6 버전 이미지 사용
    container_name: db_master # container 이름 설정
    restart: always
    environment:
      MARIADB_ROOT_PASSWORD: 1q2w3e4r
      MARIADB_DATABASE: springboot
      MARIADB_USER: chris1108
      MARIADB_PASSWORD: 1q2w3e4r
    volumes:
      - ./master_db/data:/var/lib/mysql #각종 log와 index등이 volume이 저장되는 디렉토리
      - ./master_db/config/:/etc/mysql/conf.d # 이전에 나왔던 ./master/config/my.cnf 를 써줌으로써 설정을 reference 함.
    ports:
      - "3308:3306" # 이 옵션은 docker engine 에게 각 container 에게 포트를 수
    
  chris_redis:
    image: redis:7.0.0
    restart: always
    ports:
      - "6381:6379"

     

 

docker compose up

container 를 만들고 실행한다.

 

docker compose -f 파일명

-f 옵션  : copmose 설정 파일을 설정한다. (없을 경우 docker-compose.yml 파일로 지정됨)

 

 

docker-compose.yml (Default) , docker-compose-custom.yml (지정) 을 실행해본 결과

 

BerReader.zip
1.83MB

 

구글, 네이버에 아무리 찾아도 찾지 못하던 BerReader..

검색 알고리즘 문제인지 무엇이 문제인지 모르겠지만 누군가는 내 블로그를 통해서 필요한 것을 얻어 갔으면 좋겠다..

 

네 줄 요약

1. https://slproweb.com/products/Win32OpenSSL.html에서 운영체제에 맞는(Win64 / Win32) 파일 다운로드.

2. 설치파일로 윈도우에 설치

3. 윈도우 환경변수로 OpenSSl 설치폴더 (C:\Program Files\OpenSSL-Win64\bin) 추가

4. https://slproweb.com은 안전한가? 매우 높은 확률로 Yes

 

 

 

1. OpenSSL 설치파일 다운로드

https://slproweb.com/products/Win32OpenSSL.html

하단 링크 중 운영체제에 맞는 (윈도우 비트수에 맞는) 버전을 다운로드합니다.

가급적이면 최신버전으로 다운로드하는 것을  추천드립니다.

 

링크가 불안하신 분들을 위해 설명을 드리자면 

 

OpenSSL은 오픈소스로 공개되어 있는데 이를 사용하기 위해서는 소스를 직접 빌드해야 사용 가능합니다. 빌드 하는 번거로움을 줄여주고자 일부 사용자들이 각 운영체제별로 사용가능한 OpenSSL로 빌드해서 제공하고 있는데, 위의 slproweb.com는 그중에 윈도우 용 설치파일을 제공하는 사이트입니다.

 

openssl.org의 위키에서 Third party OpenSSl Binary distrubitions로 설명하고 있는 사이트 중 하나이므로 OpenSSL과 같은 오픈소스를 신뢰할 수 있다면, slproweb.com 또한 신뢰해도 될 듯합니다.

 

2. 설치파일 설치 

 

 

 

 

 

 

Donate 는 하지 않더라도 감사한 마음가짐을 갖자

 

 

3. 윈도우 환경변수 추가 

3-1. 아래의 방법 중 하나로 시스템 속성 설정 창 열기

- cmd 창에서 sysdm.cpl

sysdm.cpl 

- 윈도우 키 > '환경 변수' 검색하여 > [시스템 환경 변수 편집 ]

 

3-2. [고급] 탭 > [환경 변수] 를 클릭합니다.

3-3. 'Path' 선택 후 [편집]을 클릭합니다.

3-4. [새로 만들기] 클릭 후 위 설치 과정에서 OpenSSL 설치한 디렉터리의 'bin' 디렉토리 추가

 

 

4. 설치 완료 

4-1. 결과 확인

cmd 창에서 openssl --version  명령어로 정상 설치되어 있는 것을 확인할 수 있습니다.

openssl --version

 

4-2. 설치 디렉터리에서 직접 확인

만약 환경변수 등록을 하지 않았으면 아래와 같이 설치 디렉터리로 이동하여 테스트 가능합니다.

 

'openssl'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.

환경 변수 등록까지 하였는데도 openssl을 인식하지 못한다면 <4-2>의 방법으로 설치 디렉터리로 가서 설치가 정상적으로 이루어졌는지 테스트 먼저 해봅니다.

 

설치가 정상적으로 되어 있다면 cmd 경우 cmd 창 재시작하면 정상 동작하는 경우 있습니다.

 

 

'Window' 카테고리의 다른 글

특정 포트 프로세스 죽이기  (0) 2023.07.24

2023 다간다 

시간이읍다

 

 

 모던 자바 인 액션 라울-게이브리얼 우르마 , 마리오 푸스코 , 앨런 마이크로프트 우정은 한빛미디어
자바 성능 튜닝 스캇 오크스 최가인 옮김 O'REILLY
자바 성능 튜닝 이야기 이상민   제이펍
자바 트러블 슈팅 이상민   제이
가상 면접 사례로 배우는 대규모 시스템 설계 기초 알렉스 쉬 저자 이병준 인사이트
마이크로서비스 아키텍처 구축 가이드 김용욱   한빛미디어
카프카 핵심 가이드 그웬 샤피라 , 토드 팔리노 , 라지니 시바람 , 크리트 페티 이동진 O'REILLY
더 시스템(The System) 스콧 애덤스 김인수  
Real MySQL 8.0
백은빈, 이성욱 
   

https://product.kyobobook.co.kr/detail/S000001813652

 

아주 작은 습관의 힘 | 제임스 클리어 - 교보문고

아주 작은 습관의 힘 | 더 이상 아무것도 할 수 없을 것 같았던 때 조금씩 시도한 아주 작은 일들이 삶을 바꿨다!단계적이고 체계적인 자기계발 방법을 찾는 사람들을 위한 『아주 작은 습관의

product.kyobobook.co.kr

 

책 제목 : 아주 작은 습관의 힘. 최고의 변화는 어떻게 만들어지는가

추천 : 3.5/5

장점 :

    습관에 관한 많은 이야기들에 대해 새로운 관점을 제공하여 생각할 거리를 준다.

    자기 계발서 중에 다른 책들보다 더 과학적이고 논리적인 근거들을 제시한다.

    자기 계발서답게 나의 습관들에 대해 개선할 여지를 준다.

단점 : 

    논리적이고 과학적인 만큼 자기 계발서 중에서는 쉽게 읽히지 않는 편이다.

    

 

수백 수천 권의 자기 계발서가 시중에 있다.

모든 책은커녕 사실 10권 남짓 혹은 많아야 20권 정도의 자기 계발서를 읽은 와중에 깨닫는 점에는 항상 공통점이 있었다.

그 책들이 말하던 주제는 다양하지만 공통점으로는 이미 그 답을 알고 있었다는 것이다.

습관, 인생 목표, 마음가짐 등 수많은 분야에 대해 좋은 조언을 해준다.

다만 그 조언은 대부분의 사람들이 이미 뻔하게 알고 있는 내용이다.

매번 비슷한 상황을 겪으면서도 그런 책들을 다시 읽고, 그 책들이 베스트셀러가 되는 이유가 무엇인지에 대해 생각해 보았다.

 

자기 계발서를 읽는 동안만큼은 나는 그 책 대로 생활한다.

 

읽고 있는 책에서 새벽 일찍 일어나서 기적을 경험하라고 하면, 나는 아침 알람 시간을 더 이른 시간으로 바꾼다.

읽고 있는 책에서 꾸준한 무언가 사소한 행동이라도 좋은 습관으로 만들라고 하면 나는 내 사소한 습관에 대해 고민하고 바꾸도록 노력한다.

 

사실 누구나 아는 뻔한 이야기지만 누구나 알다시피, 실천하지 못하는 분야들이 많다.

다만 자기 계발서에는 이런 것들을 실천하게 만드는 힘이 있다.

 

이것조차도 사실 뻔한 이야기지만

다시 한번 생각해 보자. 

지금까지 읽었던 자기 계발서를 읽을 때의 나의 모습과

언젠가부터 천천히 그런 모습이 사라지지는 않았는지.

 

그럼 나는 그 달라진 모습을 유지하려면

같은 책 혹은 같은 정답을 말하는 책을 꾸준히 반복적으로 읽어야 할까?

 

그렇지 않다.

동물에게는 습관이라는 것이 있고

인간에게는 그 습관을 만들 수 있는 방법을 학습할 능력이 있다.

 

반복적으로 특정 자기 계발서를 읽지 않고도 그 책에서 말하는 교훈을 계속해서 실천하고 싶다면 이를 습관으로 만들어라. 좋은 행동을 습관으로 정착시킬 수 있는 방법이 이 책에서 다루는 이야기 중 하나다. 

 

이 책을 통해 지금 유지하고 있는 건설적인 행동들의 패턴이 

내 몸에 습관으로 남길 바란다.

Web server failed to start. Port 8080 was already in use.

 

0. 문제의 발단 - 프로세스를 죽이지 않고 인텔리제이 종료

인텔리제이를 종료할 때 인텔리제이의 프로세스가 실행 중이라

실행 중인 프로세스를 종료할지 Disconnect 버튼을 통해 그냥 Intellij만 종료할지를 묻는 화면이 나온다. 

이때 Disconnect를

 

***************************
APPLICATION FAILED TO START
***************************

Description:

Web server failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.


Process finished with exit code 1

 

 

이미 다른 곳에서 8080 포트를 사용 중이라고 나옵니다.

기존에 죽이지 않은 프로세스에서 해당 포트를 사용 중이기 때문에

서버 실행이 안 되는 문제가 발생합니다.

이때 아래의 방법으로 해당 프로세스를 종료시킬 수 있습니다.

 

1. PID 확인하기 

먼저 강제 종료를 시키려면 어느 프로세스에서 8080 포트를 사용 중인지 확인해야 합니다.

찾는 방법은 아래와 같이 cmd 화면에서 

netstat 명령어를 통해 특정 포트를 사용하고 있는 프로그램의  PID를 확인할 수 있습니다.

이때 cmd 콘솔창은 관리자 권한으로 실행시켜야 합니다.

netstat -anbo 명령어를 사용하여 원하는 값을 얻을 수 있고
더 많은 netstat 명령어는 netstat --help 혹은 netstat -? 를 통해 확인 가능합니다.

C:\Windows\System32>netstat -anbo

활성 연결

  프로토콜  로컬 주소              외부 주소              상태            PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1232
  RpcSs
 [svchost.exe]
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
 소유권 정보를 가져올 수 없습니다.
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       6600
 [mysqld.exe]
  TCP    0.0.0.0:5040           0.0.0.0:0              LISTENING       12412

이때 너무 많은 결과가 나와서 원하는 결과를 찾기 힘들다면 find 명령어를 통해 특정 텍스트를 포함하는 결과만 출력되게 할 수 있습니다.

find 명령어는  linux의 grep과 유사한데 find "찾을 문자"와 같이 "를 통해 입력합니다.
C:\Windows\System32>netstat -anbo | find "8080"
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       47388
  TCP    [::]:8080              [::]:0                 LISTENING       47388

 

이렇게 해서  PID 확인을 완료했습니다.

 

2-1. cmd를 통한 프로세스 kill 

이제 PID를 획득했으니 taskkill이라는 명령어를 통해 특정 프로세스를 종료시킬 수 있습니다.

 

taskkill /pid 포트번호
특정포트번호의 프로세스를 종료시킵니다.

 

 

C:\Users\chris>taskkill /pid 47388
오류: 프로세스(PID 47388)를 종료할 수 없습니다.
원인: 이 프로세스는 /F 옵션을 사용하여 강제로 종료해야 합니다.

해당 프로세스를 종료시켜도 문제가 발생하지 않는다는 것을 알고 있으니 강제 종료를 시켜줍니다.

 

taskkill /pid 포트번호 /f
/f 강제 종료 옵션
옵션을 통해 권한 등의 문제로 인해 간혹 종료시킬 수 없을 때 강제로 종료할 수 있게 해 줍니다.
C:\Users\chris>taskkill /pid 47388 /f
성공: 프로세스(PID 47388)가 종료되었습니다.

 

 

2-2. 작업관리자 이용해서 프로세스 종료하기

cmd 가 아닌 윈도의 작업관리자를 통해서도 프로세스를 종료할 수 있습니다.

기본적으로 작업관리자에서는 PID 가 나오지 않기 때문에 위 필드명 부분에서 우클릭하여 PID를 체크해 줍니다.

 

여기서도 수많은 프로세스로 인해 원하는 프로세스를 찾기 힘들기 때문에 PID를 한번 눌러 PID 기준으로 정렬한 후 

해당 PID 를 통해 프로세스를 찾은 후 우클릭하여 작업 끝내기로 프로세스를 종료시켜 줍니다.

 

사실 이 모든 과정이 번거로우니 

cmd에서 전부 해결합시다.

 

3. 결과 확인

서버 다시 실행해 보면 정상적으로 구동되는 것 확인 완료

'Window' 카테고리의 다른 글

window openssl 설치하기  (4) 2024.06.25

인텔리제이 테스트 실행시 

@DisplayName 을 통해 설정해둔 이름이 한글일 경우 깨지는 현상 해결방법

 

 

요약. 

1. 인텔리제이설치폴더\bin\idea64.exe.vmoptions  파일에

2. -Dfile.encoding=UTF-8 한줄 추가 

 

 

 

@DisplayName 을 통한 테스트 이름 표
한글 깨짐 현상

 

윈도우 기준

인텔리제이 설치경로의 

bin 폴더의 idea64.exe.vmoptions  파일을 수정

 

 

인텔리제이 설치 폴더

 

-Dfile.encoding=UTF-8

추가 

 

UTF-8 설정 추가

 

 

 

완료!

 

 

Mac OS 는 기본적으로 UTF-8 설정이 되어있다. 

 

'Tools > IntelliJ' 카테고리의 다른 글

인텔리제이 대소문자 구분 없이 자동완성  (0) 2023.04.18
IntelliJ 단축키 모음_v1  (0) 2023.04.05

+ Recent posts