@Sl4fj 테스트에서 적용
2022. 8. 27. 17:51
Spring/Annotation
build.gradle에 lombok build option을 설정해줘야한다. testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok'
V1 - 테스트 코드 작성
2022. 8. 27. 17:49
프로젝트/게시판
spring.profiles.active=test # MySQL spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # DB Source URL # ex) spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul spring.datasource.url=jdbc:mysql://localhost:3303/Board?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul # DB username # ex) spring.datasource.username=root spr..
V1 - JPA CRUD, MySQL
2022. 8. 25. 21:59
프로젝트/게시판
BoardRequestDto.java 게시판 요청 데이터를 담당 BoardResponseDto.java 게시판 응답 데이터를 담당 BaseTimeEntity.java 반복되는 날짜 데이터의 공통 처리를 담당 Board.java board 테이블의 @Entity BoardRepository.java JpaRepository의 구현체 BoardService.java 게시판 @Service @Entity 실제 DB의 테이블과 매칭될 Class임을 명시한다 @MappedSuperclass 이 클래스를 상속하는 엔티티에 매핑되는 테이블을 생성한다. @EntityListeners(AuditingEntityListener.class) Jpa 내부에서 엔티티 객체가 생성/변경되는 것을 감지하는 역할을 한다. @Crea..
V1 - Spring Boot 게시판 만들기 설정
2022. 8. 25. 19:42
프로젝트/게시판
구성환경 SpringBoot, Gradle, Thymeleaf, Jpa(JPQL), jar, MYSQL Type Gradle Project Language Java Packaging Jar Java Version 11 Group com.board Artifact 프로젝트명, study Version Spring Boot 2.7.3 Package Name com.board.study Developer Tools Lombok SQL MySQL Driver Template Engines Thymeleaf Web Spring Web build.gradle plugins { id 'org.springframework.boot' version '2.7.3' id 'io.spring.dependency-managem..
Java 입출력(I/O), 스트림(Stream), 버퍼(Buffer) 개념 및 사용법
2022. 8. 25. 11:38
JAVA/Chapter14
Java 입출력 자바에서는 모든 I/O가 Stream(스트림)을 통해 이루어진다. Stream 스트림은 Byte형태로 테이터를 운반하는 데 사용되는 연결통로라고 생각하면 된다. 이는 자료(data)의 흐름이 물의 흐름과 같다는 의미에서 사용되었다고 한다. 다만 물이 한쪽 방향으로만 흐르는 것과 같이 스트림은 단방향 통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 또한 스트림은 먼저 보낸 데이터를 먼저 받게 되어있으며 연속적으로 데이터를 주고 받는다는 점에서 큐(queue)의 FIFO(First in First Out) 구조로 되어있다. 이때 데이터의 스트림의 근원지(시작점)을 Source, 데이터 종착점을 Sink, 연결한 것을 Stream이라고 표현 하며, Source ..
OutputStream 정의
2022. 8. 25. 11:19
JAVA/Chapter14
OutputStream 추상 클래스는 데이터가 나가는 통로의 역할을 한다. OutputStream 주요 메서드 통로로 데이터를 내보내는 기능이 필요하다. 데이터를 쓰는 기능과 관련된 메서드는 3개가 있다. OutputStream은 쓸 수 있어야 한다. /** * b를 OutputStream으로 내보낸다 */ public abstract void write(int b) throws IOException{} // ByteArrayOutputStream은 Byte Array로 내보내는 통로이다. ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); outputStream.write(1); // outputStream에는 [1]이 들어있다. out..
InputStream 정의
2022. 8. 25. 11:17
JAVA/Chapter14
InputStream JDK 11 기준 InputStream의 설명 This abstract class is the superclass of all classes representing an input stream of bytes Stream 개별 바이트나 무자열인 데이터의 원천 파일을 읽거나 쓸 때, 네트워크 소켓을 거쳐 통신할 때 쓰이는 추상적인 개념 쉽게 설명하면, '데이터가 전송되는 통로'라고 표현할 수 있다. 데이터가 네트워크를 거치건, 파일에서 넘어오건, 데이터가 오고가는 통로가 스트림인 것이다. byte 0이나 1이 8개 모이면 그것을 'byte'라고 부른다. '데이터'라고 생각하자. 종합하면 InputStream 추상 클래스는 데이터가 들어오는 통로의 역할에 관해 규정하고 있는 추상 클래스..
기본 쿼리문
2022. 8. 25. 09:53
MYSQL
Database 생성 , 생성된 Database 확인 create database test_db; show databases; create database 데이터베이스명; : 지정해준 이름의 db를 생성하는 쿼리문 이때 db명은 되도록 소문자, 숫자, _ (언더바) 로만 구성되도록 만들자! show databases; : 현재 mySQL 에서 생성한 데이터베이스 목록이 아래와 같이 쭉 뜬다. 작업을 하다 보면 자연스럽게 사용하는 db 들이 많아질텐데, 이 중에서 당장 이 db를 사용하겠다~ 고 지정하기 위해서는 아래와 같은 쿼리문을 사용한다. use test_db; use 데이터베이스명; table 생성 , 생성된 table 확인 table 생성 create table test_table( -> no i..
MYSQL 데이터 타입
2022. 8. 25. 09:26
MYSQL
문자형 데이터타입 CHAR(M) 고정 길이를 가지는 문자열을 저장한다. (M : 0~255) VARCHAR(M) 가변 길이를 가지는 문자열을 저장하며, 후행 공백을 제거하지 않는다. (M : 0~65,535) M이 0~255 이면 문자길이+1byte, ~65,535 이면 문자길이+2byte TINYBLOB TINYTEXT 1~255 개의 가변 길이를 가지는 문자열을 저장한다. (문자길이+1byte) BLOB TEXT 1~65,535 개의 가변 길이를 가지는 문자열을 저장한다. (문자길이+2byte) BLOB 는 바이너리 데이터, TEXT 는 문자 데이터 저장에 유리하다. MEDIUMBLOB MEDIUMTEXT 1~16,777,215 개의 가변 길이를 가지는 문자열을 저장한다. (문자길이+3byte) LO..
SpringBoot + MySQL + JPA과 연동하기 + 테스트
2022. 8. 24. 23:09
MYSQL
- dependency 추가 dependencies { implementation 'mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' } - application.properties 변경 # MySQL 설정 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # DB Source URL 설정 # 예시) spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul spring.datas..
Windows10에서 환경설정
2022. 8. 24. 23:05
MYSQL
시스템 환경변수에 MySQL 명령을 추가하기 설치시 경로는 아래와 같다. (버전마다 다름) C:\Program Files\MySQL\MySQL Server 8.0\bin C:\Program Files\MySQL\MySQL Workbench 8.0 CE\ 시스템변수의 path에 경로를 추가한다. 컴퓨터 재부팅 mysql -u root -p 를 입력하고 root의 password를 입력하면 접속된다. SQL db 샘플을 설치 source 파일이름.sql 명령프롬프트가 나오면 완료 잘 되었는지 확인해보기 show databases; SQL을 종료하고 빠져나오는 명령어는 exit
입출력 스트림 (InputStream, OutputStream)란?
2022. 8. 24. 11:55
JAVA/Chapter14
1. Stream 이란 프로그램은 외부에서 데이터를 읽거나 외부로 데이터를 출력하는 작업이 빈번하게 일어납니다. 이때 데이터는 어떠한 통로를 통해서 데이터가 이동되는데, 이 통로를 Stream 이라고 합니다. 자바에는 이러한 기능을 수행하기 위해 InputStream와 OutputStream이 존재하며 단일 방향으로 연속적으로 흘러갑니다. InputStream과 OutputStream은 추상 클래스이며 추상 메소드를 오버라이딩해서 다양한 역할을 수행할 수 있습니다. (예 : 파일, 네트워크, 메모리 입출력) 자바에서 기본적으로 제공하는 I/O 기능은 java.io 패키지에서 제공됩니다. InputStream은 외부에서 데이터를 읽는 역할을 수행하고, OutputStream은 외부로 데이터를 출력하는 역할..
텍스트 - text, utext
2022. 8. 24. 01:21
Spring/Thymeleaf
타임리프의 가장 기본 기능인 텍스트를 출력하는 기능 먼저 알아보자. 타임리프는 기본적으로 HTML 테그의 속성에 기능을 정의해서 동작한다. HTML의 콘텐츠(content)에 데이터를 출력할 때는 다음과 같이 th:text 를 사용하면 된다. HTML 테그의 속성이 아니라 HTML 콘텐츠 영역안에서 직접 데이터를 출력하고 싶으면 다음과 같이 [[...]] 를 사용하면 된다. 컨텐츠 안에서 직접 출력하기 = [[${data}]] BasicController package hello.thymeleaf.basic; import org.springframework.stereotype.Controller; import org.springframework.ui.Model;import org.springframewo..
타임리프 소개
2022. 8. 23. 22:51
Spring/Thymeleaf
● 공식 사이트: https://www.thymeleaf.org/ ● 공식 메뉴얼 - 기본 기능: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html ● 공식 메뉴얼 - 스프링 통합: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html 타임리프 특징 ● 서버 사이드 HTML 렌더링 (SSR) ● 네츄럴 템플릿 ● 스프링 통합 지원 서버 사이드 HTML 렌더링 (SSR) 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다. 네츄럴 템플릿 타임리프는 순수 HTML을 최대한 유지하는 특징이 있다. 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에..
Springboot 프로젝트 생성
2022. 8. 23. 19:55
프로젝트
개발환경 IDE : IntelliJ IDEA Ultimate Git Tools : Git + Source Tree OS : Window10 SpringBoot 2.7.3 Java11 Gradle
트랜잭션 AOP 주의 사항 - 초기화 시점
2022. 8. 23. 13:54
데이터 접근 기술/스프링 트랜잭션
스프링 초기화 시점에는 트랜잭션 AOP가 적용되지 않을 수 있다. 예제 코드를 보자 package hello.springtx.apply; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfigurat..
@SpringBootTest
2022. 8. 23. 13:45
Spring/Annotation
[ 통합테스트를 위한 @SpringBootTest 어노테이션 ] @SpringBootTest @SpringBootTest를 사용하면 손쉽게 통합 테스트를 위한 환경을 준비해준다. @SpringBootTest는 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 실행한다. @SpringBootTest의 어노테이션에는 다양한 값을 줄 수 있는데, 이를 살펴보면 다음과 같다. value와 properties: 애플리케이션 실행에 필요한 프로퍼티를 key=value 형태로 추가할 수 있음 args: 애플리케이션의 arguments로 값을 전달할 수 있음 classes: 애플리케이션을 로딩할 때 사용되는 컴포넌트 클래스들을 정의할 수 있음 webEnvironment: 웹 테스트 환경을 설정할 수 있음 ..
트랜잭션 AOP 주의 사항 - 프록시 내부 호출2
2022. 8. 23. 13:27
데이터 접근 기술/스프링 트랜잭션
메서드 내부 호출 때문에 트랜잭션 프록시가 적용되지 않는 문제를 해결하기 위해 internal() 메서드를 별도의 클래스로 분리하자. InternalCallV2Test package hello.springtx.apply; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.conte..
트랜잭션 AOP 주의 사항 - 프록시 내부 호출1
2022. 8. 23. 12:06
데이터 접근 기술/스프링 트랜잭션
@Transactional 을 사용하면 스프링의 트랜잭션 AOP가 적용된다. 트랜잭션 AOP는 기본적으로 프록시 방식의 AOP를 사용한다. 앞서 배운 것 처럼 @Transactional 을 적용하면 프록시 객체가 요청을 먼저 받아서 트랜잭션을 처리하고, 실제 객체를 호출해준다. 따라서 트랜잭션을 적용하려면 항상 프록시를 통해서 대상 객체(Target)을 호출해야 한다. 이렇게 해야 프록시에서 먼저 트랜잭션을 적용하고, 이후에 대상 객체를 호출하게 된다. 만약 프록시를 거치지 않고 대상 객체를 직접 호출하게 되면 AOP가 적용되지 않고, 트랜잭션도 적용되지 않는다. AOP를 적용하면 스프링은 대상 객체 대신에 프록시를 스프링 빈으로 등록한다. 따라서 스프링은 의존관계 주입시에 항상 실제 객체 대신에 프록시..
스프링, 스프링 부트 비교
2022. 8. 23. 09:26
Spring/개념
목차 1. 스프링이란? 2. 스프링 부트란? 3. 이들의 목적 4. 비교 1. 스프링이란? 스프링 프레임워크는 자바 생태계에서 가장 대중적인 응용프로그램 개발 프레임워크입니다. 의존성 주입(DI, Dependency Injection)과 제어의 역전(IOC, Inversion Of Control)은 스프링에서 가장 중요한 특징중 하나입니다. 이들로 인해서 좀더 결합도를 낮추는 방식으로 어플리케이션을 개발할 수 있습니다. 이러한 개발방식으로 개발한 응용프로그램은 단위테스트가용이하기 때문에 보다 퀄리티 높은 프로그램을 개발할 수 있습니다. DI 없는 예제 @RestController public class MyController { private MyService service = new MyService(..