분류 전체보기 243

[Network] 소켓 식별 방식과 레이어 별 데이터 정보 (segment, datagram, packet, frame, payload, multiplexing, demultiplexing)

TCP/IP stack의 통신 과정Application 레이어: 데이터의 생성과 헤더 추가브라우저에서 서버로 요청을 보낼 때, 데이터는 Application 레이어에서 생성됩니다. 이 레이어에서는 HTTP와 같은 어플리케이션 프로토콜을 사용하여 서버에 요청을 전달합니다.데이터와 메시지: Application 레이어에서 송수신되는 데이터는 Data 또는 Message라고 부릅니다.페이로드: Application 레이어의 데이터와 어플리케이션 헤더 부분을 합쳐 Payload라고 합니다. 이는 실제 데이터 전송 시 다른 계층에서도 동일하게 사용되는 개념입니다.Transport 레이어: 데이터의 전달과 식별데이터는 Application 레이어를 지나 Transport 레이어로 내려갑니다. 이 레이어는 프로세스 ..

[Network] 프로토콜과 OSI 7 layer, 그리고 네트워크의 기능들이 어떻게 구조화 돼서 동작하는지

네트워크의 개념과 기능네트워크는 컴퓨터나 기타 기기들이 리소스를 공유하거나 데이터를 주고 받기 위해 유선 혹은 무선으로 연결된 통신 체계를 뜻합니다.  이 네트워크는 다양한 기능들이 있습니다.네트워크는 애플리케이션 목적에 맞는 통신 방법을 제공합니다.신뢰할 수 있는 데이터 전송 방법도 제공합니다.네트워크 간의 최적의 통신 경로를 결정합니다.결정된 경로를 바탕으로 목적지로 데이터를 전송합니다.이 때 여러 노드들을 거치게 될텐데, 이 노드들도 네트워크가 결정합니다.프로토콜그런데 이런 네트워크 통신 기능들이 제대로 동작하기 위해서는 참여자들 사이에 약속된 통신 방법이 있어야 합니다. 왜냐하면 상대방과 나 사이에서 이루어지기 때문입니다. 만약 내가 한국어로 말을 하고 상대가 영어로 말한다면, 대화가 되지 않을 ..

[PS] 백준 오아시스 재결합 Java 풀이 (+모노톤 스택에 관하여)

https://www.acmicpc.net/problem/3015모노톤 스택모노톤 스택은 스택의 요소가 오름차순 또는 내림차순으로 유지되도록 설계된 특수한 스택입니다. 이는 특정 조건을 만족하는 요소를 효율적으로 처리하거나 빠르게 접근해야 할 때 사용됩니다.오름차순 스택: 스택에 쌓인 값이 항상 작아지지 않도록 유지.내림차순 스택: 스택에 쌓인 값이 항상 커지지 않도록 유지.모노톤 스택은 일반적으로 배열이나 리스트의 각 요소와 관련된 "가장 가까운 큰 값" 또는 "가장 가까운 작은 값"을 찾는 문제에 사용됩니다. O(N)의 시간 복잡도로 해결할 수 있어 효율적입니다.문제 접근이 문제 또한 모노톤 스택을 사용하여 해결할 수 있습니다.먼저 서로를 볼 수 있는 조건을 생각해 봅시다.두 사람이 서로 볼 수 있으..

Development/PS 2024.11.28

[PS] 백준 도전 숫자왕 java 풀이 (비트마스킹으로 모든 경우의 수 찾기)

https://www.acmicpc.net/problem/23057 문제 접근숫자의 조합으로 만들 수 없는 수의 합을 구해야한다.결국 만들 수 있는 모든 경우의 수를 구해야 하는데, N이 최대 20이면 최대 경우의 수는 2^20 이므로 DFS와 같은 방식은 시간 초과가 터진다.따라서 다른 방식을 선택해야 한다. 그게 비트마스킹 방식이다.비트마스킹으로 모든 경우의 수 찾기 HashSet sumSet = new HashSet(); int totalSubsets = 1  1 각 이진수 자리에 마스크를 넣어본다. mask 변수의 각 비트는 숫자를 포함할지 여부를 나타낸다. 비트 1이면 해당 숫자를 포함하고, 0이면 포함하지 않는다. 문제에서는 모두 자연수라는 조건 때문에 0을 제외해야 ..

Development/PS 2024.11.26

[PS] 코드트리 나무 타이쿤 java 풀이

