본문 바로가기

전체 글

[DevOps] CI/CD란? CI (Continuous Integration) 지속적인 통합 여러 개발자들의 코드 베이스를 계속해서 통합하는 것 자동으로 프로젝트에 코드가 Merge된다. CD (Continuous Deployment) 지속적인 배달 코드베이스를 사용자가 사용 가능한 환경에서 배포하는 것을 자동화 하는 것 자동으로 코드가 배포된다. CI/CD의 필요성 개발을 좀 더 수월하게 하기 위해서 필요하다. 개발에 더욱 집중할 수 있다. 반복된 행위를 없애서, 시간을 절약할 수 있다. 실습 * AWS와 Github Action을 사용해서 CI/CD 프로젝트 구축 1. EC2 설정 region을 서울로 선택한다. 인스턴스 시작 버튼 클릭 Server 이름을 작성한다. 사용 OS는 Ubuntu 20.04 LTS 버전을 사용한다. .. 더보기
[Spring] Logback 설정 애플리케이션 운영을 하기 위해서는 Log가 반드시 필요하고 Spring에서 Logback 설정을 통해 운영 하기 위한 Log를 관리할 수 있다. Logback Slf4j(Simple Logging Facade for Java) 인터페이스를 구현하는 구현체이다. 한마디로, Logging Framework이다. Appender 종류 ConsoleAppender: 콘솔에 log 출력 FileAppender: 파일 단위로 log 저장 RollingFileAppender: 설정 옵션(시간 등...)에 따라 log를 여러 파일로 나누어 저장 SMTPAppender: log를 메일로 전송하여 기록 DBAppender: log를 DB에 저장 실습 1. logback-spring.xml 파일 생성 logback-spri.. 더보기
[Spring] Spring Security + Junit5 환경: Spring Boot version '2.7.5.' + spring webflux + spring security 상황 Security 설정을 다음과 같이 작성하였다. @Configuration @EnableWebFluxSecurity public class SecurityConfig { @Bean SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) { http .csrf().disable() .authorizeExchange( authorize -> authorize.pathMatchers("/api/v1/members/join").permitAll() .anyExchange().authenticated() ) .form.. 더보기
[Docker] docker-compose 단일 서버에서 여러 컨테이너를 프로젝트 단위로 묶어서 관리할 수 있게 도와주는 기능이다. docker-compose.yml 파일을 통해 사용하는 컨테이너를 명시적으로 관리할 수 있다. 프로젝트 단위로 도커 네트워크와 볼륨을 관리할 수 있다. 프로젝트 내 서비스 간 의존성 정의가 가능하다. 각각의 서비스 명으로 네트워크 상에서 호출할 수 있는 서비스 디스커버리 자동화 기능을 제공한다. 손쉽게 컨테이너를 수평 확장할 수 있다. 주요 사용 목적 로컬 개방 환경 구성 자동화된 테스트 환경 구성 단일 호스트 내 컨테이너를 선언적 관리 Docker-Compose 구성 프로젝트 docker-compose에서 다루는 워크스페이스 단위 함께 관리하는 서비스 컨테이너의 묶음을 의미한다. 프로젝트 단위로 기본 도커 네트워크.. 더보기
Multi Module 레고를 조립하듯 필요한 Module을 조립할 수 있다. N개의 Module이 조립되어 있는 프로젝트를 Multi Module 프로젝트라고 부른다. Multi Module 프로젝트 구조를 사용하는 이유 A 서버와 B 서버에서 동일한 DB Entity가 필요할 경우 중복된 Entity를 Module화 시켜 사용하기 위해 Multi Module 프로젝트를 사용한다. * 만일 각 서버마다 Entity를 생성해서 관리한다면, 변경 사항 발생 시 각 서버마다 해당 Entity를 수정해야 하기 때문에 리스크가 늘어난다. Multi Module 구조에서 원하는 Module만 골라서 빌드&배포가 가능하다. 실습 1. Root Project를 생성한다. Root Project를 생성하고 필요 없는 폴더와 파일을 삭제한다... 더보기
Git Flow 전략 Git을 사용하여 개발하는 환경에서 Branch 간의 문제없이 배포까지 안정적으로 할 수 있도록 Branch를 관리하는 전략이다. 실제 개발 환경에서는 한 명이 작업하는 것이 아닌 여러 명이 협업을 하기 때문에 복잡한 상황에서 Git이 꼬이지 않도록 할 수 있다. 운영 서버에 배포되어야 할 코드들만 배포 될 수 있도록 도와준다. 주요 Branch Main(= Master) 실제 운영 환경의 코드를 가지고 있는 Branch 안정적인 코드만 들어 있어야 한다. Dev Main Branch를 Base로 생성한 Branch 다음 배포에 적용할 코드들을 Merge해서 가지고 있는 Branch Feature 어떤 기능을 개발할 때 사용하는 Branch 기능 개발 완료 후 Dev Branch에 Merge 한다. Re.. 더보기
[Docker] Dockerfile Dockerfile Layer 구조로 변경 사항이 생기면 기존 Layer 위에 Layer로 쌓인다. Layer 구조를 사용함으로써 간단하게 새로운 결과를 만들 수 있다. 캐싱을 사용하여 이전의 작업을 중복 실행하지 않을 수 있다. Dockerfile을 빌드해서 Docker Image를 생성할 수 있다. Dockerfile 예시 FROM ndoe:12-alpine RUN apk add --no-cache python3 g++ make WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "src/index.js"] Dockerfile 문법 주석: # 문법 기본 구조: [INSTRUCTION] [arguments] 환경 변수 ENV [변수명]=[.. 더보기
[Docker] Docker 기본 Docker 구성 요소 docker daemon을 docker engine이라고 부른다. Docker Image와 Docker Container는 1 : N 관계이다. Docker Image Docker에서 사용하는 가장 기본적인 단위 컨테이너를 생성할 때 필요한 요소로, 컨테이너의 목적에 맞는 바이너리와 의존성이 설치되어 있다. 여러 개의 계층으로 된 바이너리 파일로 존재한다. 저장소 이름/이미지 이름:이미지 태그로 구성된다. Pull/Push 시에 저장소 이름을 생략하면 기본 저장소인 도커 허브로 인식한다. 도커 이미지 태그를 생략하면 최신 리버전을 뜻하는 lastest로 인식한다. Docker Container Docker에서 사용하는 가장 기본적인 단위 호스트와 다른 컨테이너로부터 격리된 시스템 .. 더보기