전체 글
-
테스트팁 - 테스트 하기 좋은 코드TDD 2024. 6. 26. 20:22
가끔 욕을 먹고 싶을 때가 있을 수도 있죠. 가끔 지탄을 받고 꾸중을 들음으로써 자극을 받고 정신을 차리고 싶을 수도 있습니다. 아니면 혹은 그냥 아무 이유 없이 갑자기 한심한 눈초리를 받고 싶을 때가 있을 수도 있겠죠. 그럴 땐 주변에 있는 훌륭한 개발자를 잡아놓고 “저희는 테스트 코드 안 짜요.” 라고 한 마디 건네 보세요.아주 쉽게 원하는 것을 얻으실 수 있을 것입니다.- 버즈빌 이성원님 - 💡 이 게시글은 계속해서 변화하는 게시글입니다. 제가 테스트 코드를 작성하면서 느낀 것을 나열한 것으로 언제든지 방향을 바꿀 수도 있습니다. Application.class 에 추가적인 어노테이션 사용 금지@ComponentScan({"com.sample.product"})@EnableJpaAuditing@..
-
테스트팁 - 좋은 테스트 코드TDD 2024. 6. 26. 20:18
테스트할 시간이 없다? 화장실 다녀오면서 손 씻을 시간을 별로도 잡는건가? - 11번가 백명석님 - 💡 이 게시글은 계속해서 변화하는 게시글입니다.제가 테스트 코드를 작성하면서 느낀 것을 나열한 것으로 언제든지 방향을 바꿀 수도 있습니다. 테스트 도구로 assertj 와 junit 중에 assertj를 사용하자스프링팀은 assertj 를 사용하고 있으며Junit 팀은 자신의 도구로도 충분하지만 만약 부족하다면 assertj를 쓰라고 권장하고 있다https://junit.org/junit5/docs/current/user-guide/#writing-tests-assertions-third-partyJunit는 기본적으로 기댓값 실제값으로 파라미터를 두 개를 받지만 assertj는 파라미터 하나에 체..
-
테스트팁 - 테스트 작성 방법TDD 2024. 6. 26. 20:16
테스트를 작성안하면 결국에는 리팩토링하다가 뭔가를 깨트릴 것이다. 그러면 여러분은 리팩토링에 대해 안 좋은 느낌을 갖게 되고, 리팩토링을 덜 하게 된다. 리팩토링을 더 적게하면 설계의 질이 저하되고, 결국에는 여러분은 해고될 것이다. 여러분의 강아지도 곁을 떠날 것이고, 여러분은 자신의 영양 상태에 신경을 쓰지 못하게 될것이다, 그러면 치아도 나빠진다, 자 치아를 건강하게 유지하기위해 리팩토링하기 전에 테스팅을 하자. - 켄트 백 - 💡 이 게시글은 계속해서 변화하는 게시글입니다.제가 테스트 코드를 작성하면서 느낀 것을 나열한 것으로 언제든지 방향을 바꿀수도 있습니다.테스트 코드는 쉬운 테스트부터 작성한다쉬운 테스트는 예외와 실패 테스트를 의미하고, 어려운 테스트는 성공 테스트를 의미한다.성공 테스트는..
-
Redis 를 사용한 Distributed LockSpring-Boot 2024. 5. 31. 13:55
분산 환경에서 서로 다른 클라이언트가 공유 리소스를 사용하는 경우동시성 문제가 발생할 수 있으며Redis를 사용하여 원자성을 보장할 수 있다.분산 환경에서 다양한 클라이언트가 공유 리소스를 사용할 때 동시성 문제가 발생할 수 있으며이러한 문제를 해결하기 위해 Redis를 사용하여 원자성을 보장할 수 있다.Spin LockRedis에서는 SET NX (SET if Not Exists)라는 명령을 통해 값이 존재하지 않을 때만 설정할 수 있다. 이를 활용하여 Lock 메커니즘을 구현할 수 있다.💡 NX의 명령 구성은 key, value, 유지시간(ms)으로 구성된다. 스핀 락은 클라이언트가 값을 설정할 때까지 SET NX 명령을 반복 시도하여 락을 획득하는 방법이며 아래는 Spin Lock의 작동 방식이다..
-
JPA Entity ID 타입 선택시 후보들JPA 2024. 5. 27. 08:29
GenerationType identity, sequence, tableidentity키 생성 방식을 데이터베이스에게 위임하는 방식영속성 컨텍스트에 저장하기 위해 데이터베이스에 insert를 전달하여 PK를 얻어 오기에 insert에서 쓰기 지연이 되지 않는다sequence유일한 값을 순서대로 생성하는 데이터베이스 오브젝트를 사용한다.시퀀스를 제공하는 오라클, PostgreSQL, DB2, H2 데이터베이스에 사용insert시 데이터베이스 시퀀스를 사용하여 PK 를 얻기에 쓰기 지연이 가능하다table키 생성 전용 테이블을 만들어서 시퀀스 전략처럼 동작하는 방식이다전용 테이블을 만들어서 처리하는것이기때문에 시퀀스를 제공하지 않는 데이터베이스도 가능하다table는 키를 얻기 위해 select를 사용 후 다..
-
HTTPCP(Hyper Text Coffee Pot Control Protocol)ETC 2024. 5. 16. 21:26
RFC 2324과 RFC 7158에 의하면커피를 만들고 싶어 하는 컴퓨터 엔지니어들을 위한 프로토콜 'HTTPCP'이 정의되어있다HTTPCP는 HTTP 1.1을 기반으로 동작한다.HTTP 1.1 ([RFC2068]) permits the transfer of web objects from origin servers to clients. The web is world-wide. HTCPCP is based on HTTP. This is because HTTP is everywhere. It could not be so pervasive without being good. Therefore, HTTP is good. If you want good coffee, HTCPCP needs to be good. T..
-
@Transactional(readOnly = true) 는 Flush 가 동작안할꺼라 믿었다JPA 2024. 4. 23. 23:26
public class MarineService { WeaponService weaponService; @Transactional public Marine getMarine(){ Factory factory = factoryRepository.findById(1L).get(); Marine marine = factory.createMarine("marine"); Weapon weapon = weaponService.getWeapon(); marine.setWeaponName(weapon.getName()); return marine } } public class WeaponService { @Transactional(readOnly = true) public Weapon getWeapon(){ retur..
-
c 와 java 에서 call by reference는 없다ETC 2024. 4. 4. 18:38
Call by Reference(Pass by Reference) call by reference는 프로그래밍 언어 설계에서 사용되는 용어로, 함수에 인수를 전달할 때 값의 복사본 대신 원래 값의 참조를 전달 받는 것을 의미한다. 함수 내에서 참조를 통해 직접 값을 접근함으로써 원본을 변경할 수 있게 된다. 예를 들어 다음과 같은 Java 코드를 살펴보면 public static void main(String[] args) { List list = new ArrayList(); add(list); System.out.println(list.size()); //output: 1 } public static void add(List collection){ collection.add("1"); } 위 코드는 ..