Tiny Star

전체 글 186

[Django] @action과 @api_view : View 하나에 같은 HTTP 요청 메서드가 두개일 때 API 구현하기

게시판과 댓글 CRUD의 로직이 완성됬다. 이후 내가 구현하고 싶은 것 게시판이 삭제 될 경우 댓글 전부 같이 삭제하는 로직 즉, 게시판 삭제 시 댓글의 is_delete가 False값에서 True값으로 일괄적으로 변경이 되어야 한다. (공부하는 사람들의 게시물을 보면 종종 완전히 remove 시켜버리는 경우가 있는데, 현업에서 개발은 그렇지 않다.API는 DELETE지만 실제 내부로직은 UPDATE가 맞음. DB에 한번 들어간 데이터를 지우는 일은 거의 없다.) 다시 본론으로 돌아와서 Comment View로직은 이미 댓글을 개별삭제 할 수 있는 delete 메서드가 있는 상태에추가로 게시글 삭제 시 댓글이 삭제되는 delete메서드가 추가로 필요하다. 이럴 때 쓸 수 있는 데코레이터가 @action과..

[❌삽질과 해결 그 사이] 게시판-댓글 페이지네이션 조회가 안될 때

이 때 발생한 예외는 그냥 코드 하나가 비틀려서 나는 예외라 딱히 해결에 도움은 안되고, 역시 선임님 찬스 짱! Board Repository에서 상세게시글 로드 시 첫 10개의 댓글은 조회가 되도록 쿼리를 날려놨다. 그럼 이제 10개 이후의 댓글은 어떻게 가지고 올 것인가를 해결하기 위해서 Comment 페이지네이션 로직을 구현했고 Swagger에서 테스트하는데 안ㅋ됨ㅋ 500아님 내가 던진 400뿐... 댓글리스트 따위 나오진않는다. 내가 디버깅한 결과는 board ID값이 Null. def find_all_by_id(self, search_request: Dict[int, T]) -> (Comment, int): if search_request is None: search_request = {} b..

[CS STUDY INTERVIEW] 9주차 - JVM(Java Virtual Machine)

CS 스터디 9주차 JVM(Java Virtual Machine) JVM(Java Virtual Machine) 프로그램을 실행하기 위해 자바언어로 작성된 가상머신으로, 특정 운영 체제나 하드웨어에 종속되지 않고 자바 프로그램을 여러 플랫폼에서 실행할 수 있도록 하기 위해 설계되어있다. 한 번 작성한 코드를 어디서나 실행할 수 있게 해주는데에 중요한 역할을 한다는 것으로도 볼 수 있으며 정리해보면 자바 프로그램의 이식성과 효율성을 보장하며, 다양한 운영 체제 및 하드웨어 환경에서 일관된 실행이 가능하다. JVM은 런타임 환경에서 실행이 되며 메모리 관리, 스레드 관리, 바이트 코드 실행, 에외처리 등 프로그램을 실행하기 위해 필요한 환경을 제공하는데, 동작하는 위치는 1주차 스터디인 자바 컴파일을 다루며..

[ORM] 즉시로딩(EAGER)과 지연로딩(LAZY)

