BackEnd263 [JPA] 일급 컬렉션 1. 일급 컬렉션? 일급 컬렉션은 Collection객체를 감싸면서 다른 필드가 없는 클래스를 의미합니다. 특정 클래스에 List나 Set 같은 Collection 필드로 가지고 있을 때, 이들을 하나의 클래스로 만들어서 사용할 수 있습니다! 일급 컬렉션이라는 단어는 소트웍스 엔소롤지의 객체지향 생활체조 파트에서 언급이 되었습니다. 규칙 8: 일급 콜렉션 사용 이 규칙의 적용은 간단하다. 컬렉션을 포함한 클래스는 반드시 다른 멤버 변수가 없어야 한다. 각 콜렉션은 그 자체로 포장돼 있으므로 이제 컬렉션과 관련된 동작은 근거지가 마련된 셈이다. 필터가 이 새 클래스의 일부가 됨을 알 수 있다. 필터는 또한 스스로 함수 객체가 될 수 있다. 또한 새 클래스는 두 그룹을 같이 묶는다든가 그룹의 각 원소에 규칙.. BackEnd/JPA 2022. 7. 17. [TDD] JUnit 만들기 - 2 해당 글은 TDD: By Example 책의 2부 내용인 Python으로 xUnit 만들기를 Java 코드로 변경하여 스스로 만든 내용입니다. 총 2개의 글로 작성될 예정입니다. 1. Junit 만들기 1부 2. Junit 만들기 2부 코드 또한 Github에 올려두었으니 확인 가능하십니다! https://github.com/zbqmgldjfh/xUnit GitHub - zbqmgldjfh/xUnit: JUnit 직접 구현하기 JUnit 직접 구현하기. Contribute to zbqmgldjfh/xUnit development by creating an account on GitHub. github.com 이전까지 작성한 TODO list를 보면 다음과 같다. - [x] 테스트 메서드 호출하기 - [x.. BackEnd/TDD 2022. 7. 15. [TDD] JUnit 만들기 - 1 해당 글은 TDD: By Example 책의 2부 내용인 Python으로 xUnit 만들기를 Java 코드로 변경하여 스스로 만든 내용입니다. 총 2개의 글로 작성될 예정입니다. 1. Junit 만들기 1부 2. Junit 만들기 2부 코드 또한 Github에 올려두었으니 확인 가능하십니다! https://github.com/zbqmgldjfh/xUnit GitHub - zbqmgldjfh/xUnit: JUnit 직접 구현하기 JUnit 직접 구현하기. Contribute to zbqmgldjfh/xUnit development by creating an account on GitHub. github.com 예전에 켄트 백의 TDD를 읽다 쳅터 2에서 막힌 적이 있다. 애당초 코드가 Python이라 가독.. BackEnd/TDD 2022. 7. 15. [Spring] Spring 환경변수 설정파일 선택하기 이번 글은 프로젝트를 진행하면서 문제가 됬었던 부분을 정리, 요약 하는 글 입니다. (미래의 나를 위해!) 1. 문제의 상황 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우리의 Spring 프로젝트에서 사용한 yml파일은 다음과 같습니다. spring: profiles: active: local datasource: url: ${datasource} driver-class-name: com.mysql.cj.jdbc.Driver username: ${username} password: ${password} jwt: token: validate-time: 1800 token-secret: "Shine-Lucid" kakao: token-server-uri: "https:/.. BackEnd/Spring 2022. 6. 12. [Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 2 그간 밀어오고 밀어왔던 내용에 대해 정리하고 넘어가야 겠다 싶어 정리하는 글 이다. 지난 글에서 @RequestBody에서 어떤 방식으로 객체를 생성하는 지 파악한 후, 이번 글에서는 객체에 값을 어떤 방식으로 binding 시키는지에 대하여 알아봅시다. 직접 디버깅을 하나하나 다 해가면서 작성 한 글 입니다... 혹 틀린 부분이 있다면 지적해주시면 감사하겠습니다! 우선 이 글은 2개의 글로 만들어질 예정 입니다. 1) 기본 생성자가 필요한 이유 2) Setter가 없어도 되는 이유 (이번글) 2. Setter가 없어도 되는 이유 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 기본 생성자로 Object를 생성하는데 setter없이 값을 어떻게 할당시킬까? 이에 대하여 알.. BackEnd/Spring 2022. 6. 12. [Spring] @RequestBody에 기본생성자만 필요하고 Setter는 필요없는 이유 - 1 그간 밀어오고 밀어왔던 내용에 대해 정리하고 넘어가야겠다 싶어 정리하는 글이다. 항상 무의식적으로 Client에게 데이터를 보내거나, 받을 때 일명 DTO를 사용하여 받아왔다. 난 너무나 자연스럽게? 혹은 무의식적으로 DTO에 @Getter를 선언하면서 사용해 온 것은 아닐까? 나는 이전에 과연 한 번이라도 이게 왜 그런지 이전에 궁금해한 걸까? 나 스스로에게 정말 반성하는 의미로 남기는 글이다. 왜 이게 당연하다 생각하고 호기심 있게 살펴보지 않았을까... 뒤늦은 후회감이 조금은 온다. 또한 @Getter는 왜 추가한 것일까? 값을 꺼내오려고?? 이러한 DTO를 Controller에서 받기 위해 @RequestBody를 사용해 왔다. 왜?? @RequestBody는 어떻게 DTO를 생성하는 것일까?? .. BackEnd/Spring 2022. 6. 11. [Java] Annotation Processor 이번시간에는 Lombok이 어떻게 동작하는지 그 핵심원리인 annotation processor에 대하여 학습해보자! 1. Lombok의 원리 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 annotation processor 는 compile 할때 중간에 끼어들어서 특정 annotation 이 붙어있는 소스코드를 참조하여 추가적인 소스코드를 삽입시킬 수 있다! 소스코드의 AST(abstract syntax tree)를 조작하는 것 이다! https://javaparser.org/inspecting-an-ast/ Inspecting an AST Inspecting an AST javaparser.org 원래는 AST 의 정보는 참조만 할 수 있고, 소스 코드를 조작할수는.. BackEnd/Java 2022. 6. 8. [Java] Dynamic Proxy 1. Spring Data JPA는 어떻게 동작할까? " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번글의 가장 큰 주제는 Spring Data JPA에서 다음과 같은 코드들이 어떻게 구현체를 만드는지 이다! public interface BookRepository extends JpaRepository {} 어떻게 interface만 정의했는데, 객체의 CRUD 가 작동할까? 도대체 누가 BookRepository 타입의 객체를 누가 만들어주는 것 일까! 이에 대한 핵심이 바로! Proxy 라는 class 이다! Spring AOP를 기반으로 동작하며 RepositoryFactorySupport에서 프록시를 생성한다. 저 빨간 박스 안에서 Proxy를 생성하여 반환하.. BackEnd/Java 2022. 6. 7. [JPA] SpringBoot 2.5 이후부터 data.sql 초기화 시점 이번 프로젝트를 진행하던 도중 data.sql 을 통한 초기화 데이터 삽입이 정상적으로 되지 않는 문제가 있었습니다. 이를 해결하기 위한 설정이 필요했는데, 왜 이런 문제가 발생했는지 알아보시죠! 소제목 입력 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 SpringBoot 2.4 이하의 버전에서는 data.sql이 정상적으로 초기화 된다고 합니다. Spring Boot 버전 2.4 -> 2.5 업데이트 사항중에 일부분 때문에 우리는 따로 추가설정을 해줘야 합니다. 원래 설정은 다음과 같았습니다. spring: jpa: hibernate: ddl-auto: create properties: hibernate: format_sql: true database: mysq.. BackEnd/JPA 2022. 6. 6. [JPA] JSON 직렬화 순환 참조 해결하기 오늘도 프로젝트를 구현하던 도중에 거의 매번 만나왔던 순환 참조 문제를 만나게 되었다. 이번이 처음은 아니지만, 한번쯤 정리해볼만한 내용인것 같아 정리해둔다. 1. JSON에서 순환 참조 문제 ▶ 순환 참조 JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여StackOverflowError 를 발생시키는 현상이다. Spring Boot에서는 @ResponseBody를 구현할 시 Object를 JSON 형태로 변환하기 위해 Jackson 라이브러리를 이용하는데, 이때 Jackson은 entity의 getter를 호출하여 필드에 접근하고, 직렬화를 이용해 Object를 JSON 형태로 객체를 변화시켜 반환한다. 문제는 getter를 호출하는 과정에.. BackEnd/JPA 2022. 6. 5. [Java] Reflection 이번 글은 Spring의 DI(의존성 주입)이 어떻게 동작하는 것 일까? 란 의문으로부터 공부한 글 입니다. 여러 블로그와 백기선님의 더 자바 강의를 살펴보며 정리한 글 입니다. 1. 리플렉션 API 1부 : 클래스 정보 조회 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 Reflection은 Class를 통해서 접근할 수 있다. Class (Java Platform SE 8 ) Determines if the specified Class object represents a primitive type. There are nine predefined Class objects to represent the eight primitive types and void. These .. BackEnd/Java 2022. 5. 22. [Java] 바이트코드 조작하기 소스코드의 커버리지를 측정하는, 가령 Jacoco와 같은 tool들이 바이트코드를 이용하여 측정한다. 이러한 소스코드 커버리지는 내 전체 소스코드에서 얼만큼을 테스트로 커버 했는지? 를 알려주는 유용한 도구이다. 이번 시간에는 이러한 바이트코드를 직접 조작하는 방법에 대하여 공부하는 글이다! 1. Jacoco를 통한 코드 커버리지 측정 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우선 간단하게 Jacoco를 사용하는 것부터 확인해보자. 테스트 해볼 간단한 코드는 다음과 같다. public class MeetUp { private int maxNumberOfAttendees; private int numberOfEnrollment; public void addPerson.. BackEnd/Java 2022. 5. 20. 이전 1 ··· 5 6 7 8 9 10 11 ··· 22 다음