개발공부(173)
-
[넥스트스텝] TDD 리팩토링 연습과정
TDD 리팩토링 연습과정 오늘의 핵심: 다른건 몰라도 볼링 1단계는 꼭 해보기 레거시 코드는 대부분 레이어드 아키텍처 입니다. OOP 다음으로 DDD를 경험해봤으면 좋겠다는 자바지기의 말씀. 그리고 요즘 MSA가 대세인데, 도메인 주도 개발을 모르고서 MSA를 도입한다는 건 순서가 맞지 않다고 하셨습니다. 그만큼 도메인에서 비즈니스 로직을 처리하는 개발 방식이 테스트 지향, 객체 지향적이기 때문에 서비스 아키텍처 이전에 알아야할 방식이라고 강조하신 것 같습니다. 비즈니스 로직은 도메인 레이어에 구현해야 합니다. 왜냐면 도메인 주도 개발은 객체 지향적이기 때문입니다. 반대로 서비스 레이어는 절차 지향적일 가능성이 높습니다. getter도 써야하기 때문입니다. 볼링 1단계 미션은 아래와 같습니다. 소프트 d..
2021.09.02 -
[메서드] ITEM50. 방어적 복사본을 만들라
50. 방어적 복사본을 만들라 방어적 복사본 Date, StringBuilder 처럼 가변 인스턴스는 String, Integer과 달리 생성이 완료된 후에 변경될 위험이 있습니다. Date 대신 LocalDateTime을 사용하면 가변의 위험이 제거됩니다. (이 방법이 최선일겁니다 하지만 여의치 않을 경우 방어적 복사본을 사용하면 됩니다.) 방어적 복사본을 생성해주는데 가장 큰 이유는 객체 필드 갑의 추후 변경을 방지하기 위해서입니다. 핵심은 가변 위험이 있는 메서드나 생성자 내 원본을 복사하는 것입니다. 참고자료: EFFECTIVE JAVA 3/E (조슈아 블로그 저)
2021.08.30 -
[ORM 표준 JPA] 14장 컬렉션과 부가기능
컬렉션 persist, 엔티티를 영속성 상태로 변경하면 하이버네이트가 제공하는 PersistentBag로 전환됩니다. 컬렉션 종류 Collection, List Set: 중복 허용 X equals() + hashcode()로 검증합니다. Set은 엔티티를 추가할 때 중복 엔티티가 있는지 확인해야하기 때문에 지연 로딩된 컬렉션을 초기화 합니다. List + @OrderColumn List로 받을 때 순서가 정해진 상태로 리턴됩니다. 하지만 @OrderColumn은 연관 엔티티 중 FK가 있는 엔티티에만 종속적이고 제한적인 부분이 있기 때문에 @OrderBy를 권장합니다. @Converter 컨버터를 사용하면 엔티티의 데이터 타입을 변환해서 테이블에 저장할 수 있습니다. 그 반대도 가능합니다. 글로벌 설정 ..
2021.08.30 -
[ORM 표준 JPA] 15장 프록시 심화
어느새 스터디가 한 주를 남기고 있습니다. 넥스트 스텝 교육을 병행하기가 이렇게 힘들줄은 생각못한 자신에게 반성시키고 싶지만 그래도 고생한만큼 마무리까지 잘하도록 하겠습니다. JPA 프록시 심화 우선 프록시는 실제 DB에 접근하지 않아도 된다는 성능에 있어 강점을 가진 엔티티 호출 방식입니다. JPA는 지연 로딩을 통해 원본 엔티티 대신 프록시를 참조하며 프록시는 원본 엔티티를 상속받아 객체의 참조를 보관하고 있습니다. 때문에 메서드 호출을 프록시로 할 경우 프록시는 실제 엔티티에 호출을 전달하게 됩니다. 프록시 테스트 중 member 엔티티에서 Spring Data JPA 프록시 호출 메서드인 getById를 사용해도 프록시가 생성되지 않는 오류가 있었는데 원인은 엔티티 구조상 있는 것으로 보여서 찾고..
2021.08.30 -
[본인인증 API] jsp 코드를 Java Spring로 변환하려면(코드X)
회사서 본인인증 API를 사용해야 할 일이 있었습니다. 본인인증 API 적용을 서버에서 처리하기로 한 이유는 API 방식이 웹 뷰를 띄우는 방식을 사용하고 있기 때문입니다. 업체로부터 샘플 코드를 받았는데 JSP 기반 코드가 있어 참고해 작성했습니다. 가이드 문서도 있지만 요청할 수 있는 데이터 타입에 대한 세부적인 내용이고 API 사용법에 대한 내용이 적어 구조를 파악하는데 오래걸렸습니다. JSP 코드에 scriptlet tag로 Java 코드가 작성되어 있는데 해당 코드를 Controller와 Service로 옮겨주었습니다. 넥스트 스텝에서 배운 전략패턴 방식대로 Interface와 도메인 객체, 전략 클래스를 나눠 사용해보니 객체 지향적으로 분리되는 느낌이 들더군요. 코드는 올리지 못했지만 외부 A..
2021.08.19 -
[실무 JPA] 엔티티 생성
회사 어드민 서버가 C# .NET으로 이루어져 있는데 이번에 범용성이 넓고 저한테 익숙한 Java Spring으로 이전하는 작업을 맡게 되었습니다. 그리고 SQL 처리를 MyBatis가 아닌 JPA를 사용하기로 했습니다. :) 소스코드 파악이 어느정도 되면 이관하는 작업을 진행하려 했습니다. 다만 Spring으로 이루어진 앱 서버의 DB는 파악하고 있기 때문에 우선 엔티티 이전 작업을 시작했습니다. 그 후 API 단위로 Controller, Service 단의 코드를 이전하려 합니다. JPA 엔티티 생성 IntelliJ의 Database Tool을 사용하면 IDE에서 DB 데이터를 볼 수 있어 편합니다. 엔티티 생성도 Database 연결 POJO Groovy 사용해 엔티티 생성 설정값 지정 Genera..
2021.08.04