[바미] 프로세스와 커널에 대해 알아보자!
·
Linux
프로세스와 커널프로세스(Process)는 운영체제의 커널의 관리하에 현재 시스템에서 동작중인 프로그램, 실행 중인 프로그램의 인스턴스 인데 시스템 리소스(예: CPU, 메모리, 파일 등)를 할당받아 작업을 수행합니다. 커널은 프로세스를 관리하기 위해 각 프로세스에게 PCB를 할당하고, init프로세스는 부팅 시 가장 먼저 실행되어 시스템에 설정을 하는 초기화 프로세스 입니다.프로세스 종류프로세스에도 종류가 있는데 아래의 표와 같습니다.프로세스명설명데몬 프로스세스사용자에게 특정기능이나 서비스를 제공하는 프로그램입니다.부모 프로세스부모 프로세스는 다른 프로세스를 생성하며 init을 제외한 모든 프로세스는 부모 프로세스를 가지고 있습니다.고아 프로세스자식 프로세스보다 부모 프로세스가 먼저 종료가 되었을 때 자..
[바미] Go - Tree에 대해 알아보자!
·
프로그래밍(Basic)/Golang
안녕하세요 오늘은 Tree에 대해 알아보려 합니다. Tree란 말 그대로 나무라는 의미인데 위 그림처럼 줄기가 있고, 가지가 뻗어 있고, 가지 끝에 나뭇잎이 달려있는 형태를 가지고 있는 자료구조 라고 해서 Tree라고 합니다. 하나에서 시작해서 여러 갈래로 나뉘어 가는 형태가 Tree입니다. Tree의 형태를 보면 나무를 뒤집어 놓은 형태인데 아래와 같습니다. 맨 위에서부터 시작하는데 맨 처음 시작하는 노드를 Root 노드(node)들과 노드들을 연결하는 하는 부분을 간선(edge) 각 간선 끝에는 노드가 연결 되어 있는데 이 노드를 자식노드(Child Node) 자식노드 상위에 있는 노드를 Parent Node 라고 합니다. 이건 상대적인 개념인데 Root 노드는 모든 노드의 항상 부모가 되고, 자식노..
[바미] Go - Packaging 과 Stack, Queue에 대해 알아보자!
·
프로그래밍(Basic)/Golang
안녕하세요. 오늘은 Go의 Packaging 과 Stack, Queue에 대해 알아보겠습니다. 패키지(Package)라는 것은 어떤 모듈, 기능 등을 묶어 놓은 것을 의미 합니다. Go 자체가 가지고 있는 "fmt"라는 패키지가 있는데 "format"의 약자인데 이것은 출력과 관련된 것들을 묶어놓은 것이고, "math"라는 패키지가 있는데 수학과 관련된 함수들을 묶어 놓은 패키지 입니다. 이런 관련된 기능들을 묶어 놓은 것을 패키지(Package)라고 합니다. 이전에 Linked List를 만들었었는데 그 외에도 Stack, Queue, Tree, Heap들을 하나의 패키지로 만들어서 dataStruct라는 것으로 만들어 늘려가볼까 합니다. 먼저 지난 시간에 만들었던 Linked List를 패키지로 분리..
[바미] 테스팅을 잘하자!
·
프로그래밍(Web)/업무관련
데이터 입력 문제를 해결하니 또 다른 문제가 발생했다. 무한정의 데이터를 받으면 서버부하는 물론이고, 공격을 받았을 때의 서버 상태를 생각해보니 제한을 걸어야 했었다. 아무래도 회사일이다 보니 이런 부분은 나 혼자 독단적으로 결정하는 게 아니기 때문에 타 부서와의 조율이 필요했다. 그렇게 해서 나온 값은 64KB였다. 64KB이상이면 데이터를 받지않고, 내부에서 따로 관리하는 log파일에만 표시하기로 했다. 원래는 이렇게 하려 했었으나 아래와 같이 하면 어떤 값을 보냈었는지 조회할 수 없기 때문에 // body값 가져오는 함수. func bodycheck(w http.ResponseWriter, r *http.Request) ([]byte, int) { getlength := r.ContentLength..
[바미] r.Body.Read()와 ioutil.ReadAll()의 차이점.
·
프로그래밍(Web)/업무관련
log수집 서버에서 invalid character '\x00' in string literal라는 에러가 빈번하게 발생하여 원인을 찾아보니 r.body에서 읽어오는 값의 크기가 특정 크기보다 커지면 저 에러를 발생시킨 것입니다. 그래서 JSON Data가 짤리게 출력 되는 모습을 보여주어서 현재 보다 더 많은 Data를 받아 올 수 있도록 수정해 주어야 했습니다. 먼저 얼마만큼의 데이터를 받아 오는지 확인하기 위해 length값을 조회했더니 저 에러가 나지 않는 범위가 length값이 3836이였을 때 였습니다. 그 때 썼었던 코드는 다음과 같습니다. func bodycheck(w http.ResponseWriter, r *http.Request) []byte { getlength := r.Conten..
[바미] Go - 묻고 더블로 가는 Double Linked List에 대해 알아보자!
·
프로그래밍(Basic)/Golang
안녕하세요. 오늘은 Double Linked List에 대해 알아보고자 합니다. 우선 Double Linked List를 만들기 전에 지난 시간에 했었던 코드를 정리해보죠. AddNode와 RemoveNode를 따로 했었는데 이거를 하나의 struct를 정의해서 그 struct안에 몰아넣도록 해줍니다. 현대 프로그래밍 언어에서는 결합성을 올리고 의존성을 내리는데요. 관련되어 있는 것들은 하나로 묶어서 하나의 모듈로 만들고, 관련 없는 것들 끼리는 서로 의존관계가 생기지 않도록 의존성을 끊는다는 의미입니다. 그래서 AddNode와 RemoveNode는 서로 관련이 있기 때문에 하나의 struct로 묶겠습니다. type LinkedList struct { root *Node tail *Node } func ..
[바미] Go - Linked List에 대해 알아보자.
·
프로그래밍(Basic)/Golang
안녕하세요. 이번에는 Linked List에 대해 알아 봅시다! Linked List는 연결된 리스트를 의미하는데 요소들을 서로 연결했다고 보면 되는데요. 배열은 하나의 통 메모리를 할당해서 그것을 나눠 쓰는 것인데 그것이 붙어 있다고 생각하면 되는데 Linked List는 붙어있는게 아니라 연결을 해놓은 것입니다. 배열은 한 덩어리로 존재하지만 Linked List는 서로 떨어져있는 메모리들을 한 줄로 연결해 놓은 것이라고 생각하면 됩니다. 연결하는 방법은 포인터를 이용하는 방법입니다. Linked List의 한 요소를 Node라고 하는데 이 Node에서 다음 Node로 포인터를 가지고 서로 연결을 시킬 수가 있습니다. 그러면 포인터를 가지고 어떻게 연결을 하는지 알아보겠습니다. 먼저 Struct를 하..
[바미] Go - Instance에 대해 알아보자!
·
프로그래밍(Basic)/Golang
이번에는 Instance에 대해 알아보죠. Struct의 복사에 대해 알아 봤었었는데요. 예를 들어 Student라는 struct가 있다 가정하에 type Student struct { name string age int grade int } 이렇게 구성되어 있는게 Student일 때 이것이 복사가 된다 했는데 a라는 애를 만들어서 name이 "aaa", age가 20, grade가 10일 때 마찬가지로 메모리 공간에 a라는 애가 있을 것입니다. 그런데 이 때 b = a를 해버리게 되면 b라는 공간을 만들어서 a의 값을 복사하게 됩니다. 코드 상으로 보겠습니다. package main type Student struct { name string age int grade int } func main() {..
[바미] Go - Slice를 심도있게 알아보자.
·
프로그래밍(Basic)/Golang
먼저 슬라이스 하나를 만들어 줍니다. package main import "fmt" func main() { var s []int s = make([]int, 3) s[0] = 100 s[1] = 200 s[2] = 300 fmt.Println(s) }
Bami
기록하며 성장하기