전체 글
-
문제 링크 : https://www.acmicpc.net/problem/5464 # N: 주차 공간 개수, M: 총 차량 댓수 N, M = map(int, input().split()) # 각 주차 공간의 단위 요금표 cost_table = [] for _ in range(N): cost = int(input()) cost_table.append(cost) # 차량 번호별 차량의 무게. 1번부터 시작 cars_weight = [0] for __ in range(M): weight = int(input()) cars_weight.append(weight) # 출력할 정답. 총 금액 answer = 0 # 주차 공간 생성. 0은 비어있다는 의미 space = [0 for _ in range(N)] # 주차 ..
[백준] 5464. 주차장문제 링크 : https://www.acmicpc.net/problem/5464 # N: 주차 공간 개수, M: 총 차량 댓수 N, M = map(int, input().split()) # 각 주차 공간의 단위 요금표 cost_table = [] for _ in range(N): cost = int(input()) cost_table.append(cost) # 차량 번호별 차량의 무게. 1번부터 시작 cars_weight = [0] for __ in range(M): weight = int(input()) cars_weight.append(weight) # 출력할 정답. 총 금액 answer = 0 # 주차 공간 생성. 0은 비어있다는 의미 space = [0 for _ in range(N)] # 주차 ..
2023.02.24 -
Spring Boot Logback 설정 Logback 로깅 프레임워크 중 하나로 SLF4J의 구현체이다. Logback은 logback-core, logback-classic, logback-access의 3가지 모듈로 나뉜다. logback-core는 다른 두 모듈을 위한 기반 역할을 한다. Appender와 Encoder(Layout) 인터페이스가 속한다. logback-classic은 core에서 확장된 모듈로, core와 SLF4J API 라이브러리를 가진다. Logger 클래스가 여기에 속한다. logback-access는 서블릿 컨테이너와 통합되어 HTTP 액세스에 대한 로깅 기능을 제공한다. Logback을 이용하여 로깅을 수행하기 위해 필요한 주요 설정 요소로는 Logger, Append..
[Spring] Logback 설정Spring Boot Logback 설정 Logback 로깅 프레임워크 중 하나로 SLF4J의 구현체이다. Logback은 logback-core, logback-classic, logback-access의 3가지 모듈로 나뉜다. logback-core는 다른 두 모듈을 위한 기반 역할을 한다. Appender와 Encoder(Layout) 인터페이스가 속한다. logback-classic은 core에서 확장된 모듈로, core와 SLF4J API 라이브러리를 가진다. Logger 클래스가 여기에 속한다. logback-access는 서블릿 컨테이너와 통합되어 HTTP 액세스에 대한 로깅 기능을 제공한다. Logback을 이용하여 로깅을 수행하기 위해 필요한 주요 설정 요소로는 Logger, Append..
2023.02.05 -
Github Action을 이용한 CI/CD 구축 Github Action Github Action은 미리 정의된 특정 작업의 수행을 자동화할 수 있게 해주는 기능이다. 빌드/배포 워크플로를 자동화하거나, Pull Request 전 테스트를 자동으로 수행하여 테스트 통과시에만 PR을 open하도록 설정하거나, 특정 시간대에 크롤링 스크립트 등을 반복 수행하도록 하는 등, 여러 작업을 자동화 할 수 있다. Github Action 구성 요소 Github Action을 구성하는 요소는 아래와 같다. Workflow 가장 최상위에 위치한 개념으로, 모든 명령어의 집합을 말한다. 하나 이상의 Job으로 구성되어 있으며 특정 Event(Push, Pull Request)에 의해서 실행될 수도 있고 특정 시간대에 ..
[Github] Github Action 기초 및 Spring Boot CI/CD Workflow 구성하기Github Action을 이용한 CI/CD 구축 Github Action Github Action은 미리 정의된 특정 작업의 수행을 자동화할 수 있게 해주는 기능이다. 빌드/배포 워크플로를 자동화하거나, Pull Request 전 테스트를 자동으로 수행하여 테스트 통과시에만 PR을 open하도록 설정하거나, 특정 시간대에 크롤링 스크립트 등을 반복 수행하도록 하는 등, 여러 작업을 자동화 할 수 있다. Github Action 구성 요소 Github Action을 구성하는 요소는 아래와 같다. Workflow 가장 최상위에 위치한 개념으로, 모든 명령어의 집합을 말한다. 하나 이상의 Job으로 구성되어 있으며 특정 Event(Push, Pull Request)에 의해서 실행될 수도 있고 특정 시간대에 ..
2023.01.22 -
MySQL 컨테이너 띄우고 원격 접속 허용하기 docker-compose 파일 작성 docker-compose 를 통해 MySQL 컨테이너를 띄우기 위한 파일을 작성한다. version: '3.8' volumes: [volume-name]: external: true name: [volume-name] services: [service-name]: container_name: [container-name] image: mysql ports: - "3306:3306" volumes: - [volume-name]:/var/lib/mysql env_file: .env environment: - TZ=Asia/Seoul restart: always command: - --character-set-..
[Docker] MySQL 컨테이너 띄우고 원격 접속 허용하기MySQL 컨테이너 띄우고 원격 접속 허용하기 docker-compose 파일 작성 docker-compose 를 통해 MySQL 컨테이너를 띄우기 위한 파일을 작성한다. version: '3.8' volumes: [volume-name]: external: true name: [volume-name] services: [service-name]: container_name: [container-name] image: mysql ports: - "3306:3306" volumes: - [volume-name]:/var/lib/mysql env_file: .env environment: - TZ=Asia/Seoul restart: always command: - --character-set-..
2023.01.15 -
Spring REST Docs + Swagger Swagger, Spring REST Docs 간단한 설명 자바로 API를 개발하게 되면 일반적으로 Spring REST Docs와 Swagger 중 하나를 사용하여 API 문서화를 진행하게 된다. Spring Rest Docs와 Swagger의 특징은 아래와 같다. [Swagger] API 테스트가 가능하다. API 문서 생성이 자동으로 이루어진다. 프로덕션 코드에 Swagger 문서화를 위한 어노테이션이 추가된다. [Spring REST Docs] 테스트 코드 작성을 강제하여 API 문서가 신뢰성이 있다. 테스트 성공 이후 생성된 스니펫으로 직접 문서를 작성해야 한다. API 테스트 불가. 프로덕션 코드에 API 문서 관련 코드가 추가되면 컨트롤러 단이..
[Spring] Spring REST Docs, Swagger 조합. restdocs-api-specSpring REST Docs + Swagger Swagger, Spring REST Docs 간단한 설명 자바로 API를 개발하게 되면 일반적으로 Spring REST Docs와 Swagger 중 하나를 사용하여 API 문서화를 진행하게 된다. Spring Rest Docs와 Swagger의 특징은 아래와 같다. [Swagger] API 테스트가 가능하다. API 문서 생성이 자동으로 이루어진다. 프로덕션 코드에 Swagger 문서화를 위한 어노테이션이 추가된다. [Spring REST Docs] 테스트 코드 작성을 강제하여 API 문서가 신뢰성이 있다. 테스트 성공 이후 생성된 스니펫으로 직접 문서를 작성해야 한다. API 테스트 불가. 프로덕션 코드에 API 문서 관련 코드가 추가되면 컨트롤러 단이..
2023.01.08 -
Submodule Git Submodule은 하나의 저장소(부모)에 다른 저장소(자식)를 두고 관리하기 위한 도구로, 하나의 프로젝트에서 다른 프로젝트를 함께 사용해야 하는 경우에 많이 사용한다. 나는 프로젝트는 public repo로 관리하고, 애플리케이션의 중요한 정보들이 담기는 .yml, .properties는 private repo에 따로 관리하고 싶어서 이를 적용했다. 간단해보였지만 의외로 주의해야 할 점이 많아서 기록해두려 한다. 프로젝트에 Submodule 적용하기 1. Public, Private Repository 생성 먼저 Public Repository 하나와 Private Repository 하나를 생성한다. Public Repository에는 프로젝트를, Private Reposi..
[Git] 깃 서브모듈(Submodule)Submodule Git Submodule은 하나의 저장소(부모)에 다른 저장소(자식)를 두고 관리하기 위한 도구로, 하나의 프로젝트에서 다른 프로젝트를 함께 사용해야 하는 경우에 많이 사용한다. 나는 프로젝트는 public repo로 관리하고, 애플리케이션의 중요한 정보들이 담기는 .yml, .properties는 private repo에 따로 관리하고 싶어서 이를 적용했다. 간단해보였지만 의외로 주의해야 할 점이 많아서 기록해두려 한다. 프로젝트에 Submodule 적용하기 1. Public, Private Repository 생성 먼저 Public Repository 하나와 Private Repository 하나를 생성한다. Public Repository에는 프로젝트를, Private Reposi..
2023.01.07 -
WebSocket, SockJS, STOMP 소개 WebSocket WebSocket은 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜이다. 웹 소켓은 HTTP를 사용하는 네트워크 데이터 통신의 단점을 보완하는데 그 목적이 있다. 웹 소켓을 설명하기 이전에, 웹 소켓의 등장 이전에는 HTTP 통신의 단점을 어떻게 해결하려고 했는지 알아보겠다. WebSocket 등장 이전 모든 HTTP를 사용한 통신은 클라이언트가 먼저 요청을 보내고, 그 요청에 따라 웹 서버가 응답하는 형태이며 웹 서버는 응답을 보낸 후 웹 브라우저와의 연결을 끊는다. 이러한 통신 방식을 반이중 통신(Half Duplex)라고 한다. 실시간 검색어와 같이 서버에서 제공하는 데이터를 항상 최신으로 유..
[Spring] Web-Socket, SockJS, STOMP 이론WebSocket, SockJS, STOMP 소개 WebSocket WebSocket은 기존의 단방향 HTTP 프로토콜과 호환되어 양방향 통신을 제공하기 위해 개발된 프로토콜이다. 웹 소켓은 HTTP를 사용하는 네트워크 데이터 통신의 단점을 보완하는데 그 목적이 있다. 웹 소켓을 설명하기 이전에, 웹 소켓의 등장 이전에는 HTTP 통신의 단점을 어떻게 해결하려고 했는지 알아보겠다. WebSocket 등장 이전 모든 HTTP를 사용한 통신은 클라이언트가 먼저 요청을 보내고, 그 요청에 따라 웹 서버가 응답하는 형태이며 웹 서버는 응답을 보낸 후 웹 브라우저와의 연결을 끊는다. 이러한 통신 방식을 반이중 통신(Half Duplex)라고 한다. 실시간 검색어와 같이 서버에서 제공하는 데이터를 항상 최신으로 유..
2023.01.06 -
프로그래머스 : 혼자 놀기의 달인 (Kotlin) 문제 문제 확인하기 풀이 cards의 길이는 총 상자의 개수이며, cards의 값에는 1부터 cards의 길이까지의 숫자 카드가 존재한다. 그리고 문제를 다시 확인해보자. 그 다음 임의의 상자를 하나 선택하여 선택한 상자 안의 숫자 카드를 확인합니다. 다음으로 확인한 카드에 적힌 번호에 해당하는 상자를 열어 안에 담긴 카드에 적힌 숫자를 확인합니다. 마찬가지로 숫자에 해당하는 번호를 가진 상자를 계속해서 열어가며, 열어야 하는 상자가 이미 열려있을 때까지 반복합니다. 이 부분은 DFS 알고리즘을 통해 구현할 수 있다. 상자의 번호를 cards 배열의 인덱스로, 상자안의 값을 cards 배열의 값으로, 상자가 열렸는지 여부는 방문 여부를 체크하는 새로운 배..
[프로그래머스] 혼자 놀기의 달인 (Kotlin)프로그래머스 : 혼자 놀기의 달인 (Kotlin) 문제 문제 확인하기 풀이 cards의 길이는 총 상자의 개수이며, cards의 값에는 1부터 cards의 길이까지의 숫자 카드가 존재한다. 그리고 문제를 다시 확인해보자. 그 다음 임의의 상자를 하나 선택하여 선택한 상자 안의 숫자 카드를 확인합니다. 다음으로 확인한 카드에 적힌 번호에 해당하는 상자를 열어 안에 담긴 카드에 적힌 숫자를 확인합니다. 마찬가지로 숫자에 해당하는 번호를 가진 상자를 계속해서 열어가며, 열어야 하는 상자가 이미 열려있을 때까지 반복합니다. 이 부분은 DFS 알고리즘을 통해 구현할 수 있다. 상자의 번호를 cards 배열의 인덱스로, 상자안의 값을 cards 배열의 값으로, 상자가 열렸는지 여부는 방문 여부를 체크하는 새로운 배..
2022.12.31 -
프로그래머스 : 마법의 엘리베이터 (Kotlin) 문제 문제 확인하기 풀이 storey 층에서 0층으로 내려가야 한다. 내려가는 방법은 -10^c or +10^c (c >= 0) 중에서 선택해야 한다. 우선 storey로 한 자리 숫자가 주어졌을 때를 생각해보자. 3이 주어졌다고 할 때 단순히 -1 버튼을 3번 눌러서 0층으로 가는 것이 가장 빠르다. 7이 주어졌다고 해보자. 이 때는 -1을 7번 누르는 것 보다 +1을 3번 눌러서 10층으로 이동하고 -10 버튼을 눌러 0층으로 가는 것이 가장 빠르다. 5가 주어지면 어떨까? 5가 +1을 5번 누르고 -10을 한 번 누르는 것 보다는 단순히 -1을 5번 누르는 것이 더 빠르게 이동할 수 있다. 이번에는 storey가 두 자리 숫자가 주어졌을 때를 생각해..
[프로그래머스] 마법의 엘리베이터 (Kotlin)프로그래머스 : 마법의 엘리베이터 (Kotlin) 문제 문제 확인하기 풀이 storey 층에서 0층으로 내려가야 한다. 내려가는 방법은 -10^c or +10^c (c >= 0) 중에서 선택해야 한다. 우선 storey로 한 자리 숫자가 주어졌을 때를 생각해보자. 3이 주어졌다고 할 때 단순히 -1 버튼을 3번 눌러서 0층으로 가는 것이 가장 빠르다. 7이 주어졌다고 해보자. 이 때는 -1을 7번 누르는 것 보다 +1을 3번 눌러서 10층으로 이동하고 -10 버튼을 눌러 0층으로 가는 것이 가장 빠르다. 5가 주어지면 어떨까? 5가 +1을 5번 누르고 -10을 한 번 누르는 것 보다는 단순히 -1을 5번 누르는 것이 더 빠르게 이동할 수 있다. 이번에는 storey가 두 자리 숫자가 주어졌을 때를 생각해..
2022.12.30 -
프로그래머스 : 멀쩡한 사각형 (Kotlin) 문제 문제 확인하기 풀이 가로 3, 세로 4 크기의 직사각형이 주어졌다고 하자. 이 직사각형을 대각선 양 끝 꼭짓점을 기준으로 자르는 것을 좌표상에 표시하면 아래와 같이 표현할 수 있다. 양 끝 꼭짓점([0, 0]과 [3, 4])을 서로 이었을 때 나오는 대각선은 y = (4/3) * x 방정식으로 표현할 수 있다. 우리는 이 대각선을 기준으로 우측에 있는 삼각형에 몇 개의 1 * 1 크기의 정사각형이 존재하는지 세고, 이 값의 2배를 정답으로 반환하면 된다. 여기서 1 * 1 크기의 정사각형이 몇 개가 존재하는지 어떻게 셀 수 있을까? 먼저 x 좌표의 범위가 0 ~ 1인 부분을 보자. 여기는 정사각형이 존재하지 않는다. 다음 x 좌표의 범위가 1 ~ 2인 ..
[프로그래머스] 멀쩡한 사각형 (Kotlin)프로그래머스 : 멀쩡한 사각형 (Kotlin) 문제 문제 확인하기 풀이 가로 3, 세로 4 크기의 직사각형이 주어졌다고 하자. 이 직사각형을 대각선 양 끝 꼭짓점을 기준으로 자르는 것을 좌표상에 표시하면 아래와 같이 표현할 수 있다. 양 끝 꼭짓점([0, 0]과 [3, 4])을 서로 이었을 때 나오는 대각선은 y = (4/3) * x 방정식으로 표현할 수 있다. 우리는 이 대각선을 기준으로 우측에 있는 삼각형에 몇 개의 1 * 1 크기의 정사각형이 존재하는지 세고, 이 값의 2배를 정답으로 반환하면 된다. 여기서 1 * 1 크기의 정사각형이 몇 개가 존재하는지 어떻게 셀 수 있을까? 먼저 x 좌표의 범위가 0 ~ 1인 부분을 보자. 여기는 정사각형이 존재하지 않는다. 다음 x 좌표의 범위가 1 ~ 2인 ..
2022.12.29