반응형

Programming 375

Java 직렬화, 역직렬화 방법 Serializable interface

'자바 직렬화(Serialization)와 역직렬화(Deserialization)' 자바 시스템 내부에서 사용되는 객체(Object) 또는 데이터(Data)를 외부 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술을 '직렬화(Serialization)'라고 합니다. 반대로 바이트로 변환된 데이터를 원래대로 객체(Object)나 데이터(Data)로 변환하는 기술을 '역직렬화(Deserialization)'라고 합니다. 시스템적으로 본다면 JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술이 '직렬화'이며, 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM에 상주시키는 것을 '역..

Programming/Java 2021.12.13

Apache Log4j2 치명적 취약점, 해결방안은? CVE-2021-44228

Log4j2 치명적 취약점 'CVE-2021-44228' Log4j2는 아파치 소프트웨어 재단에서 자바(Java) 언어로 제작된 로깅 라이브러리로, 서버와 프로그램의 유지 관리를 목적으로 동작 상태를 기록으로 남기기 위해서 사용되는 기능입니다. 이번에 발견된 'CVE-2021-44228', Log4Shell 혹은 LogJam으로 명명된 취약점은 '마인크래프트'에서 처음 확인되었고, 자바(Java) 언어로 개발된 마인크래프트 버전에서 프로그래밍 코드로 이루어진 특정 채팅 메시지를 입력하면 대상 컴퓨터에서 원격으로 프로그램을 실행시킬 수 있는 것으로 나타났습니다. 이는 Log4j2 중에 존재하는 'JNDI(Java Naming and Directory Interface)' 인젝션 취약점을 악용한 것으로, 이..

Programming/Web 2021.12.12

자바 Java 상속, 부모 클래스와 자식 클래스(extends, super)

'Java 상속 (Inheritance)' Inheritance is the process by which a new class is created from another class. [자식 클래스] extends [부모 클래스] [하위 클래스] extends [상위 클래스] [파생된 클래스] extends [기반 클래스] [새로 작성하고자 하는 클래스] extends [상속 받고자하는 클래스] 자바에서 상속(Inheritance)이라는 개념은 부모 클래스(상위 클래스)와 자식 클래스(하위 클래스)의 관계에서 발생하며, '자식 클래스가 부모 클래스를 상속받는다.'라고 표현합니다. 상속을 받은 자식 클래스는 부모 클래스에 선언되어 있는 private 접근 제한을 갖는 필드와 메소드를메서드를 제외한 publ..

Programming/Java 2021.12.11

Querydsl DTO 조회하는 방법(Projection, @QueryProjection)

