develop 36

udemy 클린코드 강의 정리

udemy에서 온라인으로 진행했던 클린코드 강의를 정리해본다. (2022.06.16) 강의자는 박재호님으로, 그 유명한 클린코드 책을 번역하신 분이다. http://www.yes24.com/Product/Goods/11681152 Clean Code 클린 코드 - YES24 애자일 소프트웨어의 혁명적인 패러다임을 제시하는 책이다. 저자 로버트 마틴은 오브젝트 멘토(Object Mentor)의 동료들과 힘을 모아 ‘개발하며’ 클린 코드를 만드는 최상의 애자일 기법을 정제 www.yes24.com commit message 동사로 시작해야 함 SRP (Single Responsibility Principle) 글로벌시대에 맞게 되도록이면 영어로 작성 주석 TODO:, XXX:, FIXME: 적극 사용하기 한..

develop/etc 2022.08.09

gRPC

무엇인가? Google에서 개발한 RPC(Remote Procedure Call) 시스템 전송을 위해 TCP/IP 프로토콜과 HTTP 2.0 프로토콜 사용 IDL(Interface Definition Language)로 ProtoBuf 사용 어떨 때 사용하나? 최근 많은 회사에서 MSA구조로 서비스를 개발하고 있다. MSA 단점 중 하나로 동일 머신에 존재하지 않는 분리된 모듈끼리의 네트워크 통신 overhead 이슈가 있는데 이에 REST API 대신 gRPC를 도입하는 것으로 해결한다고 한다. 어떻게 해결하는지 알아보도록 한다. HTTP 2.0 프로토콜 HTTP1.1 은 기본적으로 client가 server로 요청을 보내고 응답을 받는 구조이다. 요청 단위가 client와 server를 왕복하고, c..

develop/etc 2022.07.21

실행계획 explain

쿼리 튜닝 및 최적화시 사용하는 explain에 대해 복습해보려 한다. DB는 mysql/mariadb 기준이다. - 실행할 쿼리 앞에 EXPLAIN 키워드를 붙이면 각 단계별 실행 계획 결과가 출력된다. EXPLAIN Format = JSON을 추가하면 cost 등 더 자세한 정보를 알 수 있다. 주요 키워드들을 나열해본다. table 어떤 테이블에 대한 접근을 표시하고 있는지 id select에 붙은 번호, 보통 join을 하나의 단위로 실행하기 때문에 id는 그 쿼리 실행 단위를 식별하는 것이다. 따라서 조인만 수행하는 쿼리에서는 id는 항상 1이다. partitions 파티셔닝이 되어 있는 경우에 사용되는 필드이다. 파티셔닝 안되어 있는 경우엔 NULL type 접근방식을 표시하는 필드로 테이블에..

develop/etc 2022.07.12

REST API

정의 REST 아키텍쳐 스타일에 부합하는 API 그렇다면 API란: client와 server 사이 대화의 규칙 URI를 통해 자원을 지정하고, HTTP 메서드를 통해 자원에 대한 행위(CRUD)를 표현한다. post, get, put, delete 자원이란: 이름을 지닐 수 있는 모든 정보, 개념적인 대상, 객체라고 볼 수 있으며, 상태 변화 가능하다. → 변하지 않는 식별자가 필요하다 → URI를 통해 자원을 식별해야 한다! 표현을 통한 자원에 대한 조작 (REpresentational State Transfer) 자원의 현재 상태와 자원의 기대되는 상태를 URI로 표현함 표현을 client와 server가 서로 주고 받게 된다 서버가 변해서 Response Data가 변경되었다. 그럼 클라이언트에서..

develop/etc 2022.07.09

[인스타그램 클론] 2. 프로젝트 생성 및 DB 연동

1. 프로젝트 생성 간편하게 Spring Initializr 사용 패키지는 당장 생각나는 것만 추가하고 프로젝트를 생성했다. 2. DB 연동 docker-compose로 DB들을 띄우고 spring 프로젝트의 application.yml에 DB 메타정보를 입력한다. spring: datasource: url: jdbc:mariadb://127.0.0.1:3306/instadb driver-class-name: org.mariadb.jdbc.Driver username: insta password: 1234 jpa: open-in-view: false generate-ddl: true show-sql: true hibernate: ddl-auto: create 여기서 주의사항은 Docker 컨테이너로 실행..

develop/toy project 2022.06.11

[인스타그램 클론] 1. 개발 환경 구축

docker로 개발환경을 구축한다. 필요한 스펙: ubuntu 18.04, openjdk-17, mariadb, mongodb 1. docker 및 docker-compose 설치 (참고: ubuntu18.04에 docker 설치방법) docker-compose 설치 명령어 $ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version Docker Compose version v2.2.3..

develop/toy project 2022.06.11

[vscode] java language server requires a JDK 11+ to launch itself

java 8 작업이 생겼다. 기존에 11을 쓰고 있었어서 환경설정을 해야한다는 생각에 설정파일 .vscode/settings.json 에 다음을 추가해주었다. { "java.configuration.updateBuildConfiguration": "automatic", "java.home": "/usr/lib/jvm/java-8-openjdk-amd64" } 그리고 다음 에러가 발생했다. java language server requires a JDK 11+ to launch itself runtimes 속성에 8을 추가해주어 해결했다. "java.home": "/usr/lib/jvm/java-11-openjdk-amd64", "java.configuration.runtimes": [ { "name": ..

develop/etc 2022.02.14

ubuntu 에서 방화벽 끄기..

하... 반성의 하루 꼭 1년에 한번씩 방화벽 때문에 시간 낭비하는 일이 생긴다. 꼭 확인하자. 방화벽 끄기 sudo ufw disable + 참고) 방화벽 status 확인 sudo ufw status verbose UFW 기본 룰 UFW에 설정되어 있는 기본 룰은 다음과 같다. 들어오는 패킷에 대해서는 전부 deny 나가는 패킷에 대해서는 전부 allow 기본 룰 확인 sudo ufw show raw 기본 정책 deny/allow sudo ufw default {deny/allow} 사용자 룰 추가 sudo ufw allow 22/tcp sudo ufw deny 22/tcp // 룰 삭제는 delete sudo ufw delete deny 22/tcp ssh 서비스 설정 다음 경로에 서비스를 등록할 ..

develop/linux 2022.02.11

개발자 포트폴리오 잘 만들기

큰 서비스를 운영하고 있는 유명기업들은 1. 제품 변화에 대응하는 능력 2. 제품 확장에 대응하는 능력 3. 기술부채를 최소화하는 능력 을 우선시 한다. 제품을 배포/운영하기 / 유저 피드백에 따라 개선해나가기 리팩토링 / 언어의 패러다임 이해 / 디자인 패턴 적용 배포 자동화 / 테스트 자동화 / 버전관리 사람들이 필요로 하는 프로젝트를 꾸준히 운영해보는 것이 중요하다. 1. 실제 서비스를 공개적으로 배포하고 운영해보는 경험을 해보았다. 2. 유저의 피드백에 따라 성능/사용성을 개선하고 신규 기능을 추가해보았다. 3. 발견되는 버그와 개선사항을 정리하고 쌓인 이슈들을 체계적으로 관리 해 보았다. 4. 코드를 지속적으로 리펙토링하고 디자인패턴을 적용해 보았다. 5. 위의 시도에서 더 좋은 설계와 더 빠른..

develop/etc 2021.11.03

[wsl2] h2 실행하기

실습용 database를 설치해야 한다. mysql보다도 가볍고, GUI를 사용할 수 있어 쉬운 h2를 설치하였다. 다운로드: https://www.h2database.com/html/download.html 다운받아 압축 풀고 ~/h2/bin 경로에서 ./h2.sh를 실행해주면 끝난다. 문제점 그러나 다들 알다시피 나는 windows10에서 wsl2 환경에서 개발하고 있다. h2는 browser기반이므로 다음과 같은 에러가 발생한다. ubuntu@ubuntu:~/workspace/h2/bin$ ./h2.sh Failed to start a browser to open the URL http://127.0.1.1:8082?key=ebb7ac9b1b390f9763da7e589ba8c233acfd8a1f6a..

develop/etc 2021.09.25

[wsl2] source .bashrc 에러

wsl2 환경에서 zsh를 사용하고 있다. 개발 중 .bashrc를 변경하고 적용을 하면 다음과 같은 에러가 발생한다.' ~ ❯ source .bashrc 18s 03:07:33 .bashrc:17: command not found: shopt .bashrc:25: command not found: shopt .bashrc:29: command not found: shopt .bashrc:112: command not found: shopt /usr/share/bash-completion/bash_completion:45: command not found: shopt /usr/share/bash-completion/bash_completion:1461: parse error near `|' zsh 사용이..

develop/etc 2021.09.25

windows에서 vmware로 ubuntu18.04 설치하기

windows 10 환경에서 진행하였다. 1. vmware 다운로드 windows용 최신버전인 16.0 player를 설치한다. https://www.vmware.com/kr/products/workstation-player/workstation-player-evaluation.html 2. install wizard 실행 다 default값 그대로 설정해주었다. 3. 설치 후 'Create a New Virtual Machine' 이제 새로운 vm을 생성한다. 이때 ubuntu iso파일(Desktop 버전)이 미리 준비되어 있어야 한다. image file (iso) 경로를 download한 iso파일 경로로 변경한다. 계속 next 눌러서 설치를 완료한다. 야무지게 software updates도 ..

develop/etc 2021.09.21

[vscode] 단축키

Visual Studio Code는 MS에 개발한 에디터 툴이다. 프로그램 자체가 가볍고 다양한 extension이 있어 주로 사용하고 있다. vscode를 좀 더 잘 활용하기 위해 내가 많이 사용하는 단축키를 정리해 본다. windows, linux 기준 ctrl + ` 터미널 열기 ctrl + Home/End 터미널 출력 맨 위/끝 ctrl + shift + f 파일 단위 검색 ctrl + e 최근 열었던 파일 목록 ctrl + . 코드 커맨드 ctrl + shift + p 코드 커맨드 팔레트 ctrl + click Go to Definition ctrl + F12 Go to Implementation ctrl + l 해당 줄 전체 block 처리 ctrl + , 설정 F11 fulll screen ..

develop/etc 2021.09.21

[wsl2] windows terminal shell 꾸미기

window 노트북에서 wsl2로 ubuntu 명령어를 사용하고 있는 환경이다. wsl2 terminal을 사용하기 위해서 'Microsoft Store'에서 'Windows Terminal'을 설치하여 사용하고 있다. 그런데 안 예쁘다. 커스터마이징을 하기 위해서는 oh my zsh를 설치한다. 먼저 zsh를 설치하고, ~$ sudo apt-get install zsh 후에 ohmyzsh를 ~$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 로 설치하면 다음과 같이 설치된다. 설치 후 프롬프트가 깔끔하게 바뀐다. 이제 windows terminal 설정을 json 파일로 열어서 ..

develop/etc 2021.09.19