분류 전체보기 676

[JPA] Querydsl 중급 문법 (프로젝션, 동적 쿼리, 벌크 연산, SQL function)

중급 문법 프로젝션 대상이 하나면 타입을 명확하게 지정할 수 있음 프로젝션 대상이 둘 이상이면 튜플이나 DTO로 조회 프로젝션: select 대상 지정 프로젝션과 결과 반환 - 기본 @Data public class MemberDto { private String username; private int age; public MemberDto() { } public MemberDto(String username, int age) { this.username = username; this.age = age; } } @Test public void simpleProjection(){ // 프로젝션이 하나 List result = queryFactory .select(member.username) .from(m..

BACK/JPA 2024.03.15

[JPA] Querydsl 기본 문법 (검색, 조회, 정렬, 페이징, 집합, 조인등)

기본 문법 JPQL vs Querydsl @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach public void before(){ queryFactory = new JPAQueryFactory(em); // 필드로 뺄 수도 있다. Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member me..

BACK/JPA 2024.03.15

[JPA] Querydsl 프로젝트 환경설정 - 설정과 검증

Querydsl 이란? 쿼리를 자바 코드로 작성할 수 있게 도와준다. 문법 오류를 컴파일 시점에 잡아준다. 동적 쿼리 문제도 해결해준다. Querydsl 설정과 검증 build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.0' id 'io.spring.dependency-management' version '1.1.4' } group = 'study' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } de..

BACK/JPA 2024.03.15

[TDD] 테스트 주도 개발 시작하기 - TDD 시작(+예제)

TDD에 대해 공부하고 싶어 최범균 - 테스트 주도 개발 시작하기 책을 빌려서 읽기 시작했다. 차근차근 실습을 시작해보도록 한다. TDD(Test-driven Development) 테스트를 먼저 하고 그다음에 구현한다. package chap02; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; public class CalculatorTest { @Test // 메서드를 테스트 메서드로 인식한다. void plus(){ int result = Calculator.plus(1, 2); assertEquals(3, result); // 인자로 받은 두 값이 동일한지 비교 } } 이 ..

ETC 2024.03.11

[Docker] 도커란 무엇인가?

도커란? 도커는 '데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어'이다. 이 기능은 주로 서버에 사용된다. 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다. 운영체제 통째로 격리한다. 컨테이너와 도커 엔진 예를 들어 개인용 컴퓨터 또는 서버 상의 환경을 조립형 창고 같은 작은 방으로 분할한다 생각해보자. 그리고 이런 창고에 데이터나 프로그램을 두는 것이다. 이 조립형 창고를 컨테이너라고 한다. 그리고 이 컨테이너를 다루는 기능을 제공하는 소프트웨어가 도커다. 도커를 사용하려면 도커 소프트웨어 본체인 도커 엔진을 설치해야 한다. 그리고 도커 엔진을 사용해 컨테이너를 생성하고 구동시킬 수 있다. 이미지 컨테이너를 만드려면 도커 엔진 외에도 컨테이너의 빵틀과 같은 역할을 ..

DEVOPS/DOCKER 2024.03.05

[Spring] 스프링 MVC1- 웹 애플리케이션 이해(WAS, 서블릿, 쓰레드)

현재 거의 모든 형태의 데이터를 HTTP 로 전송한다. Web Server HTTP 기반으로 동작 정적 리소스(html, css , js, img..)제공, 기타 부가 기능 ex) nginx, apache Web Application Server(WAS) HTTP 기반으로 동작 프로그램 코드를 실행해 애플리케이션 로직 수행 ⇒ HTTP 요청이 오면 사용자에 따라서 다른 화면을 보여줄 수 있음 정적 리소스도 제공 가능 동적 html, http api(json) 생성 가능 서블릿, jsp, 스프링 mvc가 WAS 에서 동작 ex) tomcat, jetty WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있다. 💡 Web Server: 정적 리소스 제공하는 서버 WAS: 애플리케이션 로직을 실행하는 서버 ..

BACK/SPRING 2024.03.04

[Spring] 스프링 핵심 원리 - 빈 스코프

스코프: 빈이 존재할 수 있는 범위 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입(초기화 메서드까지) 까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 클라이언트에게 빈을 반환하고, 스프링 컨테이너는 이후에 빈을 관리하지 않음(이후에는 클라이언트가 관리) 컨테이너에 요청할 때마다 새로 생성 스프링 컨테이너에서 빈을 조회할 때 생성되고, 초기화 메서드도 실행 종료 메서드가 호출되지 않음 (클라이언트가 직접 해야함) 프로토 타입 스코프, 싱글톤 빈 함께 사용 시 문제점 public class SingletonWithPrototypeTest1 { @Test void prototypeFin..

BACK/SPRING 2024.03.04

[Spring] 스프링 핵심 원리 - 빈 생명주기 콜백

스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존 관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 종료 스프링은 의존 관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해 초기화 시점을 알려줌스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 줌 💡 객체의 생성과 초기화(무거운 동작)를 분리하자  빈 생명주기 콜백 지원 3가지 인터페이스(InitializingBean, DisposableBean) InitializingBean 은 afterPropertiesSet() 메서드로 초기화를 지원한다.DisposableBean 은 destroy() 메서드로 소멸을 지원한다.잘 사용 X  설정 정보에 초기화 메서드, 소멸 메서드 지정설정 정보에 @Bean(i..

BACK/SPRING 2024.03.04

[운영체제] 교착 상태(Deadlock)

식사하는 철학자 문제 1. 일정 시간 생각을 한다. 2. 왼쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다. 3. 오른쪽 포크가 사용 가능해질 때까지 대기한다. 만약 사용 가능하다면 집어든다. 4. 양쪽의 포크를 잡으면 일정 시간만큼 식사를 한다. 5. 오른쪽 포크를 내려놓는다. 6. 왼쪽 포크를 내려놓는다. 7. 다시 1번으로 돌아간다. 만약 모든 철학자들이 동시에 자신의 왼쪽 포크를 잡는다면, 모든 철학자들이 자기 오른쪽의 포크가 사용 가능해질 때까지 기다려야 한다. 그런데 모든 철학자들이 그러고 있다. 이 상태에서는 모든 철학자가 영원히 3번 상태에 머물러있어 아무것도 진행할 수가 없게 되는데, 이것이 교착(Deadlock)상태이다. 철학자: 프로세스 / 스레드 포크: 자원..

CS/운영체제 2024.02.08

[컴퓨터구조] 메모리(RAM), 캐시 메모리

메모리 데이터를 저장하는 기억 장치 RAM 주기억장치 특징 RAM에는 실행할 프로그램의 명령어와 데이터가 저장 RAM은 휘발성 저장 장치이고, 보조 기억 장치는 비휘발성 저장 장치 보조기억장치에는 CPU가 실행하고 싶은 프로그램을 저장하고, 이를 RAM으로 복사해 저장 후 실행 데이터 읽는 속도가 보조기억장치에 비해 빠름 CPU와 주기억장치에 캐시 메모리가 존재 용량과 성능 RAM 용량이 크면 많은 데이터를 미리 보조기억장치에서 가져와 미리 RAM에 저장 가능 RAM 용량이 크면 많은 프로그램들을 동시에 빠르게 실행하는 데 유리 용량이 필요 이상으로 커졌을 때 속도가 그에 비례해 증가하지는 않음 종류 DRAM(Dynamic RAM) : 시간이 지나면 저장된 데이터가 사라지는 RAM. 주기적으로 데이터를 ..

CS/컴퓨터구조 2024.02.08