RAILEND

    CI/CD 구축하기 with Nodejs, Docker, Github Action(2)

    이제 2번째 스텝 1. 프로젝트 생성 및 도커 이미지 빌드 2. github action을 통한 도커 이미지 빌드 자동화 / docker hub에 push 3. aws ec2에 도커 환경 구성하기 / docker hub에서 제대로 받아오는지 테스트 4. github action을 통한 서버 배포까지 자동화 원격 레포지토리 연동 먼저 github에 원격 레포지토리를 하나 생성 후 연동시켜 준다. Github Action Configuration 프로젝트 루트에 .gihub/workflows의 폴더 경로를 추가한 후 yml 파일을 생성한다. 레포지토리 Actions 탭에서 Continuous Integration 항목을 살펴보면, NodeJs 프로젝트를 위해 기본적으로 제공하고 있는 CI 설정 템플릿을 찾을..

    2021-04-13 TIL

    Facts (사실, 객관) Nedio의 무중단배포환경 구축을 끝냈다. Feelings (느낌, 주관) 드디어 지난 프로젝트였던 Nedio의 CI/CD 환경 구축을 끝냈다. master에 코드가 머지되면 github action을 통해 도커 이미지를 빌드하고, 도커 허브에 이미지를 푸시하고, EC2의 SSH에 접속하여 도커 허브에서 이미지를 다시 받아온 다음, 컨테이너를 실행시켜 주는 것까지 자동으로 진행된다. 훨씬 오래전에 계획했던 작업이었는데 계속 미루기만 하다가 여러 시행착오 끝에 마칠 수 있었다. 프로젝트 기간은 끝났지만 연습 삼아 코드를 개선하면서 팀원들 모두가 자신이 작성한 코드의 결과를 빠르고 편리하게 확인할 수 있도록 하는 것이 이번 작업의 목표였다. 부담 없이 지속적으로 리팩토링할 수 있는..

    CI/CD 구축하기 with Nodejs, Docker, Github Action(1)

    최근 진행했던 CI/CD 환경 구축 경험을 정리하고자 간단한 node.js 프로젝트의 CI/CD 환경 구축 과정을 남겨보려 한다. 대략적으로 아래와 같은 순서로 진행 1. 프로젝트 생성 및 도커 이미지 빌드 2. github action을 통한 도커 이미지 빌드 자동화 / docker hub에 push 3. aws ec2에 도커 환경 구성하기 / docker hub에서 제대로 받아오는지 테스트 4. github action을 통한 서버 배포까지 자동화 프로젝트 생성 (도커는 이미 설치되어 있다고 가정) 원하는 위치에 디렉토리 생성 -> npm init으로 프로젝트 생성 -> app.js 파일 생성 //app.js import express from 'express'; const app = express(..

    3월 5주차 주간회고

    Facts (사실, 객관) 여전히 게으른 생활을 하며 시간을 축내고 있다. 팀프로젝트를 깃허브로 이관하게 되면서, CI/CD를 구축하기 위한 작업을 진행하고 있다. Feelings (느낌, 주관) 여전히 계획을 잘 실천하지 못하고 있다. 그나마 다행인 점은 최근 생활 패턴이 다시 정상화되고 있다는 사실이다. 오늘도 숙면을 취한 건 아니지만 무려 아침에 일어나는 하루를 시작했다! 이번 주 내내 팀프로젝트의 무중단배포 환경 구축을 시도하고 있다. 우선 간단한 node앱으로 테스트를 해보고 난 후, 로컬에 있는 프로젝트에서 먼저 시도해보는 중이다. 완성시키려는 모습은 다음과 같다. github action을 활용한다. master 브랜치에 커밋이 merge되면 자동으로 배포되어야 한다. docker 및 doc..

    3월 2주차 주간회고

    Facts (사실, 객관) 해야 할 것들이 너무 많다. 타입스크립트 기반의 간단한 앱을 만들고 있다. Feelings (느낌, 주관) 그동안 회고를 쓰지 못했다. 배운 것을 날마다 정리하는 것이 귀찮게 느껴지고 여러 가지 합리화를 하면서 시간을 꽤나 허비했다. 벌써부터 이래서는 안 된다. 좀 더 성실해질 필요가 있다. 부트캠프가 끝나고 운이 좋게도 취업이 되어서 다음 달에 첫 출근을 앞두고 있다. 초반에는 다른 곳과 몇 차례 면접을 보기도 했지만, 어느 순간 다른 회사를 더 알아보기보다는 부족한 부분을 채우는데 주어진 시간을 써야겠단 생각이 들었다. 그렇게 마음의 결정을 하고 나니까 온전한 자기 계발의 시간에 놓이게 됐다. 출근까지 시간이 꽤 많이 남은 편이어서 시간을 어떻게 써야 좋을지 고민이 많았다...

    자바스크립트의 메모리 관리

    프로그래밍 언어에서 메모리 생존 주기는 필요할 때 할당한다. 사용한다. (읽기, 쓰기) 필요 없어지면 해제한다. C언어와 같은 저수준의 언어에서는 할당 및 해제의 과정이 명시적이다. 그러나 자바스크립트와 같은 고수준 언어에서의 메모리는 가비지 컬렉터에 의해 자동적으로 관리된다. 가비지 컬렉터는 말 그대로 가비지를 수집하는 녀석이다. 여기서 가비지란 불필요하게 메모리에 남아있는 데이터를 말한다. 변수나 함수 등은 메모리에 할당된다. 프로그램은 메모리에 할당된 데이터를 읽거나 쓰는 작업을 통해 자신의 역할을 수행한다. 메모리에 남아있는 데이터가 그 쓰임을 다하고 나면 어떻게 될까? 데이터가 더 이상 필요 없다면 메모리 할당은 해제되어야 한다. 자바스크립트에서 가비지 컬렉터는 ‘Mark and Sweep’이라..

    엘리스 SW트랙 최종 프로젝트 회고

    엘리스 SW트랙에 지원했던 이유 엘리스 SW트랙에 지원했던 가장 큰 이유는 팀 프로젝트에 대한 기대 때문이었다.(물론 팀 프로젝트 경험 이외에도 많은 것들을 배울 수 있었다.) 지난 코드숨 과정을 통해 앞으로의 학습 태도나 방향에 대해 어느 정도 가닥을 잡긴 했지만, 개발자가 되기 전에 팀 프로젝트를 꼭 경험해보고 싶었다. 대체로 개발이라는 것은 누군가와 함께 하는 것이고 혼자 공부를 해오던 내가 팀에 얼마나 기여할 수 있는 사람인지 점검할 수 있는 기회가 필요하다고 느꼈기 때문이다. 엘리스의 커리큘럼과 두 번의 팀 프로젝트가 매력적으로 느껴졌다. 결론적으로 두 번의 팀 프로젝트는 모두 만족스러웠다. 내가 잘했기 때문에 만족스러웠던 것은 아니었다. 부족했던 부분을 느끼고 배울 수 있었기 때문이다. 기획의..

    엘리스 SW트랙 최종 프로젝트 중간회고

    Facts (사실, 객관) 최종 프로젝트가 시작한 지 어느덧 3주라는 시간이 흘렀다. 이번 프로젝트에서는, 프론트엔트를 담당하고 있다. threeJS로 이번 프로젝트의 핵심 기능을 구현할 예정이다. 타입스크립트에 도전해보기로 했다. 백엔드에서도 nestjs를 사용하기로 했다. Figma를 경험했다. TDD를 시도해봤다. Feelings (느낌, 주관) 오랫동안 회고를 남기지 못했다. 시간과 컨디션을 잘 관리하는데 실패했다. 그동안 패턴을 바꾸려고 노력해봤지만 밤이나 이른 새벽에 잠들기를 시도하면 두세 시간 정도를 잔 후 완전 깨버린다. 기껏해야 4시간 정도를 잘 수 있고 결국 오후 늦은 시간이 되면 급격한 피로에 시달린다. 반면 오후에 자면 상대적으로 더 깊고 길게 잘 수 있다. 오랜 시간 좋지 않은 패..

    Dockerfile 작성하기

    FROM python:3.8-alpine COPY . /app WORKDIR /app RUN pip3 install flask RUN chmod +x /app/app.py // app.py 액세스 권한 변경 CMD ["python3", "app.py"] FROM: 어떤 이미지를 사용할지에 관한 것, 사용 언어에 따라 여러 OS 버전이 있음 (아래 북마크 참고) Docker Hub hub.docker.com COPY: 현재 작성한 코드를 컨테이너의 디렉토리에 복사하라는 의미 (.은 도커파일이 위치한 디렉토리 기준, /app은 컨테이너의 디렉토리) WORKDIR: 컨테이너에서 명령이 실행되는 디렉토리 (예제에선 /app에서 명령 실행) RUN: 컨테이너를 구성할 파일을 생성할 때 사용 CMD: 컨테이너가 실..