일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 구현
- 아키텍쳐 개선
- 알람 시스템
- 누적합
- docker
- 셀러리
- 디버깅
- 결제서비스
- 주식
- jwt 표준
- 이분탐색
- gRPC
- 트랜잭샨
- branch 전략
- 백준
- 레디스 동시성
- 프로그래머스
- BFS
- 쿠키
- 카카오
- 크롤링
- JPA
- prg 패턴
- 검색어 추천
- 완전탐색
- 깊게 생각해보기
- 객체지향패러다임
- spring event
- piplining
- AWS
- Today
- Total
목록분류 전체보기 (168)
코딩관계론
문제 이해하기 숫자 0이 적힌 블록들에 다른 숫자가 적힌 블록들을 설치하려고 한다. 블록을 설치하는 규칙은 다음과 같습니다 블록에 적힌 번호가 n 일 때 가장 첫 블록은 n * 2번 째 도로의 위치에 설치, 그 다음은 n * 3, 4 ...도로의 위치에 설치합니다. 이 때 기존에 설치된 블럭이 존재한다면 해당 블록을 빼고 새로운 블록을 설치합니다. 각 블록은 오름차순으로 주어집니다. 또한 블럭의 숫자는 1 ~ 10,000,000까지의 숫자만 존재합니다. 문제 해결 방법 1. 도로의 입장에서 생각해보면 도로에 설치될 수 있는 블럭은 도로의 위치의 약수입니다. 예를 들면 10번 도로의 위치에는 1, 2, 5의 블록이 설치될 수 있다. 10의 블록이 설치될 수 없는 이유는 10(도로)은 10(블럭) * 1이기..
서론 코드가 실행되는 환경은 굉장히 불완전합니다. 여러가지 상황을 따져 봤을 때 오류는 불가피하게 발생하게 됩니다. 오류 사례를 신중하게 생각하지 않고는 견고하고 신뢰성 높은 코드를 작성할 수 없다. 따라서 오류의 종류 및 차이점들을 살펴보고 적절하게 처리할 수 있는 방법에 대해서 기술해보고자 한다. 오류의 종류 1. 복구할 수 있는 오류 시스템 문제가 아닌, 시스템 외부 환경으로 인해 발생되는 오류이다 예를 들면 사용자의 입력이 잘못되서 다음 단계를 진행할 수 없거나, 인터넷 연결이 불안정해서 사용자의 요청을 진행할 수 없는 경우이다. 2. 복구할 수 없는 오류 시스템 오류를 복구할 수 있는 합리적인 방법이 없을 때다, 이러한 오류는 프로그래밍 오류 때문에 발생할 때가 많다. 예를 들면 코드와 함께 추..
[코드 계약의 목적] 일관성과 명확성: 코드 계약을 통해 코드의 의도와 사용 방법을 명확하게 정의할 수 있습니다. 이는 코드를 작성한 개발자뿐만 아니라 다른 사람들에게도 코드의 의미를 명확히 전달하여 일관성 있는 개발을 도와줍니다. 문서화와 이해도: 코드 계약은 코드에 대한 문서화 역할을 수행합니다. 이를 통해 코드를 이해하기 쉽고, 코드의 목적과 기능을 파악할 수 있습니다. 코드 계약을 통해 다른 개발자들이 코드를 빠르게 이해하고 활용할 수 있습니다. 협업과 유지 보수: 코드 계약은 다른 개발자와의 협업에서 필요한 코드 사용법을 명확하게 전달합니다. 이를 통해 다른 개발자들은 코드를 쉽게 활용하고 유지 보수할 수 있습니다. 코드 계약은 프로젝트의 지속적인 개발과 유지 관리를 지원합니다. 버그와 오류 예..
[추상화를 하는 이유] 추상화는 코드 품질의 핵심 4요소를 달성하는 데 도움을 줍니다. 가독성: 추상화는 코드베이스에 있는 모든 세부 사항을 이해하는 것을 불가능하게 만들지만, 몇 가지 높은 수준의 추상화를 이해하고 사용하는 것은 비교적 쉽습니다. 따라서 코드의 가독성이 크게 향상됩니다. 모듈화: 추상화 계층을 사용하면 하위 문제에 대한 해결책을 깔끔하게 분리하고 구현 세부 사항을 외부로 노출하지 않도록 할 수 있습니다. 이를 통해 다른 계층이나 코드의 일부에 영향을 미치지 않고도 계층 내에서만 구현을 변경하는 것이 매우 쉬워집니다. 재사용성 및 일반화성: 추상화 계층을 통해 하위 문제에 대한 해결책이 간결하게 제시되면 해당 해결책을 재사용하기 쉬워집니다. 또한, 문제를 적절하게 추상화하여 하위 문제로 ..
소개 이 포스트에서는 이메일의 첨부 파일 이름이 'noname' 으로 표시되는 문제를 다룹니다. 구체적으로, 현대 측 SMTP 서버를 사용하여 이메일을 발신하던 중, 한글 파일을 첨부하면 서버에서 파일 이름을 'noname'으로 변경하여 수신자에게 전달하는 문제가 발생했습니다. 문제 원인 문제의 원인은 한글 파일을 보낼 때 인코딩과 디코딩 과정이 제대로 이루어지지 않아 발생한 것으로 확인되었습니다. 해당 문제를 해결하기 위해서는 올바른 인코딩 방식을 사용하여 파일 이름을 설정해야 합니다. 먼저 문제를 제대로 이해하기 위해 인코딩의 개념과 한글이 왜 ASCII에서 인코딩이 될 수 없는지에 대해서 설명하겠습니다. 인코딩이란 무엇인가? 인코딩은 컴퓨터에서 문자나 기호를 표현하는 방법입니다. 컴퓨터는 전기 신호..
문제 이해 과제를 끝내는 순서대로 배열에 담아 반환하는 문제입니다. 여러 과제가 주어지는데, 가장 빨리 시작해야 하는 과제부터 선택하여 수행하고, 새로운 과제를 시작할 시간이 되면 기존에 진행 중이던 과제는 멈춥니다. 그리고 현재 수행 중인 과제가 다음 과제의 시작 시간보다 빠르게 끝나면 멈추었던 과제를 이어서 수행합니다. 멈추어 둔 과제를 실행하는 순서는 최신에 멈춘 과제부터 실행합니다. 문제 해결 방법 설명 1. 선택한 과제를 다음 과제를 시작하기 전까지 끝낼 수 있을까? 먼저 초로 단위를 통일했습니다. 해당 초를 정렬해줌으로써 수행하고 있는 과제와 다음에 수행해야하는 과제의 시간을 알아낼 수 있었습니다. 현재 과제의 시작 시간과 과제(A)를 끝내기까지 요구되는 시간(B)과 다음 시작 시간(C)을 알..
[문제 설명] A나라에서 발사한 미사일의 구간이 (s, e)로 주어지고, B나라는 최소한의 요격 미사일로 A가 날린 미사일을 요격해야 한다. B가 사용하는 최소한의 미사일을 개수를 찾는 문제다. [해결 방법] 저는 이 문제를 풀기위해 그리디 알고리즘을 사용했습니다. 그리디 알고리즘을 사용한 이유는 다음과 같습니다. 우리가 원하는 답은 최소한의 요격 미사일 개수 입니다. A가 날린 미사일의 위치를 모두 알 수 있으니, 우리는 미사일의 공통된 구간을 찾아서 요격 미사일을 날려주면 원하는 답을 찾을 수 있습니다. 코드 # Copyright 2023 bae # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use t..
장고 채널이란 장고 채널(Channel)은 Django 프레임워크의 기능을 확장하여 웹 소켓 통신과 같은 실시간 기능을 제공하는 패키지입니다. 채널은 Django의 기본 요소들과 유사한 구조를 가지며, Django 프레임워크와 함께 사용되어 Django 애플리케이션의 구성 요소로 작동합니다. 장고 채널은 ASGI(Asynchronous Server Gateway Interface) 프로토콜을 사용하여 웹 소켓 및 HTTP 기반의 프로토콜을 처리할 수 있습니다. ASGI는 WSGI(Web Server Gateway Interface)와 유사한 역할을 하며, 비동기적인 웹 애플리케이션 개발을 위한 표준 인터페이스입니다. 채널은 크게 두 가지 요소로 구성됩니다. 첫 번째는 채널 라우터(Channel Route..
소개안녕하세요! 이번에는 Celery를 사용한 비동기 프로그래밍에 대해 알아보겠습니다. 최근에 업데이트한 프로그램에서 Celery를 도입하여 작업을 비동기적으로 처리하게 되었는데요, 이를 통해 사용자가 프로그램을 커스텀하게 구성할 수 있게 되었습니다. 우선, 비동기 프로그래밍이란 CPU-bound 작업과 I/O-bound 작업을 구분하여 처리하는 방식을 말합니다. 이를 통해 시스템의 성능을 향상시킬 수 있습니다. 이번에는 이러한 비동기 프로그래밍을 구현할 때 사용한 Celery에 대해 자세히 알아보겠습니다. Celery는 Python 기반의 Task Queue 라이브러리 중 하나로, 비동기적으로 작업을 처리할 수 있습니다. 이를 통해 CPU-bound 작업과 I/O-bound 작업을 효율적으로 처리할 수..
비동기 처리의 개념과 필요성비동기 처리는 순차적으로 처리하는 것이 아니라, 요청이 발생한 순서와 상관 없이 결과를 반환하는 방식을 말합니다. 예를 들어, 웹 어플리케이션에서 사용자의 요청에 대한 처리가 비동기적으로 이루어지면, 서버는 해당 요청을 받은 후 다른 작업을 수행하다가 해당 요청이 완료되면 그 결과를 반환하는 방식으로 동작합니다. 이를 통해 서버의 자원을 효율적으로 사용할 수 있고, 사용자에게 더 빠른 응답이 가능해집니다. 비동기 처리의 필요성은 크게 두 가지로 볼 수 있습니다. 첫째, 대규모 트래픽이 발생하는 웹 서비스에서는 많은 요청이 동시에 발생할 수 있습니다. 이 경우 요청을 순차적으로 처리하면 응답 시간이 길어질 수 있습니다. 따라서 비동기 처리를 통해 대량의 요청을 빠르게 처리할 수 ..
OAuth 2.0의 개념과 목적 OAuth 2.0은 웹이나 모바일 애플리케이션 등에서 서드 파티 애플리케이션(Third-Party Application)이 사용자의 인증 정보를 안전하게 사용할 수 있도록 하는 인증 및 권한 부여 프레임워크입니다. OAuth 2.0의 주요 목적은 사용자가 서드 파티 애플리케이션에게 자신의 인증 정보(아이디, 비밀번호 등)를 제공하지 않고도, 서드 파티 애플리케이션에서 사용자의 개인 정보(예: 이메일, 친구 목록 등)를 안전하게 이용할 수 있도록 하는 것입니다. 예를들면 B 회사가 Google Calendar API에 접근하기 위해 사용자의 Google ID와 비밀번호를 요구하지 않고도, Google에서 로그인을 처리하고, 사용자가 Google Calendar API에 대한..