본문 바로가기

전체 글205

[JPA] illegally attempted to associate proxy with two open Sessions 에러 illegally attempted to associate proxy with two open Sessions 에러 SpringBatch와 Jpa를 사용하면서 illegally attempted to associate proxy with two open Sessions에러를 만나게 됐다. 당연하지만 처음 보는 에러는 정말 당황스럽다. illegally attempted to associate proxy with two open Sessions 에러는 두개 session에서 같은 proxy를 다루려 하면서 나타나는 에러다. public MatchInfo process(MatchInfo matchInfo) throws Exception { initializeUnitsAndAugments(matchInfo);.. 2022. 7. 1.
[CleanCode] 5장 형식 맞추기 5장 형식 맞추기 형식을 맞추는 목적 코드 형식은 중요하다. 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다. 적절한 행 길이를 유지하라 일반적으로 행 길이가 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사처럼 작성하라 소스 파일은 신문 기사와 비슷하게 작성한다. 이름은 간단하면서도 설명이 가능하게 짓는다. 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 저옫로 신경써서 짓는다. 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 묘사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다. 개념은 빈 행으로 분리하라 거의 모든 코드는 왼쪽에서 오른쪽으로 그리고 위에서 아래로 읽힌다. 각 행은 수식이나 절을 나타내고, 일련.. 2022. 6. 30.
[CleanCode] 4장 주석 주석 잘 달린 주석을 그 어떤 정보보다 유용하다. 주석을 나쁜 코드를 보완하지 못한다 코드에 주석을 추가하는 일반적인 이유는 코드 품질이 나쁘기 때문이다. 표현력이 풍부하고 깔끔하며 주석이 거의 없는 코드가, 복잡하고 어수선하며 주석이 많이 달린 코드보다 훨씬 좋다. 코드로 의도를 표현하라 나쁜 예 //직원에게 복지 혜택을 받을 자격이 있는지 검사한다. if ((employee.flags & HOURLY_FLAG) && (employee.agae > 65)) 좋은 예 if (employee.isEligibleForFullBenefits()) 몇 초만 더 생각하면 코드로 대다수 의도를 표현할 수 있다. 좋은 주석 정말로 좋은 주석을, 주석을 달지 않을 방법을 찾아낸 주석이다. 법적인 주석 회사가 정립한 구.. 2022. 6. 28.
[CleanCode] 3장 함수 - 2 함수 - 2 부수효과를 일으키지 마라 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른 것도 하면 안된다. 예상치 못하게 클래스 변수를 수정하고나, 함수로 넘어온 인수나 시스ㅔㅁ 전역 변수를 수정하면 안된다. 출력 인수 // 나쁜 예 appendFooter(stringBuffer); // 좋은 예 report.appendFooter() 일반적으로 우리는 인수를 함수 입력으로 해석한다. 출력 인수는 피해야 한다. 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다. 명령과 조회를 분리하라 함수는 뭔가 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나다. 오류코드보다 예외를 사용하라 명령 함수에서 오류 코드를 반환하.. 2022. 6. 26.
[CleanCode] 3장 함수 - 1 함수 - 1 작게 만들어라 함수를 만드는 첫째 규칙은 작게이다. 둘째 규칙은 더 작게이다. 블록과 들여쓰기 if문, else문, while문 등에 들어가는 블록은 한줄이어야 한다. 이 한줄에서 대개 함수를 호출한다. 블록 안에서 호출하는 함수 이름을 적절하게 짓는다면, 코드를 이해하기도 쉬워진다. 즉, 중첩 구조가 생길만큼 함수가 커져서는 안된다. 함수에서 들여쓰기 수준은 1단이나 2단을 넘어가면 안된다. 한 가지만 해라 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 하는 것이다. 함수를 만드는 이유: 큰 개념을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위해서 단.. 2022. 6. 26.
[CleanCode] 2장 의미있는 이름 의미있는 이름 의도를 분명히 밝혀라 // 좋지 않은 예 int d; // 좋은 예 int daysSinceCreation; 변수나 함수 그리고 클래스 이름은 해당 변수와 클래스의 존재 이유, 수행 기능, 사용 방법에 대한 질문에 모두 답하여야 한다. // 좋지 않은 예 public List getThem() { List list1 = new ArrayList(); for (int[] x : theList) if(x[] == 4) list1.add(x) return list1; } // 좋은 예 public List getFlaggedCells() { List flaggedCells = new ArrayList(); for (Cell cell : gameBoard) if(cell.isFlagged()) f.. 2022. 6. 25.
[JPA] Cascade persist와 연관관계 Cascade.persist와 연관관계 JPA를 배우고, 개발을 진행하면서 자주 사용하지 않을거라 생각한 cascade.persist에 대해 정리하려 한다. [JPA]영속성 전이 CASCADE에서 정리했다시피 Cascade.persist 옵션은 부모를 영속화할 때 자식도 영속화하는 옵션이다. 예를 들어 부모 Entity에 oneToMany관계인 자식 Entity를 List로 넣어두고, 부모 Entity를 영속화(persist)한다면 자식 Entity도 연쇄적으로 persist되는 것이다. 주의하고자 하는 부분 하지만 단순히 부모 Entity에 자식 Entity를 넣어주는것 만으로는 정확한 Persist가 이루어지지 않는다. 자세하게 예를 들어보자. 먼저 Home과 Person은 1 : N 관계로 Casc.. 2022. 6. 24.
Cron 표현식 Cron 표현식 리눅스 서버나 스프링 배치 스케쥴링을 설정하면 생각보다 자주 Cron표현식을 접하게 된다. Cron? 먼저 Cron에 대해 알아야 한다. Cron: unix 운영체제에서 어떤 작업을 특정 시간에 실행시키기 위한 데몬 CronTab: cron 작업을 설정하는 파일 예를 들어 나는 SpringBatch를 학습하기 이전, 간단한 배치용 python코드를 일정 시간마다 실행하도록 CronTab에 cron표현식으로 설정하였다. Cron 표현식 필드 Cron 표현식은 초, 분, 시, 일, 월, 요일, 연도 총 7개의 필드로 이루어져 있다. 초: Seconds, 0~59 분: Minutes, 0~59 시: Hours, 0~23 일: Day, 1~31 월: Month, 1~12 (각 1월부터 12월까지.. 2022. 6. 24.