본문 바로가기

Java & Kotlin/Java23

백엔드 서비스 운영시 고려해야할 점 지난 한 해 동안 사내에서 신규 서비스를 개발 및 오픈하게 되었습니다.🎉 보통 주니어 개발자는 입사 후 아래와 같은 상황인 경우가 많을 것이라 생각됩니다. 기존 운영되고 있던 서비스를 운영 개인(토이) 프로젝트 개발 -> 때에 따라 실제 서비스 오픈 (하지만 서비스 이용자가 많이 없어 배포까지만 완료하는 경우가 많음) 시니어 개발자가 프로젝트 설정 후 API 개발만을 담당함 저 또한 같은 주니어 개발자 입장이지만 팀 내 프로젝트 개발 표준 구성 데브옵스 & 인프라 구성 를 모두 담당하게 되면서 단순히 API 개발만 했더라면 알지 못하고 넘어갔을 내용들을 정리하여 공유하려 합니다. Java + Springboot 환경을 기준으로 작성합니다👋 요청 당 로그 트레이싱 서비스를 오픈하고 운영하는 단계 또는 그 .. 2024. 1. 21.
스프링부트 커넥션 설정도 체크하자 Issue 배치를 통해 async로 호출하는 API에서 응답시간이 60초 또는 30초, 심지어 에러까지 발생해서 정상 응답하지 않는 문제가 발생했습니다. 위 내용을 보면 HikariPool에서 커넥션을 30초동안 얻지 못해 생긴 에러임을 알 수 있습니다. TroubleShooting 첫 번째 의심 API 요청에 대한 응답이 너무 느려 타임아웃이 나는건가? 아닙니다. 직전 요청이 외부 서비스에 주문상태를 전달하는 Feign 요청이지만, 그렇다면 우리의 DB에서 커넥션을 얻지 못한다는 내용을 이렇게 상세하게 추적할 수 있을 리가 없습니다. 두 번째 의심 우리 DB가 문제가 있나? 아닙니다. 에러로그도 없고 데이터베이스 헬스체크 실패에 대한 로그도 없을 뿐더러, 동시간대 같은 API에 요청이 정상 응답한 경우.. 2024. 1. 21.
[Java] replaceAll, replaceFirst 에서 특수문자 인식하기 replaceAll, replaceFirst 에서 특수문자 인식하기 개발 도중 url 의 가장 첫 . 앞에 특정한 문자를 추가해야하는 상황이 생겼다. @Test void javaReplaceDotTest() throws Exception { String url = "aaa.bbb.ccc.ddd"; String replaceUrl = url.replaceFirst(".", "gg"); Assertions.assertThat(replaceUrl).isEqualTo("aaaggbbb.ccc.ddd"); } 위와 같이 내가 의도한 상황은 aaaggbbb.ccc.ddd이지만 위와 같은 결과가 나타났다. 이는 replace와 replaceAll, replaceFirst의 매개변수 차이로 인해 나타나는 현상이다. r.. 2022. 6. 24.
[Java] 크롤링 crawling, 셀레니움 Selenium [Java] 크롤링 crawling, 셀레니움 Selenium 웹 크롤링의 정식 명칭은 Web Scraping이며, 웹 사이트에서 원하는 정보를 추출하는 것을 의미한다. 보통 웹 사이트는 HTML기반이기 때문에 정보를 추출할 페이지에서 개발자모드 실행 후 원하는 정보를 가지고 있는 태그를 검색하는 스킬이 요구된다. 크롤링을 할 때에 크롤링한 데이터를 소장, 활용하는 것은 불법이 아니지만, 해당 데이터를 배포할 경우 문제가 될 수 있다. 때문에 이러한 경우에는 해당 사이트의 허락을 반드시 맡아야 한다. 목차 목차1 목차2 웹 크롤링 라이브러리의 종류 웹 크롤링 라이브러리는 Jsoup, Selenium 2가지가 있다. Jsoup 정적인 자료를 수집하는 경우에 주로 사용한다. 정적 데이터를 비교적 빠르게 수집.. 2021. 2. 22.
20.11.09 - 배열 예제 1. 총합과 평균 배열의 모든 요소를 더해서 총점과 평균을 구하기 10개의 정수를 입력 받아서 배열에 넣고 총점과 평균을 구하여 출력하세요. 1 2 3 4 5 6 7 8 9 10 11 Scanner sc = new Scanner(System.in); //스캐너 생성 int [] intArr = new int [10]; //값을 넣을 배열 생성 int sum = 0; double avg =0; for (int i = 0; i 2021. 1. 19.
20.11.04 - 반복문 예제 1. 1에서 100까지의 정수 중에서 2, 3, 5, 7의 배수를 제외한 수를 한행에 10개씩 출력하세요. int cnt = 0; for (int i = 1; i 2021. 1. 19.
20.11.03 - 연산자 예제 1. 실습 2개를 입력받아 산술연산하세요(+, - , * , /, %) Scanner sc = new Scanner(System.in); //스캐너 생성 System.out.print("정수1: "); int num1 = sc.nextInt(); //정수1을 num1에 저장 System.out.print("정수2: "); int num2 = sc.nextInt(); //정수2를 num2에 저장 while(true){ System.out.print("원하는 연산을 입력해주세요[+, -, *, /] : "); String choice = sc.next(); if(choice.equals("+")) { System.out.println(num1+"+"+num2+" = "+(num1+num2)); }else i.. 2021. 1. 19.
16. 상속 (extends, 오버라이드) 상속이란? 클래스간의 관계 중 겹치는 필드, 메소드를 가지고 있는 클래스가 존재할 때, 해당 필드와 메소드만 가지고 있는 클래스를 생성해서 코드 작성의 효율을 높이기 위한 방법입니다. 상속은 부모클래스와 자식클래스로 이루어져 있습니다. 자바에서의 상속은 부모가 주체가 아닌 자식이 주체이며 부모는 자식이 구성하는 일부분 또는 전체를 가지고 있습니다. 하나의 자식클래스에는 하나의 부모클래스만 존재합니다. 하지만 하나의 부모클래스에는 여러개의 자식클래스를 가질 수 있습니다. 1. 클래스 상속 방법 1 2 3 4 5 public class Parents{ //부모클래스 Parents // 자식클래스에서 공통으로 가지고 있을 필드 String name; int age; } 부모클래스 Parents는 필드로 nam.. 2021. 1. 19.
15. 싱글톤 (Singleton) 접근제한자를 이용한 객체생성 방법에는 싱글톤 패턴이 있습니다. 싱글톤패턴은 클래스 내 정적필드에서 private로 객체를 생성하고 getInstance메소드를 통하여 정적필드에서 생성한 객체를 리턴하는 형식으로 객체생성을 합니다. 싱글톤 패턴을 사용해서 얻을 수 있는 장점은 객체생성을 한번만 하고 heap메모리에 하나만 올리기 때문에 같은 값을 가진 객체를 여러번 만들지 않게 되어 메모리를 절약할 수 있습니다. 대표적인 싱글톤 클래스는 Calander 클래스입니다. 1. 실글톤 클래스 생성 방법 1 2 3 4 5 6 7 8 9 10 public class Blog{ private static Blog blog = new Blog(); //클래스 내에서 private 객체 생성 private Blog() .. 2021. 1. 19.