[thymeleaf] < > 이스케이프(escape) 해제 (그대로 출력) 스프링에서 thymelef의 th:text 와 [[${..}]] 속성은 자동으로 이스케이프를 지원한다. 이스케이프란 서버에서 데이터를 보냈을때 -> 이런식으로 변환해 주는 것을 말한다. 이를 그대로 태그로 출력(Unescape)하고 싶다면 utext 또는 [(${..})] 구문을 사용하면 된다. [[${data}]] [(${data})] - 예시 - th:text = th:text = Front-end/thymeleaf 2022.10.24
[JAVA] ConcurrentHashMap 흔히 사용되는 HashMap 클래스는 synchronized 키워드가 존재하지 않는다. 이는 성능은 좋지만, 멀티스레드 환경에서 thread-safe 하지 않음을 의미하며 멀티스레드 환경에서 사용하기는 부적합하다. thread-safe(스레드 안전) : 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻함. synchronized : 여러개의 스레드가 한개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근 할 수 없도록 막는 것을 뜻함. 이러한 문제로 인해 멀티스레드 환경에서 사용할 수 있도록 나온 클래스가 바로 ConcurrentHashMap 이.. JAVA/Data Structure 2022.10.23
[MQ] rabbitMQ rebbitMQ는 AMQP를 따르는 비동기 방식의 오픈소스 메시지 브로커로써 메시지 큐를 이용해 시스템의 부하를 줄이고 성능을 높이기 위한 용도로 사용한다. 메세지를 많은 사용자에게 전달하거나, 요청에 대한 처리 시간이 길 때, 요청을 다른 API에게 위임하고 빠른 응답을 할 때 주로 사용한다. 기존 애플리케이션의 문제점 - 서버가 응답할 때 까지 기다려야 한다. - db 장애시 애플리케이션에도 장애가 발생한다. - Real-Time 어플리케이션 구현이 어렵다 AMQP : 인스턴스가 메시지 데이터를 서로 교환하기 위한 프로토콜 rabbitQM 사용시 장점 - 애플리케이션의 의존성을 제거 할 수 있다. - 느슨하게 결합된 설계가 가능하다. - 데이터베이스 성능에 영향을 받지 않는다. - 애플리케이션 코드를.. Programming 2022.10.23
[디자인패턴] PRG (Post -> Redirect -> Get) pattern 이란? PRG 패턴은 POST > Redirect > Get 패턴으로 개발되는 것을 의미하며 웹 개발 시 사용되도록 권장하고 있는 디자인 패턴이다. PRG 패턴을 사용함으로써 사용자의 뒤로 가기, 새로고침으로 인한 중복 입력을 방지할 수 있다. 사용자가 상품 주문을 수행한 후 주문 완료 페이지에서 새로고침을 수행할 경우 마지막 요청인 POST 주문입력 요청이 수행되어, 사용자가 새로고침을 수행할 때마다 DB에 저장되는 문제가 발생하게 된다. 상품 주문 후 서버에서 주문 조회 페이지에 대한 Redirect를 수행하게 되어, 사용자가 주문 완료 페이지에서 새로고침을 하더라도 마지막 요청이 상품 조회 GET 요청이기 때문에 주문이 아닌 주문 조회 화면(GET)만 보여지게 된다. PRG 패턴 전용 전 @GetMappi.. JAVA/Design Pattern 2022.10.23
[Spring] Java 문자열 null, 빈값, 공백체크 방법 StringUtils.hasText 입력받은 문자열의 null 여부를 판단하기 위해 isEmpty를 사용하였는데, isEmpty 같은 경우 공백(" ")을 체크해 주지 못해 다른 함수를 찾아보게 되었다. 그렇게 해서 찾아낸 함수가 스프링에서 지원해 주는 StringUtils의 hasText이다. import org.springframework.util.StringUtils; StringUtils.hasText("문자열"); 주어진 문자열이 실제 텍스트 인지 검사한다. (공백 문자인지 아닌지 확인) @Test void testHasText() { Assert.assertFalse(StringUtils.hasText(" ")); //false Assert.assertFalse(StringUtils.hasText("")); //false Ass.. Spring 2022.10.19
[programming] 프로그래밍 언어 JAVA와 C#의 차이 JAVA와 C#은 둘다 자신만의 '속성'과 '기능'을 정의한 클래스를 가지고 상호작용하는 개념의 객체지향 언어(OOP)이다. 이런 두 객체지향 언어의 차이점을 알아보자. 1. JAVA와 C#의 관계 마이크로소프트(Microsoft)사에서 제작한 C#은 Java와 C++의 아쉬운 점을 극복하기 위해 닷넷 프레임워크의 한 부분으로 만들어졌다.하지만 C#이 Java의 여러 단점들을 극복했음에도 불구하고 이미 Java로 개발되어 있는 시스템들이 많고, 많은 Java 생태계가 조성되었기 때문에 점유율을 그다지 높이지는 못했다. 또한 Java를 대신할 수 있는 포지션에 파이썬(Python)과 같은 다른 언어들이 대안이 되고있는 상황이였다. C#을 통하여 다룰 수 있는 닷넷 플랫폼의 기술들 조차도 자바를 염두에 둔 .. Programming 2022.10.19
[DB] 인덱스(Index) 1. 인덱스(Index)란? 인덱스는 데이터베이스 테이블에 대한 검색 속도를 높여주는 자료구조이다. 인덱스는 책에 있는 목차라고 생각하면 쉽게 이해할 수 있다. 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적인 주소와 함께 저장되며, 컬럼의 값과 물리적 주소를 key, value 타입으로 저장한다. 인덱스 생성 컬럼을 where 조건으로 거는 등의 작업으로 인덱스를 태울 수 있다. 2. 인덱스(Index)의 장점과 단점 장점 - 테이블에 데이터들이 정렬이 되어있어서 검색하는 속도와 성능이 향상된다. - where, order by, join, max, min 등에서 자주 사용되는 컬럼에서 사용 시 매우 효과적이다. 단점 - 인덱스를 관리하기 위한 추가 .. DataBase 2022.10.14
[DB] RDB와 NoSQL 차이 ❄️ RDB (Relational Database) 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다. 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있다. 관계를 나타내기 위해 외래키(foreign key)를 사용한 테이블 간 Join이 가능하다는 것이 가장 큰 특징이다. ❄️ NoSQL Database Not Only SQL 의 약자로 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다. 데이터, 테이블 간의 관계를 정의하지 않으며, 정해진 스키마가 없어 보다 자유롭게 데이터를 저장할 수 있다. NoSQL은 빅데이터의 등장으로 인해 데이터의 일관성을 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 목표로 등장하였다... DataBase 2022.10.13
[CS] URL을 주소창에 입력했을 때 화면이 나오기까지의 과정 www.google.com을 주소창에 쳤을 때 화면이 나오기까지의 과정 (네트워크 관점) 1. 사용자가 브라우저에 URL 입력 2. 브라우저는 DNS를 통해 IP 주소를 찾는다. 3. client에서 HTTP request 메시지 => TCP/IP 패킷 생성 => server로 전송 4. server에서 HTTP request에 대한 HTTP response 메시지 => TCP/IP 패킷 생성 => client로 전송 5. 도착한 HTTP response message는 웹 브라우저에 의해 출력(렌더링) 웹 동작 방식 1. 유저가 브라우저에서 www.google.com(URL)을 입력하면 HTTP request message를 생성한다. 2. IP 주소를 알아야 전송할 수 있으므로 DNS lookup을 .. Programming/Operating System 2022.10.13
[OS] 멀티 프로세스(multi process)와 멀티 스레드(multi thread) 1. 멀티 프로세스(multi process) 멀티 프로세스란 2개 이상의 프로세스가 동시에 실행되는 것을 말한다. 동시에 라는 말은 동시성과 병렬성 두 가지를 의미한다. 동시성은 CPU core가 1개일 때, 여러 process를 짧은 시간동안 번갈아 가면서 연산을 하게 되는 시분할 시스템으로 실행되는 것이다. 병렬성은 CPU core가 여러개일 때, 각각의 core가 각각의 process를 연산함으로써 process가 동시에 실행되는 것이다. 동시성(Concurrency) VS 병렬성(Parallelism) 동시성 병렬성 Single core Multi core 동시에 실행되는 것 같아 보인다 실제로 동시에 여러 작업이 처리된다. 밑의 내용은 Single core의 동시성에 초점을 맞춘다. 멀티 프로.. Programming/Operating System 2022.10.13