Clean Code - 객체와 자료구조
·
로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다. 자료 추상화 // 구체적인 클래스 public class Point { public double x; public double y; } // 추상적인 클래스 public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 두 클래스는 2차원 점을 표현한다. 아래 코드는 직교좌표계를 사용하는지 극좌표계를 사용하는지 알 길이 없다. 그럼에도 인터페이스는 자료구조를 명백하게 표현하고 있다. 좌표를 읽을 때는 각 값을 개별..
Java - Java 8 Local Date Time 직렬화/역직렬화 에러 원인과 해결 방법
·
나의 에러 일지
배경테스트  코드를 짜면서 HttpServletResponse 객체를 ObjectMapper를 통해 Dto로 객체로 역직렬화하는 과정에서 에러가 발생했다. @Test @DisplayName("회원 정보 수정") void patchMemberTest() throws Exception { ... String response = actions.andReturn().getResponse().getContentAsString(); Response responseDto = objectMapper.readValue(response, Response.class); // 여기서 에러 발생! ... }com.fasterxml.jackson.dat..
Clean Code - 단위 테스트(FIRST)
·
로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다.테스트는 유연성, 유지보수성, 재사용성을 제공한다.테스트 케이스가 없다면 실제 코드를 유연하게 만드는 버팀목도 사라진다. 코드에 유연성, 유지보수성, 재사용서을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 케이스가 있다면 실제 코드의 변경이 두렵지 않다. 테스트 케이스가 없다면 모든 변경은 잠정적인 버그가 된다.테스트 코드가 지저분하면 코드를 변경하는 능력이 떨어지며 코드 구조를 개선하는 능력도 떨어진다. 테스트 코드가 지저분할수록 실제 코드도 지저분해지고 실제 코드도 망가진다. 깨끗한 테스트 코드테스트 코드에서 가독성을 높이려면 가독성이 필요하다. 가독성을 높이기 위해서는 명로성, 단순성, 풍부한 표현력이 필요하다. 테스트 코드는 최소의 표현으로..
면접을 위한 CS 전공지식 노트 - 조인 (JOIN)
·
책 '면접을 위한 CS 전공지식 노트'를 읽고 정리한 내용입니다. 조인(Join) 조인이란 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 말한다. MySQL에서는 JOIN, MongoDB에서는 lookup이라는 쿼리로 처리할 수 있다. MongoDB에서는 lookup은 되도록 사용하지 말아야 한다. NoSQL은 RDBMS보다 JOIN 연산의 성능이 떨어진다고 알려져 있다. 여러 테이블을 조인하는 작업이 많을 경우 MongoDB보다는 RDBMS를 사용해야 한다. 조인의 종류 내부 조인(inner join) 왼쪽 테이블과 오른쪽 테이블의 두 행이 모두 일치하는 행이 있는 부분만 표기한다. select * from tableA A inner join tableB B on A...
Spring - non null key required 원인과 해결 방법
·
나의 에러 일지
Caused by: java.lang.IllegalArgumentException: non null key required 원인 Redis에 값을 저장할 때 key 값을 null로 주게 되면 발생하는 에러다. Redis는 key-value 형식으로 값을 저장하기 때문에 key가 null이어서는 안된다. key로는 숫자, 문자열 형식을 사용해야 한다. 해결 key 값으로 올바른 값이 들어가도록 로직을 수정하여 해결했다.
Spring - JPA metamodel must not be empty! 원인과 해결
·
나의 에러 일지
배경 @WebMvcTest로 Controller 유닛 테스트를 진행하는 과정에서 발생했다. JPA에서는 엔티티 클래스의 메타데이터를 이용하여 쿼리를 생성하기 때문에, 이 메타데이터를 담은 메타모델 클래스가 필요하다. JPA metamodel must not be empty 오류는 JPA 엔티티 클래스에 대한 메타모델 클래스가 생성되지 않은 경우 발생한다. 테스트에 필요한 Bean들은 모두 주입 받았다고 생각했는데 왜 이런 에러가 발생했을까? 원인 Auditing을 통한 생성일, 수정일 자동 생성을 구현하면서 @EnableJpaAuditing 애너테이션을 Application 위에 올려서 사용하고 있었다. @EnableJpaAuditing @SpringBootApplication public class T..
Clean Code - 클래스
·
로버트 C.마틴의 클린 코드를 읽고 정리한 내용입니다. 클래스 체계 가장 먼저 변수 목록이 나온다. public static 변수가 가장 먼저 나온다. 다음으로 private static 변수가 나온다. 이어서 private 변수가 나온다. 공개 변수가 필요한 경우는 거의 없다. public method가 나온다. private method는 자신을 호출하는 public method 직후에 넣는다. 즉, 추상화 단계가 순차적으로 내려간다. 그래서 프로그램은 신문 기사처럼 읽혀야 한다. 캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 규칙도 없다. 때로는 변수나 유틸리티 함수를 protected로 선언해 테스트 코드에 접근을 허용하도록 한다. 같은 패키지 안에서 테스트..
Java - @NotNull, @NotEmptty, @Notblank 차이점 알고 쓰시나요?
·
Java
새롭게 프로젝트를 진행하면서 유효성 검사를 위해 사용했던 애너테이션들의 정확한 역할 구분이 필요했다. 자바에서 @NotNull, @NotEmpty, @NotBlank는 모두 유효성 검증(validation)을 위해 사용되는 애너테이션이다. 이번에 각 애너테이션의 차이를 확실히 알고 용도에 맞게 사용해보자 @NotNull @NotNull은 매개변수, 필드 또는 메서드 반환 값이 Null인지 체크하는 데 사용된다. NullPointerException이 발생하지 않도록 하는 데 사용된다. null을 제외한 “”, “ “과 같은 빈문자열은 허용한다. @NotNull String test1 = null; // false @NotNull String test2 = ""; // true @NotNull String..
Spring - @Value가 계속 null을 가져올 때 원인과 해결 방법
·
나의 에러 일지
@Value란?DB 접속 정보나 비밀번호와 같이 민감한 정보를 별도의 파일로 분리해서 환경 정보에 맞는 값을 불러오도록 하는 애너테이션이다. application.properties 또는 application.yml에 값을 설정하면 필드나 메서드에 값을 주입해준다. 배경Refresh Token을 암호화해서 클라이언트에 전달하기 위해 AES128 암호화 클래스를 구현했다. 구현 후 암호화가 잘 이루어지는지 확인하기 위해 테스트를 진행했는데 예외 처리했던 ENCRYPTION_FAILED가 발생했다.확인해보니 @Value 애너테이션을 통해 application.yml로부터 전달받아야 할 secretKey가 제대로 전달 받지 못하고 null을 반환하기 때문에 발생했다. AES128Config@Componentp..
Spring - Spring Security 적용시 순환 참조 발생 (Spring circular reference)
·
나의 에러 일지
스프링 순환 참조(Circular reference)란?서로 다른 빈(Bean)이 서로를 참조하면서 스프링이 어떤 빈을 먼저 생성해야 할지 결정하지 못하기 때문에 발생한다.순환 참조는 DI 상황에 발생한다. DI 방법은 Setter, 필드, 생성자 방식으로 3가지가 있다.Setter, 필드 주입 방식필드, Setter 주입 방식에서는 애플리케이션 로딩 중에는 순환 참조 문제가 발생하지 않는다.애플리케이션 로딩 중에 주입하지 않고 실제로 사용하는 시점에 주입을 하기 때문에 해당 메서드를 호출하는 시점에 순환 참조가 발생한다.생성자 주입 방식반면 생성자 주입 방식은 애플리케이션 로딩 중에 순환 참조가 발생한다.빈을 생성하는 시점에 참조하려는 다른 빈을 주입해줘야 하기 때문이다. 순환 참조의 경우 빈A와 빈B..
Cold Bean
'분류 전체보기' 카테고리의 글 목록 (11 Page)