전체 글
-
level 2 - N개의 최소공배수자료구조와 알고리즘/프로그래머스 문제풀이 2023. 2. 22. 12:48
최소 공배수와 최대 공약수를 구할 수 있다면 쉽게 풀 수 있다. 최소공배수(LCM, Least Common Multiple)는 최대공약수(GCD, Greatest Common Divisor)를 이용해서 구할 수 있다. public int LCM(int x, int y) { return x * y / GCD(x, y); } 최대공약수는 유클리드 호제법을 통한 재귀용법으로 구현할 수 있다. public int GCD(int x, int y) { if (y == 0) { return x; } return GCD(y, x % y); } 배열에 주어진 수들의 최소 공배수는 배열에 있는 모든 수를 곱하고 공통의 최대공약수를 나누면 된다. 예를 들어 {2, 4, 6, 8}의 공통 최대공약수는 직관적으로 2라는 것을 ..
-
[Spring boot] AWS S3 를 이용한 파일 업로드스프링 2023. 2. 16. 17:27
개인 프로젝트를 하며 이미지 서버로 사용하기 위해 AWS S3 버킷을 만들고 Spring 을 연동하는 방법을 정리해보았다. [1] AWS S3 개요 AWS S3 란? S3는 Simple Storage Service 의 약자로 주로 파일 서버로 사용된다. 왜 S3를 사용할까? 확장성(Scalability) 파일 서버는 트래픽이 증가함에 따라 서버 인프라 및 용량 계획을 변경해야 되는데, S3가 확장 및 성능 부분을 대신 처리해준다. 내구성(Durability) 여러 영역에 여러 데이터 복사본을 저장하므로 한 영역이 다운되더라도 데이터를 사용할 수 있고, 복구가 가능하다. S3 무료 사용하기 Amazon S3는 계정 가입일을 기준을 12개월 동안 사용이 가능하며, 제한 범위는 다음과 같다. S3 관련 용어 ..
-
2. 예제 도메인 개발스프링/spring data jpa 2023. 2. 15. 22:22
예제 도메인 엔티티 ERD 엔티티 코드 Member.java package study.datajpa.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import lombok.AccessLevel; import lombok.Getter;..
-
1. 프로젝트 설정 및 테스트스프링/spring data jpa 2023. 2. 15. 21:37
1. 스프링 설정 파일 작성 application.yml spring: datasource: url: jdbc:h2:mem:test # mem 쓰면 인메모리 데이터베이스를 사용한다. username: sa password: driver-class-name: org.h2.Driver h2: console: enabled: true # h2 콘솔에 접근이 가능하다. /h2-console 로 접속 가능. jpa: hibernate: ddl-auto: create # 애플리케이션 시작할 때마다 전체 drop 후 엔티티 기준 테이블 create properties: hibernate: # show_sql: true # jpa가 실행하는 쿼리를 콘솔에 찍는다. (아래 로그방식이 나음) format_sql: true..
-
트랜잭션(Transaction)이란?데이터베이스 2023. 2. 3. 15:57
트랜잭션이란? 데이터베이스 작업의 단위를 의미한다. 트랜잭션의 특징 (ACID) 원자성(Atomicity) 트랜잭션이 데이터베이스에 모두 반영되거나, 모두 반영되지 않아야 한다. (all or nothing) 예) A계좌에서 B계좌로 돈을 송금하는 작업이 있을 때, A계좌에서 돈이 빠지는 것과 B계좌에 돈이 들어오는 것은 함께 성공하거나 함께 실패해야 함. 일관성(Consistence) 모든 트랜잭션이 종료된 후에는 DB의 제약조건을 모두 지키고 있는 상태가 되어야 한다. 예) 잔액은 음수가 될 수 없다. 라는 조건이 있다면 이를 위반하는 트랜잭션은 모두 중단됨. 독립성(Isolation) 하나의 트랜잭션은 다른 트랜잭션과 독립적으로 작동해야 한다. 성능을 생각해 isolation 정도를 조절해 사용한다..
-
RDB(관계형 데이터베이스) NoSQL(비관계형 데이터베이스) 비교데이터베이스 2023. 2. 3. 15:25
RDB(관계형 데이터베이스) 특징 관계형 데이터베이스는 여러 컬럼을 가지는 레코드를 하나의 테이블에 한다. 정규화를 통해 여러 테이블에 데이터를 분산하여 저장한다. 장점 데이터의 무결성을 보장한다. 중복이 적은 데이터에 대해 인덱스를 통해 빠른 정렬이 가능하다. 단점 초기에 생성한 스키마를 나중에 수정하기 어렵다. 데이터베이스 모델링이 완료되어야 이후 개발작업 수행이 가능하다. JOIN을 통해 복잡한 쿼리를 만들어야 하는 경우가 생기고 인덱스가 있어도 인덱스가 잡힌 열에 카디널리티가 낮다면 조회 성능이 낮다. NoSQL(비관계형 데이터베이스) 특징 테이블을 나눌 필요없이 동일한 컬렉션에 데이터를 저장한다. 정규화를 통해 여러 테이블에 데이터를 분산하여 저장한다. 장점 대용량 데이터 처리를 하는데 효율적이..
-
Spring JPA Auditing 사용방법과 주의사항스프링 2023. 1. 28. 14:10
JPA 는 Auditing(감시)이라는 기능을 제공하는데, JPA 엔티티의 변경을 감시하여 생성, 수정과 관련된 데이터를 자동으로 넣어주기 때문에 구현 시 이와 관련된 코드 작업을 줄일 수 있어 편리하다. 1. BaseEntity 생성,수정 시간은 여러 엔티티에 공통으로 사용되는 경우가 많으므로 별도의 클래스를 선언하고, 엔티티는 이 추상클래스를 확장하여 사용한다. import java.time.LocalDateTime; import javax.persistence.EntityListeners; import javax.persistence.MappedSuperclass; import org.springframework.data.annotation.CreatedDate; import org.springfr..
-
Mock 테스트 시 given willReturn 이 null 을 반환하는 문제카테고리 없음 2023. 1. 27. 23:30
mock test 중에 다음과 같이 null 에러가 발생하였다. TEST 코드와 Controller코드는 다음과 같다. @Test void signUpUser() throws Exception { //given StringloginId= "loginId@id.com"; UserSignUpDto.Requestrequest= UserSignUpDto.Request.builder() .loginId(loginId) .nickname("nick") .password("1234") .phoneNumber("01012341234") .build(); **given(userService.createUser(request)).willReturn(loginId);** //when //then mockMvc.perform..