Recent Posts
-
[QueryDSL] 동적 쿼리 (BooleanExpression)
QueryDSL은 SQL자체를 자바 코드로 작성하기 때문에 TypeSafe하고 컴파일 시점에 오류를 발견할 수 있다는 장점이 존재한다. 더불어서 QueryDSL의 가장 큰 장점 중 하나는 "동적 쿼리 생성의 편리함"이다 QueryDSL에서 where절에 동적 쿼리를 생성하기 위해서는 "BooleanExpression"을 활용하면 된다 BooleanExpression BooleanExpression을 return하는 "동적 쿼리 전용 메소드"를 만들면 굉장히 편리하게 특정 조건에 따른 동적 쿼리를 작성할 수 있다 Integer ageUpper = 25; String userNameContains = "nus1"; List fetch = query.selectFrom(member) .where(member...
-
[QueryDSL] 프로젝션, DTO 조회
프로젝션 프로젝션이란 "Select절에 조회 대상을 지정"하는 것이다 대상 하나 조회대상이 하나라면 Return Type은 해당 조회 대상의 Type으로 정해진다 // Projection [Member] List fetch1 = query.select(member) .from(member) .where(member.age.goe(25)) .fetch(); // Projection [String] List fetch2 = query.select(member.username) .from(member) .where(member.age.goe(25)) .fetch(); // Projection [Integer] List fetch3 = query.select(member.age) .from(member) .wh..
-
[QueryDSL] Join & SubQuery
QueryDSL Join QueryDSL에서는 JPQL에서 지원하는 [InnerJoin, LeftOuterJoin]은 당연하게 사용할 수 있고 더해서 [RightOuterJoin]도 사용할 수 있다 추가적으로 on절과 더불어서 성능 최적화를 위한 FetchJoin도 활용할 수 있다 InnerJoin 첫번째 파라미터(Root Entity에 대한 조인 대상) 두번째 파라미터(조인 대상의 Alias) List fetch = query.selectFrom(member) .innerJoin(member.team, team) .where(member.age.goe(25).and(team.name.eq("Team-A"))) .fetch(); for (Member member : fetch) { System.out.p..
-
[QueryDSL] 정렬 & 페이징
정렬 QueryDSL에서의 정렬은 "orderBy()"메소드를 통해서 내부적으로 정렬 기준의 필드에 대해서 [asc(), desc()]를 통해서 정렬하면 된다 // 25살 이상 Member들에 대한 "나이 오름차순/이름 내림차순 정렬" List fetch = query.selectFrom(member) .where(member.age.goe(25)) .orderBy(member.age.asc(), member.username.desc()) .fetch(); 페이징 페이징은 "offset() & limit()"를 통해서 시작 지점/페이징 개수를 적절하게 조합해서 활용하면 된다 offset번째부터 limit개수의 페이징 처리를 한다는 의미이다 QueryDSL에서 offset의 가장 처음 기준은 "0"이다 P..
-
[QueryDSL] 기본적인 조회
JPAQueryFactory 기본적으로 QueryDSL을 통해서 query를 생성하기 위해서는 "JPAQueryFactory"로부터 쿼리를 생성해야 한다. 하지만 JPAQueryFactory가 필요한 모든 곳에서 JPAQueryFactory를 가져오는 것은 큰 낭비이고 JPAQueryFactory를 사용하기 위해서는 "EntityManager"도 필요하기 때문에 불편하다 >> JPAQueryFactory를 @Bean을 통해서 빈으로 등록해버리면 프로젝트 전역에서 편리하게 JPAQueryFactory를 사용할 수 있게 된다 @Configuration public class QueryDSLConfig { @PersistenceContext private EntityManager em; @Bean JPAQue..
-
[QueryDSL] QueryDSL 기본 설정
1) build.gradle 의존성 추가 dependencies { ... ... //Querydsl 추가 implementation 'com.querydsl:querydsl-jpa' annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jpa" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api" } querydsl-jpa = QueryDSL의 JPA 라이브러리 querydsl-apt = QueryDSL에서 사용할 "쿼리 타입(Q)"를 생성할 때 필요한 라이브러리 jakarta.anno..
-
[Spring Data JPA] Web Binding
Parameter로 Member의 id(PK)가 넘어오고 이를 통해서 멤버를 조회하는 일반적인 로직을 작성해보자 // Controller @RestController @RequiredArgsConstructor public class TestController { private final MemberService memberService; @GetMapping("/member") public Member getMember(@RequestParam Long id) { return memberService.findMember(id); } } // Service @Service @RequiredArgsConstructor @Transactional(readOnly = true) public class Memb..
-
[Spring Data JPA] 사용자 정의 Repository
일반적으로 Spring Data JPA를 활용하면 인터페이스만 정의하고 그에 대한 구현체는 정의하지 않는다 왜냐하면 Spring의 ProxyFactory에 의해서 정의한 인터페이스에 대한 "프록시"를 생성하고 이 프록시 내부적으로 실제 JpaRepository의 구현체인 "SimpleJpaRepository"를 호출하도록 설계되었기 때문이다 private final MemberRepository memberRepository; @Test @DisplayName("Spring Data JPA 인터페이스 프록시 확인") void proxyTest() { System.out.println(memberRepository.getClass()); assertThat(AopUtils.isAopProxy(memberR..
Popular Posts
-
[컴퓨터구조론] 2장 연습문제
[2.1] 클록 주기가 2ns인 CPU가 'ADD addr' 명령어를 인출하고 실행하는 데 걸리는 시간은 모두 몇 ns인가? "ADD addr" ## 인출 사이클 ## t(0) : PC -> MAR t(1) : M[MAR] -> MBR / PC + 1 -> PC t(2) : MBR -> IF ## 실행 사이클 ## t(0) : IR(addr) -> MAR t(1) : M[MAR] -> MBR t(2) : AC + MBR -> AC -> 총 6개의 CPU 클록 주기만큼의 시간 = 6 X 2ns = 12ns [2.2] 인터럽트 서비스 루틴을 수행하는 도중에 더 높은 우선순위를 가진 인터럽트 요구가 들어오더라도 그 루틴의 수행이 중단되지 않도록 하는 방법을 설명하라 ISR을 실행할 때, "인터럽트 불가능" 명..
-
[AI] 전통적 계획 수립 - PDDL
Planning (초기 상태 → 목표 상태)에 도달하기 위한 "Sequence Of Action"을 찾아내는 것 ※ 계획 수립 (초기 상태 → 목표 상태)에 도달하기 위한 "Sequence Of Action"을 찾기 위해서 필요한 여러가지 환경/요소 등을 정의하는 것 >> 이렇게 도출된 Solution Plan은 "Optimal"해야 한다 최소 비용으로 목표에 도달 전통적 계획 수립의 여러가지 가정들 1. Environment [AI] Agent Agent (Rational Agent) 1. 자신이 놓인 환경에 대해서 "센서"를 통해서 환경에 대한 상태를 "추정" (Sensor Value 획득) 환경이 현재 어떤 상태인가 그 환경 속에서 나는 어떤 상태인가 2. Effectors를 통해서.. cs-ssu..
-
[컴퓨터구조론] 3장 연습문제
[3.1] 다음 수들에 대한 8-bit 길이의 부호화-크기, 1의 보수 및 2의 보수 표현을 각각 구하라 (1) 19 8-bit 부호화-크기 : 0 001 0011 1의 보수 : 0001 0011 2의 보수 : 0001 0011 (2) -19 8-bit 부호화 크기 : 1 001 0011 1의 보수 : 1110 1100 2의 보수 : 1110 1101 (3) 124 8-bit 부호화 크기 : 0 111 1100 1의 보수 : 0111 1100 2의 보수 : 0111 1100 (4) -124 8-bit 부호화 크기 : 1 111 1100 1의 보수 : 1000 0011 2의 보수 : 1000 0100 [3.2] 문제 3.1의 각 결과가 값을 16-bit 길이의 표현으로 확장하라 (1) 19 16-bit 부..
-
[컴퓨터구조론] 2장 기본문제
[2.1] 산술 연산 및 논리 연산을 수행하는 CPU 구성 요소는 어느 것인가? 1. 스택 2. 제어 유니트 3 레지스터 세트 4. ALU CPU 구성요소 - ALU : 산술논리연산 수행 - Register : CPU내에서 Data를 기억하는 Memory 장치 - Control Unit : 명령어 해독 / 그에 따른 제어신호 발생 / 각종 정보들의 전송 통로/방향 지정 [2.2] 다음 중에서 제어 유니트의 기능이 아닌 것은? 1. 명령어 해독 2. 정보의 일시 저장 3. 제어 신호의 발생 4. 각종 정보들의 전송 통로 및 방향 지정 (2) 정보를 일시적으로 저장하는 것은 MBR이다 [2.3] 다음 중에서 명령어 사이클에 속하는 부사이클(subcycle)이 아닌 것은? 1. 인출 사이클 2. 간접 사이클 ..
-
[컴퓨터구조론] 4장 연습문제
[4.1] 그림 4-2의 제어 기억장치의 용량을 256단어로 확장하고, 각 실행 사이클 루틴이 최대 8개의 마이크로-연산들로 구성될 수 있도록 하려면, 그림 4-3의 사상 함수는 어떻게 바뀌어야 하는가? (1) 제어 기억장치의 용량이 256단어 >> 사상 함수 전체 길이 = 8 (2) 실행 사이클은 절반-끝 부분에 위치 >> 사상 함수 첫번째 값 = 1 (3) 각 루틴은 최대 8개의 마이크로-연산들로 구성 >> 사상 함수 끝 3자리를 0으로 만들기 -----> result : 1 XXXX 000 [4.2] 제어 기억장치의 전체 용량이 128 단어이고, 실행 사이클 루틴들의 처음-절반 부분에 저장된다고 하자. 각 루틴이 최대 4개씩의 마이크로명령어들로 구성된다면, 그림 4-3의 사상 함수는 어떻게 변경되어..
-
[명품 Java] 11장 실습문제 (기본적인 스윙 컴포넌트와 활용)
[11장 1번] 아래 그림과 같이 2개의 체크박스와 버튼을 하나 만들어라. "버튼 비활성화" 박스를 선택하면 버튼이 작동하지 못하게 하고, 해제하면 다시 작동하게 하라. "버튼 감추기" 체크박스를 선택하면 버튼이 보이지 않도록 하고 해제하면 버튼이 보이도록 하라. package Java11_1; import javax.swing.*; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class Java11_1 extends JFrame{ Java11_1(){ super("CheckBox Practice Frame"); setDefaultCloseOperation(JFrame.EXIT_O..
-
[명품 Java] 11장 연습문제 (기본적인 스윙 컴포넌트와 활용)
[11장 1번] 다음 중 스윙 컴포넌트가 가진 정보가 아닌 것은? 1. 컴포넌트 자신의 위치 2. 컴포넌트 자신의 배경색 3. 컴포넌트가 만들어진 시간 4. 컴포넌트의 부모 컨테이너 [11장 2번] JLabel은 어떤 목적으로 사용하는가? 1. 이미지나 텍스트 출력 2. 이미지만 출력 3. 이미지, 텍스트, 버튼 출력 4. 텍스트만 출력 [11장 3번] "java.jpg"를 가진 JLabel 컴포넌트를 생성하는 간단한 코드이다. 빈칸을 채워라 ___________ icon = new ___________("java.jpg"); JLabel label = new JLabel(); label.___________(icon); >> 풀이 ImageIcon icon = new ImageIcon("java.jpg..
-
[정보보호개론] Week_1 : 기본 용어
보안의 기본 3원칙 : C I A Confidentially (기밀성) "To prevent unauthorized reading of information" - 인가되지 않은 user(Attacker)가 정보를 읽는 것을 막는다 - Attacker에 의해서 정보가 읽혀서 노출되는 것을 막는 보안원칙 ◆ 공격예시 - 스니핑 - 스푸핑 ◆ 대처방안 1. 접근 통제(Access Control)을 실시 2. 정보에 대한 암호화 Integrity (무결성) "To prevent unauthorized writing of information(Modifying)" - 인가되지 않은 user(Attacker)가 정보에 접근해서 정보를 변경하는 것을 막음으로써 정보의 원본을 보호 - Attacker에 의해서 정보의 ..
