TIL - 0508

알고리즘

  • 오늘 한 문제도 풀지못했지만 몇가지 배운 점이 있다
1. 문제를 빠르게 이해하기위해서 변수의 의미부터 파악해야한다는 것
2. 시간복잡도부터 보고 구현방법을 생각해야한다는 것
3. prefix 라는 방법 : 연산 횟수를 줄이기위해서 미리 일정 범위까지 연산해뒀다가 꺼내쓰는 방식

spring-boot 환경설정 후 run 시켜보기

  • 기존 스프링을 그대로 사용하면 많은 설정을 해줘야하는데, 스프링부트를 사용하면 간단하게 설정할 수 있음
  • express로 웹어플리케이션을 개발한 경험이 있는데, express-generator와 같은 개념이라고 생각됨
  • 인텔리j에서 스프링부트 프로젝트 시작하기(환경설정) : 간단하게 필요한 라이브러리 설정을 할 수 있음
1. Create New Project
2. Spring Initializr
3. 빌드툴 선택 - gradle 프로젝트로 설정함
4. 디펜던시 설정 - devTools(코드 변경 시 자동 빌드), Web(웹개발관련), Template-Engine
5. 프로젝트 생성
6. ./gradlew build 혹은 IDE Run 버튼 누르기
7. http://localhost:8080 접속해서 정상적으로 응답 받아오는지 확인하기(resources > static 디렉토리에 임의의 .html 파일 만들어두고 테스트) 

빌드툴 - gradle

  • 빌드툴이 없다면 일일이 컴파일(목적파일 생성) 후 필요하다면 목적 파일 간 링크를 하고, 필요 라이브러리 파일 설치 및 디펜던시 설치 설정까지 해줘야함
  • 빌드툴이 있기때문에 우리(개발자)는 코드에만 집중할 수 있음
  • 빌드툴 종류(자바 기준) : ant, maven, gradle이 있음
    • 그 중 gradle을 선택한 이유는? 대세니깐, gradle만 가진 장점이라면 빌드툴이 무엇을 해야할지 정해주는게 빌드스크립트인데, 빌드스크립트를 정적인 xml로 짜는게 아니라 프로그래밍 할 수 있음(groovy 기반 자체 문법을 사용하며, 특정 부분을 제외하고 groovy로 프로그래밍 할 수 있음)
    • maven이 가진 장점(약속된 디렉토리 구조, 디펜던시 자동 설정 등)을 끌어안으면서도 gradle만의 장점을 갖춤
  • maven repository에서 필요한 라이브러리 검색 후 gradle build script 삽입 코드를 복사해오면 됨 : maven repo 바로가기
  • gradle wrapper : 로컬 환경에 영향을 받지않고, 프로젝트에 맞는 gradle 환경을 만들어서 빌드를 할 수 있음(버젼에 따른 에러를 없앨 수 있음, 특별한 상황이 아니라면 wrapper 사용을 할 것)

개발, 배포환경 분리와 쉘과 쉘 스크립트 그리고 자동화

  • 개발환경과 배포환경을 따로 분리하는 작업을 함 : 배포환경은 가벼운 CLI 환경(AWS EC2 - ubuntu 사용)
  • 수동 배포하기 : 개발 환경에서 개발 한 후 github에 코드를 업로드하면 배포환경에서 git pull하여 코드를 최신화 후 gradle로 빌드 그리고 서버를 시작함(배포)
  • 그렇다면 쉘과 쉘스크립트는 왜 공부했을까?
    • 수동 배포 작업을 보면 같은 작업을 계속 반복하는 것을 알 수 있음
    • 쉘스크립트를 활용해서 수동 배포 작업을 자동화할 수 있기때문에 쉘스크립트에 대해 공부를 함
    • 쉘스크립트에 담긴 명령어를 실행하기위해서 쉘이 필요하기때문에 쉘에 대해 공부를 함
  • 쉘이란? 사용자와 OS(커널)간의 의사소통을 위한 프로그램, 명령어 인터프리터
    • 종류 : bash(기본), zsh 등이 있음
  • 쉘스크립트란? 여려 명령어를 하나의 파일로 묶은 것을 말함, 반복되는 명령어를 하나의 파일로 묶어 파일만 실행하면 됨, 명령어 묶음을 파일로 관리할 수 있음
    • 쉘스크립트 작성해보기 : 작성 시 지켜야할 약속이 있음(가장 첫 줄에는 해당 쉘스크립트가 실행될 때 어떤 쉘에 의해 인터프리터 될 것인지 명시해야함)
    • 쉘스크립트는 결국 프로그래밍하는 것이기 때문에 약속이 되어있음 : 필요하니깐 공부해야함
#! /bin/zsh
if [ -d bak ]; then
    mkdir bak
fi
cp *.log bak

오늘 공부 참고자료