분류 전체보기
-
도커와 가상화 기술(VM)과의 차이백엔드 관련 강의 공부/도커와 CI환경 2023. 12. 29. 17:12
가상화 기술이 나오기 전 한 대의 서버를 하나의 용도로만 사용, 하나의 서버에 하나의 운영체제, 하나의 프로그램을 운영하여 안정적이지만 굉장히 비효율적인 방식 하이퍼 바이저 기반의 가상화 - 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어, 그리고 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링 하는 중간 관리자 하이퍼 바이저에 의해 구동되는 VM은 각 VM 마다 독립적인 가상 하드웨어 자원을 할당 받아서 논리적으로 분리되어 있는 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다. 도커와 VM의 대략적인 구조도 공통점 도커 컨테이너와 가상 머신(VM)은 기본 하드웨어에서 격리된 환경 내에 어플리케이션을..
-
도커와 컨테이너의 기본 개념들백엔드 관련 강의 공부/도커와 CI환경 2023. 12. 29. 16:16
개발을 하면서 도커란 단어를 많이 들어봤고 채용 공고에서도 도커에 대한 언급이 많지만 도커에 대해서 잘 모르고 있었다. 이번 방학때는 도커에 대해서 공부해 볼 예정이다. 인프런 강의를 통해 학습하는 것이기도 하고, 풀스택으로 해보는 것이 편하기 때문에 스프링이 아닌 Node.js를 이용해서 공부할 것이다. 도커를 사용해야 하는 이유 서버, 운영체제에 따라 프로그램을 설치하는 과정에서 많은 에러가 발생하며 설치 과정이 매우 복잡하다. 이러한 문제점을 해결해 단순화해도록 도와주는 것을 도커를 통해서 할 수 있다. 도커란? 도커가 무엇인지에 대해서 한 마디로 표현하기는 애매하지만 컨테이너를 사용하여 응용 프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈소스 가상화 플랫..
-
나날이 백엔드 CI-CD 구축의 과정프로젝트/나날이 2023. 11. 20. 22:17
이전 2번의 프로젝트 Trend_Pick, 피료해에서는 수동으로 배포를 했다. ec2 서버에 연결한 다음에 로컬에서 JAR 파일을 보낸 뒤 직접 자바 파일을 실행시켰다. 배포를 한 후에도 계속해서 변경사항이 생겼고, 생길 때마다 ec2 서버에 JAR 파일을 보내고 기존의 실행되는 애플리케이션을 kill 한 다음에 다시 자바를 실행시키는 일이 매우 번거로웠다. 계속 CI-CD를 구축해봐야지라고 생각만 하고 다른거 하기 바빠서 안했었는데 이번에는 시간을 들여서 제대로 해봤다. (물론 계속 안돼서 10시간은 넘게 썼다. 구글링해도 다 달라서 잘 안되더라......) scripts/deploy.sh #!/usr/bin/env bash REPOSITORY=/home/ubuntu/nanali cd $REPOSITO..
-
Get 요청에서는 Body로 데이터를 받으면 안된다프로젝트/나날이 2023. 11. 17. 19:08
@GetMapping public GarmentResponseDto Garment(@RequestBody GarmentRequestDto request) { // 코드 생략 } 처음 설계를 할 때에는 Garment를 조회하는 함수에서 데이터를 받을 때 @RequestBody로 temp, uv, rain, sex등의 데이터를 받았다. postman으로 테스트 했을 때에도 문제가 없어서 괜찮은줄 알았다. 그런데 프론트엔드 개발자에게서 GetMapping을 할 때 body로 통신을 할 수 있냐는 질문을 받았다. 찾아보니 Http Get Method에는 body가 없는게 표준 스펙이라고 했다. 아주 예외적으로 현업에서 파라미터가 너무 많으면 post method를 열어두고 body로 받기는 하지만 선호하는 방식..
-
옷 사진 데이터 설계 방식에 대한 고민프로젝트/나날이 2023. 10. 29. 00:08
이번 프로젝트에서 팀장을 맡게 되었다. 기획자가 따로 없어서 기획자의 역할을 같이 했기 때문에 '나날이' 프로젝트에서 가장 시간 투자를 많이하고 고민을 많이 한 부분이 기획과 백엔드 설계에 대한 방식이다. 그렇기 때문에 기획과 설계에 대한 내용을 정리하려고 한다. 옷 데이터를 저장하는 방법 처음에는 공공데이터를 활용하려고 했으나 생각보다 데이터가 좋지 않아보여서 무신사에서 크롤링을 해서 그 사진들로 추천하는 방식으로 변경하였다. 사진 데이터를 어떻게 저장할지에 대한 고민이 있었다. 옷 사진은 전체 코디 사진, 아이템별 사진으로 저장된다. 옷은 db에 저장해서 필요한 상황에 맞게 select 해오기로 했다. 옷을 저장할 때 저장되는 테이블에는 사진 url과 이름, id라는 기본적인 값과 온도, 강수량, 자..
-
실시간 날씨 open api 활용프로젝트/나날이 2023. 10. 27. 20:20
'나날이'는 날씨에 따른 옷을 추천해주는 서비스이다. 그렇기 때문에 실시간 날씨 데이터를 받아오는 것이 매우 중요하다. open api를 검색하던 도중 Weather Forecast API라는 API를 발견해서 이걸 활용하기로 했다. api 사이트 https://open-meteo.com @Slf4j @Service @RequiredArgsConstructor public class WeatherService { public ResponseEntity weather(LocalDateTime weatherTime) throws IOException { String today = weatherTime.toString().concat("T"); today = today.substring(0, today.ind..
-
메트릭 등록 - 게이지스프링/스프링부트 2023. 10. 3. 22:20
게이지는 임의로 오르내릴 수 있는 단일 숫자 값을 나타내는 메트릭이다. 카운터와 게이지는 값이 감소할 수 있는지의 차이이다. @Configuration public class StockConfigV1 { @Bean public MyStockMetric myStockMetric(OrderService orderService, MeterRegistry registry) { return new MyStockMetric(orderService, registry); } @Slf4j static class MyStockMetric { private OrderService orderService; private MeterRegistry registry; public MyStockMetric(OrderService o..
-
메트릭 등록 - Timer스프링/스프링부트 2023. 10. 3. 21:55
Timer는 카운터와 유사한데 실행 시간도 함께 측정해주는 기능이다. Timer 는 다음과 같은 내용을 한번에 측정해준다. seconds_count : 누적 실행 수 - 카운터 seconds_sum : 실행 시간의 합 - sum seconds_max : 최대 실행 시간(가장 오래걸린 실행 시간) - 게이지 최대 실행 시간은 평생 유지되는게 아니라 내부에 타임 윈도우라는 개념이 있어서 1~3분 마다 최대 실행 시간이 다시 갱신된다. 수동 등록 Timer도 자동으로 등록하는 @Timed 어노테이션이 존재하지만 일단 수동 등록부터 정리하겠다. @Slf4j public class OrderServiceV3 implements OrderService { private final MeterRegistry regis..