분류 전체보기 (221) 썸네일형 리스트형 [Flask] Flask-SQLAlchemy 사용해보기 Flask-SQLAlchemy는 Flask의 확장 모듈로 데이터베이스 ORM입니다.(Object Relational Mapping) https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/ Quickstart — Flask-SQLAlchemy Documentation (2.x) Quickstart Flask-SQLAlchemy is fun to use, incredibly easy for basic applications, and readily extends for larger applications. For the complete guide, checkout the API documentation on the SQLAlchemy class. In.. [Docker] Docker Buildx를 통한 Multi-architecture 이미지 빌드(x86, ARM) 최근 ARM 기반 프로세서(AWS Graviton, Apple M1 등) 사용이 증가로 인하여 Multi-architecture 빌드가 중요해지고 있습니다. (특히 Apple M1 칩의 등장으로 ARM 기반 프로세서에서 동작하는 프로그램을 개발하는 엔지니어가 증가할 것이라 예측됩니다..) 기존의 서버는 보통 x86 또는 AMD CPU를 사용하여 실행하였고, 동일한 환경에서 개발된 프로그램이라면 배포하는 것에는 아무 문제가 없습니다. 하지만 ARM 환경에서 개발된 프로그램을 AMD 환경에 배포하거나, AMD 환경에서 개발된 프로그램을 ARM 환경에 배포한다면 문제가 생길 수 있습니다. Docker buildx를 이용하여 Multi-architecture에 배포할 수 있는 컨테이너 이미지를 빌드하는 방법에 .. [백준 4256] 트리 (C++ 풀이) https://www.acmicpc.net/problem/4256 4256번: 트리 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 노드의 개수 n이 주어진다. (1 ≤ n ≤ 1,000) BT의 모든 노드에는 1부터 n까지 서로 다른 번호가 매겨져 있다. 다음 www.acmicpc.net 풀이 preorder와 inorder의 결과를 이용하여 범위 내에서 중심이 되는 지점(좌우로 나뉘는 기점)을 찾고, 이를 기준으로 left/right로 범위를 나누어서(분할정복) 재귀함수를 호출하며 postorder의 결과를 출력합니다. void post_order(int start, int end, int pos){ for (int i = start; i < end; ++i) { if.. [Embedded] 인터럽트 핸들러(interrupt handler, AVR 예시) 인터럽트 핸들러(interrupt handler)는 인터럽트 처리에 등록하기 위해 작성된 프로그램이다. 인터럽트 처리는 일반적인 처리보다도 CPU가 먼저 동작시킨다. 따라서 인터럽트 처리가 길면 일반 처리에 영향을 끼치므로 되도록 간단하고 최소한의 처리만을 작성하도록 주의하여야 한다. 인터럽트 핸들러 자체는 인터럽트 벡터에 대상 프로그램의 시작 번지를 등록함으로써 인터럽트가 발생했을 때 CPU가 자동으로 전환해 준다. 다음 예시는 AVR 환경(Atmega 128 등 ..)에서 Timer0을 이용하는 예시이다. AVR 환경에서는 다음과 같이 기술함으로써 인터럽트 벡터로 등록할 수 있다. ISR()(Interrupt Service Routine)이라는 매크로 함수를 이용해서 등록하고 싶은 인터럽트 벡터 위치.. [Embedded] volatile 선언(하드웨어 폴링과 volatile) 임베디드 시스템에서는 주기적으로 하드웨어를 감시해 상태가 변한 것을 감시하는 처리가 빈번히 실행된다. 이 처리를 폴링(polling)이라고 한다. 인터럽트 기능을 갖고 있지 않은 주변장치 등을 감시하기 위해 사용된다. 간단하게 말해서 폴링은 "프로그램이나 장치에서 다른 프로그램이나 장치들이 어떤 상태에 있는지를 지속적으로 검사하는 전송 제어 방식"이다. 이 때 주변장치의 감시를 위해 레지스터 주소를 지정한 처리를 작성했다고 하면, 컴파일러는 주변장치의 레지스터 주소를 알지 못하기 때문에 최적화 옵션을 지정하여 컴파일하면 의도하지 않은 상황으로 전개될 가능성이 있다. 이 때 volatile 선언으로 최적화를 하지 않도록 지정한다. for(;;){ if((*(unsigned long*)(0x0000000F).. [백준 23291번] 어항 정리(C++ 풀이) https://www.acmicpc.net/problem/23291 23291번: 어항 정리 마법사 상어는 그동안 배운 마법을 이용해 어항을 정리하려고 한다. 어항은 정육면체 모양이고, 한 변의 길이는 모두 1이다. 상어가 가지고 있는 어항은 N개이고, 가장 처음에 어항은 일렬로 바 www.acmicpc.net 풀이 더보기 우선 NxN 형태의 2차원 벡터를 이용하여 어항의 배치를 표현하였으며, 어항이 존재하지 않는 좌표는 -1로 표현하였다. 그리고 문제에서는 어항이 위로 쌓이게 되지만 편의상 배열의 아래로 쌓이도록 표현하였다. 따라서 위 그림을 배열로 표현하면 다음과 같다. 코드 상에서는 board라는 변수를 사용한다. 1 2 3 4 5 6 7 8 -1 -1 3 14 9 3 11 8 -1 -1 3 5 -.. [백준 2638번] 치즈 (C++ 풀이) 2638번: 치즈 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 풀이 더보기 더보기 치즈의 "외부 공기"와 "내부 공기"를 BFS로 판단한 후 각 치즈의 상하좌우의 값을 확인하여 녹일 치즈를 정한다. 다음은 findAirStatusBFS()는 BFS를 이용하여 외부 공기를 판단하는 함수 // BFS를 이용하여 외부공기 판단 void findAirStatusBFS() { queue q; used = vector(N, vector(M, false)); q.push(make_pair(0, 0)); /.. [알고스팟] 시계 맞추기(C++) 문제 설명 더보기 https://www.algospot.com/judge/problem/read/CLOCKSYNC algospot.com :: CLOCKSYNC Synchronizing Clocks 문제 정보 문제 그림과 같이 4 x 4 개의 격자 형태로 배치된 16개의 시계가 있다. 이 시계들은 모두 12시, 3시, 6시, 혹은 9시를 가리키고 있다. 이 시계들이 모두 12시를 가리키도록 www.algospot.com 예제 입력 2 12 6 6 6 6 6 12 12 12 12 12 12 12 12 12 12 12 9 3 12 6 6 9 3 12 9 12 9 12 12 6 6 예제 출력 2 9 풀이 더보기 우선 스위치에 링크된 시계들을 다음과 같이 정의합니다. vector linkedClocks = { .. [Docker] Docker-Compose 주요 명령어 총정리 docker-compose 1.29.2, docker 20.10.8 버전에서 실행하였으며, 본문 내용이 길어 원하는 부분만 검색하여 보시는 걸 추천드립니다. Docker Compose의 주요 서브 명령어 서브명령 설명 up 컨테이너 생성/시작 ps 컨테이너 목록 표시 logs 컨테이너 로그 출력 run 컨테이너 실행 start 컨테이너 시작 stop 컨테이너 정지 restart 컨테이너 재시작 pause 컨테이너 일시 정지 unpause 컨테이너 재개 port 공개 포트 표시 config 구성 확인 kill 실행 중인 컨테이너 강제 정지 rm 컨테이너 삭제 down 리소스 삭제 docker-compose 명령은 docker-compose.yml을 저장한 디렉토리에서 실행됩니다. 만약 커런트 디렉토리 이외.. [Flask] 에러 처리 (사용자 정의 에러 핸들러, JSON 에러 핸들러) 사용자 정의 처리 핸들러 HTML 웹 어플리케이션에서는 404, 50x 에러가 발생하면 보통 특정 HTML 페이지를 보여준다. 플라스크는 자동으로 이렇게 동작하지만, 마이크로서비스에서는 클라이언트에 보내는 응답을 좀 더 조정할 필요가 있다. 이 때 유용한 기능이 사용자 정의 에러 핸들러(custum error handler)이다. JSON을 사용하여 마이크로서비스를 구현할 때는 클라이언트에 보내는 모든 동작을 JSON 포맷으로 맞추는 것이 관례이다. 마이크로서비스를 사용하는 클라이언트는 모든 응답을 파싱할 필요가 있기 때문이다. 플라스크는 app의 에러 처리를 조정할 수 있는 여러 함수를 제공한다. 첫 번째는 @app.route 처럼 동작하는 @app.errorhandler 데코레이터다. 이 데코레이터는.. 이전 1 ··· 11 12 13 14 15 16 17 ··· 23 다음