분류 전체보기 141

TCP/IP 흐름제어 & 혼잡제어, TCP의 신뢰성 보장

💡 일반적으로 TCP는 3-way-handshaking과 흐름제어, 혼잡제어를 통해 신뢰성을 보장한다. 네트워크 통신 과정 도중에는 네트워크 혼잡성 및 receiver의 overload 등의 사유로 데이터가 손실되거나, 전달 순서가 바뀌는 등의 문제가 발생할 수 있다. → 이런 문제를 해결하고, 통신의 신뢰성을 보장하기 위해 TCP/IP에서 사용하는 것이 흐름제어와 혼잡제어이다. 💡 이같이 흐름제어는 속도를 일치시키는 서비스이다. → 수신하는 애플리케이션이 읽는 속도와, 송신자가 전송하는 속도를 같게 한다. ※ TCP 버퍼 더보기 전송 및 수신 전 TCP 세그먼트를 보관하는 곳이다. 송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을..

CS/Network 2023.02.12

원티드 프리온보딩 백엔드 챌린지 1주차 회고

원티드에서 주관하는 [프리온보딩 - 백엔드 챌린지]에 참여하고 있다. 주제는 'MySQL 잘 사용하기'이다. 강의 내용을 아마 올리면 안 되는 걸로 알아서, 올리진 못하겠고... 그래서 그냥 백엔드 챌린지에 대한 내 후기만 올릴 예정이다. 사전 미션은 키워드와 주제를 주고, 그것을 공부해 PR을 날리는 것이었다. 주제는 크게 4가지였고, 그것이 곧 백엔드 챌린지의 전반적인 내용이라고 한다. 관계형 데이터베이스와 비관계형 데이터베이스의 장단점 비교 트랜잭션이란 무엇인가? MySQL에서 Join의 역할 & 다양한 Join 방식 MySQL에서 인덱스란? 특히 전에 트랜잭션이랑, 격리 수준, 인덱스를 정리한 적이 있었는데, 이게 실무에 중요한 내용인지 몰랐었다. (특히 격리 수준 정리할 때 뇌 녹았었음;; 지금..

생각들 2023.02.12

CRUD를 분석해보자 (2) - 게시글 수정/삭제/조회 API

1편 게시글 생성에 이어... ✔️ 게시글 수정 / 조회 먼저 Controller에 추가하자. [PostsApiController] @RequiredArgsConstructor // 1 @RestController public class PostsApiController { private final PostsService postsService; // ... @PutMapping("/api/v1/posts/{id}") public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto postsUpdateRequestDto) { return postsService.update(id, postsUpdateRequestDto); } @Ge..

프로젝트 2023.02.11

CRUD를 분석해보자 (1) - 게시글 생성 API

이 포스팅을 쓴 목적은 DTO의 구조와 API 호출을 파악하기 위함입니다. (넘나리 어려움) 예전에 했던 건데 왜 봐도봐도 새롭지;;; (익숙해 질 때까지 반복만이 살 길이다.) 이번 시리즈의 목표는 기본적인 게시판 CRUD 동작 과정을 완벽히(?) 이해하는 것입니다! ✔️ 요구사항 분석 게시판 기능 게시글 조회 게시글 등록 게시글 수정 게시글 삭제 ✔️ 게시글 등록 1. domain 패키지를 만든다. 도메인이란, 게시글, 댓글, 회원, 정산, 결제 등 소프트웨어에 대한 요구사항 혹은 문제 영역이다. 2. domian 패키지에 posts 패키지와 Post 클래스를 만든다. 이렇게 패키지 구조가 나옵니다. 저는 저렇게 계층 구조로 나타내는 게 편하더라구요! src/main/java/com/testbook/..

프로젝트 2023.02.11

[Java] 예외 처리(Exception Handling)에 관하여

이제야 정리하는... 글로만 읽어선 머릿속에 안 들어온다. 시간이 오래 걸리지만, 그래도 글로 써야겠다는 생각이 든다. ✔️ 예외 처리(Exception Handling) 예외처리란, 프로그램 실행 흐름 상 오류가 발생했을 때 그 오류를 대처하는 방법이다. 💡 프로그램 오류 프로그램 실행 중 어떤 원인에 의해 프로그램이 해당 상황에 대처하지 못할 경우, 비정상적으로 종료되거나 에러 팝업창이 뜨는 경우이다. ✔️ 발생 시점에 따른 에러 분류 💡 Compile Error 컴파일 시점에서 발생하는 에러로, 소스코드를 컴파일러가 컴파일 하는 시점에서 소스의 오타나 잘못된 구문, 자료형 체크 등 검사를 수행하는데 발생하는 에러이다. 이 시점에서 발생하는 문제들은 수정 후 컴파일을 성공적으로 마칠 경우 클래스 파일..

CS/Java (CS) 2023.02.10

[Spring] 서블릿 필터 & 핸들러 인터셉터

오늘도 역시 기본에 대한 내용이다. 기본 중의 기본인 내용이지만... 이제야 정리한다. ✔️ 필터(Filter) / 인터셉터(Interceptor) / AOP 스프링에서 요청이 Controller로 들어오기 전에 처리해야 하는 작업이 있다. 대표적으로 인증 / 인가, XSS 방어, 데이터 압축, 인코딩 등이 있다. 💡 이러한 작업들을 공통 관심사로 보고, 분리하는 것이 효율적이다. → 이때 사용할 수 있는 것이 필터(Filter)와 인터셉터(Interceptor), Spring AOP이다. 이번 포스팅은 닮은 듯 다른 Filter와 Interceptor에 대한 내용이다. 💡 Filter와 Interceptor, AOP는 공통적으로, 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있다는 공통점이 있다...

Spring/그 외 2023.02.08

[JPA] OSIV란?

모든 출처는 김영한 개발자님 [자바 ORM 표준 JPA 프로그래밍] 입니다. 예전에 정리한 적 있었는데, 당최 이해가 가야말이지... 그래서 결국 또다시 정리한다;;; (파도파도 끝이 없는 코딩의 세계) ✔️ OSIV란? OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻이다. 영속성 컨텍스트가 살아있으면, 엔티티는 영속 상태로 유지된다. 따라서 View에서도 지연 로딩을 사용할 수 있다. ※ 영속성 컨텍스트(persistence context) : 엔티티를 영구 저장하는 환경 ※ 영속성 컨텍스트에 엔티티를 저장하면, 이 엔티티는 언제 데이터베이스에 저장될까? → JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영한다. ..

Spring/JPA 2023.02.07

[JPA] Querydsl 찍먹해보기

Querydsl에 들어가기 전... 먼저 ✔️ JPQL이란? JPQL(Java Persistence Query Language)은 엔티티 객체를 조회하는 객체지향 쿼리다. → JPQL을 한마디로 정의하면 객체 지향 SQL. @Query 어노테이션 이용. 문법은 SQL과 비슷하고, SQL이 제공하는 기능을 유사하게 지원한다. JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공한다. JPQL은 SQL을 추상화하기 때문에 특정 데이터베이스에 의존하지 않는다. 데이터베이스 방언(Dialect)만 변경하면, JPQL을 수정하지 않아도 자연스럽게 데이터베이스를 변경할 수 있다. SQL보다 간결하다. SQL과 문법 유사, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ..

Spring/JPA 2023.02.06

[플로이드 와샬] 프로그래머스 - 배달 (자바)

플로이드 와샬 문제 기록용. 플로이드 와샬 : 정점과 정점 사이의 최소거리를 구하는 알고리즘 내가 보려고 씀. 문제 링크 풀이 출처 (설명 잘 돼있음) 풀이 import java.util.*; class Solution { public int solution(int N, int[][] road, int K) { int answer = 0; int[][] map = new int[N + 1][N + 1]; //모든 map값의 INF값을 넣는다.(플로이드 와샬 쓰기위해) map[정점][정점]은 0으로초기화 for(int i = 1; i < map.length; i++) { for(int j = 1; j < map[1].length; j++) { if(i == j) continue; map[i][j] = 50..

[BFS] 프로그래머스 - 가장 먼 노드 (자바)

시작점 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return. BFS로 푸는 문제. 내가 까먹을까봐 기록함. 문제 링크 풀이 출처 (설명 잘 돼있음. 문제는 내 이해력;;) 풀이 import java.util.*; class Solution { public int solution(int n, int[][] edge) { int answer = 0; ArrayList graph = new ArrayList(); int[] distance = new int[n + 1]; boolean[] visited = new boolean[n + 1]; for(int i = 0; i