전체 글

전체 글

    [네트워크] TCP/UDP 이해하기

    Transport Layer(전송 계층) OSI 7계층에서 4번째 계층에 해당한다. 전송 계층은 End Point간 신뢰성있는 데이터 전송을 담당하는 계층이다. 여기서 신뢰성은 '데이터를 순차적, 안정적인 전달'을 의미하고 데이터 전송은 포트 번호에 해당하는 프로세스에 데이터를 전달하는 것을 의미한다. 만약 전송계층이 없다면? 데이터가 순차적으로 전송되는 것을 보장할 수 없다. 즉, 데이터의 유실이 발생할 수 있다. 원인은 송수신자 간의 데이터를 처리하는 속도의 차이이다. TCP TCP(Transmission Control Protocol)는 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜이다.(IP는 데이터를 보낼 때 순차 전송을 보장하지는 못한다.) Connection 연결을 통해 3 way-han..

    fetch API를 사용하여 코드 라인 수를 줄여보자

    fetch API ajax를 사용하는 여러 가지 방법 ajax를 사용하는 방법은 여러 가지가 있습니다. XMLHttpRequest 객체 fetch api jQuery axios 라이브러리 이번 포스팅에서는 1, 2번을 비교해보면서 fetch api의 장점을 알아보겠습니다. XMLHttpRequest 첫 번째로 가장 고전적인으로 사용하는 방식입니다. onreadystatechange을 사용했습니다. let xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { if (xhr.readyState === 4 && xhr.status === 200) { let response = JSON.parse(xhr.response); console.log(respon..

    [MySQL] 제약조건을 무시하고 FOREIGN KEY 삭제하기

    foreign key를 가진 테이블을 직접 쿼리로 삭제나 업데이트를 할 때 아래와 같은 에러가 발생한다. Cannot delete or update a parent row: a foreign key constraint fails 이는 사전에 foreign key에 얽힌 데이터들의 안전성을 보장하기 위한 일종의 안전장치이다. 하지만 다음과 같은 방법을 통해 강제로 테이블의 foreign key를 삭제하거나 업데이트할 수 있다. SET foreign_key_checks = 0; ALTER TABLE ... SET foreign_key_checks = 1; 0, 1을 스위칭해주면서 강제로 테이블을 삭제할 수 있다.

    [스프링부트] fetch api post 전송 방법

    로그인을 할 때 아이디, 비밀번호를 입력하고 로그인 버튼을 누른다. 서버에서는 입력된 아이디, 비밀번호를 데이터베이스와 비교하여 일치 여부를 판단한다. 이번 포스팅에서는 아이디, 비밀번호가 불일치일 때 페이지 전환 없이 ajax를 활용하여 처리해보고자 한다. fetch api에서 post 방식을 사용할 것이다. window.addEventListener('load', (e) => { const loginBtn = document.querySelector('.login-btn'); const form = document.querySelector('.form'); loginBtn.addEventListener('click', (e) => { e.preventDefault(); // 기본 폼 동작 막기 let..

    [네트워크] 프록시와 로드밸런서

    프록시(Proxy) 프록시는 '대리'의 개념으로 알아두자. 프록시 서버(Proxy Server) 클라이언트와 서버간의 중계 서버로, 통신을 대리 수행하는 서버이다. 프록시 서버는 캐시/보안/트래픽 분산 등의 장점을 가진다. 포워드 프록시(Forward Proxy) 일반적인 프록시를 의미한다. 가령 인터넷 속도를 향상시키기 위해 프록시 설정을 한다던지.. 해커가 개인정보를 빼돌리고 IP추적 방지를 위해 프록시를 설정했다던지 등등.. 이 모두 포워드 프록시를 의미한다. 포워드 프록시는 클라이언트와 인터넷 사이에 위치한다. 포워드 프록시의 특징 - (1) 캐싱 포워드 프록시의 특징의 첫 번째로 캐싱이 있다. 클라이언트가 요청한 내용을 캐싱해두어 여러가지 부가적인 효과를 나타내게 된다. 예를 들어 위의 사진에서..

    [AWS] 자주 쓰는 용어 정리

    Data Center 서버와 네트워크 자원을 제공하는 시설 IDC(Internet Data Center) CDC(Cloud Data Center) Region(리전) 리전은 Data Center가 구축된 도시나 국가 Availability Zone(가용 영역) 하나의 리전에 여러 개의 Data Center가 있으면 좋다. 하나의 Data Center가 장애가 발생했을 때, 또 다른 Data Center에서 서비스를 제공받을 수 있으니 무중단 서비스 이용이 가능하다. 이러한 Data Center들을 가용 영역이라 하며 Data Center가 많으면 많을수록 가용 영역이 높다라고 할 수 있다. Virtualization(가상화) 소프트웨어 기술로 가상의 머신을 생성하는 기술. 과거에는 하나의 물리적인 서버에..

    [스프링부트] @JsonNaming, @JsonProperty는 언제 사용할까?

    @JsonNaming, @JsonProperty의 사용법을 소개하기에 앞서 사용할 코드를 작성하도록 하자. json으로 넘어오는 값이 아래와 같다고 가정하자(post든 put이든 ..) { "my_name": "kevin", "my_age": 20, "my_country": "korea" } 자바 Entity는 다음과 같다고 가정하자. @Data public class Student { private String myName; private String myAge; private String myCountry; } 컨트롤러는 다음과 같다. @RestController @RequestMapping("/api") public class StudentController { public void post(@Re..

    [Javascript] ES6 async & await

    [Javascript] ES6 async & await

    안녕하세요. 이번 포스팅은 간단한 게임을 만들어보면서 async, await 개념을 알아보겠습니다. up & down 게임을 아시나요? 술자리에서 많이 했던 게임인데 수의 범위(1~100)을 정하고 주어진 기회 안에 수를 맞추는 게임이죠. 이 게임을 통해 async, await을 알아볼게요. 게임 조건은 다음과 같습니다. 1. 1 ~ 100까지의 수 중에서 랜덤으로 값을 뽑습니다. 2. 사용자는 10번의 기회가 주어지고 수를 입력합니다. 기회는 원하는대로 줘도 됩니다. 3. 사용자가 입력한 수보다 랜덤 값이 크면 'up'을 사용자에게 알려주고 반대면 'down'을 알려줍니다. 4. 10번의 기회를 모두 소진하거나 정답을 맞출 시 게임은 종료됩니다. 우선 1번의 게임 조건을 만족시키기 위해 1 ~ 100까..

    [스프링] IoC Container에 Bean 객체가 등록되는 방법 두 가지를 알아보자

    [스프링] IoC Container에 Bean 객체가 등록되는 방법 두 가지를 알아보자

    스프링 IoC 컨테이너와 여기에 Bean 객체를 등록하는 방법을 알아보겠습니다. 스프링 IoC 컨테이너 스프링에서는 객체를 생성하여 이를 담을 그릇이 필요한데 이러한 그릇을 컨테이너라고 합니다. 객체(부품)를 조립할 때 작은 객체부터 큰 객체 순으로 조립을 해나간다. 작은 객체끼리 결합 -> 더 큰 객체와 결합 -> ... 이런 순으로 부품 조립 순서라면 이 순서이다. 객체를 생성할 때는 일체형과 결합형이 있습니다. 일체형에서는 다음과 같은 순서입니다. A 객체를 만들 때 B를 만들고 B를 만들 때 C를 만들고 ... 이러한 과정입니다. 스프링에서는 객체를 결합형으로 만듭니다. 결합형에서는 순서는 다음과 같습니다. 객체가 생성되고 결합되는 순서는 D -> C -> B -> A 순으로 역순입니다. 이렇게 ..

    [스프링] DI(Dependency Injection) 의존성 주입에 대해 알아보자

    [스프링] DI(Dependency Injection) 의존성 주입에 대해 알아보자

    이번 포스팅은 DI에 대해 알아보겠습니다. 의존성(Dependency)은 어떤 하나의 대상이 다른 대상에 의존하는 것을 의미합니다. 예를 들어, A는 B라는 객체를 부품으로 갖고 있습니다. 즉, A, B 클래스는 Has a 상속 관계입니다. 그렇다면 DI를 해야하는 이유가 무엇일까요? DI를 하지 않으면 객체와 객체간의 결합력이 강하기 때문에 객체를 바꿔 끼우는 과정에서 많은 수정을 해야하는 번거로움이 있기 때문입니다. 이해를 위해 아래 예제를 보겠습니다. public class A { private B b; public A() { this.b = new B(); } public void printHello() { this.b.hello(); } } 위 코드와 같이 A 클래스에서 printHello 메서..