Java 34

Spring Data Jpa

jpa는 jpql을 사용해 쿼리를 짠다.그러나 이것도 귀찮아진 개발자들은 더욱 쉬운 방법을 찾게 되는데... 이것이 스프링 데이터 jpa이다!jpql을 사용하지 않고 메소드 이름만 잘 정의하면 스프링이 알아서 잘 jsql을 짜준다.정의 public interface MemberRepository2 extends JpaRepository {} JpaRepository를 상속하여 인터페이스를 만든다. @Repository 어노테이션 생략 가능하다. 공통 인터페이스JpaRepository를 상속하면 공통 인터페이스를 스프링이 구현해준다. 공통 인터페이스는 save(), delete(), existsById(), findAll(), findById(), count(), existsById()등등이 있다.쿼리 메..

Java 2025.08.01

spring Querydsl

1. 설정1.1. build.gradle설정은 스프링 버전에 따라 다르다. 이 글에서는 3.4.5버전에서의 설정이다.dependencies { // QueryDsl implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"}build.gradle에 위 설정을 추가한다. com.querydsl의 두가지를 추가하면 되는데, ja..

Java 2025.05.22

JPA (Java Persistence API)

jpa는 java의 orm(object relational mapping)기술이다.application.properties 설정데이터베이스 스키마 자동생성 spring.jpa.hibernate.ddl-auto= create : 기존 테이블 삭제 후 다시 생성 create-drop : create와 같으나 종료 시점에 테이블 drop update : 변경분만 반영(운영db에는 사용x) validate : 엔티티와 테이블이 정상 매핑되었는지만 확인 none : 사용하지 않음 개발 초기: create 또는 update 테스트 서버: update 또는 validate 스테이징과 운영 서버: validate 또는 none #h2 데이터베이스spring.datasource.driver-class-name=org.h..

Java 2025.05.15

Optional<T>

optional은 java 8에 추가된 문법으로, null값일 수 있는 변수를 감싸주는 클래스이다.java 프로그래밍을 하다보면 NullPointerException이 굉장히 많이 발생하는데 해당 예외를 잘 처리하기 위해 만들어졌다고 한다. 반환메소드설명static Optionalof(T value)null값이 아닌 값을 Optional로 감싸 반환static OptionalofNullable(T value)null일 수 있는 값을 Optional로 감싸 반환static Optionalempty()빈 Optional을 반환booleanisEmpty()값이 없다면 true, 있다면 falsebooleanisPresent()값이 있으면 true, 없다면 falsevoidifPresent(Consumer..

Java 2025.05.10

spring 예외(Exception) 처리

사용자가 필수 파라미터를 빼고 요청을 보냄. 서버 내에서 데이터베이스 조회 오류. 그 외 예상치 못한 오류. 등등 예외가 발생하면 어떻게 처리해야 하는가? 기본적으로 스프링이 적절한 예외 페이지를 보여준다. 그러나 좀 더 자세하게 오류 정보를 전달하고시다면 따로 설정해주어야 한다.예외가 발생하였을 때, 표현 방법에 따라 2가지로 나눌 수 있다. 웹에서 요청한 경우와 api를 요청한 경우이다. 각각 html, json으로 오류 정보를 응답한다.1. html로 오류 표시 (웹 클라이언트 요청)스프링에서는 resources/templates/error또는 resources/static/error디렉토리에 에러코드.html을 만들면 된다. resources/templates/error/500.html r..

Java 2025.04.17

spring 검증(validation, bean validation)

웹 서비스를 만들다보면 회원가입, 로그인, 회원정보수정, 상품등록, 상품수정 등 많은 폼 입력을 만든다. 이때, 각 input에 대한 검증을 해야한다. 이 검증을 spring에서 쉽게 할 수 있게 도와준다.예를 들어, 그래픽카드를 등록하고 수정하는 기능이 있는 웹을 만들 것이다. 등록과 수정의 요구사항이 다르다고 가정한다.그래픽카드 도메인은 다음과 같다.@Getter @Setterpublic class GraphicsCard { private Long id; private GraphicsCardGroup group; private String name; private Long quantity; private Long price;}id는 Repository가 자동으로 1부터 지정..

Java 2025.04.11

spring 로그인 세션과 인터셉터

웹 기능에 로그인은 매우 자주 사용되는 기능이다. spring에서는 이 로그인 기능을 세션을 사용해 어떤 멤버가 로그인하였는지, 인터셉터를 사용하여 로그인 안된(세션이 없는) 사용자는 서비스를 거부할 수 있다.  1. 세션세션 생성은 HttpSession session을 사용하면 되고, 세션 조회는 @SessionAttribute(name="attributeName", required = false)을 사용하면 된다. application.properties에 다음 내용을 추가해 세션을 조정할 수 있다.# 세션 움직임 없을때 타임아웃 시간. 기본 30분이다.server.servlet.session.timeout=60m# 세션을 쿠키로만 받는다. 아니면 url로 전송될 때도 있다.server.servlet..

Java 2025.04.03

spring 테스트 코드 작성

에러나 버그나 났을 때, 팀 프로젝트에서 내가 작성한 기능이 오류가 있는 것인지 동료의 코드가 오류가 있는 것인지프로젝트가 커지면서 기능이 이것저것 엮여있는 경우 버그가 나면 어느 기능이 오류가 나는지 알기 위해서는 테스트 코드를 잘 작성 해놓아야 한다. 테스트는 해당 기능의 패키지에서 main과 test만 바뀐 같은 위치에서 테스트한다. 해당 클래스이름 + Test로 클래스 이름을 만드는 것이 국룰이다. intellij 에서 Ctrl + Shift + T 단축키로 테스트 클래스를 만들 수 있다. 메소드에 @Test를 붙여 테스트를 한다.메소드에 @BeforeEach를 붙이면 테스트 실행전 실행되는 메소드가 된다.메소드에 @AfterEach를 붙이면 테스트실행후 실행되는 메소드가 된다.클래스에 @Spr..

Java 2025.03.11

spring 기본 개념

너무 복잡한 표준, 배보다 배꼽이 더 큰 객체지향으로 인해 스프링 프레임워크가 탄생했다.solid원칙중 ocp와 dip를 지켜주는 di(dependency injection)컨테이너가 스프링의 핵심이다.di컨테이너가 있으므로 스프링을 이용하는 개발자는 사용 영역을 수정하지 않고 확장할 수 있다.또한 di컨테이너가 적절한 인스턴스를 생성자에 주입해줌으로서 구현 클래스에 의존하지 않는다. di컨테이너에 빈을 등록하는 방법은 1. @Configuration클래스에 @Bean메소드들을 만들어 싱글톤으로 등록할 수 있고 2. @Component 어노테이션을 클래스에 붙여 스프링이 컴포넌트 스캔을 할 때 등록하게 한다.@Component 어노테이션을 사용해 빈을 등록할 때, 의존관계 주입은 생성자 주입을 보통 사용..

Java 2025.03.11

thymeleaf 템플릿 엔진

아래에 위 태그를 삽입한다. 템플릿 처리에는 영향을 미치지 않지만, 우리 IDE가 모든 th:* 속성에 대한 네임스페이스 정의가 부족하다고 불평하는것을 방지하는 역할이다. 1. thymeleaf 표준 표현 문법문서: https://www.thymeleaf.org/doc/tutorials/3.1/usingthymeleaf.html#standard-expression-syntax● 간단 표현  ○ 변수 표현식: ${...}  ○ 선택 변수 표현식: *{...}  ○ 메시지 표현식: #{...}  ○ 링크 URL 표현식: @{...}  ○ 부분 표현식: ~{...}● 문자 그대로의  ○ 텍스트 리터럴: 'one text', 'Another one!', ...  ○ 숫자 리터럴: 0, 34, 3.0, 12.3,..

Java 2025.02.11

spring Controller

1. Annotation Interface Controller문서: https://docs.spring.io/spring-framework/docs/6.2.x/javadoc-api/org/springframework/stereotype/Controller.html 주석이 달린 클래스를 "Controller"라고 나타낸다. RequestMapping주석을 베이스로 하는 주석 처리 메소드와 함께 사용되는 편이다. 스프링이 @Component를 감지하는 것처럼 @Controller는 자동 감지가 되고, 그것을 위한 bean이 자동 등록 된다.2. Annotation Interface RequestMapping문서: https://docs.spring.io/spring-framework/docs/6.2.x/ja..

Java 2025.02.08

spring View, 템플릿 엔진

1. Spring View스프링 부트에서 View는 두가지로 나눌 수 있다. 누가 언제 요청하든 똑같은 대답을 해주는 static과 상황마다 다른 대답을 해주는 templates로 나뉜다. 1.1. static view Hello there hellosrc - main - resources - static폴더에 hello.html을 만들어 보자. 그리고 SpringApplication을 실행후 웹에서 127.0.0.1:8080/hello.html를 접속하면 화면이 보일것이다. 이처럼 static폴더에 html파일을 만들면 스프링 앱에서 별다른 조치 없이 자원에 접촉이 가능하다. index.html을 파일 이름으로 하면 127.0.0.1:8080에 접속해도 화면이 보일 것이다. index.htm..

Java 2025.02.07

spring 설치와 환경설정

1. intelliJ 설치intelliJ 다운 링크에 들어가 유료버전(Ultimate) 또는 무료버전(Community Edition)을 다운받는다. 무료 버전은 유료 버전에 있는 기능 몇가지가 없는 버전이다. 대학교 메일 인증이 가능하면 Ultimate를 무료로 사용할 수 있다. windows라면 exe파일을 받아 설치한다.linux라면 .tar.gz를 받아 실행할 수 있지만, snap이나 flatpak으로 설치하는것이 편하고 좋다.2. JDK 17 또는 21 설치스프링 3.0이상부터는 JDK17버전 이상을 설치해야 한다.3. 스프링 프로젝트 생성https://start.spring.io/에서 새로운 웹 프로젝트를 만든다. Project는 Gradle-Groovy, Language는 Java, Spr..

Java 2025.02.07

Java annotation

공부하다보니 @Override, @FunctionalInterface같이 골뱅이를 붙인 무언가가 보인다. 이것이 무엇인지 궁금해 정리해본다. annotation은 자바 소스 코드에 추가될 수 있는 메타데이타이다. annotation은 다음 기능을 제공한다컴파일러에게 해당 annotation의 조건을 검사해 조건이 맞지 않다면 에러 생성Built-in annotation@Override - 메소드가 오버라이드 되었는지 검사한다. 메소드가 오버라이드 된것이 아니라면 컴파일 에러를 발생시킨다.@Deprecated - 메소드가 구식이라고 표시한다. 메소드가 사용되면 컴파일 경고를 띄운다.@SuppressWarnings - 명시된 어노테이션 매개변수의 컴파일 경고를 숨긴다.@FunctionalInterface -..

Java 2024.10.29

Java concurrent programming

1. Thread, RunnableThread, Runnable은 java 1.4 버전 이하에서 사용되던 기술이다. java에서 쓰레드를 만드는 방법은 두가지이다.Thread를 상속하거나 Runnable를 구현하는 것이다. Thread를 상속하고 run()메소드를 재정의한다. 상속한 클래스 인스턴스를 만든다. 인스턴스의 start()로 쓰레드를 만들고 내부적으로 run()메소드를 실행시킨다.class Main { public static void main(String[] args) { Abc thread = new Abc(); thread.start(); System.err.println("this code is outside of the thread"); ..

Java 2024.09.27

FunctionalInterface, Lambda Expression

ArrayList의 forEach, removeIf, sort 메소드 등 많은 곳에서 FunctionalInterface를 매개변수로 받고 있다. FunctionalInterface는 무엇인지 람다식은 무엇인지 알아보자.FunctionalInterface란?https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/FunctionalInterface.html 에서 보면, 디폴트 메소드를 제외한 abstract method가 하나인 인터페이스라고 말한다. 인터페이스 위에 @FunctionalInterface 어노테이션을 사용하는데, 이 어노테이션을 사용하면 인터페이스가 FunctionalInterface의 조건에 맞는지 컴파일러가 확인해준..

Java 2024.09.26