전체 글 350

HTTP1.1, HTTP2, QUIC

웹 성능과 프로토콜의 관점에서 알아본다. 웹/네트워크에서 성능 하락의 가장 큰 요인 대역폭(Bandwidth)와 지연시간(latency)에 대하여 2010년에 구글의 Mike Belshe라는 사람이 실험을 하였는데 대역폭의 경우는 1Mbps에서 2Mbps로 갈 때에는 페이지 로드 타임이 절반으로 줄지만, 그 이상에서는 큰 차이가 없고 지연시간은 감소될 때 마다 페이지 로드 타임이 계속해서 감소하는 것을 볼 수 있는 것을 볼 수 있었다. 이를 통해 대역폭보다는 지연시간을 줄이는 것이 성능향상에 중요하다 는 사실을 알 수 있다. HTTP OSI7계층에서 HTTP는 어플리케이션 계층에 포함되어 있다. 그리고 이는 TCP위에서 작동을 하게 되는데, http의 표준 명세에서 전송계층의 프로토콜로 TCP만을 명시하..

Go와 Gin Framework 를 사용한 게시판 만들기 (2) - Swagger 붙이기

이번에는 Go에서 Swagger를 통해 API명세를 진행해 보겠다. Go는 자바에 비해 좀 귀찮다. 세팅하기 먼저 Terminal상에서 Swagger에 필요한 세팅을 받아줄 것이다. go get -u github.com/swaggo/swag/cmd/swag 그러면 이렇게 알아서 관련된 것들을 module에 추가해준다. swagger가 제대로 설치되었는지 확인하기 위해 한번 관련 명령어를 쳐본다. swag 이거 만약에 쳐봤는데 안나오면 아마 PATH가 제대로 설정되지 않았을 확률이 높다. export PATH=$(go env GOPATH)/bin:$PATH 이거 해보셈.. 이제 gin Framework에 맞춰서 여기 필요한 gin swagger를 받아준다. go get -u github.com/swaggo..

Go와 Gin Framework 를 사용한 게시판 만들기 (1) - 시작하기

