본문 바로가기

분류 전체보기139

[개인프로젝트 리팩토링] 리팩토링 계획 최근에 쉬다가 개인프로젝트를 조금 널널하게 리팩토링중이었다. 그래서 무엇을 리팩토링하고 있는지 정리해보고자 한다.그에 대한 자세한 얘기는 차차 다룰 예정이다. 프로젝트 리팩토링 첫번째로 멀티모듈개인프로젝트에는 지금 Customer와 Walker가 섞여있다. 그니까 약간 Admin코드랑 Customer 코드가 한 프로젝트에 섞여있는 느낌??그래서 모듈을 나누고자 한다. 1. Common 모듈domaincommon code (위치, auth 관련)2. Customer 모듈산책 알바를 신청한 고객3. Walker 모듈산책 알바를 하는 고객(알바생느낌)4. Batch 모듈Spring Batch관련 코드이렇게 4모듈정도로 나눌 예정이다.사실 Common모듈은 조금 애매함이 있어서 나중에 고민좀 해볼 예정  두번째.. 2024. 8. 1.
왜 swagger에서는 괜찮은데 테스트코드에서 LazyInitializationException이 터지는가? 코드짜다가 swagger로 테스트를 했을때는 괜찮아서 pr을 올렸느데 팀원중 한분이 이거 Lazy예외 안터지냐고 물어보셨다. 그러면서 트랜젝션 어노텡션 붙여야하지 않아요? 하셔서 엥..? 나는 swagger에서 됬는데 싶었다.그래서 일단 swagger테스트해봤는데 되었다고 말씀드렸다. 근데 내가 테스트코드를 까먹고 안한것이다..ㅎㅎ그래서 테스트코드를 짰는데 엥?? LazyInitializationException 바로 터지쥬...? 그래서 트랜젝션을 해당 서비스 코드에 붙였더니 테스트코드가 잘 통과했다.왜?? swagger에서는 잘되었는데 테스트코드에서는 예외가 터진건지,,, 급 궁금해짐,, 일단 트랜젝션 로그를 보자  일단 처음에는 LazyInitializationException자체가 트랜젝션과 관계.. 2024. 6. 7.
Delete와 Insert의 트랜잭션 문제 일중에 S3이미지를 삭제 + 데이터 삭제 후에 다시 S3이미지 넣고 데이터 삽입하는 로직이 있었다. 즉, 수정하는 로직.근데 S3이미지까지는 잘 삭제가 되는데 데이터가 삭제가 안되고 삽입만 되는 것이다... 그래서 보자마자,, 아 트랜젝션 같은데,,, 싹 냄새가,,, 그래서 집에 와서 한번 테스트해보았다. 코드 게시물과  댓글 엔티티가 존재한다. 여기서 정말 말도안되지만.... 게시글이 수정할때 댓글도 같이 수정되어 댓글이 모두 삭제후 -> 새롭게 Insert한다고 가정한다. @Entityclass Post( var content: String,) : BaseEntity() { @OneToMany(mappedBy = "post", cascade = [CascadeType.ALL]) val.. 2024. 6. 2.
Git merge 전략 맡아진 업무를 하고 merge할때... 항상 merge에 대한 두려움에 팀장님께 물어보고.. 한다...매번 그럴수는 없으니 회사에서 사용하는?? Git과 관련된 것들을 정리해볼까 한다. Git merge 나에게 깃이란 그냥 코드를 올린다 정도여서 Create Merge Commit / Squash and Merge / Rebase and Merge의 차이를 잘 몰랐다. 1. merge - fast forward예를 들어 main 브랜치에 develop 브랜치가 있다고 가정하자.이때 main 브랜치에는 새로운 커밋이 아예 없다. 그렇다면 develop브랜치가 최신 브랜치라고 할 수 있다.이때 main 브랜치에 그대로 develop브랜치의 이력을 가져오는 것이다(즉 main은 아무 커밋도 없어야한다.)  2.. 2024. 5. 17.
JpaRepository를 상속하지 않는다. 회사 코드를 보다가 Repository 코드를 보았는데 신기했다.JpaRepository를 상속하지 않고,PagingAndSortingRepository을 구현한 인터페이스? 그리고 QuerydlsPredicateExecutor를 사용했다.보고 왜일까?? 의문이 들어 회사에서 아직 업무가 없을때라서 한번 찾아보았다. 불필요한 메서드들 JpaRepository를 사용하여 자동완성?? 기능같은걸 사용하다보면정말 다양한 메서드를 자동으로 제공한다.즉 사용하지 않는 메서드들이 너무 많다. 내가 프로젝트했을 경우도 위 이미지에서 사용하지 않은게 아마 2/3?? 일때도 있다. 이외에도 테스트할때도 fake 객체를 만들어서 한다고 한들 repository 인터페이스의 메서드들을 모두 오버라이딩해야한다.즉 불필요한 부.. 2024. 5. 12.
[Kotlin] 기초 개념 (2) 이전 블로그에서 헷갈리는 기초개념을 정리했다. 이번 블로그에서도 헷갈리는 기초개념을 정리할 예정이다. 인터페이스 자바의 경우 implements, extends를 사용하여 구현과 상속을 했다. Kotlin에서는 공통적으로 ":"을 사용한다. 인터페이스 메서드 구현은 override 변경자를 반드시 붙여야함 interface Click { fun click() } class Button: Click { override fun click() { prinln("click Button") } } open, final, abstract 변경자 : 기본 final Kotlin은 기본적으로 모든 클래스, 메서드 final class 임으로 open class, method인 경우 상속가능 open class Cust.. 2024. 4. 20.
728x90