728x90

분류 전체보기 331

부동소수점 오차에 대하여

부동소수점 오차 코딩을 하다 보면 +, -, *, / 기호를 사용하여 사칙연산을 하게 된다. 이때 정수간의 사칙연산인데 부동소수점이 발생되는 경우가 발생한다. 오늘은 이 현상에 대해서 정리하고 이 글을 읽은 후에는 부동소수점이 발생하지 않을 것이다. 실행 결과는 어떻게 될까? System.out.println(0.1 + 1.1 == 1.2); System.out.println(0.1 + 1.1); 실행 결과 false 1.2000000000000002 false일 수도 있다는 생각이 들었다면 부동소수점에 대한 개념이 있는 사람이라 생각된다. 컴퓨터는 1과 0으로만 데이터를 표현한다. 정수의 경우 8은 1000 , 10은 1010으로 표현한다. 실수를 표현하는 방법은 정수에 비해 훨씬 복잡하다. 왜냐하면,..

CS지식 2022.08.23

Redis-cli 명령어 정리(List, Hash)

Hash 구조체 하나의 Class 인스턴스 를 저장하기에 적당한 Redis 구조체 Redis-cli에서 hmset, hget으로 저장, 조회가 가능하다. Person 클래스 class Person { int id; string name; string pw; int uniqueNumber; } 다음과 같이 person 인스턴스를 redis 에 저장하기 위해 hset(hmset) 을 이용한다 Person person = new Person { "id" = 1234, name = "tom", pw = "abcd5678", uniqueNumber = 56000 }; 127.0.0.1:6379> hmset user id 1234 name tom pw abcd5678 uniqueNumber 56000; OK 127..

Redis 2022.08.18

HashMap 사용 방법 및 예제

HashMap은 Map의 일종으로 key와 value의 쌍으로 이루어진 데이터를 보관합니다. HashMap은 다음과 같은 특징이 있습니다. null key와 null value를 모두 허용합니다. 내부적으로 데이터에 접근할 때 동기화를 보장하지 않습니다. 데이터의 순서를 보장하지 않습니다. 중복된 key값을 허용하진 않지만, 중복된 값은 갖을 수 있습니다. HashMap은 다음과 같은 API들을 제공합니다. 예제를 통해 어떻게 사용하는지 알아보겠습니다. put() putAll() get() remove() clear() isEmpty() keySet() values() containsKey() containsValue() replace() put() put()은 인자로 key와 value를 받습니다. 전..

JAVA 2022.08.16

ZonedDateTime과 LocalDateTime의 차이

이해하기 쉬운 Java 예제를 사용하여 LocalDateTime 을 ZonedDateTime 으로 또는 그 반대로 변환하는 방법을 배웁니다. LocalDateTime 의 인스턴스는 ISO-8601 달력 시스템에서 표준 시간대가 없는 날짜-시간(나노초 정밀도까지)을 나타냅니다. LocalDateTime 인스턴스는 로컬 타임라인의 한 지점을 나타냅니다 . 오프셋이나 시간대와 같은 추가 정보 없이는 유니버설 타임라인에서 순간을 나타낼 수 없습니다. ZonedDateTime 인스턴스는 유니버설 타임라인의 순간을 나타냅니다 . 날짜, 시간 및 지역 정보의 조합입니다. 1. LocalDateTime -> ZonedDateTime LocalDateTime에서 ZonedDateTime으로 변환하려면 지역 날짜-시간에 ..

JAVA 2022.08.05

리눅스 시간(타임존)을 한국 표준시(KST)로 변경

리눅스 시간(타임존)을 한국 표준시(KST)로 변경하기 현재 시간 확인 (현재 타임존) ~$# date Wed Oct 21 05:03:15 UTC 2020 현재 타임존 확인 ~$# ls -al /etc/localtime /etc/localtime -> /usr/share/zoneinfo/Etc/UTC 타임존을 한국 표준시(KST)로 변경 ~$# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime 변경된 타임존 확인 ~$# ls -al /etc/localtime /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul 현재 시간 확인 (변경된 타임존) ~$# date Wed Oct 21 14:03:43 KST 2020 http://w..

Linux 2022.08.04

