HTTP란? HTTP(Hyper Text Transfer Protocol)란 하이퍼텍스트 문서를 교환하기 위해 만들어진 protocol입니다. 웹상에서 네트워크 서버끼리 통신을 할 때 어떠한 형식으로 통신을 하자고 정해놓은 "통신 형식/구조"로 보면 됩니다. TCP/IP 방식과 UDP 방식을 이용하여 통신하고 있습니다. HTTP 통신 방식 기본적으로 HTTP 통신은 response와 request로 나뉘어져 있습니다. 클라이언트가 HTTP 요청을 서버로 보내는 것을 request라고 합니다. 그 후에 서버는 요청을 받아 결과를 응답합니다. 이 것을 response라고 합니다. 흐름을 자바와 스프링 프레임워크로 작성된 코드를 통해 확인해 봅시다. // 회원 가입 api @PostMapping public ..
InnoDB는 스토리지 엔진에서 가장 핵심적인 부분이다. 디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해 두는 공간이고 쓰기 작업을 지연시켜 일괄 작업으로 처리할 수 있게 해주는 버퍼 역할도 같이한다. 일반적인 애플리케이션에서는 INSERT, UPDATE 그리고 DELETE 처럼 데이터를 변경하는 쿼리는 데이터 파일의 이곳 저곳에 위치한 레코드를 변경하기 때문에 랜덤한 디스크 작업을 발생 시킨다. 하지만 버퍼 풀이 이를 모아서 처리하면 횟수를 줄일 수 있다. 버퍼 풀의 구조 InnoDB 스토리지 엔진은 버퍼 풀이라는 거대한 메모리 공간을 페이지 크기의 조각으로 쪼개어 InnoDB 스토리지 엔진이 데이터를 필요로 할 때 해당 데이터 페이지를 읽어서 각 조각에 저장한다. 버퍼 풀의 페이지 크기 조각을..
백엔드 서버에서는 JSON을 통해 클라이언트와 통신한다. 그렇다면 자바는 어떻게 객체의 데이터를 JSON 데이터로 바꿀 수 있을까? 어늘은 그 방법인 직렬화에 대해 알아볼 것이다. 그리고 그걸 역직렬화를 통해 자바 객체로 받아올 수 도 있습니다. 직렬화 / 역직렬화 자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터 변환하는 것을 말한다. 시스템 적으로는 JVM의 메모리에 힙 또는 스택에 존재하는 객체 데이터를 바이트 형태로 변환하여 직렬화 한다. 자바에서는 Serializable 인터페이스를 통해 직렬화를 하고 있다. 반대로 직렬화는 역으로 바이트 형태의 데이터를 객체 또는 자바 시스템의 데이터로 바꿔주는 것을 말한다. 마찬가..
자바는 동시성 문제를 위해 4가지 해결책을 갖고 있다. Syncronized 키워드 Concurrency 라이브러리 Atomic volatile 우리는 그 해결책인 4가지 키워드를 잡고 학습해볼 것이다. Synchronized 자바는 mult-thread 를 지원하는 언어이기 때문에 여러 thread가 자원을 공유하는 경우 RaceCondition이 발생하고 데이터 일관성을 지킬 수 없게되는 위험 요소가 존재합니다. 그렇기 때문에 항상 동기화를 통해 임계영역에서 안전하게 작업하는 동안 Lock을 걸어 문제를 줄여야 하는데 이 때 사용하는 키워드가 Synchronized이다. synchronized 키워드는 공유 자원에 대한 동시접근을 막아준다. 코드는 다음과 같이 사용하면 된다. 블록에 거는 방법 pub..
정확히 말하자면 자바는 Synchronous / blocking 방식을 지원하는 언어다. 그렇다면 Synchronous / blocking이란 무엇일까? 그리고 반대 되는 Asynchronous / non-blocking에 대해서도 알아보자 Synchronous / Blocking 먼저 각자의 뜻을 알아보면 Synchronize는 간단하게 두 개의 주체가 서로 동시에 수행하거나, 동시에 끝나거나 끝나는 동시에 시작하는 것을 말한다. 이를 쉽게 예로 들자면 이런 것이다. 한명의 직원이 있고 상사가 있다고 가정해보자 동기적으로 동기적인 직원은 상사에게 서류를 제출하고 상사가 일을 처리할 때 까지 계속 물어볼 것이다. 그리고 상사가 일처리를 끝내고 결과를 줘야만 직원은 다시 가서 하던 일을 할 수 있다. bl..
자바는 멀티 스레드 프로그래밍을 지원하는 언어이다. 그렇다 보니 아무 스레드가 와서 마음껏 자원을 읽고 쓰고가 가능하다면 클라이언트가 원하는 정보를 얻기 힘들 것이다. 그렇기 때문에 자바에서는 Lock을 걸어 공유 자원이 Thread-safe 하게 해준다. 그렇다면 자바에서는 어떻게 Lock을 걸 수 있을까? Monitor(모니터) 모니터는 고급 언어의 설계 구조물로서, 개발자의 코드를 상호배제 하게끔 만든 추상화된 데이터 형태이다. 세마포의 소유와 획득 과정을 모니터 자체 내에서 처리하기 때문에 코딩하기에 조금 더 편리하며 잘못된 코딩으로 인한 문제 발생이 세마포보다 덜 하다. 또한 모니터는 세마포의 block/wakeup과 유사한 wait/signal을 제공한다. 세마포는 리스트 형태로 사용하지만 모..
ordinal 메서드 대신 인스턴스 필드를 사용하라 대부분의 열거 타입 상수는 자연스럽게 하나의 정숫값에 대응한다. 그리고 ordinal은 몇 번째 위치인지 반환해주는 메서드이다. 하지만 이 메서드는 치명적인 단점이 존재한다. public enum BadOrdinal { SOLO, DUET, TRIO, QUARTET, QUINTET, SEXTET, SEPTET, OCTET, NONET, DECTET; public int numberOfMusician() { return ordinal() + 1; } } 동작은 하지만 유지보수에 정말 좋지 않은 코드이다. 상수 선언 순서를 바꾸는 순간 오동작하며 복합 4중주도 똑같은 8명이지만 이미 8중주 상수가 존재하기 때문에 추가할 수 없다. 해결책은 열거 타입 상수에..
Enum 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 사계절, 태양계의 항성 등이 좋은 예이다. 자세한 문법에 대한 사용 등은 설명을 생략할 것이다. 궁금하신 분들은 다음 블로그를 참고하시기 바란다. https://blog.naver.com/ilgolc/222474673407 Java_11일차(기선님) 열거체(Enumeration type) C언어와 C++에서는 열거체를 사용할 수 있지만, JDK 1.5 이전의 자바에서... blog.naver.com 자 그러면 열거 타입을 올바르게 사용할 수 있도록 다 같이 공부해보자 int 상수 대신 열거 타입을 사용하라 먼저 정수 열거 타입 패턴에 대해 알아볼 필요가 있다. 코드를 보자 public class Intege..
저번 시간에는 Generic을 사용하는 이유에 대해 자세하게 살펴보았다. 하지만 Generic은 너무 딱딱하다. 하나의 타입을 정의해놓으면 그 타입 외에는 어떠한 요소도 들어올 수 없다. 상속을 받더라도 마찬가지이다. 이러한 동작은 리스코프 치환원칙에 위배되는 설계이다. 상위 타입이 하는 일을 제대로 수행할 수 없기 때문이다. 자바는 이러한 문제에 대해서도 해결책을 갖고 있다. 한정적 와일드 카드 타입 Stack 클래스를 한 번 살펴보자 public class Stack { public Stack(); public void push(E e); public E pop(); public boolean isEmpty(); } 여기에 모든 원소를 스택에 넣는 메서드를 추가해보자 public void pushAl..
간략하게 영한님 MVC 2편에 대해 학습한 내용을 적을 예정이다. 오늘은 중요 포인트 중 리터럴 값 사용과 연산 속성 반복 조건부 주석에 대해 학습해보았다. 차근차근 하나 씩 살펴보자. 1. 리터럴 리터럴은 자바에서도 배웠을 것이다. 코드상에 고정된 값으로 상수랑은 좀 다른 의미로 존재한다. 20, 2, "Hello" 등이 리터럴이라고 할 수 있다. 사실 이러한 내용이 중요한 것은 아니다. 핵심은 리터럴은 항상 ''로 감싸야 하는데 이 때 타임리프는 번거로움을 덜어주고자 다음과 같은 상황엔 생략이 가능하다. 가능한 상황 : A-Z, a-z, 0-9, [], . , - , _ 이러한 경우에는 정상적으로 타임리프가 동작하지만 위와 같은 코드는 중간에 Blank가 존재하기 때문에 동작하지 않고 오류가난다. 만..
- Total
- Today
- Yesterday
- 자바
- DevOps
- thread
- 면접준비
- 프로그래밍
- MySQL
- 면접 준비
- docker
- IT
- Kotlin
- 개발자
- 면접
- CS
- Redis
- swarm
- 인터뷰
- 취업준비
- 개발
- java
- 게시판
- 취업
- 취준
- 코딩
- 백엔드
- 프로젝트
- Spring
- JPA
- 코드
- 동시성
- DB
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |