목록전체 글 (106)
개발스토리
테스트 코드를 작성하는 환경을 구축하는 것은 중요하다. 처음에 가장 어렵고, 귀찮고, 시행착오도 많이 겪는 과정이라고 생각한다. 테스트 환경을 구축하는 과정에서 많은 부분을 고려해야 하지만 특히 주의해야할 부분은 "멱등성"이다. ■ 멱등성이란 여러번 연산을 실행해도 결과가 바뀌지 않는 성질을 뜻한다. HTTP method에서 보자면 POST를 제외하고 나머지는 멱등성을 만족한다. POST 요청을 반복한다면, 데이터들은 계속해서 추가가 되고, 서버의 응답은 다 다른 응답을 나타낸다. 같은 내용이더라도 서로 다른 데이터이다. PUT 요청으로 2번 데이터를 수정한다고 치면, 2번 데이터가 없는 경우에는 데이터가 생성될 수 있지만, 이미 존재하면 데이터는 수정이 된다. 계속해서 PUT 요청을 날려도 2번 데이터..
JPA를 사용하고 테스트 코드 작성하는 것을 연습하고 있는데 이런 에러가 떴다..! 에러 로그를 살펴보면 적어도 하나의 jpa metamodel이 필요한 데 없어서 그런것 같다. 이게 무슨 뜻인지 천천히 생각해봤다. 우선 JPA에서는 엔티티들의 생성 및 수정 시간을 자동으로 관리해주는 Auditing 기능이 있다. 나도 이기능을 사용하기 위해 아래와 같은 코드를 작성해둔 상태였다. 이렇게 @EnableJpaAuditing 어노테이션을 테스트들의 가장 기본이 되는 Application 클래스에 등록을 해두면 모든 테스트들이 항상 JPA 관련 Bean들을 필요로 하는 상태가 된다. 즉, @EnableJpaAuditing을 사용하기 위해서는 최소 하나의 @Entity 클래스가 필요하다는 뜻이다. 하지만, 테스..
스프링 시큐리티를 써서 소셜 로그인을 적용하다가 만난 에러이다... 우선 에러 로그를 그대로 번역하자면 아래와 같다. "DefaultSerializer에는 직렬화 가능한 페이로드가 필요하지만 [...] 유형의 개체를 수신했습니다" 우선 직렬화 가능한 페이로드가 필요한 것 같다. [...]에 내가 사용한 dto 폴더를 나타내 주는데 그 dto 파일에서 직렬화를 적용시켜주어야 한다는 의미 같다. 그래서 직렬화에 대해서 또 어떻게 적용할 지 알아보았다. 직렬화란? ■ 자바에서 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술(역직렬화)를 아우른다. ■ 시스템적으로는, J..
이 세가지의 어노테이션 뭔지 너무 헷갈려~~ 알아보자잇! Bean Bean은 Spring IoC Container가 관리하는 자바 객체, Spring Bean Container에 존재하는 객체를 말한다. Bean 컨테이너는 DI를 통해 Bean 객체를 사용할 수 있도록 해주는 역할을 한다. 스프링에서 Bean은 보통 Singleton으로 존재한다. * Singleton : 어떠한 클래스가 최초로 한번만 메모리에 할당되고 그 메모리에 객체를 만들어 사용하는 패턴 또한 스프링의 DI Container에 의해 관리되는 POJO를 Bean이라고 부르고 이러한 Bean들이 스프링을 구성하는 핵심 요소이다. 스프링 빈 정리해보자잇~! ● Spring IoC 컨테이너(또는 DI 컨테이너)에 의해 생성 및 관리된다. ..
다른 프로젝트들을 구경하면 Service 인터페이스와 ServiceImpl 클래스(구현부)를 따로 두어 코딩을 진행하는 경우를 많이 봤다. 왜 굳이 나눌까 궁금해서 서칭을 하고 기록을 남겨볼까 한다. 우선 두 가지로 왜 나누어놓는 지를 알기 위해서는 OOP(객체 지향 프로그래밍)에 대한 이해가 필요하다. OOP를 완전히 이해하는 것은 어려운 일이지만, 짧게 말하면 '객체'들의 모임이다. OOP는 프로그램을 유연하고 변경이 용이하게 만들기 때문에 SW개발에 많이 사용된다. Service와 SeviceImpl은 다형성과 연관이 있다. 다형성이란 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미하는데, 보통 부모 클래스를 자식이 상속받아 기능을 확장하거나 변경하는 방식으로 사용을 많이 한다. 즉, Ser..