BackEnd/go5 [Go] 리소스 상태 유지 책 클라우드 네이티브 go를 참고했습니다.https://github.com/cloud-native-go/examples (코드) 분산 클라우드 네이티브의 도전 과제 중 하나는 '상태를 어떻게 유지할 것인가' 입니다. 1. 트랜잭션 로그 파일에 상태 저장. 리소스가 변경될 때마다 파일 기반의 트랜잭션 로그를 이용하여 기록. 트랜잭션 로그는 서비스가 트랜잭션을 다시 수행하여 원래의 상태를 쉽게 만들 수 있도록 함.2. 외부 데이터베이스에 상태 저장. 트랜잭션 로그 저장을 외부 db에 함. 1. 트랜잭션 로그트랜잭션 로그는 변경사항의 기록을 유지하는 로그 파일.서비스에 문제 생기거나, 재시작 될 경우 트랜잭션을 다시 수행해서 복원할 수 있게 해줍니다. 트랜잭션 로그는 이벤트를 오래된 것부터 최신 순으로 읽어.. 2024. 7. 9. [GO] Rest API 구현 https://github.com/cloud-native-go/examples 로 공부한 내용입니다. 1. net/http를 이용한 Rest API package mainimport ( "log" "net/http")func helloGoHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello net/http!\n"))}func main() { http.HandleFunc("/", helloGoHandler) // 2번째 인자는 multiplexor. nil인 경우 DefaultServeMux 이용 //ListenAndServe는 에러가 발생한 경우에만 반환. //log.Fatal은 에러가 발생할 경우, 에러메시지 반환하고 종료.. 2024. 7. 6. [Go] 동시성 패턴 future k8s 및 go 관련해서 사내 스터디를 진행 중입니다.future 에 관해 스터디를 했었습니다. 책 저자는 future는 비동기 프로세스에 의해 생성되는 값에 플레이스홀더를 제공하는 연산자라고 합니다.(문맥에 따라 다른 의미가 될 수 있다고 항의하지 말라고 합니다.) 자바에서는 future를 통해 다른 작업을 하다가, 값이 필요해지면 get()을 해서 기다릴 수 있습니다.아래 코드도 비슷하게 동작합니다.slow future를 호출해서 본 작업을 실행하고, Result()를 호출하면, 결과가 올 때 까지 기다립니다. package mainimport ( "context" "fmt" "sync" "time")type Future interface { Result() (string, error)}type In.. 2024. 6. 29. [Go] struct 와 포인터(자바 클래스와 비교) k8s 및 go 관련해서 사내 스터디를 진행 중입니다. 근데 struct가 어떻게 동작하는지 헷갈려서 자바와 비교를 하게 되었습니다. 우선 자바 같은 경우에는 class가 있습니다.이런 식으로 하게 되면, test1 이랑 test2가 같은 객체(메모리 주소 값)를 가지게 됩니다.test1의 필드를 수정해도 test2의 필드도 같이 수정이 되게 됩니다.그래서 복사본을 따로 만들어주거나 dto를 사용하는 등 예상치 못한 수정을 막아야 합니다. 그럼 go의 struct도 똑같이 동작을 하는지 궁금했습니다. s라는 student struct와, tt라는 stude struct가 있습니다.tt := s 를 이용하여 주면, tt와 s가 같은 메모리 주소의 변수를 이용하고 있는지 궁금했습니다. 이를 실행하면,이.. 2024. 6. 25. [GO] go를 이용한 안정성 패턴 구현(서킷) 클라우드 네이티브 Go 책을 참고했습니다. go를 이용하여 안정성 패턴을 구현해봅니다.(분산 애플리케이션에서의) 서킷 브레이커서비스가 실패할 경우, 장애가 퍼지는 걸 막을 수 있습니다. 예를 들면, db lock 이나 리소스 부족 등으로 인해 timeout이 발생할 수 있습니다. time out이 계속해서 발생하게 될 경우에는 뒤의 요청에 대해서도 처리를 하지 못합니다. 만약 MSA 라면, 모든 서비스들이 영향을 받게 되고 이는 전체 서비스 장애와 이어 집니다. 또한 클라이언트가 retry까지 하게 되면 네트워크 단에 부하가 엄청나게 발생합니다.서킷 브레이커는 이러한 장애를 막을 수 있습니다. 에러가 몇 번 이상 발생했을 경우 서킷을 open 합니다. 그러면 기본 로직은 동작하지 않고 바로 erro.. 2024. 6. 12. 이전 1 다음