Docker-Compose 컨테이너 간 실행 순서를 보장하도록 개선해보자.
·
Infra
들어가면서  MSA 환경이나 모놀리식 환경에서 여러 서비스를 한 번에 실행시키기 위해 docker-compose를 사용하다 보면, 서비스 간의 실행 순서를 보장해야 하는 상황이 발생합니다.   저는 최근 MySQL과 연동되는 애플리케이션을 docker-compose로 배포하면서, 단순히 컨테이너 실행 여부만으로는 서비스 준비 상태를 확실히 보장할 수 없다는 문제를 경험했습니다. 이번 포스팅에서는 그 문제 상황과 해결 방법, 그리고 마무리 정리를 통해 동일한 문제를 겪는 분들께 도움이 되고자 합니다.   문제 상황  기존에는 docker-compose의 `depends_on` 옵션을 사용하여 애플리케이션 컨테이너가 MySQL 컨테이너 실행 후에 시작되도록 구성했습니다. 그러나 `depends_on`은 단순..
슬랙(Slack) 봇이 배포 알람을 보내도록 만들어보자.
·
Infra
들어가면서요즘 인프라 관련해서 여러 가지 만들어보는 중이다. 팀 단위로 CI/CD를 구축했다고 치자. 팀원들은 각자 통합 및 배포 타이밍이 다를 것이다. 이를 팀 전체에게 실시간 알람으로 보낸다면 프로젝트 진행에 큰 도움이 될 것이다.`개발하면서 발생하는 이벤트에 대한 정보`를 실시간 알람으로 보내도록 구현해 보자. 이번 포스팅에서는 배포 알람 전 단계로서, 수동으로 알람을 보낼 수 있도록 구현한다.   이번 포스팅은 인프런에서 `이준형 강사님의: 안정적인 서비스 배포를 위한 배포 전략과 팁`강의를 보며 실습하는 내용이다.    슬랙 알람이 필요한 이유이 글에서 소개할 `Slack`이라는 업무 플랫폼으로 특정 이벤트 발생 시 알람을 보내도록 구현할 수 있다.아래에서는 `배포`라는 이벤트에서 슬랙 알람이 ..
Docker MySQL 연결 오류: 포트포워딩을 하자.
·
Infra
문제 상황`도커로 MySQL을 실행`하기 위해서 비밀번호를 1108로 설정하고 `호스트 포트와 컨테이너 포트를 연결해서 RUN`을 해준 상황이다.docker ps로 실행 중인 컨테이너를 확인해 보니 c64 MySQL 컨테이너가 정상적으로 실행 중이다.  `실행 중인 해당 컨테이너에 접속`해보았다.`환경변수 MYSQL_ROOT_PASSWORD`를 확인해 보니 RUN에서 지정해 준 1108로 세팅되어 있음을 확인했다.  그러나 dbeaver에서 해당 MySQL컨테이너에 연결하려고 하니패스워드가 틀려서 Access denied가 된 것으로 보이는 상황이 발생했다.  혹시나 해서 기존 로컬 MySQL에서 사용하던 비밀번호를 입력하니 연결이 된다. 우선 두 가지 원인으로 가정해 보았다.   문제 원인 1이전에 도..
코틀린(Kotlin)의 핵심 문법과 예제 (2/2)
·
Programming Language
들어가면서 https://giken.tistory.com/entry/Kotlin-%EC%BD%94%ED%8B%80%EB%A6%B0-%EB%AC%B8%EB%B2%95-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC-feat%EC%9E%90%EB%B0%94 코틀린(Kotlin)의 핵심 문법과 예제 (1/2)들어가면서코딩테스트, 스프링 백엔드 개발에서 자바로 프로그래밍을 해왔다.최근 채용 공고를 보면 `스프링 + 코틀린 (코프링)`이 심심치 않게 보인다. 자바에서 현대적인 언어로 업그레이드giken.tistory.com `변수, 타입, 조건문, 반복문, List 등등`이러한 기초 문법을 1편에서 익히고 왔다.  2편에서는 웹개발에 필요한 문법들 위주로 더 설명한다.     함수fun mai..
[Git] 원격 저장소와 로컬 저장소 병합 문제 해결 : non-fast-forward
·
Etc
문제 상황GitHub에서 저장소를 생성한 후, 저장소 주소를 원격(remote)에 추가(git remote add origin https://github…..)하고, 로컬에서도 정상적으로 초기화(git init)했습니다. 그런데 git pull 또는 git merge 명령어가 정상적으로 동작하지 않았고, git push origin main 명령을 실행할 때 아래와 같은 에러가 발생했습니다.[rejected] main -> main (non-fast-forward)error: 레퍼런스를 'git@github.com:'에 푸시하는데 실패했습니다힌트: 현재 브랜치의 끝이 리모트 브랜치보다 뒤에 있으므로 업데이트가힌트: 거부되었습니다. 푸시하기 전에 ('git pull ...' 등 명령으로) 리모..
코틀린(Kotlin)의 핵심 문법과 예제 (1/2)
·
Programming Language
들어가면서코딩테스트, 스프링 백엔드 개발에서 자바로 프로그래밍을 해왔다.최근 채용 공고를 보면 `스프링 + 코틀린 (코프링)`이 심심치 않게 보인다. 자바에서 현대적인 언어로 업그레이드된 언어가 코틀린이라고한다.따라서 코틀린의 문법을 배우고 더 나아가 간단한 API를 코틀린으로 만들어보는 실습까지 할 계획이다.다행인 점은 자바를 사용해 오던 개발자라면 코틀린 사용이 더 수월할 것이다.    코틀린 파일 생성인텔리제이에서 Kotlin 파일 또는 클래스를 생성하는 방법은 Java 클래스를 생성하는 방법과 유사하다.Kotlin은 클래스가 필수적이지 않기 때문에, 단순히 파일로 생성할 수 있다. 나는 "Main"이라는 이름으로 Kotlin 파일을 만들었다.    변수fun main() { var i = 1..
카프카(Kafka) 서버를 구축해보자
·
Server
들어가면서대규모 트래픽 상황에서도 안정적이고 높은 TPS(초당 트랜잭션 수)를 유지하는 서버를 구축하고자 하는 것은 많은 엔지니어의 목표입니다. 저 역시 위대한 엔지니어들이 그러했듯, 현재의 상태에 안주하지 않고 개선을 추구하고 있습니다.기존에 구축한 Spring 기반의 단일 프로젝트를 MSA(마이크로서비스 아키텍처)로 전환해보고자 합니다. 특히, `MSA 아키텍처에서 대용량 데이터`를 효율적으로 처리하기 위해 Kafka 서버를 도입하려고 합니다. 이 포스팅에서는 `Kafka 서버 구축 과정을 단계별로` 설명하겠습니다. 이를 통해 여러분도 대규모 트래픽을 안정적으로 처리할 수 있는 시스템을 구축하는 데 도움을 얻을 수 있을 것입니다.    카프카(Kafka) 란? Apache Kafka는 고성능 데이터 ..
효율적인 Docker 빌드: 캐시를 활용한 속도 개선
·
Web
들어가며스프링 프로젝트에 Docker를 세팅했는데, Docker 도 최적화가 가능할까?라는 생각에 검색하던 중Docker Cache를 발견하게 되었습니다.  Docker를 이용한 스프링 서버의 빌드 속도 최적화 과정스프링 서버 Docker로 세팅: 스프링 서버를 Docker 컨테이너로 설정합니다.Dockerfile 작성: Dockerfile을 작성하고, 각자의 요구에 맞게 수정합니다.캐시 사용 Dockerfile: Docker 캐시가 작동하도록 Dockerfile을 최적화합니다.최적화된 Docker 빌드: 최적화된 Dockerfile을 사용하여 빌드 과정을 빠르게 수행합니다.    Docker LayerDocker Cache를 이해하기 전에 먼저 `Docker의 Layer`에 대해 먼저 알아야 합니다. ..