본문 바로가기

웹 프로그래밍/스프링

(30)
최종 프로젝트 회고 (MSA 설계 배경) 웹 크롤링웹크롤링은 Java-selenium 과 Jsoup을 이용하여 구현하였고 또 스프링 스케쥴러를 사용해서 원하는 시간마다 yes24 공연 예매 사이트를 확인하여 새로운 공연정보가 올라올때마다 크롤링을 해서 정보를 추출할수 있었다. 스케쥴러 사용법1) 주기적으로 실행시킬 메서드에 @Scheduled 어노테이션을 붙임@Scheduled(cron = "0 */2 * * * ?") public void createCrawling() 2) 스케쥴러를 사용하기위해 애플리케이션에 @EnableScheduling 어노테이션을 붙여줌@EnableScheduling@SpringBootApplicationpublic class CrawlingApplication { public static void main(St..
쿠버네티스 로드밸런싱 실험(nGrinder) 쿠버네티스의 성능쿠버네티스를 이용해서 트래픽 변화에 따른 서버의 자동 증설 및 축소가 가능해졌는데 과연 이렇게 늘어난 서버가 정말로 제 역할을 해낼지 궁금해졌다. 만약 서버 증설을 성공하더라도 로드밸런서가 잘 작동되지 않는다고 가정하면(병목현상 등) n개의 서버를 증설한다고해도 성능은 n배가 되지 않을것이기 때문이다. 그래서 nGrinder라는 테스트 툴을 이용해서 서버가 증설될때 과연 요청 처리 속도가 얼마나 빨라지고 시간당 트랜잭션이 얼만큼 증가하는지 실험해보고자 한다. nGrindernGrinder는 내 로컬에서 도커로 쉽게 설치가 가능하고 실험하고싶은 API URL과 실험하고자하는 시나리오(script)를 자바와 유사한 Groovy로 작성하면 가상 사용자수가 몇명일때 처리되는 요청을 분석할수 있다..
최종 프로젝트 회고 (스프링 @Asysc, 비동기 방식) 이제는 알람서버로 분리된 기능이고 최종 프로젝트의 핵심 기능인 알람 기능의 동작 방식에 대해서 포스팅 하겠습니다.팀원분이 공부하고 작성했던 내용을 바탕으로 최종 프로젝트에서 RabbitMQ를 적용하여 알람서버로 분리하는 과정을 추가해서 정리해 보겠습니다. 구독한 이용자에게 공연 정보를 Jakarta Mail로 이메일을 보내게 되는 상황에서 동기방식으로 알람을 보내게 되면 모든 알람을 보낼때까지 프로세스가 기다리기 때문에 그때 동안 다른 요청을 처리하지 못하게돼서 성능저하에 이어지게 됩니다.그래서 이에 대한 해결방법으로 스프링 비동기 방식을 사용할수 있습니다. 핵심은 모든 알람이 전달될때까지 기다리는게 아니라 각각의 알람들은 쓰레드들이 잡고서 해결하고 공연 업로드는 알람처리와 상관없이 업로드돼야 하는것입니..
Techit Java Backend School 8기 수료(우수상) 후기 멋쟁이 사자처럼 자바 백엔드 스쿨 8기 후기를 작성해보려고 한다.먼저 우리팀의 공연 알람 서비스(스테이지 알람)은 1차 프로젝트에서 우수상을 받았고 2차 프로젝트를 고도화 하기로 선택하면서 모든팀중에서 유일하게 팀원 변경없이 그대로 2차 프로젝트를 하는 고도화 팀이였다.1차 프로젝트를 우승도 했겠다 워낙에 팀케미가 잘맞았기 때문에 아무 걱정없이 2차 프로젝트를 시작할 준비를 하고 있었는데 갑자기 1차 팀장님이 취업을 했다는 소식이 전해졌고 잠시동안 팀 전체로 멘붕에 빠져버렸다. 그냥 팀원도 아니고 전 팀장이 나간다 하시니 힘이 빠지고 아쉬움에 집중이 잘되지가 않았다. 이런 감정과 분위기로는 몰입하기가 어려워서 나는마음가짐을 다잡기위해 용기를 내서 팀원들에게 2차 프로젝트 팀장을 하겠다고 전했고 팀원들도 ..
쿠버네티스(k8s) 기본 원리 Load Balancing, Service Discovery웹 서비스는 얼마만큼의 컴퓨터 자원이 필요한지 사전에 알기 어렵다Scale Up을 진행하기 어렵다Load Balancing과 Service Discovery가 중요한 이유 무중단 배포웹 서비스는 사용자가 언제든지 접속하고 있을수 있다접속 중에 업데이트를 진행하면 서비스가 중단될수도 있다. 어떻게 하면 사용자의 서비스 중단 없이 업데이트를 진행할 것인가? 쿠버네티스의 등장Container Orchestration도커의 컨테이너는 애플리케이션 배포에 인프라에 대한 고민을 많이 줄여주었다다양한 서버에 배포하면서 환경을 일정하게 유지할수 있으며상대적으로 가볍기 때문에 빠르게 전달하고 실행할수 있다이 컨테이너의 배포, 확장, 관리를 자동화 하는 것을 Co..
RabbitMQ Message Broker서비스가 발전하면서 기능이 많아지면 하나의 서버에서 모든것을 처리하지 않는 방향을 생각해 볼수있다.인증만 담당하는 서버를 따로 만들거나서비스 사용 이력을 검색 가능한 형태로 기록하거나채팅만 담당하거나크롤링이나 알림 메시지 보내는것만 담당하는 등이럴경우 서로 상호 소통을 해야하는 상황이 발생함 -> 서버 분리  Http(동기식 통신)를 사용할때의 단점요청을 보낸후 응답이 올때까지 서버의 수행이 중단(해당 서버가 죽으면 보낸 요청은 불확실해짐)여러 서버에 동시에 정보를 전달하기 번거로움어떤 특정 서버를 지정해서 요청을 보내야 하기 때문에 결합성 증가 대신 Message Broker(비동기)라는 소프트웨어(미들웨어)를 사용해 메세지의 전달을 위임할수 있다.서버는 메세지를 Message..
Docker 가상화 실제 컴퓨터 자원을 좀더 유연하게 사용하기 위해 추상화하는 기술 컨테이너 Docker의 가상화 기술 물리적 컴퓨터의 OS와 소통하여 격리된 환경을 만든다. Hypervisor에 비해 가볍고 자원 활용이 용이하다. Container를 실행하는 Engine이 있다면 실행가능하다. 이식성이 높다. 각 Container가 실제로 사용하는 Kernel은 동일하다. OS와는 Docker Engine통해서 소통하여 자원 부담이 적고 더 빠르게 만들고 실행하기가 가능하다. 같은 OS 같은 커널을 사용하기때문에 완전한 격리를 할수는 없다. 도커의 핵심은 image(Class와 비슷)와 image로부터 만든 컨테이너(인스턴스와 비슷) 도커 실행 예시 sudo docker run -d --name rabbitmq -..
스프링 시큐리티에서 Redis로 jwt 액세스 토큰, 리프레쉬 토큰 구현 액세스 토큰과 리프레쉬 토큰이란? 액세스(Access) 토큰과 리프레쉬(Refresh) 토큰 모두 jwt 토큰이며 사용자 UX와 보안적인 부분을 위해서 고안된 방법이다. 귀찮게 왜 한가지만쓰면 되지 토큰을 분리 했을까? 만약 토큰을 분리하지 않았다면 두가지 경우를 직면하게 된다. 첫째로 토큰의 유효기간이 너무 길어서 토큰이 탈취당했을때 위험성이 높아진다. 탈취된 토큰으로 단지 헤더에 Bearer 토큰을 추가함으로써 오랫동안 사용자 행세를 할수 있기 때문이다. 두번째로 토큰의 유효기간을 짧게 한다면 탈취당해도 재사용 가능성이 줄어들겠지만 사용자가 자주 로그인을 해야함으로 불편함을 겪게된다. 그래서 자주 사용하는 액세스 토큰은 유효기간을 짧게 하고 상대적으로 보안이 약한 localStorage에 저장하고 그..