인하대학교 CSE3210 오픈소스응용프로그래밍은 2023-2에 새롭게 개설된 강의이다. 인하대에는 원래 오픈소스SW개론이라는 오픈소스의 이름을 걸은 다른 과목이 있는데, 이 과목은 한학기에 Bash, Git, Numpy, Pandas, Scikit-Learn, TensorFlow, PyTorch, HuggingFace Transformers를 다루는 무시무시한 과목이다. 너무 광범위를 다루기에 크게 깊이있지 않고, 후반부로 가서는 크게 도움도 안되는 암기라고 악평이 있는 편이다. 이렇듯 오픈소스SW개론의 평가가 크게 좋지 않기에, 새롭게 개설되는 오픈소스응용프로그래밍(이하 오소응)도 약간의 걱정이 있기는 했다. 오소응 과목에서는 다음과 같은 주제를 다룬다: 오픈소스 라이선스, Git, Docker, so..
인하대학교 CSE1312 이산구조는 원래 이산수학이라는 이름으로 진행되던 강의였다. 사실 대부분의 대학에서는 이산수학이라고 하고 있을 것인데, 굳이 바꾼 이유는 모르겠다. 이산구조 과목은 21년도 커리큘럼 변경전에는 2학년 과목으로 짜여있던 과목이었다. 아마 자료구조와 같이 수강하는 것을 노린 것인진 몰라도, 내용 자체도 전반적인 컴퓨터공학의 기초 부분을 다루고 있고, 난이도도 정말 기본 베이스의 수준이기에 1학년으로 개편된 것이 아주 좋다고 생각이 든다. 교재는 Kenneth Rosen의 Discrete Mathematics and Its Applications를 사용했다. https://books.google.co.kr/books/about/Discrete_Mathematics_and_Its_Appl..
학교에서 코드트리라는 코테대비 서비스와 제휴를 해서 사용해 볼 기회가 생겼다. 다들 한 번씩 해보는 것 같아 FOMO의 심정으로 해봤는데 아쉬운 점이 많다. 우선 버그가 너무 많다. 개발 관련된 서비스에서 제공해도 되는 수준이 아니다... 1. 사파리 브라우저에서는 제대로 이용할 수가 없다. 사파리 이용자가 적다지만, 그냥 디자인이 깨지는 정도도 아니고 대부분의 글씨를 읽을 수 없는 수준이다. 결국 파이어폭스를 이용해서 접속했다. 2. 문제 조건이 모호하다. 특정 기준에 따라 문자열을 출력해야하는 문제가 있어서 풀었는데, 조건에는 어떠한 오름차순이나 내림차순등을 말해두지 않아서 순서는 상관없다 생각했으나, 실제로는 순서를 적당히 맞춰줘야 했다. 그래서 결국 테스트 케이스를 보고 적당히 맞춰주는 수밖에 없..
어셈블리어에서 movq(mov)는 크게 헷갈리지 않는다. 특정값을 이동하는 것. 괄호()로 쌓여있으면 주소에 접근하여 이동한다. 이때 source는 Register, Memory, Immediate 모두가 가능하고, dest는 Register와 Memory만 가능하다. 또한 D(Rb, Ri, S) 연산도 가능하다. 그렇다면 leaq(lea)는 무엇일까? lea는 Load Effective Address로, 뭔가 효율적인 '주소' 연산을 위해 설계된 것이다. lea의 헷갈리는 점은 바로 기본적으로 source에 괄호()를 사용한다는 것이다. 괄호는 해당 Register에 있는 주소에 접근하는 포인터의 역할을 하는데, lea에서는 딱히 포인터라고 하기는 애매한 느낌이 있다. 다른 헷갈리는 점은 주소 연산을 ..
문제 상황: DRF에서 nested 구조가 포함된 요소에 대해 POST 를 했을때 실 서비스에서는 정상적으로 생성되나, test에서는 nested 정보들이 반영이 안되는 오류 앞선 오류와 비슷한 느낌일거라는 생각이 들어 우선 validated_data등을 체크해보았다. 우선 테스트에서 serializer단의 validated_data와 view단의 request.data를 확인했다. # Test request.data # Test validated_data {"title": "Post Restaurant Listing Test", "is_private": True} 그리고 실제 production의 validated_data, request.data를 확인했다. # Production request.da..
문제상황: 장고 서버를 https 보안연결로 배포했을때 admin페이지 로그인시에 CSRF에러가 발생하는 문제를 겪었다. 처음에는 Mixed content랑 순간적으로 햇갈려 http를 자동으로 https로 연결하게 수정했다. 어짜피 해야될 일이였어서 나쁘진 않았다. 이후 여러모로 찾아봐도 안나오다가 찾은것이 settings.py에 CSRF_TRUSTED_ORIGINS를 설정해주는 것이었다. 이것으로 문제 해결. 4.0부터 추가된 기능인듯? https://stackoverflow.com/questions/70285834/forbidden-403-csrf-verification-failed-request-aborted-reason-given-for-fail Forbidden (403) CSRF verifi..
가끔 잊는 관계로 간단 메모. 일급 함수란 -> 함수를 일급 객체로 취급하는 것. 파이썬은 일급 함수를 적용한다. 이말인 즉슨 함수를 매게변수로 받고, 리턴할수도 있다는 것. 클로저 -> 만약 함수1를 리턴하는 함수2를 만든다 생각하자. 이때 함수1이 함수2에 있는 특정 변수를 사용한다고 가정하자. 이때 함수2가 함수1을 리턴한 후, 함수2가 삭제되더라도 함수1은 계속해서 정상적으로 기능한다. 함수1은 함수2의 변수를 참조할텐데 이게 어떻게 가능할까? 그것은 바로 클로저로 인해 가능함. 이때 함수1를 잘 뜯어보면 내부에 __closer__인가? 에 저장되있는것을 확인할 수 있다. 데코레이터란? 데코레이터다... 이때 데코레이터 여러개를 사용할 시 아래에서부터 적용? 실행된다.
유닉스에서부터 내려오는 파일 경로는 뒤에 *를 붙인다. Applications 설치한 앱 저장소 Library System Users bin* 흔히 셸에서 사용하는 실행파일이 이곳에 위치한다. 예를 들어 car, mkdir, rm이 이곳에 위치한다. cores* 오류발생시에 그당시 메모리덤프등이 이곳에 저장된다. etc* -> private/etc 사용자 환경설정 파일이 이곳에 위치한다. 예를 들어 zprofile이 이곳에 위치한다. opt private 맥OS의 역사적인 이유로 생기게된 디렉토리. sbin* 시스템 실행파일이 이곳에 위치한다. 예를 들어 ping, ifconfig가 이곳에 위치한다. tmp* -> private/tmp 임시 파일이 이곳에 위치한다. usr* usr/bin bin과 달리 ..
문제상황: 장고 웹서버 배포 중 일어난 문제. 서비스는 클라우드 서비스에서 제공하는 외부 DB와 웹서버(nginx+django gunicorn)로 이루어진 상황이었다. 개발 환경에서도 도커 컨테이너를 띄워 문제가 없는 것까지 확인한 후 배포하였으나, 오류가 발생했다. API 요청 시에 매우 긴 시간이 지체된 후 nginx 502 에러가 발생하는 방식의 오류였다. 문제는 DB연결이 제대로 되지 않아서였다. DB를 화이트리스트에 추가된 IP로만 접속이 가능한 방식이었는데, 이에 새로 배포한 웹서버의 주소를 추가해주지 않아 일어난 일이었다. DB 서버와 웹서버 가상머신 모두 Azure서비스를 사용했기에, 간단히 Azure서비스에 대하여 허용해 주는 설정 하나로 문제를 해결할 수 있었다.
장고 모델의 필드에서는 null과 blank 옵션이 존재합니다. null은 데이터베이스에서 필드가 NULL값을 가질 수 있는지, blank는 폼에서 입력하지 않아도 가능한지를 지정하는 옵션입니다. 이들의 기본값을 따로 설정을 하지 않는다면 False로 지정됩니다. 어느 정도로는 바로 이해가 되나, 문자열필드나 관계형 필드를 마주할 때 헷갈리곤 합니다. 그러기에 명확하게 각 필드별 blank, null의 기능에 대해 정리해 보도록 하겠습니다. 일반 필드 문자열 필드도 아니고, 관계형 필드도 아닌 일반적인 IntegerField, DateField와 같은 필드들은 크게 헷갈릴 것이 없습니다. null=True라면 값을 지정해주지 않았을 때 NULL로 DB에 저장되고, blank=True로 하면 폼에서 값을 ..