배우는 즐거움
잘못된 에러 핸들링과 로그에 관하여
잘못된 에러 핸들링과 로그에 관하여
2024.04.16로그레벨에 관하여 개발을 진행하다보면 로그를 테스트나 서비스 상태나 장애 파악을 위해 많이 쓰게 됩니다. 그래서 단계에 따른 레벨을 사용하게 됩니다. log4j 기준으로 RACE, DEBUG,INFO, WARN, ERROR, FATAL 으로 구분을 지어 사용합니다. ⭐ 로그레벨 정의 TRACE : 추적 레벨은 DEBUG보다 좀 더 상세한 정보를 나타낸다. DEBUG : 프로그램을 디버깅하기 위한 정보를 지정한다 INFO : 상태변경과 같은 정보성 메세지를 나타낸다. WARN : 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지를 나타낸다. ERROR : 요청을 처리하는 중 문제가 발생한 경우이다. FATAL : 아주 심각한 에러가 발생한 상태로 시스템적으로 심각한 문제가 발생해 어..
클라우드 서버 제작 및 서버 인프라 설계
클라우드 서버 제작 및 서버 인프라 설계
2023.12.18서버구축에 있어서 올해 프로젝트를 진행하면서 팀장 역할과 Android와 BackEnd 개발을 하게 되었습니다. Spring을 공부하고 있어 서버 개발은 할 수 있었지만, 서버 인프라 설계에 대해 잘모르고 있었습니다. AWS, GCP를 이용하면 시간 절약이 가능했지만 비용문제로 Local 서버로 만들어야 하는 상황이라 학교에서 배운 네트워크 기반과 보안 지식을 꺼내야만 했습니다. 한정적인 자원을 효율적으로 로컬 컴퓨터에 서비스를 설치해서 사용할 수 있지만, 만약 서버가 문제가 생기면 모든 서비스가 문제가 문제가 생기거나, 백업이 불편하다는 점이 있었습니다. 그래서 다른 방법을 찾게 되었습니다. 특히 한정적인 로컬 자원을 잘 활용하며 백업이 유연해야 했습니다. 주변에 어떤 방법이 찾아보던중 이미 자원을 효..
Kotlin Coroutines 이란 무엇인가요?
Kotlin Coroutines 이란 무엇인가요?
2023.02.06Coroutines 이란 무엇인가? Kotlin coroutines은 비동적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계된 패턴이다. 코루틴은 Kotlin 1.3 버전에 추가되었습니다. 코루틴의 장점 경량화 코루틴은 실행 중인 스레드를 차단하지 않은 “정지”를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있다.(정지 하는것은 동시 작업을 지원하므로 차단보다 메모리를 절약합니다.) 기본으로 제공되는 취소 지원 실행 중인 코루틴 계층 구조를 통해 자동으로 취소가 전달됩니다. Jetpack통합 많은 Jetpack라이브러리에 코루틴을 완전히 지원하는 확장 프로그램이 포함되어있습니다. Coroutines와 Thread Process와 Thread 프로세스(Proce..
객체지향 코드 설계 5가지 원칙(SOLID)
객체지향 코드 설계 5가지 원칙(SOLID)
2022.09.27코드 설계 원칙(SOLID) SOLID은 SRP(단일책임원칙), OCP(개방 폐쇄 원칙), LSP(리스코프 치환원칙), DIP(의존역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID를 지키고 설계를 한다면 시간이 지나고 유지보수와 확장이 쉬운 소프트웨어로 개발할 수있고 프로그램 설계에서는 어떠한 원칙을 정하고 그것을 기반으로 프로그램을 작성한다면 원칙 없이 작성한 코드보다 좋은 결과를 볼 수 있다. 단일 책임 원칙 (Single Responsibility Principle) 객체 지향 프로그래밍에서 단일 책임 원칙(Single Responsibility Principle)은 모든 클래스는 하나의 책임만 가지며 클래스는 그 책임을 완전히 캡슐화 해야한다. 클래스가 제공하는 ..
백준 Kotlin 2447번 : 별 찍기 -10
백준 Kotlin 2447번 : 별 찍기 -10
2021.09.252447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 문제 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다. N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다. 입..
백준 Kotlin 2839번 : 설탕 배달
백준 Kotlin 2839번 : 설탕 배달
2021.09.222839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 ..
백준 Kotlin 10250번 : ACM 호텔
백준 Kotlin 10250번 : ACM 호텔
2021.09.2210250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 ..
백준 Kotlin 2869번 : 달팽이는 올라가고 싶다.
백준 Kotlin 2869번 : 달팽이는 올라가고 싶다.
2021.09.222869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 문제 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) 출력 첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다. imp..
백준 Kotlin 1152번 : 단어의 개수
백준 Kotlin 1152번 : 단어의 개수
2021.09.221152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 문제 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 입력 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다. 출력 첫째 줄에..
백준 Kotlin 4673번 : 셀프 넘버
백준 Kotlin 4673번 : 셀프 넘버
2021.09.224673번: 셀프 넘버 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, www.acmicpc.net 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 +..
백준 Kotlin 2884번 : 알람 시계
백준 Kotlin 2884번 : 알람 시계
2021.09.2210818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. 출력 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다. import java.util.* ..
백준 Kotlin 1110번 : 더하기 사이클
백준 Kotlin 1110번 : 더하기 사이클
2021.09.221110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net 문제 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자. 26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다..