https://www.codetree.ai/training-field/frequent-problems/problems/tree-tycoon/description?page=3&pageSize=10 코드트리 | 코딩테스트 준비를 위한 알고리즘 정석국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.www.codetree.ai문제 접근구현, 시뮬레이션 문제입니다.특수 영양제 규칙을 준수하여, 크게 특수 영양제 이동 -> 성장 -> 자르기로 로직을 분류합니다. 특수 영양제 규칙영양제는 매년 주어진 규칙에 따라 이동하며, 이동한 칸의 리브로수를 성장시킵니다.대각선 방향에 높이가 1 이상인 리브로수의 개수만큼 추가로 성장합니다.이미 영양제를 투..

Development/PS 2024.11.25

[Diary] 신입 개발자의 오픈소스 컨트리뷰트 해보기 - Spring Data JPA

이번 글에서는 제가 Spring Data JPA에 기여하기 위해 겪은 과정을 소개합니다.Issue 찾기어느 오픈 소스던, Issue는 있기 마련입니다. 완벽한 소프트웨어는 없으니까요!우선 기여할 오픈 소스 레포지토리를 찾아봅시다.어떤 오픈 소스에 Issue를 선정할 것 인지는 우선 본인이 자주 쓰는 오픈 소스이며, 익숙한 프로그래밍 언어를 사용할수록 이슈를 해결하기 좋을 것입니다. 저는 Spring Data JPA에서 찾아보았습니다.Spring Data JPA는 Spring 프레임워크에서 JPA(Java Persistence API) 기반의 데이터 접근을 더 간단하고 효율적으로 구현하기 위한 라이브러리입니다. ORM(Object Relational Mapping)을 지원하며, 데이터베이스와의 상호작용을 ..

Development/Diary 2024.11.21

[Diary] Elastic Search로 100만 데이터 검색 속도 향상시키기

이 글에서는 상품 서비스에 CQRS 패턴을 적용하고, Query를 위해 Elasticsearch를 적용한 것을 다룹니다.문제 상황: RDBMS의 Full Scan 동작으로 인한 상품 검색 성능 저하기존의 상품 검색의 구현은 위와 같이 QueryDSL로 쿼리가 작성되어 있었습니다.주목해야 하는 코드는 containsIgnoreCase입니다. containsIgnoreCase 조건은 productName 필드 내에서 키워드를 위치와 상관없이 검색하므로 RDBMS에서는 일반적으로 앞에 와일드카드가 포함된 (% keyword%) 검색을 수행하게 됩니다. 이러한 검색은 인덱스를 사용할 수 없게 만들어, RDBMS가 테이블의 모든 productName을 평가해야 하기 때문에 전체 테이블 스캔을 하게 됩니다.실행 계..

Development/Diary 2024.11.12

[Diary] INSERT 동작에 동시성 문제 해결 일대기

이 글에서는 설문조사 웹 서비스 백엔드를 개발하면서 해결했던 INSERT 동작에 동시성 문제를 해결하는 과정을 소개합니다.문제 파악: 의도치 않은 동일 설문조사 생성 방지설문조사 생성 시 포인트가 필요하기 때문에 불필요한 중복 생성은 사용자 경험에 악영향을 미칠 수 있습니다.예를 들어, 동일 사용자가 동일한 설문조사 요청을 여러 개 보낼 경우를 생각해 보면 사용자가 설문조사를 생성하는 버튼을 여러 번 클릭할 수 있고, 이는 네트워크 지연으로 인해 응답이 늦어질 때 더 흔하게 발생할 수 있습니다.따라서 중복 생성이 발생하지 않도록 효과적인 동시성 제어가 필요했습니다. 이를 해결하지 않으면 사용자에게 의도치 않은 포인트 소모 및 중복 데이터 생성 문제가 발생할 위험이 있었습니다.대안 1: 비관적 락을 사용해..

Development/Diary 2024.11.06

[PS][PCCP 기출문제] 3번 / 충돌위험 찾기 java 풀이 (+조건문 없음, 64 lines)

코딩테스트 연습 - [PCCP 기출문제] 3번 / 충돌위험 찾기 | 프로그래머스 스쿨 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr처음 문제 풀이대충 중간에 하다가 영 아닌 것 같아서 포기한 코드import java.util.*;class Solution { public int solution(int[][] points, int[][] routes) { int answer = 0; Queue queue = new ArrayDeque(); for (int [] route : routes) { Point point = new Po..

Development/PS 2024.11.02