본문 바로가기

전체 글

DI 시 빈이 여러개일 경우 , 여러개의 Interface를 상속받은 경우 DI 시 빈이 여러개 일때?@Autowired에 필요한 과정 복습1) Component Scan + @Component로 객체를 스프링 빈에 등록2) @Autowired를 통해 등록된 빈에서 필요한 의존관계를 설정    (우선적으로,타입(Type)으로 해당 빈(Bean)을 찾는다!)만약, @Autowired를 통한 자동 의존관계 주입시 여러개의 빈을 찾는다면?오류가 발생!스프링은 찾은 여러개의 빈(Bean)들 중 어떤 것을 할 기준이 없기 때문여러개의 빈을 찾을 때 해결할 수 있는 3가지 방법1) @Autowired 필드 명 매칭2) @Qualifier3) @Primary@Autowired 필드명 매칭@Autowired는 우선적으로 타입(Type)으로 빈을 찾지만, 찾지 못하면 필드 이름으로 찾는 특징이.. 더보기
브레이킹루틴을 읽고 공감가는부분과 어떻게 적용을 해갈지 보호되어 있는 글입니다. 더보기
Docker Mysql 테스트서버 DB분리 목차· 개요· 환경분리 Spring boot dev,prod 파일· 결론  개요인턴 프로젝트를 진행하면서 Staging 별 Spring서버가 분리되면서 DB도 분리해야 했다.각각 DB가 다 다르게 담겨야하는데 어떻게할지 찾아보다 간단해서 바로 블로그로 옮기게 됐습니다  환경분리 Spring boot dev,prod 파일방법 1 Docker Mysql dev , Prod 각각 띄우기spring: profiles: active: dev include: test datasource: url: jdbc:mysql://dev-mysql:3306/testdb?characterEncoding=UTF-8 username: root password: password driver-cla.. 더보기
Statement보다 PreparedStatement를 사용해야하는이유 목차· 개요· Statement, PreparedState 동작방식· Statement,PreparedState 차이점· 결론   개요 · Statement 종류에는 Statement,PreparedStatemennt,CallableStatement 3가지가 존재한다.· CallableStatement는 PL/SQL문을 호출할 때 사용한다고 했지만 성능상 이슈로 인해 거의 사용하지 않는다.· 실무에서는 Statement를 사용하지않고 PreparedStatement를 사용한다고하는데 왜 그런지 이유를 알아보자. Statement, PreparedState 동작방식동작방식1. 구문 분석(Parsing) 및 정규화(Normalization)- Query 문법 확인 및 데이터베이스, 테이블 존재여부 확인2. .. 더보기
Let's Encrypt Https인증서 자동갱신 목차· 인증서 갱신 유효기간 확인하는방법· 90일 간 유지되는 Let's Encrypt 인증서 어떻게해야할까?· CronTab을 이용한 자동인증서 발급 인증서 갱신 유효기간 확인하는 방법인증서 만료일이 얼마나 남았는지 확인하는 방법sudo certbot certificates90일간 유지되는 Let's Encrypt 인증서 어떻게해야할까Let's Encrypt는 글로벌 공인인증기관인 CA에서 인증받은 기관이며, 신뢰할 수 있는 인증서를 제공합니다.인증서는 안전한 HTTPS 연결을 도와주는데 이용이 됩니다. 하지만 해당 인증서를 발급받게되면 90일동안만 유효하게 됩니다. 따라서 90일마다 인증서를 재발급해줘야합니다. 하지만 90일마다 재발급하는 것은 너무 번거럽고, 반복적인 작업을 해줘야 하기때문에 자동화.. 더보기
Java Stream map,foreach 차이 및 예제 목차· 왜 map과 foreach의 차이점에 대해 알아보게되었을까?· map과 foreach 무슨차이가 있을까?· 결론 왜 map과 foreach의 차이점에 대해 알아보게 되었을까? 4월부터 시작한 인턴생활, 파일럿프로젝트에서 매일 저녁 8시마다 파이어베이스 알림을 보내주는 스케줄러를 구현했고 테스트 서버에 올려두었다. 하지만 8시가 지나도 알림이 발생하지않았다. 뭐지뭐지.. 어리둥절하다가 결국 스케줄러 내부 메소드를 뜯어보게 되었고 map이 문제였었다. map과 foreach는 무슨차이가 있을까? 작동을 하지 않았던 코드List plantList = plantRepository.findAll(); plantList.stream().map(plant -> { if(plan.. 더보기
점차 쌓이는 로그들 어떻게 처리해야할까 ? 목차· docker , docker volume을 이용해서 로그를 기록해보자 log.info 와 was-log !· 점차 쌓여가는 로그들 나의 EC2의 용량은 누가 지킬 것 인가 알아보자!  최근에 실제 운영되는 프로젝트를 하면서 로그들을 관리해야할 상황이 왔다. docker logback에 의해 생성되는 로그들을EC2내부에 기록을 해야했고, 해당 기록을 한 과정들을 담아보려고합니다. logback.xml [%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{36} - %msg%n ${LOGS_ABSOLU.. 더보기
Nginx Blue green 무중단 배포 무중단 배포를 하기 위해서는 몇가지 configuration 설정이 필요합니다. 1.  docker-compose.green.yaml2.  docker-compose.blue.yaml3.  nginx-docker-compose.yaml4. mysql-docker-compose.yaml5. deploy.sh docker-compose.green.yamlversion: "3.7"services: pullo: image: kimminwoo1234/pullo-backend:${BUILD_NUMBER} restart: always ports: - 8080:8080 environment: SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL} .. 더보기