전체 글 802

물리삭제와 논리삭제를 코드로 구현해 보았다.

삭제에는 두 가지 방법이 있다. 물리삭제는 실제 데이터베이스에서 제거하는 것이고, 논리삭제는 같은 테이블에 '삭제플레그'의 값을 변경하여 실제 삭제된 것과 동일하게 처리하는 방식이다.(이 외에도 논리삭제의 방법은 다양하다) 코드로 구현해 본다면? 깃헙 링크 (깃헙 링크에 들어가면 코드를 모두 볼 수 있다.) @app.route("/snack/", methods=["DELETE", "PUT"]) def delete(id): if request.method == "DELETE": SnackDelete.delete_physics(id) elif request.method == "PUT": SnackDelete.delete_logical(id) result_value = SnackDelete.select_all..

문자열 내 마음대로 정렬하기

문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한 사항 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예 1 "sun", "bed", "car"의 1번째 ..

DRF 궁금한 것 모음

Serializer의 용도는 무엇인가? serializer를 사용하면 쿼리셋과 인스턴스같은 데이터를 json등과 같은 유형으로 쉽게 렌더링 할 수 있다. 뿐만 아니라 데이터의 유효성을 검사해준다. DRF에는 serializer의 종류가 다양하다. (Model, List, Base 등) 레퍼런스 APIView과 @apiview의 차이는 무엇인가? ‘클래스기반 뷰’와 ‘함수 기반 뷰’라고 볼 수 있다. 전자는 기존 장고와 유사하고 후자는 Flask나 FastAPI와 생김새가 유사하다. 레퍼런스 generics와 ViewSet의 차이는 무엇인가? generics 의 경우 ListAPIView, ListCreateAPIView 처럼 형태, 또는 명령에 대한 기능을 도와준다. 하나의 형태나 명령을 넘어서 모두 사..

Bidasks, Suulgo 프로젝트 리펙토링

오늘 한 것 Bidasks 프로젝트 리펙토링 로직 순서 정렬, 레이어 분리, 불필요 코드 삭제 레포 링크 Suulgo 프로젝트 리펙토링 매칭알고리즘을 평균 가중치가 아닌 개인별 가중치로 로직 변경 레포 링크 모자른 점 두 개 프로젝트에 대해서 리펙토링을 했지만 더 좋은 코드가 있을 것 같아 스스로 의심이 든다. suulgo 의 경우, DRF의 모듈들을 활용하고 싶지만 반환 값들이 단순하지 않아 어떻게 수정해야할지 감이 안 잡힌다. 개선 방법 '좋은 코드'를 작성하려면 '좋은 코드'를 많이 보는 수밖에 없는 것 같다. 일단 주로 쓰는 라이브러리부터 살펴보고 어떤 구조와 코드로 이루어져 있는지 기록하자. 감이 안 잡힐 때는 더 작게 쪼개자. 우선 DRF로 일대다 관계의 데이터를 합쳐서 반환하는 방법을 찾아보..

Log/Today 2022.02.02

문자열 내 p와 y의 개수

문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다. 제한 사항 문자열 s의 길이 : 50 이하의 자연수 문자열 s는 알파벳으로만 이루어져 있습니다. 해결 방법 1. s를 대문자로 만들어준다. 2. P와 Y의 개수를 각각 구한다. 3. 개수가 서로 일치하는지 확인한다. def solution(s): s = s.upper() p_cn..

원활한 소통을 장려하는 코드 형식은 무엇일까?

제목 : 클린 코드 저자 : 로버트 C. 마틴 범위 : 5장 형식 맞추기 기억하고 싶은 것 '돌아가는 코드'가 전문 개발자의 일차적인 의무라 여길지도 모르겠다. 하지만 이 책을 읽으면서 생각이 바뀌었기 바란다. 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 원활한 소통을 장려하는 코드 형식은 무엇일까? 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다. 신문기사 처럼 작성하라 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 저차원 함수의 세부 내역이 나온다. 개념은 빈 행으로 분리하라. 타당한 근거가 없다면 서로 밀집한 개념은 한 파일에 속해야 마땅하다. 연관성이란 한 개념을 이해하는 데 다른 ..

문자열 내림차순으로 배치하기

문제 설명 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 사항 str은 길이 1 이상인 문자열입니다. 해결 방법 1. 문자열을 내림차순으로 정렬하여 반환한다. def solution(s): answer = ''.join(sorted(s, reverse=True)) return answer sorted 와 reverse 속성, 그리고 join을 활용하면 쉽게 풀 수 있다. 여기서 join은 sorted로 인해 리스트로 변형된 문자열을 다시 합쳐준다. 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/lear..

문자열 다루기 기본

문제 설명 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 이상, 길이 8 이하인 문자열입니다. 해결 방법 1. s를 숫자로 바꾸어 본다. 2. 만약 숫자로 바꿀 수 없는 문자열이라면 ValueError를 통해 False 를 반환한다. 3. 숫자로 바꿀 수 있다면 해당 문자열의 길이를 구한다. 4. 길이가 4 혹은 6이라면 True를 반환하고 아니라면 False 를 반환한다. def solution(s): try: int(s) length = len(s) answer = length == 4 or length == 6 exc..

주석은 언제나 실패를 의미한다.

제목 : 클린 코드 저자 : 로버트 C. 마틴 범위 : 4장 주석 기억하고 싶은 것 우리는 코드로 의도를 표현하지 못해, 그러니까 실패를 만회하기 위해 주석을 사용한다. 의도를 표현할 능력이 있다면 주석은 거의 필요하지 않으리라. 자신이 저지른 난장판을 주석으로 설명하려 애쓰는 대신에 그 난장판을 깨끗이 치우는 데 시간을 보내라! 좋은 주석이란? 법적인 주석 정보를 제공하는 주석 (예 : 추상 메서드가 반환할 값 설명) 그럼에도 가능하다면, 함수 이름에 정보를 담는 편이 좋다. 의도(목적)를 설명하는 주석 의미를 명료하게 밝히는 주석 결과를 경고하는 주석 중요성을 강조하는 주석 나쁜 주석이란? 함수나 변수로 표현할 수 있다면 주석을 달지 마라 배너는 눈에 띄며 주의를 환기한다. 그러므로 반드시 필요할 때..

2022년 5주차 '스터디 시작'

Weekly Study "공부할 건 많은데 무엇부터 공부해야 할지 막막한 시점." 수료 직후라 조금은 쉬고 싶기도 해서 해이해져 있었다. 기존에 듣고 있던 파이썬 동시성 프로그래밍 강의를 듣거나 알고리즘 문제를 풀거나 하면 주 초반을 보냈다. 수요일에는 위코드에서 하는 [수료 후 가이드] 세션을 들었는데 기존에 생각하던 방향성(새로운 프로젝트 도전)과 사뭇 다른 가이드를 받고 다시 계획을 세워보기로 했다. 우선 취업에 도움이 되는 것은 새로운 프로젝트보다는 기존 프로젝트에 대한 리펙토링. 즉 유지보수가 더 도움이 될 거라는 것과 특히 백엔드의 경우 SQL과 CS 이론에 대한 지식이 부족하니 이쪽으로 공부를 집중하는 게 좋겠다는 내용이었다. 가이드는 충분히 동의하는 내용이었고 이를 위해 세션이 끝나자마자 ..