TCP와 UDP 차이
·
Computer Science/Network
TCP - 전송 제어 프로토콜IP가 인터넷 프로토콜로서 복잡한 인터넷 망 속에서 클라이언트와 서버 간에 통신할 수 있게 IP 주소와 패킷과 같은 규칙을 통해 통신을 하게 하는 것이라면, TCP는 IP규칙으로만 통신하기에 부족하거나 불안정하던 여러 단점들(패킷 순서가 이상하거나 패킷이 유실)을 커버해, 패킷 전송을 제어하여 신뢰성을 보증하는 프로토콜로 보면 된다.IP 규칙에 써있는대로 목적지에 다다랐으면, TCP 규칙에 써있는대로 올바르게 도착했는지 정확히 누구에게 전달되야하는지 하나하나 따진다고 생각하면 된다. 그래서 은행 업무나 메일과 같은 반드시 수신자가 정보를 받아야 하는 신뢰성 있는 통신이 필요할 때 사용된다.전송 데이터가 포장되는 과정을 나열해보면 다음과 같다.전송 데이터를 TCP 포장한다.포장..
브라우저에 www.google.com을 일어나는 일
·
Computer Science/Network
1. 브라우저에 www.google.com 입력2. 캐시 체크먼저 브라우저 캐시가 있는데 기존에 google.com을 방문했다면, 방문한 기록이 남아 있어서 빠르게 접근할 수 있습니다.google.com에 방문한 적이 없다면, OS캐시를 찾아보게 됩니다. 말 그래도 운영체제 안에 있는 캐시로 systemcall을 통해 그 내용에 접근할 수 있습니다.세번째는 라우터 캐시를 확인합니다. 라우터는 집에서 사용하는 공유기를 생각하면 됩니다. 거기서도 DNS내용을 저장합니다.마지막으로 한국에서 인터넷을 제공하는 ISP(Internet Service Provider) 캐시입니다.  3. 요청한 URL이 캐시에 없으면 DNS로 IP주소 획득ISP 캐시에서까지 그 IP주소를 찾을 수 없었다면, 이제 ISP의 DNS S..
Effective Java - 객체 생성과 파괴 item01
·
Backend/Java
정적 펙토리 메서드정적 팩토리 메서드는 객체 생성의 역할을 하는 클래스 메서드라고 생각하면 된다.  장점 1. 이름을 가질 수 있다. 즉, 생성 목적에 대한 이름 표현이 가능한 것이다. 단순히 생성자의 역할을 대신 이행하는 것 뿐만 아니라 개발자가 좀 더 가독성 좋은 코드를 작성하고 객체 지향적으로 프로그래밍할 수 있게 도와준다.지금까지 클래스를 설계할 때 다양한 타입의 객체를 생성하기 위해 생성 목적에 따라 생성자를 오버로딩하여 구분하여 사용해왔다. 하지만, new 키워드를 사용하려면 개발자는 해당 생성자의 인자 순서와 내부 구조를 알고 있어야 목적에 맞게 객체를 생성할 수가 있다는 번거로움이 있다. 따라서 정적 메서드를 통해 적절한 메서드 네이밍을 해준다면 반환될 객체의 특성을 한번에 유추할 수 있고..
1, 2차원에서 구간 합 구하기 - 1
·
Computer Science/Algorithms
이 글은 https://movingbean.tistory.com/17 의 블로그에서 작성된 내용을 바탕으로 정리 + @한 글입니다. 누적 합에 대한 내용이 너무 잘 정리되어 있습니다!!!!!! 꼭 보시길 바랍니다. 1차원 공간 vs 2차원 공간점 업데이트 vs 구간 업데이트 점 쿼리 vs 구간 쿼리 (특정 위치에 대한 개수만을 묻는가? vs 어떤 구간의 총합을 묻는가?)오프라인 쿼리 vs 온라인 쿼리 (질문을 업데이트가 모두 끝나고 하는가? vs 업데이트 도중에 질문을 하는가?1. 1차원 공간, 점 업데이트, 오프라인 쿼리점 업데이트라는 것은 초기 값만 세팅하는 경우도 점 오프라인으로 볼 수 있다고 한다. 가장 기본적으로 누적 합(PrefixSum)을 구하는 것을 떠올릴 수 있다.  시간 복잡도는 누적 ..
Nginx? 무중단 배포?
·
DevOps/nginx
무중단 배포?서비스가 중단되지 않은 상태에서 새로운 버전을 배포하는 것 무중단 배포가 필요한 이유?실제 서비스에서 한 대의 서버를 운영한다고 가정하자. 현재 사용중인 서비스의 Version은 application-V1을 배포한 서비스이다. 그런데 기능이 업데이트 되어 application-V2를 배포하려 한다. 이 새로운 버전 V2를 배포하기 위해서는 V2 버전의 빌드 파일을 서버에 배포해야 한다. V1와 V2는 서로 같은 포트를 사용하기 때문에 V2를 배포하기 위해서는 V1버전을 통해 실행하고 있는 서비스를 종료해야만 한다. 이러한 경우, V1이 종료되고 V2 버전이 실행되는 사이 유저가 서비스를 이용할 수 없는 시간이 생기는데, 이를 “다운타임” 이라고 한다.  NginxNginx란 트래픽이 많은 웹..
Github Actions, Slack Webhook 설정
·
프로젝트/GitGet
1. slack api에서 설명하는 3번 과정까지 진행한다.  https://api.slack.com/messaging/webhooks 2. 생성된 slack webhook url을 Secrets 환경 변수에 등록한다.  3. .github/workflows/{파일명}.yml 파일에 아래 내용을 작성한다.  # Slack Webhook 설정 - name: action-slack uses: 8398a7/action-slack@v3 with: status: ${{ job.status }} author_name: Backend fields: repo,commit,message,author mention..
AWS S3 403 에러 해결하기
·
DevOps/AWS
프로젝트를 배포하고, 운영환경에서 여러가지 통합 테스트를 진행하던 과정에서 아래와 같은 에러와 마주하였다. 자세히 살펴보니 AWS S3 burket 에서 문제가 발생한 것으로 보였다. 개발도 힘들지만, 운영 환경을 유지하는 것도 참 어렵다는 것을 깨닫고 있는 요즈음이다. 그래도 좋은 팀원들과 함께 성장하고 있어서 힘들지 않다. (아니 힘들어) ERROR : java.io.IOException: Server returned HTTP response code: 403 for URL; https://{AWS S3 bucket 주소}  해결 방법AWS 로그인 - AWS S3 - 사용중인 bucket 접속 - 권한  1. 버킷 정책 설정{ "Version": "2012-10-17", "Id": "Pol..
재부팅시 docker container를 자동으로 실행되도록 설정하는 방법
·
DevOps/docker
https://freesunny.tistory.com/24 재부팅시 docker 컨테이너를 자동으로 시작되도록 설정하는 방법만들때 --restart-always 옵션을 넣어주면 되는데, 빼고 컨테이너를 실행했을 때에는 아래의 명령으로 변경할 수 있다. # docker update --restart=always # 예) # docker update --restart=always d3af8191dca8freesunny.tistory.com
aws ec2에 올린 docker container DB에 DBeaver로 접속하기
·
DevOps/AWS
DB Connect 클릭상단 탭에서 SSH 클릭host/IP : EIP 또는 public IP 입력본인 EC2 기준 : ubuntuAuthentication Method : Public KeyPrivate Key : AWS EC2 생성하면서 받은 .pem 파일 등록상단 Main 클릭Database 이름 입력해당 DB username과 password 입력 후 Test Connection 클릭연결 성공
[Java] Java Application이 32bit 또는 64bit JVM에서 실행 중인지 여부 판별하기
·
Backend/Java
Java에 대해서 천천히 공부 중이다. 알고리즘 문제를 풀기 위해서, 개발을 위해서, 학교 수업을 위해서 어떤 문법으로 어떤 기능을 개발할 것이냐에 초점을 두고 공부해왔다. JVM이 어떻게 돌아가는 지, Java API가 제공하는 기능들이 무엇인지도 모르면서...!  하나씩 차근차근 이해하고 공부하자.  public class Main { public static void main(String[] args) { // We can use the “sun.arch.data.model” system property to identify JVM bitness: String jvmBit = System.getProperty("sun.arch.data.model"); if..
[MYSQL] dbeaver 연결 시 Public Key Retrieval is not allowed 에러 해결하기
·
Computer Science/DataBase
발생한 상황Local 환경으로 Mysql 설치 후, DBeaver에 Test Connection을 시도했다. 'Public key Retrieval is not allowed' 라는 문구와 함께 연결에 실패했다. 찾아보니, MySQL 8.0 이상부터 생길 수 있는 문제라고 한다. (Mysql은 쓸 때 마다 에러가 생김.....)  해결하기 위한 방법으로 Driver properties 설정을 변경하자.  https://velog.io/@dailylifecoding/DBeaver-MySQL-connecting-error-Public-Key-Retrieval-is-not-allowed-solved
[docker] docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우
·
DevOps/docker
⇒ 해결방법 : https://github.com/occidere/TIL/issues/116#issue-509567575 docker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우 · Issue #116 · occidere/TILdocker 설치 후 /var/run/docker.sock의 permission denied 발생하는 경우 상황 docker 설치 후 usermod로 사용자를 docker 그룹에 추가까지 완료 후 터미널 재접속까지 했으나 permission denied 발생 (설치 참고: https://bgithub.com