일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- React
- mariadb
- 블레이드 템플릿
- rabbitmq
- linux
- SQL
- For
- AWS
- python
- webpack
- Node
- phpredis
- docker
- laravel
- nginx
- Redux
- Switch
- php
- 기초 수학
- fastapi
- NCP
- deep learning
- Redis
- nodejs
- Babel
- Machine Learning
- Backbone.js
- Go
- CentOS
- javascript
- Today
- Total
목록전체 글 (189)
개발일기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lr0jb/btrLLVyQZc5/CkuXWvKdHVVMD7o5VkmpO0/img.png)
다른 고루틴들과 데이터를 주고 받거나 코드의 흐름을 조절하는 등의 제어를 하기 위해 채널을 사용한다. 고루틴 안에 생성된 채널은 해당 채널에 데이터가 전달될 때 까지 데이터를 받는 채널은 대기하게 된다. 이러한 동시적인 특징으로 인해 채널은 고루틴의 데드락을 방지하며 함수의 흐름을 제어할 수 있다. 1. 채널 생성법 // 채널명 := make(chan 자료형) c := make(chan int) 채널을 생성할 때는 make 함수를 사용하여 생성해야 한다. make 함수로 채널의 주소 공간을 할당한 후, make() 파리미터 안에 채널을 나타내는 chan을 써주고, 채널에 대입될 값의 자료형을 추가하면 된다. 1-1. 채널에 데이터 전송 // 채널 생성 c := make(chan int) // 데이터 전달 c
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qJmJC/btrLlF3jGlm/Glu34wOoOoiDt11T7jlBn0/img.png)
Go는 스레드와 비슷한 기능을 가진 고루틴(goroutine)을 제공한다. 고루틴은 함수를 동시에 여러개 실행시킬 수 있는 기능으로써 스레드 보다 언어 문법이 더 간단하며 OS의 리소스를 덜 사용하는 장점을 가지고 있다. 1. 호출법 고루틴을 호출 할 때는, 단순히 함수 앞에 go라는 키워드를 붙여주면 된다. package main import "fmt" // 함수 생성 func test() { fmt.Println("고루틴 test 함수 실행") } func main() { fmt.Println("main 함수 실행") go test() // test 함수 앞에 go라는 키워드를 붙여준다. } /* 실행 결과 : main 함수 실행 */ 위의 코드를 실행했을 때, 예상하는 결과와는 다르게 main 함수..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bcu0BH/btrLipNg2hp/xCrsHOctVpsK3tqlJV07A1/img.png)
1. 원인 라라벨 프로젝트를 처음 생성하고 웹 페이지에 접속 했을 때, 위와 같은 에러가 발생하는 경우를 종종 발견할 수 있다. 주로 storage와 bootstrap 폴더의 파일에 에러가 발생한다. 원인은 Permission denined로 권한 관련 설정이 제대로 이루어지이 않아 발생하는 문제이다. 2. 해결법 에러가 발생하는 폴더의 하위 파일까지 권한을 755로 변경한다. chmod 755 -R [에러가 발생한 경로] # app, routes 등을 포함하는 프로젝트 폴더의 명은 test_project라고 가정 # storage일 경우 chmod -R 755 test_project/storage # bootstrap일 경우 chmod -R 755 test_project/bootstrap app key..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bb4VI9/btrKOh9LU0n/j4q9viHbZXqmjEeKbgC0J0/img.png)
인터페이스는 구조체와는 다르게 메서드들의 집합을 나타낸다. 인터페이스에서는 메서드 자체의 내부 로직을 구현하지는 않지만 해당 메서드를 호출하여 사용한다. 1. 인터페이스 정의 package main import "fmt" type IFruit interface { // 메서드 나열 // setFruitInfo() int // 해당 메서드의 반환값이 존재할 경우 setFruitInfo() // 반환값이 존재하지 않을 경우 } /* type [인터페이스명] interface { 메서드 나열... } */ func main() { } 인터페이스를 선언할 때는, 위와 같이 자료형 부분에 interface라고 써주며 메서드들을 나열하면 된다. 반환값이 존재할 경우, 해당 메서드 뒤에 반환 자료형을 입력하면 된다...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/4GCqb/btrKMoA5YRp/4eF3u8W9QopPb6MPzQkbE1/img.png)
구조체는 서로 다른 타입의 필드 또는 동일한 타입을 가진 필드들을 하나로 묶은 것을 뜻한다. 1. 구조체 정의 type fruitStruct struct { name string price int } /* type 구조체명 struct { [구조체 변수명1] [구조체 변수 타입1] [구조체 변수명2] [구조체 변수 타입2] } */ 위와 같은 fruitStruct라는 구조체 변수를 정의하고 해당 구조체 안에 name(이름)과 price(가격)의 각각 다른 자료형을 가진 필드들을 포함하고 있다. 2. 구조체 선언 pacakge main import "fmt" type fruitStruct struct { name string price int } func main() { var fruit fruitStru..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lszri/btrJ70hEwOA/tJh5IAINpOVpC3kZs5K0u1/img.png)
몇몇 웹사이트의 게시글을 확인하면 URL이 "/post/3" 또는 "/post/how%20to%20laravel"과 같은 형식으로 되어있는 사이트도 존재한다. URL에 PK(Primary Key)값이 포함되어져 있거나 공백이 %20으로 표현되어 URL이 쓸모없이 길어지게 되며, 해당 글이 무엇을 의미하는지 대략적으로 파악하기 힘들다. 이를 해결하기 위해 슬러그(slug) 방식을 적용한 사이트를 종종 찾아 볼 수 있다. 슬러그 방식이란 URL이 "https://www.msn.com/뉴스-기사-입니다" 와 같이 공백부분이 -(dash) 기호로 이어져 URL이 표시되는 방식을 의미한다. 슬러그 방식으로 URL을 구성할 경우, 사용자가 해당 포스트 또는 해당 내용을 가진 링크가 무슨 내용을 내포하고 있는지 직관..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIREqV/btrJB3zTjGg/J77xBPhDL3k9638dMKQcfK/img.png)
1. 포인터란? Go에서는 메모리의 주소값을 변수에 저장하는 포인터 변수를 직접 활용할 수 있도록 지원한다. 메모리 주소는 항상 16진수로 이루어지며 포인터 변수로 메모리 주소를 저장하면 0x 형식의 16진수로 값이 저장된다. 기존에 변수를 선언할 때는 변수명을 지정한 후, 변수값을 할당하여 변수를 선언하였다. 하지만 포인터를 선언할 때는, &와 * 연산자를 사용하여 변수값의 주소를 포인터에 저장시킨다. 2. 포인터 선언 var test *int // 포인터 선언 변수를 포인터로 선언할 때는 자료형 앞에 * 연산자를 붙이면 된다. 단순히 포인터 선언을 했을 경우에는 nil 값이 들어가게 된다. nil은 다른 언어들의 null과 같은 개념이다. 2-1. 메모리 할당 var test *int = new(in..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbWcuB/btrJBKUdZhJ/gENqaqrFi9AA2Z3GEj6gy0/img.png)
기존에 예약 작업을 실행하기 위해서는 SSH 터미널에 크론을 생성한 후, 예약 작업을 설정하였다. 하지만 라라벨에서는 이 예약 작업 부분을 소스 코드에서 관리할 수 있는 Take Schedule이라는 기능이 존재한다. app\Console\Kernel.php 파일에 코드를 입력하여 예약 작업을 실행시킬 수 있도록 편리한 기능을 제공한다. 1. Kernel.php 파일에 예약 작업 추가