Projection 연산이란, - 한 Relation의 Attribute들의 부분 집합을 구성하는 연산자입니다. - 결과로 생성되는 Relation은 스키마에 명시된 Attribute들만 가집니다. - 결과 Relation은 기본 키가 아닌 Attribute에 대해서만 중복된 tuple들이 존재할 수 있습니다. => 쉽게 Projection이란, '테이블에서 원하는 컬럼만 뽑아서 조회하는 것'이라고 할 수 있습니다. * Relation 데이터를 원자 값으로 갖는 이차원 테이블 * Column = Attribute (프로젝션 대상이 하나일 때는 그 대상의 타입으로 반환되지만, 프로젝션 대상이 둘 이상일 때는 Tuple 또는 DTO로 변환할 수 있습니다.) Querydsl DTO로 조회하는 방법(Projec..

Linux 리눅스 파일 권한에 대한 이해와 권한 변경(chmod)

'다중 사용자 운영체제에서 권한이 필요한 이유' 주로 개인이 일반적으로 사용하는 '단일 사용자 운영체제'(Single-User Operation System, 대표적으로 Windows)와는 다르게 여러 사용자들에게 서비스를 제공해주는 서버에는 '다중 사용자 운영체제'(Multi-User Operation System)가 사용됩니다. 다중 사용자 운영체제의 대표적인 것이 유닉스(Unix) 운영체제와 유닉스에서 파생된 리눅스(Linux) 운영체제이며, 다중 사용자 운영제체는 여러 클라이언트 컴퓨터에서 하나의 서버 컴퓨터에 접속을 하는데 사용되기 때문에 파일 및 디렉터리의 접근 권한을 클라이언트 계정별로 엄격하게 관리되어야 한다는 특징이 있습니다. * 리눅스에서 디렉토리는 그 디렉터리가 포함하는 파일과 하위 ..

Programming/Linux 2021.12.09

Querydsl 개념 및 Gradle 환경설정 (gradle-7.x.x)

- Querydsl 개념 및 Gradle 환경설정 QUser user = QUser.user; List result = queryFactory .select(user) .from(user) .where(user.name.eq("Jan")) .fetch(); // SELECT * FROM user WHERE user.name = 'Jan' 'Querydsl 이란?' Querydsl은 HQL(Hibernate Query Language) 쿼리를 타입에 맞게 안전하게 생성 및 관리할 수 있게 해주는 프레임워크입니다. 쉽게 자바 코드를 기반으로 SQL 쿼리를 작성해준다고도 이야기할 수 있습니다. Querydsl을 사용하는 이유는 무엇일까요? SQL은 문자이기 때문에 type-check가 불가능하고, 실행해보기 ..

Java Optional Class 기본적인 이해

java.util.Optional (Java8부터 도입) Optional is primarily intended for use as a method return type where there is a clear need to represent "no result" and where using null is likely to cause errors. A variable whose type is Optional should never itself be null. it should always point to an Optional instance. (Java SE 9 & JDK 9 / Optional API Note 참조) 옵셔널은 주로 "결과 없음"을 나타낼 필요가 분명하고 null을 사용하면 오류가 발생할..

Programming/Java 2021.12.06

Java 조건문 - if문과 switch문의 핵심

'if문과 switch문의 핵심' if문 조건식과 문장을 포함하는 블럭'{ }'으로 구성되어 있습니다. 조건식의 연산 결과에 따라서 실행할 문장이 달라지기 때문에 프로그램의 실행 흐름을 변경할 수 있습니다. -1 블럭 내의 문장이 하나뿐일 경우 괄호 '{ }'를 생략할 수 있지만 생략하지 않고 쓰는 것이 좋습니다. 이유는 나중에 새로운 문장들이 추가되면 다시 '{ }' 괄호로 문장들을 감싸줘야 하는데, 이때 괄호를 추가하는 것을 잊어버리기 쉽기 때문입니다. -2 위 이미지의 왼쪽의 코드와 같이 상반된 관계에 있는 조건식을 'if - else' 문으로 바꿨을 때의 장점은 '하나의 조건식만 계산하면 된다'는 것입니다. -3 'if - else if - else' 문에서 마지막 'else' 블럭은 생략할 수 ..

Programming/Java 2021.12.06

Java 삼항식, 삼항연산자(Conditional Operator) 사용하는 방법

삼항연산자는 전체 프로그래밍에서 언어를 불문하고 많이 사용되는 코드입니다. 프로그래밍을 하다 보면 if else 분기문을 사용하게 되는 경우가 많은데, 이때 단순한 if 문을 사용할 경우 if else 문을 대신하여 심플한 분기문을 만드는데 특화된 방식입니다. // if else 문 int bigger; if (num1 > num2) { bigger = num1; } else { bigger = num2; } // 삼항연산자 int bigger = (num1 > num2) ? num1 : num2; 예를 들어 다음과 같이 두 수를 비교하는 간단한 if 문의 경우에 삼항연산자를 사용하게 되면 코드의 라인 수가 눈에 띄게 줄어들게 됩니다. 삼항연산자는 '(조건문) ? 참 : 거짓' 형식의 문법을 가지게 되는..

Programming/Java 2021.12.02

JPA와 Spring Data JPA 구분하기

해당 포스팅은 JPA에 대해 세부적으로 다루기보다는 전체적인 개념과 함께 JPA와 Spring Data JPA를 구분하는데 초점을 두었습니다. 참고 부탁드리겠습니다. - ORM(Object Relational Mapping) JPA에 대해 알아보기 전 더 큰 개념인 ORM 부터 간단하게 살펴보겠습니다. 객체 관계 매핑(Object Relational Mapping)이란? 객체와 관계형 데이터베이스의 데이터를 ORM 프레임워크가 중간에서 자동으로 매핑해주는 것을 말합니다. (대부분의 대중적인 언어에는 ORM 기술이 존재) 객체를 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계했을 때 객체 모델과 관계형 모델 간의 불일치가 존재하는데, 이때 ORM을 통해 객체 간의 관계를 바탕으로 SQ..

반응형