리눅스 서버가 이상할 때, 로그 보는 곳

서버 운영을 하다 문제가 발생하면 제일 먼저 로그를 확인해보게 됩니다. 리눅스의 로그는 주로 /var/log 디렉토리에 저장 되게 됩니다. 각 파일 별로 어떤 로그가 저장 되는지 알아보도록 하겠습니다. 1. /var/log/messages 시스템에 문제가 생겼을 때 가장 먼저 찾아보는 로그 파일 입니다. syslog.conf 에서 로그를 남기지 않는 것으로 지정된 내용을 제외한 모든 항목이 기록 됩니다. 내용이 무지 많기 때문에 보통 grep 명령어와 함께 사용하여 문제를 파악 합니다. 2. /var/log/secure 사용자 접속 정보가 기록되는 파일 입니다. ssh, 텔넷 등으로 시스템에 접속된 내용이 기록되며, 점속 일시, 사용자 명, 접속한 시스템의 IP 등이 기록되게 됩니다. 시스템 해킹이 의심..

Linux 2022.07.28

INNER JOIN, LEFT JOIN, RIGHT JOIN의 차이

예제 테이블 mysql> select * from demo_people; name phone pid Mr brown 01225 708225 1 Miss Smith 01225 899360 2 Mr Pullen 01380 724040 3 mysql> select * from demo_property; pid spid selling 1 1 Old House Fram 3 2 The Willows 3 3 Tali Trees 3 4 the Melksham Florist 4 5 Dun Roamin 1. 기본 JOIN (= INNER JOIN) - 기본적으로 JOIN은 교집합이다. select name, phone, selling from demo_people join demo_property on demo_peopl..

Database 2022.07.17

QueryDSL 페이징 방법

QueryDSL 에서의 페이징 -> offset과 limit를 통해서 페이징을 할 수 있다. LIMIT 숫자 : 출력할 행의 수 OFFSET 숫자 : 몇번째 row부터 출력할 지. (1번째 row면 0) 조회 건수 제한 @Test public void paging1() { List result = queryFactory .selectFrom(member) .orderBy(member.username.desc()) .offset(1) //offset은 0부터 시작(zero index), 현재 코드에서는 1번부터 데이터를 가져오도록 하므로 맨 처음 데이터는 생략됨 .limit(2) //최대 2건 조회 .fetch(); assertThat(result.size()).isEqualTo(2); } 전체 데이터 수..

QueryDSL 2022.07.16

access token과 refresh token 의 차이(feat. JWT 인증)

access token과 refresh token을 설명하기 전에 token이란 무엇인지 왜 사용하는지에 대해서 먼저 알아보자. JWT(Json Web Token) jwt는 header와 payload, signature 세 파트로 구성되어 있으며 각파트는 점으로 구분되어 1111111111.2222222222.3333333333 header(적색).payload(청색).signature(녹색) 의 형태로 표현됩니다. header header에는 토큰의 타입과 암호화 알고리즘이 포함되어 있다. 타입은 jwt를 나타내고 있으며, 암호화 알고리즘은 SHA256, RSA와 같은 해시 알고리즘을 나타낸다. payload 토큰에 담을 claim 정보를 담고 있습니다. 저의 생각대로 쉽게 말하면 정보를 포함한 ke..

JWT 인증 2022.07.16

MySQL 랜섬웨어 후 대처법(Z_README_TO_RECOVER)

MySQL 랜섬웨어 때문에(Z_README_TO_RECOVER 라는 테이블만 남아있음, root 비번도 초기화), 비밀번호 초기화가 필요했다. ① 설정 > 시스템에서 Mysql80 시스템을 종료하거나 cmd를 관리자 권한으로 열어 >> net stop MySql80 ② mysql이 program Files에, Program Data에 모두 존재할텐데 Program Data의 MySQL 폴더를 선택해준다. Data 폴더까지 들어가 해당 경로를 복사한다. >> mysqld --datadir="C:\ProgramData\MySQL\MySQL Server 8.0\Data" --console --skip-grant-tables --shared-memory 이렇게 되면 sql에 패스워드 없이 접속 가능하다! ③ 그..

Database 2022.07.15
728x90