이 책을 모두 읽겠다!

언어

이펙티브 자바 3/E / 조슈아 블로크
자바 ORM 표준 JPA 프로그래밍 / 김영한

스프링

토비의 스프링 3.1 / 이일민
스프링 5 레시피
스프링 부트를 활용한 마이크로서비스 개발 / 모이세스 메이세로
스프링 마이크로서비스 코딩 공작소 / 존 카넬 / https://blusky10.tistory.com/383
스프링 5.0 마이크로서비스 2/e / 라제시RV
스프링과 JPA를 활용한 자바 엔터프라이즈 애플리케이션 개발 세트

테스트

테스트 주도 개발 / 켄트 벡 / http://www.yes24.com/Product/goods/12246033

객체지향

객체지향의 사실과 오해 / 조영호 / https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=60550259

코드 관련

리팩토링: 코드 품질을 개선하는 객체지향 사고법 / 마틴 파울러 (5월 완료) 자바로 배우는 리팩토링 입문 / 유키 히로시 / https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=120271469
DDD / 최범균
도메인 주도 설계 / 에릭 에반스 / https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=12174216
코딩을 지탱하는 기술 / 니시오 히로카즈
켄트 벡의 구현 패턴 / 켄트 벡 / http://www.yes24.com/Product/Goods/2824034?scode=032&OzSrank=1
읽기 좋은 코드가 좋은 코드다 / 더스틴 보즈웰 등 / http://www.yes24.com/Product/Goods/6692314?scode=032&OzSrank=1
클린 코더 / 로버트 C. 마틴 / https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=86619346

마이크로서비스

엔터프라이즈 애플리케이션 아키텍처 패턴 / 마틴 파울러
마이크로서비스 아키텍처 구축 / 샘 뉴먼

기타

애자일 함께 자라기
도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문 / 야마다 아키노리 / (2019-07-17 구매)

분류 애매

소프트웨어 장인 / 산드로 만쿠소 / https://book.naver.com/bookdb/book_detail.nhn?bid=9585753
소프트 스킬 / 존 손메즈 / https://book.naver.com/bookdb/book_detail.nhn?bid=9822467
CODE / 찰스 펫졸드 / https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=53051178
생각하는 프로그래밍 / 존 벤틀리 / https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=34229085

우아한형제들 CTO 김범준 #개발자 님께서 추천하는 개발 도서 10권 (출처 배민 페이스북?)

  1. 실용주의 프로그래머
  2. The C Programming Language
  3. 리팩토링
  4. 테스트 주도 개발
  5. 피플웨어
  6. 익스트림 프로그래밍
  7. 해커와 화가
  8. 소프트웨어 장인
  9. 클린 코드
  10. Computer Systems

SSH 관련 설정은 ssh_config와 sshd_config가 있다.

SSH

SSH(Secure Shell)는 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 고 위키에 써있다.

여기서 중요한 부분은 ‘원격 시스템에서’이다.
SSH는 나가는 요청(outbound)이다.

SSHD

SSHD는 구글 검색하면 저장장치가 나온다
SSHD는 SSH Daemon이다.
데몬은 백그라운드 상에서 요청을 기다리는 프로그램을 뜻하며 (일반적으로)프로세스이다.
SSH 연결을 받아주기 위해(inbound) 대기하는 프로세스 라고 이해하면 된다.

정리

결론! /etc/ssh/ssh_config와 /etc/ssh/sshd_config의 차이….
ssh_config : 나가는 설정 (outbound)
sshd_config : 들어오는 설정 (inbound)

기타

‘localhost’를 사용한 요청을 찾을수 없는 경우

/etc/hosts 파일에는 호스트명을 IP에 매핑하는 정보가 담긴다.
(다 그런지는 모르겠지만) 나의 경우에는 root가 아닌 사용자로 ‘localhost’를 호출했고 이를 인식하지 못하는 현상이 있었다.
이는 hosts 파일의 권한이 600(rw——-)로 설정되어있어 생긴 문제였고 이로인해…. 많은 시간을 보냈다.
해결 방법은 두가지(?)이다.

1. hosts 파일의 권한을 644로 설정해주기 (chmod 644 /etc/hosts)
이 방법은 권장하지 않는다.
hosts 파일은 소유자가 root이고 권한은 600을 적용해야 한다.
DNS보다 hosts파일의 우선순위가 높기 때문에 이를 악의적으로 수정하게 되면 위험하여 권한을 600으로 설정하길 권장한다고 한다.

2. 그냥 아이피 적기….
hosts 파일 쓰지 말라그러면 쓰지 말자
다른 방법이 있으면 추가해야지

host 제한, 허용하기

/etc/ 경로에는 hosts파일과 같이 hosts.deny와 hosts.allow가 있다.
파일명에서 알 수 있듯 deny는 제한, allow는 허용하는 정보를 담는다.
deny에는 ALL:ALL로 전부 막고 allow에 허용할 아이피를 추가하여 사용하자.

참조

  • https://skynarciss.tistory.com/106
  • https://ko.wikipedia.org/wiki

Dockerfile에 대하여

Dockerfile docker 이미지를 생성부터 이후의 명령어를 통한 작업 과정을 파일로 정해놓은 형태!
배치 파일이라고 생각하면 될듯.

Dockerfile의 DSL(Domain Specific Language) 정리는 아래

#===============================================================================
FROM centos:7
MAINTAINER tiredpixel <tiredpixel@posteo.de>

ARG MY_PATH=/var/lib/postgresql
ARG MY_USER=tester
#-------------------------------------------------------------------------------
RUN apt-get -y update \
               vim
               sudo

RUN useradd ${MY_USER}

RUN mkdir -p ${MY_PATH} \
    && \
    chown -R ${MY_USER}:${MY_USER} ${MY_PATH}

WORKDIR ${PG_HOME}

COPY lib/ ./lib/
RUN chown -R ${PG_USER}:${PG_USER} ${PG_HOME}
#-------------------------------------------------------------------------------
USER ${PG_USER}

WORKDIR ${PG_HOME}/lib/postgres-xl

RUN ./configure --prefix ${PG_LIB} \
    && \
    make \
    && \
    cd contrib/pgxc_ctl \
    && \
    make
#-------------------------------------------------------------------------------
USER root

RUN make install \
    && \
    cd contrib/pgxc_ctl \
    && \
    make install
#-------------------------------------------------------------------------------
USER ${PG_USER}

WORKDIR ${PG_HOME}

ENV PATH=${PG_LIB}/bin:$PATH \
    PGDATA=${PG_HOME}/data

COPY bin/* ${PG_LIB}/bin/
COPY ci/ ./ci/

VOLUME ${PG_HOME}

ENV PG_USER_HEALTHCHECK ${PG_USER_HEALTHCHECK}
#===============================================================================

Docker 시작한김에 정리

docker 삽질 글

핵심은 -it !

docker run -it --name {별명} {이미지} {실행할 파일}
docker run -it --name mydocker ubuntu /bin/bash

ubuntu를 docker로 run 하고 attach나 exec로 접근하면 서버가 꺼져있다고 자꾸 안된다…
나만 안되는건가? 그건 나중에 테스트해보기로..

답은 -i -t 옵션이었다
잊지말자

  • -i 옵션
    • interactive(대화형) 아래 참조의 “run 옵션 정리” 참고하기
  • -t 옵션
    • TTY (얜 정리가 필요할듯)

기본 명령어 정리 (틀릴 수 있음)

# 가장 중요한 헬프
docker {명렁어} --help

# 이미지 목록 보기
docker images

# 컨테이너 목록 보기
docker ps

# 실행중이 아닌(설치된) 컨테이너 포함
docker ps -a

# 컨테이너 실행
docker start {별명 | ID}

# 컨테이너 종료
docker stop {별명 | ID}

# 컨테이너 삭제
docker rm {별명 | ID}

# 이미지 삭제
docker rmi {이미지명 | 이미지 ID}

# 접속
docker attach {별명 | ID}

# 명령 전달 (?)
docker exec {별명 | ID}

참조

  • http://pyrasis.com/Docker/Docker-HOWTO
  • https://www.popit.kr/%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EC%B2%98%EC%9D%8C-docker-%EC%A0%91%ED%95%A0%EB%95%8C-%EC%98%A4%EB%8A%94-%EB%A9%98%EB%B6%95-%EB%AA%87%EA%B0%80%EC%A7%80/ (삽질 해결에 굉장히 많은 도움이 되었다)
  • https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html (정리가 잘된 시리즈)
  • https://m.blog.naver.com/PostView.nhn?blogId=alice_k106&logNo=220340499760&proxyReferer=https%3A%2F%2Fwww.google.com%2F (run 옵션 정리)

Spring Cloud Config 삽질과 정리

나의 삽질이 담긴 깃 주소….

  • 값을 읽어다 주는 API가 있는 repo
    • https://github.com/sang5c/spring-cloud-config
  • 실제 설정이 담긴 주소
    • https://github.com/sang5c/spring-config-repository

삽질의 원인

방심했다. 항상 글을 제대로 읽고 천천히 따라하자.

로컬에다 만들고 Repository에서 읽도록 설정해서 고생을 많이했다.

Spring Cloud Config를 사용하는 방법 두가지

  1. API서버를 만들고 설정 파일을 추가한 후 설정 파일을 로컬에서 읽기
  2. 설정 파일이 담긴 Repository를 만들고 이를 읽어오는 방법

.yml, .properties 둘다 가능하다.

1. 로컬에서 읽기

얜 안돌려봤음… 이게 맞나?

로컬에서 읽기 위해서는 스프링 프로필을 native로 설정해줘야 한다.

spring:
  cloud:
     config:
       server:
         native:
           search-locations: classpath:/config,classpath:config/test  # classpath의 config/, config/test/ 폴더에서 읽는다. 

주의(?) ! docs에는 searchLocations 라고 나오지만 IDEA Ultimate에서 자동완성은 search-locations 라고 되는…?

해보니까 searchLocations와 search-locations 둘다 작동한다. 코딩스타일을 지키기 위한 배려…..?

2. git Repository에서 읽기

spring:
  cloud:
     config:
       server:
         git:
           uri: https://github.com/sang5c/spring-config-repository

TODO: config

참조 (정리 엄청 잘됨)

  • http://blog.leekyoungil.com/?p=352
  • https://github.com/gilbutITbook/006962/blob/master/spmia-chapter3/confsvr/src/main/resources/application.yml
  • https://brunch.co.kr/@springboot/113
  • https://spring.io/projects/spring-cloud-config
  • https://luvstudy.tistory.com/63