hashCode를 구현할 때 31 숫자를 많이 사용한다. 그래서 그 이유에 대해서 찾아보았다. 홀수인 소수이다 첫번째로 31은 소수이기 때문에 사용된다. 소수인 경우에는 값을 곱하였을 때 더 분산이 잘 된다. 만약 소수가 아닌 경우(다른 수로도 배수가 만들어지는 경우)에 충돌이 발생하기 쉽기 때문이다. 짝수로 해시값이 나오는 경우에는 홀수 번째 자리를 효율적으로 사용하지 못한다. 따라서 소수를 사용해서 충돌을 최대한 방지하는 것이다. 쉬프트 연산을 사용할 수 있다 X * 31은 쉬프트 연산과 뺄셈 연산으로 표현할 수 있다. X * 31 X * (32 - 1) X * 32 - X X
웹 애플리케이션 아키텍처의 정의 애플리케이션 구성 요소, 미들웨어 시스템, 사용자 인터페이스, 데이터베이스 간의 상호 작용에 대한 레이아웃. 상호 작용을 통해 응용 프로그램이 동시에 함께 작동할 수 있음. 검색 사이트에 검색을 하고 결과의 링크를 누르면 클라이언트에서 서버로 요청이 간다. 그러면 서버는 요청에 대한 응답을 클라이언트에게 보낸다. 이런 식으로 간단하게 웹 애플리케이션은 상호 작용을 한다. 웹 애플리케이션 아키텍처의 구조 DNS DNS는 Domain Name System의 두문자어이다. DNS를 통해 도메인 이름으로 IP 주소를 알 수 있다. Load Balancer Load Balancer는 수평적 확장을 처리한다. 그림의 가운데 있는 Web app servers를 보면 알 수 있듯이 일반..
Builder 패턴? Builder 패턴은 생성 패턴(creational pattern)의 한 종류이다. 해당 패턴은 복잡한 객체를 생성하는데 도움을 준다. Lombok 빌더 Lombok에서는 @Builder라는 어노테이션을 통해서 빌더를 지원해준다. Book 클래스는 title, price 2개의 필드만 가지는 간단한 클래스이다. 이 클래스에 @Builder 어노테이션을 적용했을 때, 어떻게 빌더 패턴이 적용되는지 확인하겠다. public class Book { String title; Integer price; Book(String title, Integer price) { this.title = title; this.price = price; } public static Book.BookBuilde..
브라우저 주소창에 주소를 입력하면 브라우저는 HTTP GET 요청을 주소에 해당하는 서버로 전송한다. 프론트엔드가 있는 웹 서비스라면 HTML 파일을 보내준다. 받은 HTML파일은 다음과 같은 두 단계를 거쳐 HTML 파일을 브라우저에 보여준다. 1. 파싱 2. 렌더링 파싱 파싱은 렌더링의 전처리 단계이다. 파싱 단계에서는 다음과 같은 일을 한다. 1. HTML을 트리 형태인 DOM 트리로 변환 2. IMAGE, CSS, SCRIPT와 같은 리소스 다운로드 3. CSS는 CSSOM 트리로 변환 4. 자바스크립트를 인터프리트, 컴파일, 파싱 및 실행 렌더링 파싱 후 렌더링 단계를 거친다. 렌더링은 다음과 같은 일을 한다. 1. 내용인 DOM 트리와 디자인인 CSSOM 트리를 합쳐 렌더 트리 생성 2. 노드..
로그 레벨은 로그 메시지에 포함된 메시지의 중요성과 긴급성에 대한 대략적인 정보라고 할 수 있다. 치명적인 정도에 따른 순서는 다음과 같다. FATAL ERROR WARN INFO DEBUG TRACE FATAL 응용 프로그램의 중요한 비즈니스 기능 중 하나가 더 이상 작동하지 않는 상태에 진입했을 때 혹은 전체 프로그램이 비즈니스 기능을 수행하지 않을 때 알려주는 로그 수준이다. 데이터베이스와 같은 중요한 저장소에 연결할 수 없는 경우 이에 해당된다. ERROR 응용 프로그램이 하나 이상의 기능이 제대로 작동않아 일부 기능이 올바르지 않게 작동하지 않을 때 사용한다. WARN 예기치 않은 일이 발생했음을 나타내는 로그 레벨이지만, 응용 프로그램이 실패했다는 것을 의미하지는 않는다. 예기치 않은 상황에서..
REST는 Representational State Transfer의 약자로 아키텍처 스타일이다. 아키텍처 스타일은 반복되는 문제 상황을 해결하는 도구이다. 이와 유사한 말로 아키텍처 패턴이 있는데 이는 반복되는 아키텍처 디자인을 의미한다. REST는 웹 서비스에서 자주 사용되는 HTTP 위에서 느슨하게 결합되는 애플리케이션 설계를 위한 스타일이다. REST 제약 조건 REST 아키텍처는 6가지 제약조건으로 구성된다. 1. Uniform Interface 2. Client-Server 3. Stateless 4. Casheable 5. Layered System 6. Code on demand (선택) 이 제약조건을 따르는 API를 RESTful API라고 한다. Uniform Interface 인터페이..
JSON은 속성-값의 쌍으로 오브젝트를 표현하는 문자열이다. 오브젝트는 메모리에 할당된 일종의 데이터이다. JSON에는 Javascript라는 말이 있는데 자바스크립트 언어로부터 파생되어 자바스크립트의 오브젝트를 생성하는 형식과 같아 이런 이름이 붙여졌다. https://sdardew-valley.tistory.com/entry/TIL-%EC%A7%81%EB%A0%AC%ED%99%94%EB%9E%80 [TIL] 직렬화란? 공부를 하는 도중에 직렬화란 말이 많이 나와서 정리해본다. 🌱 직렬화(Serialization)? 메모리에 있는 객체를 바이트 스트림으로 바꾸는 것이다. 🌱 직렬화를 하는 이유? 디스크에 저장을 하거나 sdardew-valley.tistory.com 위의 글을 보면 직렬화와 역직렬화라는..
개발을 하다보면 프론트엔드와 백엔드가 구분되어있는 것을 확인할 수 있다. 이를 Decoupled Architecture이라고한다. Decoupled Architecture를 알아보기 전에 전통적인 웹사이트 아키텍처를 이해해야 한다. 전통적인 아키텍처 - Monolithic Architecture Monolithic Architecture의 구조는 아래와 같다. 이 구조는 많은 기능이 동일한 코드베이스 내에 있다. 이 구조에서는 동일한 코드베이스 내에 있는 기능을 통해서 작업을 처리하게 된다. 코드베이스란? 특정 소프트웨어 시스템, 응용 소프트웨어, 소프트웨어 구성 요소를 빌드하기 위해 사용되는 소스 코드의 모임 따라서 이런 단일 소프트웨어는 백엔드 로직과 웹 사이트 프론트엔드 렌더링까지 모두 담당하게 된..
싱글톤 패턴 싱글톤 패턴을 따르는 클래스는, 생성자가 여러번 호출되어도 실제로 생성되는 객체는 하나이고, 생성된 하나의 객체가 호출되는 패턴이다. 파이썬의 모듈은 싱글톤이고 자바에서는 생성자를 private으로 선언하여 구현할 수 있다. class Singleton { private static Singleton instance; private Singleton(){ } public static Singleton getInstance(){ if(instance=null){ instance=new Singleton(); } return instance; } public void call() { System.out.println("싱글톤 객체 호출"); } } 자바에서 구현한 싱글톤 패턴의 클래스이다. 특징..
HTTP 메시지 HTTP에서 교환하는 정보 리퀘스트 메시지와 리스폰스 메시지가 있음 여러 줄의 텍스트 데이터로 구성 메시지 헤더와 메시지 바디로 구성 개행문자로 헤더와 바디를 구분 (개행문자는 CRLF를 사용) 바디가 없을 수도 있음 💡 CRLF CR과 LF의 조합 CR(\r): Carriage Return LF(\n): Line Feed 메시지 헤더 리퀘스트 메시지 헤더 리퀘스트 라인 리퀘스트 헤더 필드 일반 헤더 필드 엔티티 헤더 필드 etc. 리스폰스 메시지 헤더 상태 라인 리스폰스 헤더 필드 일반 헤더 필드 엔티티 헤더 필드 etc. 리퀘스트 라인 리퀘스트에 사용하는 메서드 리퀘스트 URI 사용하는 HTTP 버전 상태 라인 리스폰스 결과의 상태 코드 & 설명 사용하는 HTTP 버전 헤더 필드 리퀘..
- Total
- Today
- Yesterday
- pm.test
- 주생성자
- Basic Type
- 2차 인터뷰
- downTo
- python3
- git
- 네이버 2022 공채
- solidity
- java
- 코틀린
- 1차 인터뷰
- Kotlin
- Python
- postman
- Squash and merge
- squash merge
- graphql
- mysql
- postman tests
- Kotlin In Action
- postman collection
- 코딩테스트
- 확장 함수
- go 특징
- string
- DGS Framework
- github
- pm.expect
- hashcode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |