개발자의 길 57

[Backend] HTTP 기초 지식 정리

본 게시글은 인프런 김영한 님의강의 "모든 개발자를 위한 HTTP 웹 기본 지식" 을 수강한 후 정리한 게시글 임을 참고 바랍니다. https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard 모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의 실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런... www.inflearn.com 컴퓨터 간에 통신을 하는 방법 IP ( Internet protocol ) 주소 - 컴퓨터들은 IP 주소 ( 192.100.100.2 ) 를 통해 인터넷에 연결되어 있는 다른 컴퓨터들과 통신을 한다...

개발자의 길 2022.05.01

[Python3] Decorator(장식자) 란 무엇인가?

데코레이터의 작성 방법 개발을 하다 보면 여러 함수에 하나의 동작을 추가시키고 싶을 때가 있다. 대표적으로 함수의 시간 측정이 필요해서 함수 동작 앞,뒤로 로그를 찍는 등의 작업이 있다. 하지만 일일히 손으로 로그를 추가하는 건 매우 비효율적이며 유지보수도 힘들다. 파이썬에서는 이러한 작업을 데코레이터라는 기법을 이용해서 간단히 해결 할 수 있다. 우선 아래 예제를 보자. import datetime def doSomething(): print("do something") #우리는 위 함수를 아래와 같이 바꾸고 싶을 떄가 있다. def doSomethingWithLog(): print("start :" + str(datetime.datetime.now() ) ) print("do something") p..

개발자의 길 2022.03.06

[Python3] Nested function, First class function, Closure function 이란 무엇인가?

1. Nested function ( 중첩 함수 ) 중첩 함수는 간단히 말하면 함수 정의 안에 또하나의 함수가 정의될 수 있는데, 이때 함수 안에 정의된 함수를 중첩 함수라고 한다. 이 함수는 일반적으로는 해당 함수가 정의된 함수의 내부에서만 사용될 수 있다. def first(): print( "hey" ) def second(): return "hello" print( second() ) 2. First class function ( 일급함수 ) 일급 함수라는 개념은 파이썬에 한정된 개념이 아닌, CS 전반에 걸쳐서 통용되는 개념이다. 이 함수는 다음을 충족하는 함수이다. 1. 함수 내에 변수를 선언할 수 있다. 2. 함수의 매개변수로 다른 함수를 전달할 수 있다. 3. 함수의 반환값(return) ..

개발자의 길 2022.03.06

[Java][SpringBoot] "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의노트

스프링 웹 개발 기초 - 웹 화면을 Client 에 전달하는 방법 stsatic/index.html 을 올려두면 가장 첫 화면으로 등록된다 - Welcome page 기능. @Controller 로 등록된 class 에서 @GetMapping 으로 등록된 함수가 string 을 리턴할 때, 스프링에서 viewResolver 라는 녀석이 resources::templates/ 에서 리턴한 string 에 해당하는 html 파일을 웹 화면에 띄워준다. 정적 컨텐츠 resources::static 에 hello-static.html 이라는 html 파일이 있고, 웹에서 http://address/hello-static.html 이라는 주소로 요청을 했다 지차. 이 경우에 hello-static 과 연관된 Co..

개발자의 길 2021.12.22

[SQLite3][C++] database is malformed - DB 에 손상이 갔을 때.

여느때와 같이 bug ticket 이 들어왔나 보고 있던 중에, 내 모듈이 SQLite DB 에 저장한 데이터를 읽을 수 없었다는 이슈가 있었다. log 상으로는 어떠한 문제점도 보이지 않아서 설치된 DB 를 받아서 분석을 해 보았더니, 읽을 수 없었던 PK 를 SELECT 하려고 시도하니 database is malformed 라는 문구가 뜬 적이 있었다. 해당 로그에 대한 자료를 찾아보니 pragma integrity_check 라는 PRAGMA 를 이용해서 DB 가 손상되었는지 확인 할 수 있었지만, 손상되었다는 정보만 얻고 별 소득이 없었다. 결국에 해결해야 되는 것은 내가 구현한 모듈에서 DB 를 손상시킬 수 있는 동작을 하고 있었다는 점이기 때문이다. 우선 모듈은 DB 에 Read/Write ..

[SQLite3][C++] SQLite3 에서 record 를 지워도 DB 용량이 줄어들지 않는 이유는? - page, vacuum, rbu vacuum.

