전체 글 405

값 타입과 임베디드 타입

값 타입 기본값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 기본값 타입 JPA는 데이터 타입을 최상위 레벨로 볼 때 두가지로 분류한다. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자를 통해 지속해서 추적이 가능하다. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적이 불가능하다. 값 타입의 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(enbedded type, 복합 값 타입) 컬렉션 타입 기본값 타입 생명 주기를 엔티티에 의존한다. 즉 엔티티를 삭제하면 기본값도 삭제된다. ..

Go의 GC에 대해 (feat. java)

GC가 일단 뭔데? C/C++을 배웠던 사람은 알텐데 얘들은 메모리를 사용할 때 필요할 때에 생성하고, 필요가 다하면 해제해 주었다. 이는 메모리의 관리 측면에서 굉장히 좋지만(쓸데없이 메모리를 먹는 애들이 없으니까 퍼포먼스가 뛰어나다) 매번 이를 적절하게 할당하고 해제해야 하기 때문에 아주 귀찮다. 그래서 매번 메모리를 해제하는걸 그냥 해주는 녀석이 생겨났고, 이녀석이 Garbage Collector 즉 GC이다. STW : Stop The World GC의 동작동안 다른 쓰레드의 작업은 모두 중단된다. 즉, 가비지 컬렉터가 동작하게 되면 모든 작업이 멈추게 된다는 것이다 그리고 이 STW시간을 줄이는 것이 바로 GC튜닝이다. java에서의 GC 한국에서 웹개발을 할 때에 가장 보편적으로 사용되고, 보..

API프로토콜(REST, gRPC, GraphQL)에 대해

API는 왜 중요할까? 추상과 구체를 분리하여 지금 당장 중요하지 않은 것들에 종속되지 않으면서 기능을 사용할 수 있다. REST API 특징 리소스 중심으로 API가 구성된다. HTTP Method를 통해 Action정의 JSON, XML등을 사용한다. 장점 학습과 사용이 쉽고, 자유도가 높아 원하는 대로 사용이 가능하다. 단점 API가 자주 바뀌게 된다. -> Type, field내용 등의 변경이 잦을 수 있음. 버저닝(Versioning) 명세 찾기가 어려움 죽은 문서 개발 종속성 인터페이스 정의 언어(Interface Description Language : IDL) 소프트웨어 컴포넌트의 인터페이스를 묘사하긴 위한 명세 언어 IDL은 어느 한 언어에 국한되지 않는 언어 중립적은 방법으로 인터페이스..

OSI7계층

1계층 물리 계층(Physical Layer) 먼저 두 대의 컴퓨터가 어떻게 통신하는지부터 생각해 보면 모든 파일과 프로그램은 0과 1의 나열이고, 결국 0과 1만 주고받을 수 있으면 통신이 가능하다는 것이다. 두 대의 컴퓨터 간 통신 두 대의 컴퓨터를 전선 하나로 연결한다 생각하면 1을 보낼 때는 +5V 0을 보낼 때는 -5V 이렇게 흘려보내면 0과 1의 전송이 가능해진다. 그래서 이제 0과 1을 주고받을수 있으므로 두 컴퓨터는 모든 데이터의 통신이 가능하다. 그런데 이게 실제로는 잘 동작하지 않았다. 이렇게 X축은 시간, Y축은 전압을 갖는 Sin함수가 있다고 생각해 보았을 때 그래서 이렇게 +5, -5의 전압을 갖는 애들을 주고받을 텐데... 1초동안 몇번의 주파수가 있는지 세어보면 총 4번 진동할..

TCP/UDP

Transport Layer Endpoint간 신뢰성있는 데이터 전송을 담당하는 계층이다. 말하자면 클라이언트 - 서버 간 원하는 포트 번호에 해당하는 프로세스에 데이터를 순차적으로, 안정적으로 전달하는 것을 담당한다. 만약 이 전송 계층이 없다면 어떤 일이 발생할까? 데이터 신뢰 불가능 송신자가 요청한 데이터와 수신한 데이터가 서로 다를 수 있다. (1,2,3 요청 -> 2,3,1 수신) 흐름 문제 송/수신자 간 데이터 처리 속도의 차이 때문에 수신자가 처리할 수 있는 데이터량을 초과하게 되는 문제가 발생할 수 있다. 만약 수신자가 처리할 수 있는 데이터를 초과해서 계속 요청이 온다면 문제가 발생할 것이다. 혼잡 문제 네트워크가 혼잡하거나 뭔가 문제가 있을 때에 송신자가 보냈는데 제대로 데이터가 들어가..

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