본 포스팅은 인프런 김영한 강사님의 스프링 부트 핵심 원리 강의 섹션 7을 수강하고 배운 점을 정리했습니다. 스프링 핵심 원리 - 기본편 강의 - 인프런 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢 www.inflearn.com 1. 옵션 처리 : 주입할 빈이 없는 경우 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 그런데 @Autowired 만 사용하면 required 옵션의 기본값이 true로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법 1️⃣ @Autowired(required=false) : 자동 주입할..
1. 실시간 채팅 기능을 위한 웹소켓에서 발생하는 에러 우리 서비스의 주요 기능이기도 한 실시간 대화방은 소켓 통신을 활용해서 구현했다. 클라이언트와 서버는 TCP의 3 way handshake 방식을 사용해서 네트워크를 형성하고, 클라이언트가 메시지를 보내면 해당 메시지를 데이터베이스에 저장하고 Broadcast 하여 대화방에 다른 사용자들에게도 실시간으로 메시지를 던져주는 방식이다. 로컬에서는 분명 잘 작동하던 소켓 통신... 하지만 쿠버네티스에 적용하려니 정말 끝도 없는 오류를 쏟아냈다. 우선 가장 난감했던 것은 ws 프로토콜로 이뤄진 웹소켓 연결 request url인데, http를 고칠 때와 다르게 어떤 url을 써줘야 하는지 여러 번의 실험을 시도해야 했다. 또한 웹소켓 연결 에러가 거의 3초..
백준 #1012 유기농 배추 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 🔒 문제 설명 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추 흰 지렁이를 구입하기로 결심한다. 이 지렁이는 배추 근처에 서식하며 해충을 잡아먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추 흰 지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충..
쿠버네티스를 사용한 배포 프로젝트를 진행하면서 기존 소스코드를 수정할 일이 자주 발생했는데, 수정한 뒤 새로운 도커 이미지를 빌드해보니 새로운 코드가 하나도 반영되지 않았다. 다시 말해 소스 코드를 받아오는 git clone 명령어를 새로 실행하지 않고 캐싱된 기존 레이어를 그대로 가져와 쓴 것이다. 🖥️Frontend Dockerfile 중 일부: git clone 하는 레이어 RUN git clone https://github.com/ash0814/SC_frontend.git Dockerfile 자체가 바뀐 것은 하나도 없고, github의 내용이 바뀐 것이기 때문에 도커 입장에선 빌드할 때 캐싱된 기존 레이어를 가져와 쓰는 것은 당연했다. (실제로 빌드해 보면 로그에 'Layer already ex..
1. node server.js 명령어 미실행 오류 해결 백엔드 서버 파드는 생성 후 바로 'node server.js' 명령어를 실행해야 동작하고 프론트 엔드로부터 오는 api request를 받을 수 있다. 그렇기 때문에 도커파일을 아래와 같이 구성하여 컨테이너 생성 후 곧바로 서버 파드가 작동하도록 했다. Backend Dockerfile FROM debian:buster RUN apt-get -y update && apt-get -y upgrade && apt-get -y installnodejs npm curl git RUN npm cache clean -f && npm install -g n && npm update -g && n 16.17.1 WORKDIR /home RUN git clone..
쿠버네티스 배포 프로젝트를 진행하면서 도커 이미지를 사용해 각 컨테이너를 구성했는데 이 과정에서 도커 이미지를 여러 번 초기화해 빌드하고 도커 허브에 Push 해야 했다. 이 일련의 과정들을 기록해두고자 한다. 🔗내가 진행한 쿠버네티스 배포 프로젝트 개요 [Kubernetes] 쿠버네티스와 도커를 활용하여 웹서비스 배포하기 프로젝트 1주차 : 프로젝트 개요 2023 클라우드 컴퓨팅 1팀 프로젝트 쿠버네티스를 처음 다루면서 정말 많이 헤매고 힘들었다. 아직 진행 중인 미완성 프로젝트지만 더 열심히 해보려고 블로그에 기록해보려고 한다. 프로젝트 최 yuejeong.tistory.com 1. 도커 이미지에 사용할 소스 코드 작성 컨테이너에 올릴 기존 서비스의 소스 코드를 준비한다. 직접 컨테이너에 소스 파일을..
1. Ingress External IP로 접속 시 502 Bad gateway 에러 해결 저번 2주 차 회고에서 인그레스의 external IP로 접속했을 때 프론트엔드 파드 통신조차 동작하지 않았다. (원인은 502 gateway) 원인을 풀어보자면 Ingress ➡️ 프론트엔드 서비스 ➡️ 프론트엔드 파드로 포워딩이 이뤄지지 않은 것인데 구체적으로 어떤 걸 고쳐야 하는지 전혀 알 수 없어서 정말 많이 헤맸다. 크롬의 개발자 도구를 띄워보아도 도움 될만한 힌트는 찾을 수 없었다. 이 과정에서 Kubectl이 제공하는 기능 중 '파드의 로그'를 확인할 수 있는 명령어가 있어서 프론트엔드 파드를 확인해 보았다. kubectl logs -f [파드 명] -f를 붙이면 로그가 실시간으로 출력된다. 여기서 빨..
본 포스팅은 인프런 김영한 강사님의 스프링 부트 핵심 원리 강의 섹션 7을 수강하고 배운 점을 정리했습니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢 www.inflearn.com 다양한 의존관계 주입 방법 1. 생성자 주입 ✅ 생성자를 통해서 의존 관계를 주입받는 방법이다. ✅ 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. ✅ 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final Membe..
본 포스팅은 인프런 김영한 강사님의 스프링 부트 핵심 원리 강의 섹션 6을 수강하고 배운 점을 정리했습니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢 www.inflearn.com 컴포넌트 스캔과 의존 관계 자동 주입 이전까지 스프링 빈을 등록하던 방법: 자바 코드에 @Bean 애노테이션을 일일이 작성하거나 XML의 를 통해서 설정정보를 직접 등록했다. 수동 등록의 단점: 등록할 빈이 많을수록 설정 정보가 커지고 누락하는 문제 발생 ➡️ 설정 정보 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공한다. ..
1. Database를 구성하는 StatefulSet 프론트, 백엔드, 데이터 베이스 각각의 모든 오브젝트 매니페스트 파일을 만들고 실행 한 뒤 파드 로그를 띄웠을 때 백엔드 서버 파드가 가동되자마자 죽는 CrashLoopBackOff 에러가 발생했다. 또한 인그레스와 서비스가 잘 연결됐는지 확인하는 명령어를 실행했을 때 아래와 같이 백엔드 서비스가 빈칸으로 비워져 있었다. 당연히 인그레스의 External IP로 접속하면 오류가 나왔다. 나는 위에서 언급한 이유들로 인해 현재 오류가 백엔드 파드에서 발생했다고 생각했다. 백엔드 파드에서 오류가 발생하는 여러 원인을 생각해 봤는데, 우리가 구성한 백엔드 파드는 DB 파드가 제대로 동작하지 않으면 절대 작동할 수 없다. 또한 백엔드의 디플로이먼트와 서비스 ..