Go

    Django 채널처럼 쓸 수 있는 Go 웹소켓 라이브러리 만드는 과정

    Django 채널처럼 쓸 수 있는 Go 웹소켓 라이브러리 만드는 과정

    1. Go 웹소켓의 불편함 Go 웹소켓으로 개인 프로젝트를 하는데 추상화가 별로 안 되어있다는 느낌을 받았다. mu.Lock() delete(todoLists[todolistID], c) mu.Unlock() 커넥션을 추가하거나 제거할 때도 이렇게 내가 직접 락을 설정해야한다니. for { var ( msg []byte err error ) if _, msg, err = c.ReadMessage(); err != nil { log.Println("WEBSOCKET read error:", err) break } log.Printf("WEBSOCKET recv: %s", msg) todoItemID, messageType := readMessage(repo, msg, todolist) broadcast(t..

    [Go Fiber로 백엔드 시작해보기] 2. 파일 구조와 의존성 주입에 대한 고민

    저번 글에서 컨트롤러(사실상 서비스) 코드까지 봤고, 컨트롤러 코드에서 레포지토리를 바로 임포트해서 쓰는 것에 대해 고민이 많았는데. 근데 코드를 다시 보다보니 구조가 엉망진창이라 그냥 프로젝트 새로 팠다. 일단 오늘은 의존성 주입만 얘기하고 다음 글에서부터 다시 REST API 만드는 과정을 기록할 것이다. 목차 1. 고민: 생성자 안 쓰고 싶다 2. 의존성 주입 패턴 1. 고민: 생성자 안 쓰고 싶다 스프링에서는 어떤 것이든 모두 클래스 안에 있었고, 그걸 생성자로 생성해야 쓸 수 있었다. 그런데 go는 구조체를 정의할 때 필드만 포함하고 메소드는 포함하지 않는다. 그렇다고 구조체 안에 집어넣을 수 없는 건 아니고, 이런 식으로 해야 한다. type RegisterService struct { db ..

    [Go Fiber로 백엔드 시작해보기] 1. Fiber로 어찌저찌 시작

    [Go Fiber로 백엔드 시작해보기] 1. Fiber로 어찌저찌 시작

    go는 자바의 스프링처럼 대표적인 웹 프레임워크가 있는 게 아니라 여러가지가 있어서 선택하기가 어려웠던 것 같다. 깃헙 스타 수가 많은 프레임워크 Gin, Echo, Fiber 등이 있고 나는 Fiber를 선택했다. 이유는 딱히 없다. 어디선가 Fiber가 fasthttp를 사용해서 속도가 빠르다는 얘기를 듣고 선택했던 것 같다. fasthttp가 뭔지도 모르면서... 그리고 ORM 프레임워크로는 유명한게 xorm, gorm이 있는데 자세히 기억은 안 나지만 번거롭다고 하더라. 그래서 ent라는 걸로 했다. go 코드로 엔티티를 정의하면 알아서 쿼리문을 만들어준다. (방금 gorm 쿼리문 잠깐 보고왔는데 나는 ent가 더 좋아보임.) 튜토리얼이라기보단 몇 달 전에 했던 것 기록에 가까울 듯. 서버 돌리기..