본문 바로가기

반응형

분류 전체보기

(133)
[JAVA] - 동시성 참고 출처 : https://www.youtube.com/watch?v=ktWcieiNzKs 동시성 문제 - 한번에 여러 요청(동시적인 반복 요청 포함)이 오거나, 여러 쓰레드가 공유자원을 사용하면 실행 결과가 달라짐 - 따라서, 동시에 중복 요청 혹은 여러 요청에 대해 대비해야함 - 쓰레드 안전한 객체 : 여러 쓰레드가 동시에 클래스를 사용하는 상황에서, 클래스 내부의 값을 안정적인 상태로 유지하는 객체 상황 1. 은행 어플에서 사용자가 실수로 '송금' 버튼을 2번 클릭하는 경우, 서버에서는 해당 요청에 대해 2번 동작해주면 안됨. ( 동시 요청에 대해 1번만 동작해줘야함) 상황 2. 1. A라는 Bool 변수가 있고, B 쓰레드가 있다. 2. B쓰레드는 while문의 조건에서 A 변수의 값을 보고있고..
스프링 테스트 - 통합 테스트와 단위 테스트 참고 출처 : https://www.youtube.com/watch?v=SFVWo0Z5Ppo @SpringBootTest - 통합 테스트를 하기 위한 어노테이션 - 여러 기능을 조합해 전체 비지니스 로직이 제대로 동작하는지 테스트 - 테스트를 실행할 때마다 모든 빈은 스캔, 로드해 테스트 작업이 무거워질 수 있음 Unit Test - 단위 테스트 - 프로젝트에 필요한 모든 기능에 대한 테스트를 각각 진행 Unit Test의 F.I.R.S.T 원칙 - Fast : 테스트 코드는 빠르게 실행 - Independent : 각 Unit Test들은 독립적이여야 함 - Repeatable : 테스트는 매번 같은 결과 - Self-Validating : 각 테스트들은 결과 확인이 가능해야 함 - Timely : U..
스프링 테스트 - JUnit의 생명주기와 주요 어노테이션 참고출처 - https://www.youtube.com/watch?v=SFVWo0Z5Ppo JUnit - 생명 주기 - JUnit은 어노테이션으로 생명 주기별 테스트 작성을 지원 - @Test : 테스트용 메소드를 표현 (메인 코드 테스트) - @BeforeEach: @Test의 각 Unit 테스트들이 실행되기 전 실행 - @AfterEach: 각 Unit 테스트들이 실행된 후 실행 - @BeforeAll: JUnit의 테스트 생명주기 가장 처음 실행 - @AfterAll: JUnit의 테스트 생명주기 종료 후 실행 JUnit 메인 어노테이션 @SpringBootTest - 통합 테스트용 - @SpringBootApplication을 찾고, 하위의 모든 Bean을 로드 - Test용 Context를 만들..
스프링 테스트 - TDD, JUnit 참고 출처 : https://www.youtube.com/watch?v=SFVWo0Z5Ppo TDD - Test Driven Development - 테스트 주도 개발, 즉, 테스트를 먼저 만들고, 개발을 진행하는 것. - 애자일 개발 방식 중 하나 TDD를 적용하는 이유 - 코드의 안정성을 높임 - 기능을 추가, 변경에 대한 부작용을 방지 - 테스트 코드의 대상 코드 목적을 명확하게 표현 가능 ➡️ 불필요한 코드를 줄임 JUnit - Java의 대표적인 테스트 프레임워크 - Unit Test를 위한 도구를 제공 - 어노테이션 기반 - 스프링 부트 2.2 부터 JUnit 5 사용 - JUnit 5 = Jupiter + Platform + Vintage JUnit Jupiter - Test Engine A..
[오픈소스] NCP 테라폼 validation 검증하기 오픈소스 url : https://github.com/NaverCloudPlatform/terraform-provider-ncloud 네이버 클라우드 API 문서 : https://api.ncloud-docs.com/docs 정규식 테스트 사이트: https://regexr.com/ 0. 확인할 파일 선정. - server.go 파일로 선정 1. 문서에서 API 요청 파라미터 제약사항 확인하기. - API 문서에서 createServerInstance 확인 - 위 사진과 같이 serverName의 제약 사항은 아래와 같습니다. 1. 3~30 개의 문자만 허용 2. 소문자, 숫자, "-"만 허용 3. 알파벳으로 문자로 시작해야함 4. 영어 또는 숫자로 끝나야함. 2. validation 패키지의 함수들을 ..
[QueryDSL] QueryDSL 설정법(feat.graddle, jpa) QueryDsl을 사용하기 위해서는 함수와 플러그인 그리고 라이브러리를 build.graddle에 별도의 세팅해주어야 한다. //build.graddle plugins { ... //QueryDSL 추가 id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } ... dependencies { ... //Query DSL 라이브러리 추가 implementation 'com.querydsl:querydsl-jpa' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0' ... } //QueryDSL def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa = tr..
[Query Dsl] On vs Where 내부 조인 (inner join) ➡️ where 사용 내부 조인일 때는 익숙한 'where'을 사용 ('on'을 사용해도 상관없음. 결과는 동일) List result = queryFactory .select(member, team) .from(member) .join(member.team, team) .where(team.name.eq("teamA")) //.on(team.name.eq("teamA")) 요것도 상관은 없다.. 다만, 익숙한 where 사용을 추천 .fetch(); 외부 조인 (left join) ➡️ on 사용 외부 조인할 때, 'where' 문 사용 시, 왼쪽 데이터들이 누락된다. List result = queryFactory .select(member, team) .from(m..
[Query Dsl] 연관관계가 없는 엔티티들 조인하기 보통 연관관계가 있을 때는 "leftJoin(member.team, team)" 처럼 join 문안에 연관된 엔티티를 명시해 준다. 하지만, 연관관계가 없는 엔티티들은 아래와 같이 외부 조인할 때는 "on"을 통해 할 수 있다. List result = queryFactory .select(member, team) .from(member) .leftJoin(team).on(member.username.eq(team.name)) .fetch(); 이때, 파라미터 수를 주의해야한다. 연관관계 ⭕ : leftJoin(entity1, entity2).where(조건 명시) 연관관계 ❌ : leftJoin(entity1).on(조건 명시) 즉, 연관관계가 없을 때는 leftJoin의 파라미터로 엔티티를 1개만 넣..