전체 글
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 컨테이너를 생성하고 실행하면서 테이블과 초기 데..