개발
Github actions, Docker image, Docker hub 를 활용한 CI/CD 과정
개요 과거에 팀 프로젝트를 진행하며 일주일 정도 수동으로 배포하며 불편하고 아주 비효율적이었던 경험이 있다. 그래서 항상 새롭게 프로젝트를 진행하면 배포 과정을 자동화하는데, 이번 개인 프로젝트에서 진행했던 그 과정을 정리하고자 한다. 아키텍처 결정 서버 배포할 서버는 AWS EC2 를 활용하였다. 개인이 가진 컴퓨터를 활용하여 서버를 구축할 수도 있겠지만, 여분의 컴퓨터가 없는 나는 고려하지 않았다. 클라우드 서버 중에서 Naver Cloud 와 AWS 중에 고민을 하였는데, 일단 1년간 무료로 사용할 수 있는 AWS 를 사용하기로 하였다. CI 툴 Github actions 를 이용하였다. Jenkins 와 Github actions 간에 고민을 했지만, Jenkins 는 추가적인 설치가 필요하고 G..
이미지가 포함된 게시글 관련 API 설계
서론 과거에 '맞춤 케이크 중개 플랫폼' 프로젝트를 진행했을 때는 아래와 같이 게시글 관련 API 에 이미지 처리를 결합하여 구현하였다. 즉, 게시글 생성, 삭제, 조회하는 API 안에서 연관된 이미지도 함께 처리해줬다는 의미이다. (아래의 코드에서 Order 를 게시글이라고 생각하면 된다.) @Component @RequiredArgsConstructor public class OrderFacade { private final OrderService orderService; private final ImageService imageService; @Transactional public Long createOrder(OrderCreateRequest orderCreateRequest) { Long ord..
한 번의 API 콜로 가져오기 vs API 콜을 여러 번 하기
API 를 만들 때, 화면에 필요한 정보를 하나의 API 응답에 담아서 보내줄 수도, API 를 분리하여 클라이언트에서 여러 번 호출하게 할 수도 있다. 다른 말로 하자면 API 를 화면 중심으로 설계하느냐 vs RESTful 하게 설계하느냐라고도 말할 수 있을 것 같다. 나는 상황에 따라 다르겠지만 아래와 같은 이유로 대부분의 경우 API 를 분리하는 것을 선호한다. API 가 최대한 작은 책임을 갖게되어 유지보수와 재사용성에 유리하다. 어떤 역할을 하는 API 인지 명확하게 알 수 있다. 화면 중심으로 설계하게 되면 여러 정보들이 함께 반환하니 URL 을 어떻게 지을지 고민이 생기는데 분리한다면 그런 점이 없다. 어떤 API 인지 명확하기에 협업에도 유리하다. 타인이 봤을 때도 명확하게 알 수 있기 ..
Docker 에서 /docker-entrypoint-initdb.d 를 통한 초기화 시 인코딩 오류 문제 해결법
version: '3' services: db: image: mysql:8.0.32 ports: - "3306:3306" env_file: - ../env/docker-compose.env container_name: seat-view environment: TZ: Asia/Seoul volumes: - seat-view:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql - ./stadium.sql:/docker-entrypoint-initdb.d/stadium.sql restart: always volumes: seat-view: 위와 같이 docker-compose 를 이용하여 MySQL 컨테이너를 생성하고 실행하면서 테이블과 초기 데..
docker-compose 로 개발 환경의 DB 구축하기
개요 개인 프로젝트이고 자신만 그 코드를 실행시킨다면 굳이 docker 를 이용할 필요가 없다. 어차피 같은 환경에서만 실행할 것이니깐. 하지만, 여러 사람이 다루게 된다면 여러 환경에서 코드가 실행되어지게 되고 이때 docker 를 이용하면 구축하려는 것이 여러 환경에서 동일함이 보장되니 참 편하다. 다만, 개인 프로젝트라 하더라도 docker 로 환경을 구축하고, 여러 컨테이너들을 실행할 떄마다 매번 명령어들을 적어줘야하는 상당히 귀찮다. 순서를 틀리거나, 빼먹을 위험도 있다. 이런 불편함을 docker-compose 를 이용하면 쉽게 해결할 수 있다. docker-compose.yml 속성들 알아보기 docker-compose.yml 파일은 앞서 말했던 명령어들을 적어놓은 스크립트라고 보면 된다. ..