전체 글

전체 글

    [네트워크 원리] 웹 브라우저가 메시지를 만들어 서버에 보내는 과정 (1)

    이 글은 성공과 실패를 결정하는 1%의 네트워크 원리라는 도서를 읽고 학습한 내용을 정리한 글입니다. 들어가며 브라우저에 접속해서 url을 입력하고 검색했을 때, 어떻게 원하는 결과가 화면에 보이는 걸까? 이번 포스팅에서는 브라우저에 URL을 입력한 순간부터 DNS 서버를 통해 IP를 조회하는 과정에 대해 알아보려고 한다. 요약 먼저 이 주제의 전체 포스팅에서 다룰 내용을 전반적으로 요약해보면 다음과 같다. 브라우저에 URL을 입력하면, 그 URL을 해독하는 곳부터 브라우저의 동작이 시작된다. 이는 URL을 해독하여 HTTP Request 메시지를 작성하는 과정을 의미한다. 작성된 HTTP 리퀘스트 메시지를 OS를 통해 웹 서버에 송신해야하는데, 이 때 메시지를 넘기기 위해서는 상대의 IP 주소를 OS에..

    [알고리즘] 정렬 알고리즘

    대표적인 정렬 알고리즘 6가지를 요약 정리해보자. 이 글은 요약정리용이므로, 자세한 글은 참고 자료를 통해 이미지와 함께 작성된 글을 확인할 수 있다. Selection Sort (선택 정렬) n번의 비교과정이 필요하다. 최악의 경우 O(n)의 시간복잡도를 갖는다. 정렬 방법 1. 각 루프마다 최대 원소를 찾는다. 2. 최대 원소와 맨 오른쪽 원소를 교환한다. 3. 맨 오른쪽 원소를 제외한다. 4. 하나의 원소만 남을 때까지 1~3과정을 반복한다. Bubble Sort (버블 정렬) 정렬 방법 1. 가장 왼쪽부터 서로 인접한 두 원소를 검사하여 정렬한다. 2. 인접한 2개의 원소를 비교해 크기가 큰 값을 오른쪽으로 옮긴다. 3. 한 번의 루프가 끝나면, 가장 큰 값을 제외하고 1~2과정을 수행한다. In..

    [자료구조] 힙(heap)이란

    힙(heap) 자료구조란? 완전 이진 트리를 기본으로 한 자료구조로서, 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안되었다. 여기서 완전 이진 트리란, 마지막 레벨을 제외한 모든 레벨의 node가 완전히 채워져 있으며 마지막 레벨의 노드들은 가능한 한 왼쪽부터 채워져 있는 구조를 말한다. 완전 이진 트리에 대해서는 이 글을 참고하면 좋을 것 같다. 힙의 종류 힙의 종류에는 두가지가 있다. 부모 노드의 값이 자식 노드의 값보다 항상 큰 힙을 최대 힙(max heap), 부모 노드의 값이 자식 노드의 값보다 항상 작은 힙을 최소 힙(min heap)이라고 한다. 값의 대소 관계는 부모 노드와 자식 노드 간에만 성립하고, 형제 노드 간에는 성립하지 않는다는 특징을 갖는다. 힙의 구현 힙을 저장하는..

    HTTP Status 301과 302는 어떻게 다를까?

    301 Moved Permanently 301 redirection은 검색 엔진과 사용자에게 페이지가 영구적으로 이동했음을 알리고 올바른 페이지로 보내졌는지 확인하는 상태 코드이다. 즉, 요청한 리소스가 Location 헤더에 주어진 URL로 완전히 옮겨졌음을 나타낸다. 사용자는 이전 페이지를 대체한 새 페이지로 redirection 된다. 301을 활용하면 기존 URL에 대한 모든 SEO 값과 링크 리소스가 새 URL로 이전된다. 이는 검색엔진 최적화의 관점에서 "the link-juice is sent to the new URL"(원래의 콘텐츠가 새로운 URL로 아예 옮겨졌다)를 의미한다. 요청 GET /index.php HTTP/1.1 Host: www.example.org 응답 HTTP/1.1 3..

    트랜잭션과 @Transactional

    이 글은 망나니 개발자님의 [Spring] 트랜잭션에 대한 이해와 Spring이 제공하는 Transaction 핵심 기술을 읽고 정리한 글입니다. 트랜잭션이란? 트랜잭션은 더 이상 쪼갤 수 없는 작업의 최소 단위를 의미한다. 즉, 여러 작업을 진행하다가 문제가 생겼을 경우 롤백하기 위해 트랜잭션을 단위로서 사용할 수 있다. 트랜잭션에는 commit, rollback 두 가지의 경우가 존재한다. 모두 성공하여 commit 되거나, 하나라도 실패하면 rollback 되는 것이다. Spring에서 제공하는 Transaction 기능 Spring은 트랜잭션과 관련된 핵심 기술을 3가지 제공한다. 1. 트랜잭션 동기화 2. 트랜잭션 추상화 3. 트랜잭션 분리 1. 트랜잭션 동기화 개발자들이 JDBC의 모든 커넥션..

    @Controller와 @RestController의 요청부터 응답까지

    @Controller일 때의 요청부터 응답까지 동작 과정 @RestController의 요청부터 응답까지 동작 과정 RestController의 경우에는 Model에서 null을 반환하고, Model이 null인 경우에는 요청이 들어온 View를 그대로 사용한다. 참고 자료 https://mangkyu.tistory.com/m/49 https://wckhg89.github.io/archivers/understanding_jackson https://tecoble.techcourse.co.kr/post/2021-06-25-dispatcherservlet-part-1/ https://tecoble.techcourse.co.kr/post/2021-07-15-dispatcherservlet-part-2/

    CI/CD란?

    CI (Continuous Integration) 지속적 통합은 구성원들이 작업한 코드를 통합하는 것을 의미한다. 예를 들어 Git과 같은 형상 관리 시스템에 구성원들로부터 approve된 소스코드들을 정기적으로 통합하는 것을 CI라고 하고, 이를 시행해주는 도구를 CI tool이라고 한다. CI 시스템을 구축하지 않은 경우 개발된 소스코드를 형상관리 서버에 커밋하면 별도의 품질관리를 거치지 않고, 막바지에 통합하여 테스트를 진행하게 된다. 하지만 CI 시스템을 구축하면 CI 서버는 형상관리 서버의 통합된 소스코드를 테스트하고, 코드 스멜이 없는지 Code Inspection을 수행하는 등 지속적으로 코드의 결함 여부를 검증할 수 있다. ex. Jenkins, Github Actions CD (Conti..

    [Spring Data JPA] 연관관계 편의 메서드

    연관관계 편의 메서드 양방향 연관관계를 맺을 때에는, 양쪽 모두 관계를 맺어주어야한다. 사실 JPA의 입장에서 보았을 때에는 외래키 관리자(연관관계의 주인) 쪽에만 관계를 맺어준다면 정상적으로 양 쪽 모두에서 조회가 가능하다. Team team1 = new Team("Team1", "민정팀"); em.persist(team1); Member member1 = new Member("Member1","민정"); member1.setTeam(team1); // 연관관계 설정 member1 -> team1 하지만 객체까지 고려한다면, 양쪽 다 관계를 맺어야한다. Team team1 = new Team("Team1", "민정팀"); em.persist(team1); Member member1 = new Membe..