분류 전체보기 803

간단한 서버와 API는 금방 만들 수 있게 되었다.

오늘 한 것 SQL 물리 삭제와 논리 삭제에 대해 스터디 모임에서 발표하고 블로그에 정리 글을 올렸다. 2022.02.03 - [Dev/DB] - 물리삭제와 논리삭제를 코드로 구현해 보았다. git에 대해 공부하고 아직 생소한 것은 따로 메모에 정리해두었다. 2022.02.03 - [Dev/Etc] - git 개념 정리 성장한 점 SQL을 설명하기위해 간단하게 서버 API와 SQL문 코드를 만들었는데 2시간 정도 소요되었다. 간단한 앱을 스스로 처음부터 만들 수 있게 되었다는 점이 놀랍다. 기존에 쓰던 git에 대한 쓰임새와 모르던 기능을 제대로 알게되었다. 익숙해지기 위해 평소에 자주 사용해보자. 노력할 점 SQL의 '서브쿼리'나 '조인'에 대해서는 더 공부해야 한다. 오늘 이력서 피드백 세션이 있었는..

Log/Today 2022.02.03

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

삭제에는 두 가지 방법이 있다. 물리삭제는 실제 데이터베이스에서 제거하는 것이고, 논리삭제는 같은 테이블에 '삭제플레그'의 값을 변경하여 실제 삭제된 것과 동일하게 처리하는 방식이다.(이 외에도 논리삭제의 방법은 다양하다) 코드로 구현해 본다면? 깃헙 링크 (깃헙 링크에 들어가면 코드를 모두 볼 수 있다.) @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장 주석 기억하고 싶은 것 우리는 코드로 의도를 표현하지 못해, 그러니까 실패를 만회하기 위해 주석을 사용한다. 의도를 표현할 능력이 있다면 주석은 거의 필요하지 않으리라. 자신이 저지른 난장판을 주석으로 설명하려 애쓰는 대신에 그 난장판을 깨끗이 치우는 데 시간을 보내라! 좋은 주석이란? 법적인 주석 정보를 제공하는 주석 (예 : 추상 메서드가 반환할 값 설명) 그럼에도 가능하다면, 함수 이름에 정보를 담는 편이 좋다. 의도(목적)를 설명하는 주석 의미를 명료하게 밝히는 주석 결과를 경고하는 주석 중요성을 강조하는 주석 나쁜 주석이란? 함수나 변수로 표현할 수 있다면 주석을 달지 마라 배너는 눈에 띄며 주의를 환기한다. 그러므로 반드시 필요할 때..