목표는 간단한 기능을 가진 게시판 API를 제작하는 것이다. 프론트는 안붙일건데, 이유는 귀찮아서이다 하핫 먼저 처음부터 막 진행하기는 좀 곤란하니까, Go에 Gin Framework를 붙이고 이를 확인하는 것까지 해보려고 한다. 프로젝트 만들기 Go를 통해 간단한 Get API를 만들 예정이다. 먼저 개인 폴더(chan_personal_go)를 만들어 준다. 그리고 그 아래에 main.go 폴더를 만들고, controller를 관리해줄 controller 폴더를 생성한다. 이후 해당 폴더 아래에 controller.go 파일을 생성한다. go는 기본적으로 main.go를 동작시킨다. 이제 메인을 작성해줄 것이다. main.go 작성 package main import ( "github.com/gin-g..

Redis - cache, persistence 기초

Redis란? In-memory Data structure Store BSD 3 License Open Source 레디스를 쓸 때에 마음대로 코드를 수정하거나, 숨기거나 할 수 있다. 추가로 Redis module은 느낌이 다른데, 이건 Redis Enterprise를 제공해주는걸로 얘는 변경시 코드를 공개해야한다. Support Data Structures String, set, sorted-set, hashed, list Hyperloglog 유일한 원소 개수 추정에 사용되는 알고리즘. 속도가 매우 빠르고 오차가 적다고 한다. bitmap geospatial index 나에게서 얼마만큼의 거리에 있는 데이터들을 가져온다. stream Only 1 Committer 레디스 소스를 고칠 수 있는 사람은..

탑프로그래머스!

2022 하반기-1 데브매칭 시험을 보았다. 부분 점수에서 많이 깎여서 슬펐는데, 어느날 메일함을 보니 뭔가 와있었다. 인증뱃지? 이게 뭐지? 하고 들어가보니까 이번 시험에서 상위 5%이내에 들어서 탑프로그래머스에 선정되었다고 한다. 그게 뭐지?? 말 그대로 프로그래머스 테스트(데브매칭)에서 상위5%에 들어간 개발자에게 제공하는 포지션 제안 서비스라고 한다. 장점 먼저 이게 선정되면 프로필에 라벨링이 붙어서 좀 멋있다. 이런 느낌임. 그리고 탑프로그래머스의 경우 추가적인 포지션 제안을 받을 수 있다고 한다. 위의 뱃지가 보여지기도 하고, 여기서 도와준다고 하는 것 같다. 사실 그런데.. 개발자의 경우 여러 포트폴리오가 있고 그동안 한 개발 내용이 정량적으로 보여지는데, 이게 큰 의미가 있나 싶기는 하다...

기타/일상 2022.10.15

2022 하반기-1 데브매칭 후기

2022 하반기 데브매칭 시험을 봤다. 회사 경력이 굉장이 짧기 때문에 이번에는 이직을 위한 준비라기보다는 알고리즘 공부에 대한 열정을 되찾으려고 시험을 쳤다. 이제 신입사원 뽑는회사가 거의 없더라… 사실 저번 상반기때에는 동아리를 하느라, 그 전에는 타이밍이 안맞아서 시험을 못봤었는데, 이번에는 운이 좋게도 볼 수 있었다. 제한 데브매칭은 신기하게도 시험을 볼 때에 검색이 허용이 된다. 비록 화면이랑 핸드폰으로 감시를 하기는 하지만, 검색을 할 수 있다는 것은 큰 메리트인것 같다. 그리고 솔직히 개발이나 문제풀때 검색하는것 정도는…? 괜찮지 싶기도 하고 그래서 마음 편하게 보면 될것같다!! 시험 시험은 총 2시간이었고 문제는 4문제(알고리즘3, SQL1)이었다. 개인적으로 알고리즘 난이도는 쉬운 편이었..

기타/일상 2022.10.15

OIDC와 OAuth에 대해..

OIDC와 OAuth OIDC와 OAuth의 차이점은 OIDC는 Authentication에 집중하고, OAuth의 경우는 Authorization을 포함한다는 것이다. Authentication과 Authorization Authentication(인증) 사용자가 누구인지 확인하는 절차 해당 어플리케이션에의 접근 가능 여부를 확인한다. Authorization(인가) 사용자의 권한을 확인하는 절차 어플리케이션에 접근 후, 특정 서비스에의 사용 가능 여부를 확인한다. OIDC / OAuth 차이 OAuth는 클라이언트가 리소스 소유자로부터 서버의 자원에 대해 인가받고 접근하기 위해 사용된다. 즉 인가를 주요 목적으로 하고 있고, 인증은 이의 주요 목적이 아니다. OAuth에서는 사용자에 대한 정보를 명시..

이론 정리 2022.10.10

SOLID원칙에 대하여

SOLID - 객체지향 설계 5원칙 객체지향의 가장 기저가 되는 원칙이자, 객체 지향을 하기 위해 지켜야 하는 5개의 원칙이다. 이름 그대로 5개로 이루어져 있다. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open-Closed Principle) : 개방-폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 DIP(Dependency Inversion Principle) : 의존 역젼 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 위의 5개의 원칙을 사용하여 프로그래밍을 하면, 유지 보수와 뛰어난 확장성을 가질 수 있다고 하는데, 각각의 특징과 개념을 알아보자 ..

이론 정리 2022.10.03

mac CPU 사용량 실시간 확인하기 - RunCat

솔직히 CPU사용량을 확인하는게 크게 도움되지는 않지만, 그냥 이게 있으면 귀여워서 좋다. 그리고 무료니까 걱정말고 다운받자. 요런 느낌으로 컴퓨터 위쪽에 CPU에 맞춰서 귀여운 고양이가 뛰어댕기는걸 해줄수 있다. 추가로 이런 식으로 필요한 정보들도 얻을 수 있다. 설치하기 https://apps.apple.com/kr/app/runcat/id1429033973?mt=12 여기 들어가서 다운해준다. 혹은 걍 앱스토어에서 runcat으로 검색하자. 참고로 해당 고양이를 클릭했을 때에 Runners Store에 가면 이런 식으로 추가적인 이모티콘을 구매 가능하다...만 개인적으로는 Gaming Cat Party Carrot 이 넘사라 그냥 이거 둘 중 하나 쓰는 중이다.

기타/일상 2022.10.03

Unable to load class 'com.mysema.codegen.model.Type' error 발생 및 해결

프로젝트 진행 중에 queryDSL을 통한 Q class 생성에서 위와 같은 에러가 발생하였다. 해결을 위해 찾아본 결과 spring boot 2.6이상에서는 querydsl5.0 이상 버전을 적용하고, 추가적인 내용들이 필요하다고 한다. buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" id '..