[Spring] org.springframework.orm.jpa.JpaSystemException: Error attempting to apply AttributeConverter
·
Java/Spring
오늘은 에러 로그 관련해서 포스팅을 진행하려고 합니다. 개발 도중에 발생한 Error log인데, Error log를 먼저 보여드리고 분석한 내용에 대해 설명드리겠습니다. Error logorg.springframework.orm.jpa.JpaSystemException: Error attempting to apply AttributeConverter; nested exception is javax.persistence.PersistenceException: Error attempting to apply AttributeConverter at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(E..
[Spring] @Transactional isolation level, propagation level, timeout
·
Java/Spring
오늘은 @Transactional annotation의 isolation level, propagation level, timeout에 대해 설명드리도록 하겠습니다.  먼저 @Transactional annotation이 무엇인지에 대해 알아본 후에, 핵심적인 내용들을 설명드리겠습니다.  @Transacational@Transactional은 DB 작업에서 Transaction을 관리하는 데 사용되는 annotationTransaction: 단일 작업 단위로 실행되는 하나 이상의 데이터베이스 작업 시퀀스, 더 이상 쪼갤 수 없는 최소 작업 단위Transcation은 commit으로 성공하거나 rollback으로 작업을 취소하고 이전 상태로 복원해야 합니다.commit: Transaction이 끝나는 시점..
[Spring] Spring Security 동작 원리 파악 (id, pw 기반의 basic auth 방식)
·
Java/Spring
Spring Framwork 기반 Application에서 Spring Security를 적용하여 로그인 기능을 구현하곤 합니다. 기능 구현 방식에 있어, 전통적인 방식인 id, pw 기반의 세션 인증 방식이 있습니다. 오늘은 이 방식에 대해 상세히 정리해 보도록 하겠습니다. 이 포스팅은 Jwt, OAuth 기반의 인증에 대한 내용과는 별개의 내용이므로 참고 부탁드립니다. 우선 Spring Security의 개념과 관련 용어들에 대해 간단히 설명드리도록 하겠습니다. Spring Security Spring Security는 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크입니다.보안과 관련해서 체계적으로 많은 옵션들을 제공해 주기 때문에 개발자의 입장에서는 보안 관련 로직을 직접 작성하지..
[Spring] org.hibernate.AssertionFailure: null id in entry (don't flush the Session after an exception occurs)
·
Java/Spring
(conn=65) Duplicate entry '13-11.1.1.81' for key 'device_id_ip_UNIQUE'org.hibernate.AssertionFailure: null id in com.piolink.cc.app.ndm.domain.Host entry (don't flush the Session after an exception occurs) 해당 에러가 어떠한 에러인지 간략하게 설명드리겠습니다. try ~ catch 문에서 save 과정을 거칠 때, unique key 제약 조건을 위반하여 첫 번째로 Hibernate Exception인 DataIntegrityViolationException이 발생하게 됩니다.  이후 JPA Save가 실패하면서 세션이 초기화되어야 하지만, H..
[Effective Java] 4장. 클래스와 인터페이스
·
Java/Effective Java
[item-15] 클래스와 멤버 접근 권한을 최소화하라 객체지향의 핵심: 캡슐화, 정보은닉 캡슐화의 장점시스템 개발 속도 향상시스템 관리비용 절감성능 최적화코드 재사용성큰 시스템을 제작하는 난이도를 낮춰줍니다잘 설계된 객체는 모든 내부 구현을 완벽히 숨겨, 실제로 구현한 코드와 외부의 사용자가 사용하는 코드를 깔끔하게 분리합니다.외부에 공개한 메서드를 통해서만 다른 객체들과 소통하며 서로의 내부 동작방식에는 전혀 개의치 않습니다 [item-16] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라// Degenerate classes like this should not be public!class Point { public double x; public double y;}// E..
[Effective Java] 3장. 모든 객체의 공통 메서드
·
Java/Effective Java
[item-10] equals는 일반 규약을 지켜 재정의하라 equals 메서드는 반드시 동치관계(equivalence relation)를 구현하며, 다음을 만족합니다.반사성 (reflexivity) : null이 아닌 모든 참조 값 x에 대해 x.equals(x)는 true이다.대칭성 (symmetry) : null이 아닌 모든 참조 값 x, y에 대해 x.equals(y)가 true이면 y.equals(x)도 true이다.추이성 (transitivity) : null이 아닌 모든 참조 값 x, y, z에 대해 x.equals(y)가 true이고 y.equals(z)도 true이면, x.equals(z)도 true이다.일관성 (consistency) : null이 아닌 모든 참조 값 x, y에 대해 x..
[Effective Java] 2장. 객체 생성과 파괴
·
Java/Effective Java
[item-1] 생성자 대신 정적 팩토리 메서드를 이용하라 장점메서드 이름을 가질 수 있기에 명확한 이름으로 값을 생성할 수 있습니다.호출 때마다 인스턴스를 새로 생성하지 않을 수 있습니다.하위 클래스를 반환하는 유연성을 얻을 수 있습니다.매개 변수에 따라 매번 다른 클래스의 객체를 반환할 수 있습니다.정적 팩토리 메서드를 작성하는 시점에는 해당 객체의 클래스가 존재하지 않아도 됩니다.단점하위 클래스로 상속하기 위해서는 public, protected 생성자가 필요합니다.프로그래머가 찾기 어렵습니다. [item-2] 생성자의 매개변수가 많다면 빌더를 고려하라생성자에 매개변수가 많아지면 코드를 직관적으로 이해하기 어렵습니다. 이에 대한 대안으로 Setter를 사용하면 여러 개의 Setter가 호출되며 객체..
[Java] Clean Code가 무엇이고 왜 사용해야 하는가
·
Java/Java Concept
오늘은 클린코드에 대해 알아보려고 합니다. Clean Code의 대략적인 개념에 대해서 알아보고, 추가로 클린 코드의 중요성과 적용 방법에 대해서도 예시를 들어 설명드리겠습니다.  Clean CodeClean Code does one thing well, Clean Code is simple and direct단순하여 읽기 쉽고, 각 역할마다 주어진 하나의 일만 담당하며, 복잡하거나 모호하지 않은 코드이를 통해 프로그램의 동작을 보장하는 것뿐만 아니라, 코드 자체가 가독성이 뛰어나고 유지보수가 쉬워집니다원하는 로직을 빠르게 찾을 수 있는 코드이자 모든 팀원이 이해하기 쉽도록 작성된 코드Importance of Clean Code코드의 가독성이 떨어진다면 해당 코드가 무슨 일을 하는 코드인지, 어떤 메커니..
[Spring] Spring Batch Architecture & Component
·
Java/Spring
오늘은 스프링 배치에 대해서 포스팅하려고 합니다. 스프링 배치가 무엇이고 왜 사용하는지에 대해 설명드리겠습니다.Spring Batch는 대용량 데이터를 처리하기 위한 프레임워크(이 작업을 "자동화"하여 "시스템의 부하를 줄이고 효율적인 데이터 처리"가 가능하여 사용)로서, 스프링 프레임워크 위에서 동작합니다. Batch 작업이라고 하면, 논리적, 물리적으로 관련된 일련의 데이터를 그룹화하여 일괄 처리하는 작업입니다. Scheduler 기능과는 엄연히 다른 기능인데, Spring Batch에서도 스케줄러 기능과 함께 사용할 수 있습니다.  Spring Batch 특징확장성과 성능: Spring Batch는 대용량의 데이터를 효율적으로 처리할 수 있는 기능을 제공합니다 (멀티스레딩, Chunk 기반 처리, ..
[Spring] Ajax 통신에서 Csrf Header, Token 정보를 넘겨주는 방법
·
Java/Spring
오늘은 CSRF(Cross-site request forgery) 공격을 막기 위한 방법에 대해 알아보려고 합니다. 우선 Spring Security에서 csrf 설정을 활성화한다는 전제가 있어야 하고, 이 전제를 기반으로 Ajax Post 요청에서 Request Header에 Csrf Header, Token 정보를 넘겨줄 수 있게 됩니다.  CSRF 공격이 무엇인지 알아보고, 왜 Client의 Request에 csrf 설정을 해줘야 하는지까지 설명드리겠습니다.  CSRF(Cross-site request forgery, 사이트 간 요청 위조) 사이트 간 요청 위조는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격하나의 사례..