일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gRPC
- 레디스 동시성
- 완전탐색
- prg 패턴
- 결제서비스
- AWS
- 트랜잭샨
- 셀러리
- piplining
- 디버깅
- 프로그래머스
- 숫자 블록
- branch 전략
- 이분탐색
- BFS
- 쿠키
- 좋은 코드 나쁜 코드
- 주식
- 검색어 추천
- docker
- jwt 표준
- spring event
- 객체지향패러다임
- 구현
- 깊게 생각해보기
- 알람 시스템
- 백준
- 누적합
- JPA
- 카카오
- Today
- Total
목록분류 전체보기 (167)
코딩관계론
아이디어 도출 방법 주어진 문제는 search배열(n)에서 특정 숫자(m)를 찾는 문제였다. 하지만 배열의 길이가 크고, 찾고자 하는 특정 숫자가 많아지면 이중반복문으로는 해결하기 어렵다. 따라서 이중 반복문을 제거하고, 주어진 배열에서 더 빠르게 탐색할 수 있는 알고리즘이 필요한데 이것이 이분 탐색이다. 이분 탐색은 기존의 O(n)의 시간 복잡도를 O(logn)으로 줄여준다. 이런 방법을 사용한다면 기존의 O(n*n)의 시간 복잡도에서 O(nlogn) + O(mlogn)으로 개선할 수 있다. 또한 이분 탐색을 하기 전 필수적으로 수행되어야 할 것은 '특정 배열'(주어진 숫자를 찾고자 하는 배열)이 정렬되어 있어야 한다. 최종 결과 n = int(input()) search = list(map(int, ..
파이썬 데코레이터(Decorator)란 기존의 코드에 추가적인 기능을 더해주는 역할을 합니다. 장점 코드 재사용성이 높아집니다. 데코레이터는 여러 함수나 메소드에 적용할 수 있으므로, 중복되는 코드를 많이 줄일 수 있습니다. 예를 들어, 인증이 필요한 기능을 가진 많은 함수가 있다면, 데코레이터를 이용해 인증을 한 번만 처리하고 해당 함수를 호출할 수 있습니다. def authenticated(func): def wrapper(request, *args, **kwargs): if request.user.is_authenticated: return func(request, *args, **kwargs) else: return HttpResponse(status=401) return wrapper @auth..
아래부터는 Git-Action.yaml 파일을 workflow라고 통칭하겠다. 또한 대표적인 기능만 소개하고, 대표적인 기능에 대한 세부적인 동작은 "참고사항의 링크"에 접속해서 확인하길 바란다 작성위치 workflow파일 위치는 반드시 프로젝트의 최상단 폴더의 .github/workflows에 존재해야 한다. Something.repo - .github - workflows - app - sms - db run-name workflow가 실행되면 자동으로 생성되는 이름이다. 보통은 Push로 실행된 액션은 커밋 메시지가 이름이 되고 Pull Request로 실행된 액션은 Pull Request의 제목이 이름이 된다. 하지만 아래의 workflow 파일처럼 run-name을 수정하면 변경이 가능하다. n..
협업을 하다가 보니 코드가 합쳐질 때 문제점이 생기고 이런 오류들을 방지를 위해 test_code가 존재했지만, PR이 급한 경우에는 테스트 코드를 수행하지 않고 합치다 보니 항상 더 큰 문제점이 발생했다. 이러한 문제점을 예방하기 위해 Git ACTION을 통해 PR, PUSH가 되는 경우 테스트 코드가 항상 실행되게 만들었다. 그러한 Action을 만들기 위해서 습득한 지식을 작성하고, Git Action을 작성할 필요가 있는 분들에게 도움이 되면 좋겠다. 기본문법 1. 들여쓰기 들여쓰기 문법으로는 두 칸, 네 칸 들여쓰기를 지원한다. #두 칸 Git-Action: name: Run-TestCode jobs: run: python -m unititest test_code.py #네 칸 Git-Acti..
문제 설명 택배차의 창고 크기가 한정되어 있어 어떤 순서로 택배를 배달하고, 수거하면 택배 차의 움직임을 최소로 할 수 있을까? 아이디어 주어진 조건이 아래의 그림과 같을 때, 택배차가 최소로 움직이는 경로는 1. #4, 5번 집에 택배를 배달하고 돌아오는 길에 #4집의 택배를 수거 2. 그 후 창고로 돌아와 다시 #1,3 번 집에 택배를 배달하고 #2번 집의 택배를 수거 3. 총 16번의 움직임으로 해결할 수 있다. *여기서 부터 설명은 아래 그림 기준으로 설명함* 여기서 중요한 아이디어는 창고에서 출발할 때는 풀 CAP으로 적재하고, 배달이나 수거하하는 순서를 멀리있는 집을 기준으로 삼아야 한다. 항상 택배차 용량만큼 적재해야 하는 이유는 수거해야 하는 집(집 #5)이 배달해야하는 집(집 #4)보다 ..
프로그램 개요 당일 상한가 종목이 속한 테마주와 해당 테마에 관련된 종목들을 사용자에게 카카오톡을 이용해 자동으로 전달한다. 스크랩핑 구조 네이버 금융 페이지에 들어가면 테마와 관련된 정보들을 찾을 수 있다. 해당 테마명을 클릭하면 그림 1처럼 테마에 해당하는 종목들을 확인할 수 있다. 하지만 그림 1에서 보이듯이 주식에 테마란 매우 많다. 단일 페이지가 아니라 총 7페이지로 구성되어 있었다. 인터넷이 빠른 환경에서 실행하면 사용자에게 빨리 알람을 주었지만, 느린 환경에서 실행하면 상당한 시간이 필요했다. 즉 크롤링 속도가 프로그램 실행 속도에 영향을 미쳤다. 속도 개선을 위한 DB도입 처음에는 아래와 같이 하나의 필드에 다수의 정보를 입력했었다. 실행되는 시간은 빨라졌지만 아래의 설계 방식은 DB의 정..
조인 왜 필요한가?? 만약에 조인이 없다고 생각해보자 조인이 없다면 우리는 모든 정보를 단일 테이블에 저장하게 될 것이다. 이렇게 된다면 정규화하지 못했을 때 발생하는 문제인 '삽입이상', '삭제이상', '갱신이상' 현상이 발생 될 것이다. 이러한 현상을 방지하기 위해 정규화 과정이 존재하며 정규화로 나눠진 테이블을 하나의 정보로 합치기 위해서 조인이 필요하다. 조인 종류 INNER JOIN: 교집합만 추출한다. INNER JOIN 실행 결과 OUTER JOIN: Inner JOIN + 알파 outer join의 경우 기준점이 있어야 한다. 해당 테이블을 기준으로 조인을 하며 조인을 못하는 경우 NULL 속성으로 채워지게 될 것이다. 아래 사진은 LEFT OUTER JOIN의 예시로 다른 조인들의 방식도..
독자는 BFS, DFS 알고리즘을 이해하고 있어야 하고, 해당 문제를 한번이라도 읽었어야 함 아이디어 도출 방법 문제의 조건을 체크해보면 아래의 조건이 존재합니다. 미로에서 탈출한 경로를 문자열로 나타냈을 때, 문자열이 사전 순으로 가장 빠른 경로로 탈출해야 합니다. 같은 격자를 두 번 이상 방문해도 됩니다. 격자의 범위를 나갈 순 없다. 우선 1번 조건을 수행하기 위해서 우선순위 힙을 이용해 방문 순서를 정렬했고, 항상 사전순으로 빠른 후보지를 선택할 수 있었다. 같은 격자를 두 번이상 방문하는 것을 해결하는게 이 문제의 포인트였다. 같은 격자를 두 번 방문하게 되면 또 다시 4개의 선택지가 큐에 들어가기 때문에 탐색량이 많아지게 된다. 이런 문제를 해결하기 위해 가자치기를 수행했다. 총 두 가지 가지..
캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 하지만 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다 클래스의 크기 → 항상 작아야 한다 작아야 한다의 기준은 = 클래스가 맡은 책임을 센다. 클래스 이름 = 해당 클래스의 책임을 기술한다 class ClientBluetooth(threading.Thread) 클래스의 목적: 디바이스 이름을 입력 받아 통신을 수립하는 클래스 책임이 두 개다 디바이스의 이름을 입력 받는 책임 통신을 수립하는 책임 class DevInfo class SearchDev class MatchServiceToPortNum class BindToSocket class CommunicationToDev DevInfo: 디바이스 정보..
아이디어 도출 방법 아래의 목표를 달성하기 위해서는 각 이모티콘에 적용할 할인률에 대한 모든 경우의 수를 계산해야 한다. 왜냐하면 어떤 이모티콘에 무슨 할인률을 적용하는지에 따라서 1번과 2번 목표의 값이 달라지기 때문이다. 이모티콘 플러스 서비스 가입자를 최대한 늘리는 것. 이모티콘 판매액을 최대한 늘리는 것. 각 이모티콘에 대해서 각각의 할인률을 조합하기 위해서 카타시안 곱을 사용한다. 카타시안 곱이란 간단히 말하면 모든 조합을 구하는 것이다. A ={1, 2, 3}, B = {5, 6, 7} A X B의 결과는 {1, 5}, {1, 6}, {1, 7}, {2, 5}, {2, 6}, {2, 7}, {3, 5}, {3, 6}, {3, 7}이 된다. 우리의 경우 각 이모티콘에 적용할 할인률만 구하면 되기..
형식을 맞추는 목적은 의사소통의 일환이기 때문이다. 또한 추후에 버전이 달라질때 유지보수와 확정성이 이점을 주기 때문이다. 형식을 맞추기 위해서는 적절한 행 길이를 유지해라 200~500 신문 기사처럼 작성하라 신문을 보면 위에서 요약하고 아래에 가면서 세세한 내용이 나탄다는 것을 기억해라 개념은 빈 행으로 분리하자 빈 행은 새로운 개념을 시작한다는 시각적 단서다. // 빈 행을 넣지 않을 경우 package fitnesse.wikitext.widgets; import java.util.regex.*; public class BoldWidget extends ParentWidget { public static final String REGEXP = "'''.+?'''"; private static fin..
자료추상화 구현을 감출려면 추상화가 필요하고 그보는 추상인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다(오른쪽 코드) 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현해야 한다. public class Point { private double x; private double y; } 변수를 private로 선언했다 하더라도 무분별한 get, set함수를 제공한다면 구현을 외부로 노출하는 샘이다. public interface Point { double getX(); double getY(); void setCatesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, dou..