9/20
·
TIL
스프링부트 자바 기초 되새기기IoC, DI, AOP스프링을 제대로 이해하려면 프레임워크의 중심 개념인 IoC, DI, AOP를 알아야 한다.이 세 가지는 스프링의 모든 동작 원리를 설명한다. IoC(Inversion of Control)는 객체 생성과 관리의 제어권을 개발자가 아닌 스프링이 가진다는 개념이다.일반적인 자바에서는 객체를 new로 생성하지만, 스프링에서는 컨테이너가 대신 생성하고 관리한다.객체의 생명주기를 프레임워크에 맡김으로써 코드 간 결합도가 낮아지고 유지보수가 쉬워진다. DI(Dependency Injection)는 IoC를 구현하는 방법이다.객체가 직접 의존 대상을 만들지 않고, 외부에서 주입받는 구조를 말한다.@Servicepublic class OrderService { pr..
9/19
·
TIL
Today's Codekata// 멀리 뛰기class Solution { public long solution(int n) { if (n == 1) return 1; if (n == 2) return 2; long[] arr = new long[n + 1]; arr[1] = 1; arr[2] = 2; for (int i = 3; i 이 문제는 효진이가 1칸 또는 2칸씩 점프해서 n칸에 도달하는 경우의 수를 구하는 문제이다.효진이가 n칸에 도달하려면, n-1칸에서 1칸 점프하거나 n-2칸에서 2칸 점프하는 방법밖에 없다.따라서 n칸까지 가는 방법의 수는 (n-1칸까지 가는 방법 수) + (n-2칸까지 가는 방법 수)가 된다. ..
9/18
·
TIL
Today's Codekata// N개의 최소공배수class Solution { public int solution(int[] arr) { int lcm = arr[0]; for (int i = 1; i 최소공배수(`lcm`)를 배열의 첫 번째 값으로 초기화한다.배열을 순회하면서 두 수씩 최소공배수를 계산해 `lcm`에 누적한다.최대공약수('gcd')는 `while` 루프를 통해 직접 계산한다. 유클리드 알고리즘두 자연수 a, b에 대해 a를 b로 나눈 나머지를 r이라 할 때,GCD(a, b) = GCD(b, r) 이 성질을 반복해서 나머지가 0이 될 때의 b가 최대공약수가 된다.예) `GCD(48, 18)`를 구한다고 해보면,1. 48 ÷ 18 = 몫 2, 나머지 122...
9/17
·
TIL
Today's Codekata# Group Sold Products By The DateSELECT sell_date, COUNT(DISTINCT product) AS num_sold, GROUP_CONCAT(DISTINCT product ORDER BY product SEPARATOR ',') AS productsFROM ActivitiesGROUP BY sell_date;# List the Products Ordered in a PeriodSELECT p.product_name, SUM(o.unit) AS unitFROM Products pJOIN Orders o ON p.product_id = o.product_idWHERE order_date BETWEEN '2020-02-0..
9/16
·
TIL
Today's Codekata# Second Highest SalarySELECT MAX(salary) AS SecondHighestSalaryFROM EmployeeWHERE salary p2.id; # Patients With a ConditionSELECT patient_id, patient_name, conditionsFROM PatientsWHERE conditions LIKE "DIAB1%" OR conditions LIKE "% DIAB1%";Today I LearnedSpring 플러스 주차 개인 과제 #QueryDSL로 일정 검색 기능 구현하기이번에 구현해본 기능은 일정(Todo)을 다양한 조건으로 검색할 수 있는 API이다.단순히 제목으로만 검색하는 것이 아니..
9/15
·
TIL
Today's Codekata# Investments in 2016SELECT ROUND(SUM(tiv_2016), 2) AS tiv_2016FROM InsuranceWHERE tiv_2015 IN ( SELECT tiv_2015 FROM Insurance GROUP BY tiv_2015 HAVING COUNT(*) > 1)AND (lat, lon) IN ( SELECT lat, lon FROM Insurance GROUP BY lat, lon HAVING COUNT(*) = 1);# Fix Names in a TableSELECT user_id, CONCAT( UPPER(LEFT(name, 1)), LOWER(SU..
9/14
·
TIL
Today I Learned#JPA 심화 5주차: QueryDSL, Auditing, Dynamic Insert / Update1. QueryDSLQueryDSL은 타입 안전한 JPQL을 자바 코드로 작성할 수 있게 해주는 라이브러리이다.장점- 컴파일 시점에 문법 오류 검출 가능- IDE 자동완성 지원 → 생산성 향상- 복잡한 조건을 동적으로 조립 가능QPost post = QPost.post;List result = queryFactory .selectFrom(post) .where(post.title.contains("JPA")) .fetch(); ※실무에서는 복잡한 검색 조건, 페이징, 정렬 등을 처리할 때 QueryDSL이 거의 표준처럼 사용된다.2. Auditing 기능Audi..
9/13
·
TIL
Today I Learned#연관관계 매핑 실수와 영속성 컨텍스트의 역할JPA를 사용할 때 자주 마주치는 연관관계 매핑의 실수들과 JPA의 핵심 개념인 영속성 컨텍스트의 동작 원리에 대해 정리해봤다.연관관계 매핑 실수 유형과 실무 팁1. 양방향 매핑 시 무한 루프 발생양방향 연관관계를 설정할 때, `toString()`, `equals()`, `hashCode()`에서 순환 참조가 발생해 무한 루프에 빠질 수 있다.- 해결 방법: `@ToString(exclude = ...), `@JsonIgnore`, `@EqualsAndHashCode(exclude - ...) 등으로 회피※실무에서는 양방향 매핑을 꼭 필요한 경우에만 사용하고, 순환 참조를 피하기 위한 설정을 반드시 해줘야 함. 2. mappedBy..
9/12
·
TIL
Today I LearnedSpring 플러스 주차 개인 과제#QueryDSL을 활용한 조건 분기 검색 기능 리팩토링하기이번 과제에서는 할 일(Todo) 엔티티를 조회할 때 연관된 사용자(User) 정보도 함께 가져오는 기능을 QueryDSL을 활용해 구현해보았다. 목표QueryDSL을 활용해 Todo를 조회하면서 연관된 User 정보를 한 번의 쿼리로 함께 가져오기todoId로 조회하되, 존재하지 않으면 예외 처리코드 가독성과 유지보수성을 높이기 구현 방식1. QueryDSL 설정@Configurationpublic class QuerydslConfig { private final EntityManager entityManager; public QuerydslConfig(EntityManag..
9/11
·
TIL
Today I Learned#SQL과 JDBC, 그리고 H2 실습으로 배우는 데이터베이스의 본질단순히 JPA를 사용하는 수준을 넘어서, 그 기초가 되는 기술들 SQL, JDBC, H2 데이터베이스를 직접 다뤄보았다.실습 중심의 구성을 통해 문법을 배우는 것이 아니라 왜 그렇게 동작하는지를 익힐 수 있었다. H2 데이터베이스란?H2는 Java 기반의 경량형 관계형 데이터베이스로, 테스트나 로컬 개발 환경에서 자주 사용된다.특히 Spring Boot와의 궁합이 좋아서, JPA 학습이나 단위 테스트에 매우 유용하다.- Embedded Mode: 로컬 파일(`.mv.db`)로 데이터 저장- In-memory Mode: 메모리에만 존재, 테스트용- Server Mode: 외부 서버로 구동, 배포용이번 실습에서는 ..