일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 스토리지 #objects storage #events #upload #알림
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #vpc #인프라 구축 #auto scailling #lauch template #ec2 instace #private #subnet
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #replica #복제본 #aurora #database #고가용성
- aws #아키텍트 #과정 #vpc #인프라 구축 #aurora #database #rds #rdbs #load #balancer #web #page #haproxy
- aws #아키텍트 #과정 #vpc #인프라 구축
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #round robin #process #high ability #auto scailling #app server #launch template
- 쓰레드 #쓰레드풀 #프로세스
- aws #아키텍트 #과정 #vpc #인프라 구축 #amazon sns #server #less #architecture
- 비트 #바이트 #이진수
- aws #아키텍트 #과정 #vpc #인프라 구축 #t.g #target group #alb #application #load #balancer #web #server
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #trigger #python3.9 #패키지 #
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #아키텍트 #과정 #vpc #인프라 구축 #second nat #gateway #routing table #route53 #고가용성 #private subnet #
- aws #아키텍트 #과정 #vpc #인프라 구축 #rds #endpoint #cloudwatch #monitoring
- 썸네일 #이미지
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- 업로드 #lambda #함수 #모바일 이미지 #썸네일 이미지
- aws #아키텍트 #과정 #vpc #인프라 구축 #haproxy #고가용성 #테스트 #alb #application #load balancer #application
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축 #s3 #bucket #객체 #스토리지 #isci #이미지 #업로드
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- aws #아키텍트 #과정 #vpc #인프라 구축 #ec2 #instance #launch #template #생성 #ami #amazone #machine #image
- aws #아키텍트 #과정 #vpc #인프라 구축 #sqs #message #queue #sns구독
- aws #아키텍트 #과정 #vpc #인프라 구축 #db #장애조치 #reand only #replica #events
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- aws #아키텍트 #과정 #vpc #인프라 구축 #alb #load balancer #t.g #target #group #haproxy #high ability #db #replica #region
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #alb #application #load #balancer #security #group #igw #ec2 #vpc #virtual #private #cloud
- Today
- Total
목록Spring (56)
요리사에서 IT개발자로
테스트 코드가 비즈니스 로직의 구현체에 대한 피드백을 주는것과 같다. 기존 비즈니스로직이 클래스 또는 Repository 등등 의존성이 너무 심한 경우 기본적으로테스트 코드 작성을 하기에 비교적으로 용이하지 않다. 또한 @Mock 을 비교적으로 편리하게 관리하게 하기 위한 방법은 따로 존재하지 않는다. 비즈니스로직은 언제든지 바뀔 수 있기에 테스트코드가 깨질 수 는 있다.슬라이스 테스트를 하는 이유한 구간에서 모든것을 풀 테스트를 하게된다면@Mock에 대한 의존성이 높아지기 때문이다.Mock 가짜객체테스트할 때 필요한 실제 객체와 동일한 모의 객체를 만들어 테스트의 효용성을 높이기 위해서 사용한다. 사용 경우실제 객체를 만들기에 비용과 시간이 많이 소요되는 경우의존성이 길게 걸쳐져 있어서 테스트를 ..
프로젝트의 규모가 커질수록 간단한 기능 추가 또는 수정시 다른곳에 어떤 영향을 끼칠지 확신할 수 없다.잘 동작하던 기능에도 이상이 생길 수 있다.복잡한 기능일수록 내가 구현한 코드가 의도한대로 동작하는 지에 대한 검증이 필요하다. 테스트 코드는 모든 비즈니스로직에 대한 테스트 코드를 작성하는 것이 아니다. 단위 테스트란작은 코드 조각(단위)를 검증빠르게 수행되어야 하고격리된 방식으로 처리하는 자동화 테스트이다. 비즈니스 로직을 외부 의존성으로 부터 격리하여 테스트 하는것. 좋은 테스트란도메인 모데리 및 알고리즘(Dto, Entity, Util클래스)노력 대비 단위 테스트의 가치가 매우 높다해당 코드가 복잡하거나 중요한 로직을 수행해서 테스트의 회귀 방지가 향상된다외부 의존성이 없어 테스트 유지비를 낮추기..
https://hs-backend.tistory.com/209 스파르타 코딩클럽 JPA 심화 트랜잭션트랜잭션이란 데이터 베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위데이터들을 생성 조회 수정 삭제 후 최종 결과물을 만들 때 까지의 하나의 작업을 트랜잭션으로 관리할 수 있다.hs-backend.tistory.com @TrasactionalJpa가 아닌 스프링 프레임워크에서 제공하는 에너테이션데이터의 상태를 변경시키는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다.Create, Update, Delete 한번에 수행되어야하는 연산들은 모두 에러 없이 끝나야 한다. 중간에 수정되게 또는 삭제되게 하면 롤백한다. @Trasactional어노테이션이 적용된 클래스는 실행 중에 예외가 발생하면 롤백..
SpringData Common의CRUDRepository + PagingAndSortingRepository 의 쿼리 기능을 제공한다.Repository에서 JPARepository까지 @NotRepositoryBean이 붙어 있는 인터페이스이다. JpaRepository 를 extends하면 알맞게 프로그래밍된SimpleJpaRepository 구현체 빈이 등록된다. main클래스에 @SpringBootApplication을 통해서 자동으로 붙여지는 @EnableJpaRepositories의 JpaRepsitoriesRegister를 통해서 등록된다.SpringDataJpa에 의해서 Entity의 CRUD, 페이징, 정렬 기능 메소스들을 가진 Bean이 등록된다.JpaRepository 쿼리 사용방..
트랜잭션이란 데이터 베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위데이터들을 생성 조회 수정 삭제 후 최종 결과물을 만들 때 까지의 하나의 작업을 트랜잭션으로 관리할 수 있다. 트랜잭션은 데이터 처리중에 문제가 발생하면그 전에 했던 변경을 아무일도 없던 것처럼 모두 되돌린다.계좌 이체로 예를 들자면중간에 오류가 발생했을 경우 처음으로 되돌아가서 송금할려던 금액을 되돌려 받아야한다. Transaction의 특징 원자성, 일관성, 독립성원자성(All or Nothing)Transaction이 데이터 베이스에 모두 반영 또는 전혀 반영되지 않아야 한다.작업 단위 별로 이루어 져야 사람이 다루는 데 문제가 없다.Transaction의 단위로 데이터가 처리되지않으면 설계한 개발자는데이터 처리 시스템을 이..
void deleteTop1ByUserIdOrderByCreatedAtAsc(Long userId);DELETE FROM your_tableWHERE id = ( SELECT id FROM your_tableWHERE user_id = ?ORDER BY created_at DESCLIMIT 1 ); 위에 주어진 SQL 쿼리 메소드는주어진 사용자에 대해생성 날짜 기준으로 오름차순으로 정렬된 상위레코드를 삭제하는 쿼리메소드 이다. // 가장 오래된 비밀번호 기록 삭제if (userPasswordRecordList.size() >= 3) { userPasswordRepository.deleteByUserIdOrderByCreatedAtAsc(userDetails.getUserId());}그러나..
암호화된 비밀번호를 비교할 때equals를 사용하는 것은 적절하지 않다. passwordEncoder.matches를 사용하는 것이 안전한 이유는 비밀번호 해싱 및 솔팅비밀번호는 단순히 암호화 되는것이 아닌 보통 해시 함수와 솔팅(solting) 과정을 거친다. 같은 비밀번호라도 매번 다른 솔트(정렬)값이 추가되기에 해시결과가 항상 달라진다.그래서 같은 비밀번호도 해시 결과가 다르기때문에equals로 비교하면 항상 다르게 나온다.해싱이란 해싱은 해시 함수에 문자열 입력값을 넣어서 특정한 값으로 추출하는 것을 의미한다. 솔팅(solting)이란정렬을 의미한다.보안성 passwordEncoder.matches는 원래의 비밀번호를 해시하고이를데이터베이스에 저장된 해시값과 비교하는 역할을 한다. 해시 함수는단방..
1. Entity를 만들고 관계(단방향)를 설정해보세요.학생필드 타입아이디Long학번String이름String이메일String시험필드 타입고유번호Long학생_아이디Long점수Float과목타입Enum시험일LocalDateTime과목타입JPADB Student@Tablepublic class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column private String studentNumber; @Column private String name; @Email @Column private String email;TestEntity@Tablepub..
JPA Query Method는 메서드 이름을 통해서 쿼리를 자동 생성한다. 메서드 이름은 특정 키워드와 규칙을 따르고Spring Data JPA는 이를 해석하여 적절한 JPQL(Java Persistence Query Language)쿼리를 생성한다. 메소드 생성규칙(find, delete, count, exists) By + 접두사 - 키워드 - 필드이름으로 시작해야한다. Optional findByField(Objects fieldName);void deleteByField(Objects fieldName);long countByField(Objects fieldName);boolean existsByField(Objects fieldName)KeywordSample snippetDistinctfi..
객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다. 기존의 데이터베이스에서는 외래키를 사용하지만JPA에서는 객체를 참조하는 방식으로 연관관계를 매핑할 수 있다. 객체간의 협력관계를 만들려면 객체 중심 설계가 우선이되야된다.@Entitypublic class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId;}@Entitypublic class Team { @Id @GeneratedValue private Long id; private Str..