SQLite3 에서 아래와 같이 DELETE query 를 실행하면 record 를 지울 수 있다 DELETE FROM [table_name] WHERE [column_value]=? WHERE 문을 제거하면 전체 테이블이 모두 지워지는데, DELETE Query 를 이용해서 record 는 모두 삭제가 되어도 DB 용량은 그대로인 것을 볼 수가 있을 것이다. 이는 SQLite3 가 reocrd 를 삭제해도 디스크로부터 할당받은 데이터 공간을 바로 버려버리는 것이 아니라, 이후에 새로운 record 가 Insert 되었을 때 재활용하기 위해 page 단위로 빈 공간이라는 정보를 유지하고 있기 때문이다. Vacuum 그러면 DB Size 를 줄이기 위해서는 어떻게 해야 하는가? 간단하게도 VACUUM 이라..

[SQLite3][C++] Sqlite3 의 journal file 에 대해

SQLite 의 Journal file SQLite 에서는 갑작스러운 power failure 등으로 인한 쓰기 작업이 중단되었을 경우 DB 손상을 막기 위해 Rollback Journal 이라는 기법을 사용한다. DB 에 write 작업이 발생하게 되면, rollback journal 이라는 곳에 데이터가 write 로 인해 변경되기 전으로 돌아갈 수 있도록 하는 정보들을 기록하게 된다. 데이터 write 및 commit 이 종료되면 journal file 을 삭제하게 되며, 쓰기작업 도중에 종료될 경우 삭제하지 않은 journal file 이 남아있는 상태로 남아있게 된다. rollback journal 을 이용해 무결성 복원을 해야하는 경우 이 journal 을 hot journal 이라고 부르는데..

[SQLite3][C++] SQLite 의 file lock 매커니즘

ACID 와 SQLite3 SQLite3 는 Database 의 ACID 를 준수하기 위한 하나의 방법으로 File Locking Mechanism 을 사용한다. 잠시 ACID 에 복습해 보자면 아래와 같다. Atomicity 원자성 : 하나의 논리적 실행단위인 트랜잭션이 도중이 중단되지 않고 끝까지 실행되어야 함 Consistency 일관성 : 트랜잭션 실행이 종료된다면 언제나 일관성 있는 상태의 Database 가 되어야 한다. Isolation 독립성 : 트랜잭션 수행 중에는 다른 어떠한 트랜잭션이 도중에 끼어들거나 트랜잭션의 중간 작업내용을 볼 수 없음을 의미한다. Durability 지속성 : 한번 트랜잭션이 수행 되었다면 그 결과는 시스템 장애나 전원 종료 등이 발생하더라도 영구히 남아야 함을..

[SQLite3][C++] sqlite3_busy_timeout

지난 포스팅에 이어, SQLite3 database 가 locked 상태인 경우에 일정 시간 대기를 하도록 설정이 가능한 sqlite3_busy_timeout 함수를 살펴보고자 한다. 해당 함수에 대한 문서는 아래 주소를 참고 바란다. https://www.sqlite.org/c3ref/busy_timeout.html sqlite3_step 을 통해 DB 에 접근을 하는 동작을 수행할 때 만약에 DB 가 Write 접근 - Read lock 이나 Read/Write 접근 - Write lock 인 상태에는 SQLITE_BUSY 를 즉시 리턴하게 된다. 여러 쓰레드/프로세스에서 해당 데이터베이스에 접근하는게 일반적인 상황이라면 즉시 접근실패를 하고 종료하는 것 보다 lock 을 놓을 때 까지 대기하는것이 ..

[SQLite3][C++] database is locked 에러가 나올 때 ?

database is locked 에러가 나올 때 SQLite 개발을 하다 보면 저런 에러메시지를 만나거나 에러코드 SQLITE_BUSY (5) 를 반환받아서 DB 에 대한 읽기/쓰기 가 불가능한 경우를 본 적이 있을 것이다. 해당 에러코드가 리턴되는 경우는 DB 에 Write 작업을 하는 도중, Read/Write 를 하고자 접근을 한 경우이다. SQLite 는 기본적으로 Atomicity (원자성) 을 지키기 위해서 DB 에 write 작업이 발생을 할 경우 File 단위로 lock 을 걸어 버려서, 같은 Database 의 다른 table 에 접근한다 하더라도 lock 이 걸린 상태에서는 읽기/쓰기가 불가능하다. 혹시나 SQLite3 Lib 을 이용한 프로그램에서 저런 문제가 나온다면, 읽기/쓰기가..

반응형