반응형 Develop239 무중단 배포 (feat: Jenkins & Shell) 목차 서론 종류 Rolling Update Blue Green 어떤 것을 선택했는가? 무중단 배포 예제 (feat: Jenkins, Shell Script) 1. 서론 💥 지난 번에 우테코 레벨 3 인터뷰를 진행했을 때 받은 질문이 있습니다. '24시간 돌아가는 서비스에서 어떻게 새로운 변경 사항을 적용할 수 있을까요?'. 당시에는 무중단 배포에 대한 경험도 키워드도 몰랐기 때문에 서비스를 잠시 중단하고 배포한 뒤 다시 시작하는 경우밖에 생각이 나지 않는다고 대답했다. 기존 데이터에 영향을 주지 않으면서 무중단으로 서비스를 제공하는 방법에 대해 알아보면 좋을 것 같다는 조언을 듣고 이번 기회에 줍줍에 무중단 배포를 시도하기로 했다. 2. 종류 🔮 💜 Rolling Update 이전 버전에서 새 버전으로 .. 2022. 10. 19. [Spring Boot] 기본 Logging Framework는 진짜 'Logback'일까? 😮 내 프로젝트에 Log4j 가 있다? 현재 Spring Boot 2.7.1 버전을 사용하고 있다. 로깅 프레임워크에 대한 글을 작성하다가 라이브러리 의존성을 찾아보게 되었다. 그런데 예상 외의 의존성이 발견되었다. (아래 사진 참고) Spring Boot의 디폴트 로깅 프레임워크는 Logback이라고 알고 있는데 저 log4j는 뭘까? 혹시나 버전 업이 되면서 추가된걸까? 라는 의문에 다른 버전도 살펴봤다. 하지만 1.0.0 때부터 이미 존재해왔다. 😎 Spring Boot의 디폴트 Logging Framework 여지껏 log4j2를 적용하려면 spring-boot-starter-logging를 exclude하고 spring-boot-starter-logging-log4j2를 추가해야한다고 알고 있었.. 2022. 10. 13. [Spring] Local Transaction vs Global Transaction ✨ 트랜잭션 DB 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 한꺼번에 모두 수행되어야 할 일련의 연산들 트랜잭션은 데이터베이스, 메시지 큐 등 다양한 자원에서 다양한 로직을 수행한다. 때로는 여러가지 작업이 한 트랜잭션에서 일어나기를 원할 수도 있다. Java에는 자원에 접근하고 수행하는 여러 방법들을 지원한다. 각 자원마다 따로 로컬 트랜잭션을 수행할 수도 있고 여러 자원들이 한 글로벌 트랜잭션에 참여할 수도 있다. 이 문장이 어떤 의미인지는 앞으로의 글을 읽으며 천천히 이해해보자. 🌏 Local Transaction 로컬 트랜잭션을 한번 알아보기 위해 여러 자원들 중에서도 우리에게 친숙한 JDBC를 이용해서 살펴보자. JDBC는 Java Database Connectivity의.. 2022. 10. 9. [Spring] 내 테스트에만 stub 적용하기 😈 🐹 서론 🐹 요즘 🐹줍줍🐹의 백엔드 팀에서는 큰 기능을 도입하기 앞서 테스트 코드 리팩터링에 한참 열을 올리고 있습니다. 오늘은 이 테스트 리팩터링을 하다 겪은 일에 대해 포스팅하려 합니다. 이번 리팩터링을 진행하면서 모킹을 제거하는 부분이 있었는데요. 줍줍은 Slack이라는 외부 서비스에 크나큰 의존을 갖고 있습니다. Slack 라이브러리에 대한 의존성을 갖고 있었고 해당 라이브러리를 호출하는 부분은 모킹 처리를 해두었습니다. 인수 테스트를 뜯어 고치면서 생각한 것은 모킹 작업이 계속 반복되고 지루한 작업으로 차지하고 있었습니다. 그래서 이 모킹 작업을 계속 반복할 바에는 스텁용 객체를 하나 생성해서 사용하는 것이 훨씬 편하겠다고 판단하여 모킹을 제거하기 시작했습니다. 🐹 리팩터링 시작 🐹 1. 외부 .. 2022. 10. 3. [Spring] DispatcherServlet 1. DispatcherSevlet이란? 🌺 🌱 Dispatcher란? dispatch: 보내다 dispatcher: (열차, 버스 등이 정시 출발하도록 관리하는) 운행 관리원 🌱 Servlet이란? 웹 서버 내에서 실행되는 작은 Java 프로그램 일반적으로 HTTP를 통해 웹 클라이언트의 요청을 수신 & 응답 🌱 DispatcherServlet이란? dispatcher + servlet 단어의 조합에서 추측해보면 클라이언트의 요청 수신/응답을 관리하는 작은 Java 프로그램 정도로 추측할 수 있을 것 같다. 스프링의 웹 MVC 프레임워크는 요청 기반(request-driven)이다. 컨트롤러에게 요청을 보내고(dispatch) 웹 애플리케이션 개발에 용이한 기능 등을 제공하는 중앙 서블릿이 존재한다. .. 2022. 9. 28. Windows에서 8080 port 사용이 불가능한 현상 💣 사건의 시작 로컬에서 프로젝트를 실행 시키다가 java.net.BindException: Address already in use: bind 에러가 발생했다. 내가 실행시키려던 8080 포트가 충돌이 일어나서 발생한 에러이다. 해결책은 간단하다. 1. PID 조회 Linux $ lsof -i:포트번호 Windows $ netstat -ano | findstr "포트번호" 2. 프로세스 종료 $ kill PID번호 💥 문제의 발생 8080 포트의 PID를 조회하기 위해 netstat을 실행시켰다. 그런데... 명령어가 잘못되었나 싶어서 이미 구동중인 포트 번호로도 확인해보았다. 😡 의심되는 원인 발견 windows와 8080 port 키워드로 이것저것 구글링 하다보니 hyper-v라는 키워드를 발견하게.. 2022. 9. 18. [Java] Thread Pool 이해하기 📚 함께 읽으면 좋은 글 프로세스와 스레드 Thread 이해하기 📑 목차 Green Thread vs Native Thread Java는 어떤 스레드를 사용하는가 Thread Pool 💥 Green Thread vs Native Thread 🔸 Green Thread = Virtual Thread User Level Thread OS가 아닌 library 또는 Virtual Machine에 의해 다뤄지는 스레드 기본 OS 기능에 의존하지 않고 다중 스레드 환경을 모방 실제로 여러 코어에서 사용하는 것은 불가능 차단 시스템 호출 시 같은 프로세스 내의 모든 스레드가 차단됨 🔸 Native Thread = Non-Green Thread Kernel Level Thread OS에 의해 다뤄지는 스레드 ❓ Ja.. 2022. 9. 12. 동시성 (Concurrency) vs 병렬성 (Parallelism) 😎 서론 이전 포스팅에서 동시성과 병렬성 차이에 대해서 아래처럼 간략하게 서술했었다. 동시성: 하나의 코어에서 여러 스레드가 번갈아가며 실행 병렬성: 멀티 코어에서 여러 스레드를 동시에 실행 책의 내용을 단어만 좀 바꿔서 인용해온 것이기도 하고 어떤 상황인지 상상이 갔기 때문에 납득하고 넘어갔었다. 근데 트위터에서 디클님이 아래와 같은 내용을 알려주셨다. 내가 서술한 내용이 틀린 것은 아니지만 그 외의 상황에서 더 자주 발생한다고 설명해주셨고 그 상황들에 대해서 궁금해졌다. 그래서 동시성과 병렬성에 대해서 좀 더 구체적으로 공부해보려 한다. ✨ 동시성; Concurrency 동시성은 여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다. 동시에 실행하는 것이 아니라 CPU가 작업마다 시간을 분할해 적절하.. 2022. 9. 10. [토비의 스프링] Chapter 1. 오브젝트와 의존관계 토비의 스프링을 SQ3R 방식을 도입해 읽는 시도를 하고 있습니다. 목차만 보고 궁금한 점들을 작성한 뒤, 책을 읽고 답변을 정리합니다. ❓ 관심사를 분리해야 하는 이유 👉 요구사항은 끊임없이 변경되고 발전한다. 모든 관심사들이 한 곳에 응집되어 있다면 해당 오브젝트는 끊임없이 변화해야 한다. 추가로 해당 오브젝트를 의존하고 있는 다른 오브젝트에까지 영향이 갈 수 있다. 이 변화의 폭을 최소화하기 위해서 관심사를 최대한 분리해야 한다. ➕ 오브젝트끼리 의존을 제거하면 되지 않을까요? 👉 불필요한 코드의 중복이 많아질 수 있다. 예를 들어 UserDao, BoardDao, CommentDao에서 DB 연동과 관련된 설정이 필요하다고 가정해보자. 모든 Dao에서 DB 연동 코드를 작성할 것인가? DB 연동 .. 2022. 9. 10. 이전 1 ··· 3 4 5 6 7 8 9 ··· 27 다음 반응형