게시물-댓글 로직 작성하다가 마주하게 된 N+1 문제를 파고 파다가 즉시로딩과 지연로딩까지 거슬러 올라오게 되었다. JPA 환경에서 즉시로딩, 지연로딩에 대한 설명은 있는데 근본적으로 얘네가 무엇이고 어떤건지 설명해놓은 분들은 거의 없는 것 같아서 적어본다. 대체 이게 뭔지는 알아야 적용을 할 것 아니냐며...(?) 우선 로직을 구현하다보면 데이터 조회를 통해 기능을 만들어야 할 때가 많이 생긴다. 특히 대부분의 기능들은 각자의 테이블이 존재하고 서로 연관관계를 맺어 참조하는 형태로 코드가 짜여지게 되는데 이 때 연관관계가 맺어진 데이터를 조회할 때 연관된 엔티티들을 언제 어떻게 로딩할지, 조회 시점을 결정할 수 있도록 제공하는 방법이다. 즉시로딩 (Eager Loading)과 지연로딩(Lazy Load..

📊ORM 2024.04.18

[JavaScript] ajax 파헤치기

백엔드 개발자를 꿈꾸며 취뽀에 성공했지만 어쩌다보니 풀스택의 길을 걷고 있는 청크씨. 찍먹 js의 지식으로 현업에서 살아남기란 여간 쉬운게 아니다. 그 중 온 몸으로 js의 풍파를 가장 많이 겪은 ajax를 내가 이해하기 쉽게 파헤쳐놓으려고 한다.(왜 다들 어려운 용어로 설명해놓는지 모르겠다. 한글로 써있는데 뭔말인지 몰라서 내가 보려고 만드는 것...) 언젠가 내가 10년차 개발팀장(?)이 되었을 때 나같은 꼬마 개발감자 후임이 온다면 내 블로그를 당당히 던져줄 수 있도록 쉽게쉽게 가보자- 2024년 4월 16일 취뽀 2개월차 개발감자 청크가 10년 뒤 개발팀장 청크에게-AjaxAsynchronous JavaScript and XML의 약자로 자바스크립트와 XML을 이용한 비동기적 통신방법이다.프론트와..

[CS STUDY INTERVIEW] 8주차 - 락(LOCK)

지난 7주차 스터디에 공부한 스레드에서 사용되는 락(LOCK)을 조금 더 자세히 파보는 CS 스터디 8주차 락(LOCK) 락(LOCK) 스레드에서 사용되는 락(LOCK)은 동시성 프로그래밍에서 중요한 개념이다. 여러 스레드가 동시에 돌아가는 멀티 스레드 환경에서 공유 자원을 동시에 접근할 때 발생할 수 있는 충돌을 방지하기 위한 동기화 기술이다. 락을 사용함으로써 특정 시점에 자원을 사용할 수 있는 스레드의 갯수를 제한하여 프로그램 동작을 안정적이고 예측가능하도록 보장한다. 락(LOCK)의 기본 개념 상호 배제 이 원칙은 한 번에 하나의 스레드만 공유 자원에 접근할 수 있도록 하여 스레드들이 동시에 같은 데이터를 수정하는 것을 방지한다. 상호 배제는 데이터 경합을 방지하거나 데이터의 일관성/정확성을 위해..

[ORM] ORM(Object-Relational Mapping)의 개념

요새 Django&Python으로 프로젝트를 하며 접하게 된 SQLAlchemy... 팀장님께서 갑자기 던지신 질문. "SQLAlchemy가 뭐야? " 처음 들어보는 놈이라 이 놈이 프레임워크인가 싶었는데 SQL이 붙은거보니 DB관련 머시기 같고... " 프레임워크...는 아니고......DB 관련한..... (?) (⊙_⊙)?공부해오겠습니다." "ORM이야" 우물쭈물 긴장해서 엉덩이가 축축ㅋㅋㅋㅋㅋㅋㅋ해진김에.... SQLAlchemy를 계속 사용해야 하는 김에.... 정리해보는 ORM의 개념과 활용...인데 정리하다보니 자바에서 JPA-Hibernate가 ORM이었다는걸 이제 깨달은 나. 진짜 그동안 멍청이처럼 코드만 짰다는 사실에 울고간다. 제일 되기 싫었던 가짜개발자가 나야 나! 어디가서 JPA ..

📊ORM 2024.04.12

[❌삽질과 해결 그 사이] 게시판 페이지네이션 : Null

요새 파이썬으로 하고있는 게시물 CRUD + JS 개발하다보니 게시판하면 빠질 수 없는 페이지네이션 기능을 구현해야했다. 페이지네이션은 자바에서도 안해보고 프로젝트 당시 팀원 버스에 무임승차해서 만든 경험뿐이라 지식이 하나도 있지 않은 상태에서 던져진 선임님의 예시코드. 하나씩 이해해가며 파이썬과 장고에서는 어떻게 페이지네이션 백 로직을 구성할 수 있는지 이해하고 예시코드를 기반으로 게시판 페이지네이션 서버 로직을 완성했으나.... 무자비하게 만난 에러코드. 물론 저 예외는 내가 Exception에서 정의하고 View.py 로직에서 raise로 예외처리를 한 것.... 예외처리를 하지 않으니까 500코드와 함께 Expected a `Response`, `HttpResponse` or `StreamingH..

[CS STUDY INTERVIEW] 7주차 - 스레드(Threads)

CS 스터디 7주차 스레드(Threads) 스레드(Threads) 컴퓨팅 분야에서 다양한 맥락에서 사용되지만, 일반적으로 프로세스 내에서 실행되는 작업의 최소 단위를 의미한다. 스레드는 프로세스 내에서 독립적으로 실행되는 흐름의 단위로, 각 스레드는 프로세스의 코드를 실행하며, 자신만의 실행 상태(예: 프로그램 카운터), 스택, 레지스터 집합을 가지고 있지만 같은 프로세스 내의 다른 스레드와 힙 메모리 영역, 데이터 세그먼트, 코드 세그먼트 등을 공유한다. 이는 스레드의 특징과도 겹치는 부분인데 스레드 특징을 살펴보면 1) 경량성(Lightweight) 프로세스에 비해서 생성이나 종료, 컨텍스트 스위칭이 빠르고 자원을 효율적으로 사용할 수 있다. 2) 자원공유(Resource Sharing) 프로세스 내..

[❌삽질과 해결 그 사이] 'set' object is not reversible

파이썬으로 로직을 짜기 시작한 게시판 CRUD. 파이썬 문법은 잘 모르겠지만 선임님이 주신 예제(?)코드가 있어서 코드를 하나하나 뜯어보며, 자바에서의 CRUD를 파이썬에 입혀가며 작성한 게시판 Create 코드. Swagger 에서 api명세를 등록해야 코드 디버깅을 해보든가 말든가 할텐데. 제일 최상단 urls에도 잘 등록을 했다. urlpatterns = [ path('admin/', admin.site.urls), path("api/v1/user/", include("user.api-urls")), path("api/v1/board/", include("board.api-urls")), path( r"swagger", schema_view.with_ui("swagger", cache_timeout..